#+TITLE: >." . ignore)) (meow-leader-define-key '("1" . meow-digit-argument) '("2" . meow-digit-argument) '("3" . meow-digit-argument) '("4" . meow-digit-argument) '("5" . meow-digit-argument) '("6" . meow-digit-argument) '("7" . meow-digit-argument) '("8" . meow-digit-argument) '("9" . meow-digit-argument) '("0" . meow-digit-argument) '("/" . meow-keypad-describe-key) '("?" . meow-cheatsheet)) (meow-thing-register 'angle '(pair ("<") (">")) '(pair ("<") (">"))) (setq meow-char-thing-table '((?f . round) (?d . square) (?s . curly) (?a . angle) (?r . string) (?v . paragraph) (?c . line) (?x . buffer))) (meow-normal-define-key ;; Expansion '("0" . meow-expand-0) '("1" . meow-expand-1) '("2" . meow-expand-2) '("3" . meow-expand-3) '("4" . meow-expand-4) '("5" . meow-expand-5) '("6" . meow-expand-6) '("7" . meow-expand-7) '("8" . meow-expand-8) '("9" . meow-expand-9) '("'" . meow-reverse) ;; Movement '("i" . meow-prev) '("k" . meow-next) '("j" . meow-left) '("l" . meow-right) '("y" . meow-search) '("/" . meow-visit) ;; Expansion '("I" . meow-prev-expand) '("K" . meow-next-expand) '("J" . meow-left-expand) '("L" . meow-right-expand) '("u" . meow-back-word) '("U" . meow-back-symbol) '("o" . meow-next-word) '("O" . meow-next-symbol) '("a" . meow-mark-word) '("A" . meow-mark-symbol) '("s" . meow-line) '("S" . meow-goto-line) '("w" . meow-block) '("q" . meow-join) '("g" . meow-grab) '("G" . meow-pop-grab) '("m" . meow-swap-grab) '("M" . meow-sync-grab) '("p" . meow-cancel-selection) '("P" . meow-pop-selection) '("x" . meow-till) '("z" . meow-find) '("," . meow-beginning-of-thing) '("." . meow-end-of-thing) '("<" . meow-inner-of-thing) '(">" . meow-bounds-of-thing) ;; Editing '("d" . meow-kill) '("f" . meow-change) '("t" . meow-delete) '("c" . meow-save) '("v" . meow-yank) '("V" . meow-yank-pop) '("e" . meow-insert) '("E" . meow-open-above) '("r" . meow-append) '("R" . meow-open-below) '("h" . undo-only) '("H" . undo-redo) '("b" . open-line) '("B" . split-line) '("[" . indent-rigidly-left-to-tab-stop) '("]" . indent-rigidly-right-to-tab-stop) ;; Prefix commands '("nf" . meow-comment) '("nt" . meow-start-kmacro-or-insert-counter) '("nr" . meow-start-kmacro) '("ne" . meow-end-or-call-kmacro) '(";f" . save-buffer) '(";F" . save-some-buffers) '(";d" . meow-query-replace-regexp) ;; Buffer navigation '(";[b" . previous-buffer) '(";]b" . next-buffer) '(";b" . switch-to-buffer) '(";nb" . rename-buffer) '(";B" . revert-buffer) '("" . ignore))) :config (meow-ergo-setup) (meow-global-mode 1)) #+end_src ** Formatter #+begin_src emacs-lisp (use-package format-all :ensure t :preface (defun refmt () "Auto-format whole buffer." (interactive) (cond ((derived-mode-p 'prolog-mode) (prolog-indent-buffer)) ((derived-mode-p 'emacs-lisp-mode) (indent-region (point-min) (point-max))) ((derived-mode-p 'org-mode) (org-indent-region (point-min) (point-max))) (t (format-all-buffer)))) :config (global-set-key (kbd "M-f") #'refmt) (add-hook 'prog-mode-hook #'format-all-ensure-formatter)) #+end_src * PROGRAMMING FEATURES ** Syntax highlighting #+begin_src emacs-lisp (use-package treesit-auto :ensure t :custom (treesit-auto-install 'prompt) :config (treesit-auto-add-to-auto-mode-alist 'all) (global-treesit-auto-mode)) #+end_src ** LSP #+begin_src emacs-lisp (use-package lsp-mode :ensure t :hook (prog-mode . lsp-deferred) (lsp-mode . lsp-enable-which-key-integration) :commands (lsp lsp-deferred) :init (setq lsp-keymap-prefix "C-c l") :custom (lsp-idle-delay 0.500) (lsp-log-io nil) (lsp-completion-provider :none) (lsp-headerline-breadcrumb-enable nil)) (use-package flycheck :ensure t :config (global-flycheck-mode +1)) #+end_src ** Indentation preferences #+begin_src emacs-lisp (setq-default indent-tabs-mode t tab-width 4 standard-indent 4) (setq tab-always-indent 1) (use-package dtrt-indent :ensure t :hook (prog-mode . dtrt-indent-mode)) (use-package whitespace :hook (prog-mode . whitespace-mode) :custom (whitespace-style '(face tabs tab-mark trailing)) (whitespace-display-mappings '((tab-mark ?\t [?→ ?\t] [?> ?\t])))) #+end_src * COMPLETION SYSTEM ** Helpful documentation #+begin_src emacs-lisp (use-package helpful :ensure t :bind ([remap describe-function] . helpful-callable) ([remap describe-variable] . helpful-variable) ([remap describe-key] . helpful-key)) #+end_src ** Minibuffer completion (Vertico + Marginalia) #+begin_src emacs-lisp (use-package marginalia :ensure t :bind (:map minibuffer-local-map ("M-A" . marginalia-cycle)) :init (marginalia-mode)) (use-package vertico :ensure t :custom (vertico-cycle t) :init (vertico-mode)) (use-package savehist :init (savehist-mode)) (use-package orderless :ensure t :custom (completion-styles '(orderless basic)) (completion-category-defaults nil) (completion-category-overrides '((file (styles partial-completion))))) #+end_src ** Minibuffer settings #+begin_src emacs-lisp (use-package emacs :custom (context-menu-mode t) (enable-recursive-minibuffers t) (read-extended-command-predicate #'command-completion-default-include-p) (text-mode-ispell-word-completion nil) (minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))) #+end_src ** In-buffer completion (Corfu + Cape) #+begin_src emacs-lisp (use-package corfu :ensure t :custom (corfu-auto t) (corfu-cycle t) (corfu-preselect 'prompt) :init (global-corfu-mode) (corfu-history-mode) (corfu-popupinfo-mode) :bind (:map corfu-map ("TAB" . corfu-next) ([tab] . corfu-next) ("S-TAB" . corfu-previous) ([backtab] . corfu-previous))) (use-package cape :ensure t :bind ("C-c p" . cape-prefix-map) :hook ((completion-at-point-functions . cape-dabbrev) (completion-at-point-functions . cape-file) (completion-at-point-functions . cape-elisp-block))) #+end_src #+RESULTS: : [nil 26870 55996 618175 nil elpaca-process-queues nil nil 712000 nil] * VISUAL APPEARANCE ** Theme and colors #+begin_src emacs-lisp (use-package doom-themes :ensure t :custom (doom-themes-enable-bold t) (doom-themes-enable-italic t) :config (load-theme 'doom-moonlight t) (doom-themes-visual-bell-config) (doom-themes-org-config) (let ((bg "#16191C") (fg "#C5CACE") (bg-alt "#252A2E") (fg-alt "#A3AAAF") (fg-muted "#50555A")) (custom-set-faces `(default ((t (:background ,bg :foreground ,fg)))) `(fringe ((t (:background ,bg)))) `(hl-line ((t (:background ,bg-alt)))) `(mode-line ((t (:background ,bg-alt :foreground ,fg)))) `(mode-line-inactive ((t (:background ,bg :foreground ,fg-muted)))) `(line-number ((t (:foreground ,fg-muted :background ,bg)))) `(line-number-current-line ((t (:foreground ,fg-alt :background ,bg-alt :weight bold)))) `(font-lock-comment-face ((t (:foreground ,fg-alt))))))) (add-hook 'org-mode-hook (lambda () (set-face-background 'org-block "#16191C") (set-face-foreground 'org-block "#C5CACE") (set-face-background 'org-block-begin-line "#252A2E") (set-face-foreground 'org-block-begin-line "#A3AAAF") (set-face-background 'org-block-end-line "#252A2E") (set-face-foreground 'org-block-end-line "#A3AAAF"))) #+end_src ** Modeline #+begin_src emacs-lisp (use-package doom-modeline :ensure t :init (doom-modeline-mode +1)) #+end_src ** Color preview #+begin_src emacs-lisp (use-package colorful-mode :ensure t :custom (colorful-use-prefix t) (colorful-only-strings 'only-prog) (css-fontify-colors nil) :config (global-colorful-mode t) (add-to-list 'global-colorful-modes 'helpful-mode)) (use-package rainbow-delimiters :ensure t :hook (prog-mode . rainbow-delimiters-mode)) #+end_src #+RESULTS: : [nil 26870 59644 357807 nil elpaca-process-queues nil nil 727000 nil] * INTEGRATIONS & UTILITIES ** Discord presence #+begin_src emacs-lisp (use-package elcord :ensure t :config (elcord-mode +1)) #+end_src ** Project management #+begin_src emacs-lisp (use-package projectile :ensure t :config (projectile-mode +1) (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)) (use-package editorconfig :ensure t :config (editorconfig-mode 1)) #+end_src ** Dashboard #+begin_src emacs-lisp (use-package page-break-lines :ensure t :config (page-break-lines-mode +1)) (use-package all-the-icons :ensure t :if (display-graphic-p)) (use-package dashboard :ensure t :custom (dashboard-banner-logo-title "DMs~ ;)") (dashboard-startup-banner "~/.config/emacs/dash.gif") :config (add-hook 'elpaca-after-init-hook #'dashboard-insert-startupify-lists) (add-hook 'elpaca-after-init-hook #'dashboard-initialize) (dashboard-setup-startup-hook)) #+end_src ** File tree #+begin_src emacs-lisp (use-package treemacs :ensure t :bind ("C-c t" . treemacs) :config (setq treemacs-width 30)) (use-package treemacs-projectile :ensure t :after (treemacs projectile)) (use-package treemacs-all-the-icons :ensure t :after (treemacs all-the-icons) :config (treemacs-load-theme "all-the-icons")) (use-package treemacs-icons-dired :ensure t :hook (dired-mode . treemacs-icons-dired-enable-once)) #+end_src #+RESULTS: : [nil 26870 60289 404113 nil elpaca-process-queues nil nil 420000 nil]