;; use straight.el for package management
;;
;; load envs (exec-path-from-shell)
;;
;; Switch to elpaca
;; general.el
;; SPC, like in DOOM
;; vertico config
;; lsp-mode? or eglot
;; C, C++
;; Rust
;; VHDL, Verilog
;; Nix
;; Company, Vertico
;; Straight setup
;; TODO: put to conditions, etc.
(eval-and-compile
(defmacro my-use-package (&rest body)
"Passes BODY to `use-package' and call it at comptime and runtime."
(declare (indent defun))
`(eval-and-compile
,(cons 'use-package body))))
(defconst straight-bootstrap
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(unless (file-exists-p straight-bootstrap)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load straight-bootstrap)
(require 'straight)
(straight-use-package 'use-package)
(require 'use-package)
(straight-use-package-mode t)
;; Basic keybindings, etc.
(setq evil-want-keybinding nil)
(my-use-package evil
:straight t
:demand t
:custom
(evil-undo-system 'undo-redo)
:config
(evil-mode))
(my-use-package evil-collection
:after evil
:straight t
:demand t)
(my-use-package evil-easymotion
:after evil
:straight t
:demand t
:config
(evilem-default-keybindings "\\")
)
(my-use-package evil-surround
:after evil
:straight t
:demand t
:config
(global-evil-surround-mode))
(my-use-package evil-goggles
:after evil
:straight t
:demand t
:custom
(evil-goggles-duration 0.1)
:config
(evil-goggles-mode))
(my-use-package evil-commentary
:after evil
:straight t
:demand t
:config
(evil-commentary-mode))
(my-use-package evil-snipe
:after evil
:straight t
:demand t
:config
(evil-snipe-mode))
(my-use-package which-key
:straight t
:demand t
:custom
(which-key-idle-delay 0.6)
:config
(which-key-mode))
(my-use-package nordic-night-theme
:straight t
:demand t
:config
(load-theme 'nordic-night t)
)
;; Vertico, consult, history
(my-use-package vertico
:straight t
:init
(vertico-mode))
(my-use-package consult
:straight t
:init
(setq register-preview-delay 0.5
register-preview-function #'consult-register-format)
:config
(setq consult-narrow-key "<") ;; "C-+"
)
(my-use-package savehist
:straight t
:init
(savehist-mode))
(my-use-package emacs
:init
(setq minibuffer-prompt-properties
'(read-only t cursor-intangible t face minibuffer-prompt))
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
;; Support opening new minibuffers from inside existing minibuffers.
(setq enable-recursive-minibuffers t)
;; Emacs 28 and newer: Hide commands in M-x which do not work in the current
;; mode. Vertico commands are hidden in normal buffers. This setting is
;; useful beyond Vertico.
(setq read-extended-command-predicate #'command-completion-default-include-p))
;; Modeline
(my-use-package vs-modeline
:straight (vs-modeline :type git
:host github
:repo "VojtechStep/vs-modeline.el")
:demand t
:config
(vs-modeline-mode))
(my-use-package orderless
:straight t
:init
;; Configure a custom style dispatcher (see the Consult wiki)
(setq orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch))
;; orderless-component-separator #'orderless-escapable-split-on-space)
(setq completion-styles '(orderless basic)
completion-category-defaults nil
completion-category-overrides '((file (styles partial-completion)))))
;; Git
;; TODO: some config.
;; Magit todos
(my-use-package magit
:straight t
:custom
(magit-save-repository-buffers nil)
(magit-diff-refine-hunk 'all)
(evil-collection-magit-want-horizontal-movement t)
:preface
(declare-function evil-collection-magit-setup "modes/magit/evil-collection-magit")
:init
(with-eval-after-load 'magit-repos ; magit-repos does not load magit, so the evil-collection setup is not triggered
(evil-collection-magit-setup)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Languages
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lisp
(my-use-package elisp-mode
:custom
(lisp-indent-offset 2))
(defun my-use-package-indent (indent-point state)
"Indent always by two"
(goto-char (elt state 1))
(+ 2 (current-column)))
(put 'my-use-package 'lisp-indent-function 'my-use-package-indent)
;; Some additional stuff
(add-hook 'write-file-hooks 'delete-trailing-whitespace nil t)
;; some visual configs
(setq menu-bar-mode nil
tool-bar-mode nil
scroll-bar-mode nil
tab-bar-mode nil
blink-cursor-mode nil
ring-bell-function #'ignore)
(setq display-line-numbers-type 'relative)
(global-display-line-numbers-mode)
(setq tab-width 2)