Personal NixOS flake

feat(emacs): mostly working config

don't have dirvish installed and haven't fully set up dashboard tho

+190 -71
+190 -71
home/emily/emacs/config.org
··· 3 3 #+PROPERTY: header-args:emacs-lisp :tangle yes :results none 4 4 5 5 #+begin_src emacs-lisp 6 - (require 'use-package) 7 - (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) 8 - (package-initialize) 6 + (require 'use-package) 7 + (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) 8 + (package-initialize) 9 + #+end_src 10 + 11 + 12 + #+begin_src emacs-lisp 13 + ;; Hide the bars 14 + (menu-bar-mode -1) 15 + (tool-bar-mode -1) 16 + (scroll-bar-mode -1) 17 + 18 + ;; Line nums 19 + (global-display-line-numbers-mode) 20 + (setq display-line-numbers-type 'relative) 21 + 22 + 23 + ;; Don't show startup screen 24 + (setq inhibit-startup-screen t) 9 25 10 - (menu-bar-mode -1) 11 - (tool-bar-mode -1) 12 - (scroll-bar-mode -1) 26 + ;; Start emacs in a maximized window 27 + (add-to-list 'default-frame-alist '(fullscreen . maximized)) 28 + 29 + ;;; Disable the system bell holy wow that's obnoxious with pgtk 30 + (setf ring-bell-function 'ignore) 31 + 32 + ;;; Change backup 33 + (setq backup-directory-alist '(("." . "~/.backups"))) 13 34 14 - ;; Line nums 15 - (global-display-line-numbers-mode) 16 - (setq display-line-numbers-type 'relative) 35 + ;;; Disable prompt for git-controlled symlinks 36 + (setq vc-follow-symlinks t) 37 + 38 + ;;; Stop warning buffer from popping up for not-emergencies 39 + (setq warning-minimum-level :emergency) 40 + 41 + ;; Enable recent file history 42 + (recentf-mode 1) 43 + (setq recentf-max-saved-items 100) 44 + 45 + ;; Remember cursor location in a file when reopening 46 + (save-place-mode 1) 47 + 48 + ;; Watch files for changes and update buffers if there are no unsaved changes 49 + (global-auto-revert-mode 1) 50 + 51 + ;; Add matching delimiters 52 + (electric-pair-mode t) 53 + 54 + ;;; Compile uses comint mode instead of compilation-mode 55 + (defadvice compile (before ad-compile-smart activate) 56 + (ad-set-arg 1 t)) 57 + #+end_src 58 + 59 + #+begin_src emacs-lisp 60 + ;; Theme Stuff 61 + (setq font-lock-maximum-decoration t) 62 + 63 + (use-package catppuccin-theme 64 + :ensure t 65 + :config 66 + (load-theme 'catppuccin :no-confirm) 67 + (setq catppuccin-flavor 'mocha) 68 + (catppuccin-reload)) 17 69 18 - (setq font-lock-maximum-decoration t) 70 + ;; Font Stuff 71 + (add-to-list 'default-frame-alist '(font . "FiraCode Nerd Font Mono-10")) 72 + (set-face-attribute 'default t :font "FiraCode Nerd Font Mono-10") 73 + #+end_src 19 74 20 - (use-package catppuccin-theme 21 - :ensure t 22 - :config 23 - (load-theme 'catppuccin :no-confirm) 24 - (setq catppuccin-flavor 'mocha) 25 - (catppuccin-reload)) 75 + #+begin_src emacs-lisp 26 76 27 - (setq inhibit-startup-screen t) 77 + ;; Evil 78 + (use-package evil 79 + :ensure t 80 + :hook ((prog-mode text-mode conf-mode) . evil-local-mode) 81 + :custom 82 + (evil-undo-system 'undo-redo) 83 + (evil-normal-state-cursor 'hollow) 84 + (evil-emacs-state-cursor 'bar) 85 + :config 86 + (with-eval-after-load 'evil-maps 87 + (define-key evil-motion-state-map (kbd ":") 'evil-repeat-find-char) 88 + (define-key evil-motion-state-map (kbd ";") 'evil-ex))) 28 89 29 - (use-package evil 30 - :ensure t 31 - :hook ((prog-mode text-mode conf-mode) . evil-local-mode) 32 - :custom 33 - (evil-undo-system 'undo-redo) 34 - (evil-normal-state-cursor 'hollow) 35 - (evil-emacs-state-cursor 'bar) 36 - :config 37 - (with-eval-after-load 'evil-maps 38 - (define-key evil-motion-state-map (kbd ":") 'evil-repeat-find-char) 39 - (define-key evil-motion-state-map (kbd ";") 'evil-ex)) 90 + ;; Lispy 91 + (use-package lispy) 40 92 41 - ) 93 + #+end_src 94 + 95 + #+begin_src emacs-lisp 96 + ;; Various prog-modes 97 + (use-package nix-mode) 98 + (use-package fish-mode) 99 + (use-package haskell-mode) 100 + #+end_src 101 + 102 + #+begin_src emacs-lisp 103 + ;; Keybinds 104 + ;;; Copy and paste (this at least works on Linux/NixOS/Wayland/KDE Plasma 6 for most part) 105 + (keymap-global-set "C-S-c" 'kill-ring-save) 106 + (keymap-global-set "C-S-v" 'clipboard-yank) 107 + 108 + ;;; C-c C-k to eval buffer in elisp mode like CIDER 109 + (define-key emacs-lisp-mode-map (kbd "C-c C-k") #'eval-buffer) 110 + 111 + ;; For ez wrapping of stuff in common delimiters 112 + (global-set-key (kbd "M-[") 'insert-pair) 113 + (global-set-key (kbd "M-{") 'insert-pair) 114 + (global-set-key (kbd "M-\"") 'insert-pair) 115 + 116 + #+end_src 42 117 43 - (use-package nix-mode) 44 - (use-package fish-mode) 45 - (use-package haskell-mode) 118 + #+begin_src emacs-lisp 119 + ;; Whatever packages 120 + (use-package envrc 121 + :demand t 122 + :hook (after-init . envrc-global-mode)) 46 123 47 - ;; Start emacs in a maximized window 48 - (add-to-list 'default-frame-alist '(fullscreen . maximized)) 124 + (use-package magit) 49 125 50 - ;;; Copy and paste (this at least works on Linux/NixOS/Wayland/KDE Plasma 6 for most part) 51 - (keymap-global-set "C-S-c" 'kill-ring-save) 52 - (keymap-global-set "C-S-v" 'clipboard-yank) 126 + (use-package ivy 127 + :custom 128 + (ivy-use-virtual-buffers t) 129 + (enable-recursive-minibuffers t) 130 + :config 131 + (ivy-mode 1)) 53 132 54 - (use-package envrc 55 - :hook (after-init . envrc-global-mode)) 133 + (use-package corfu 134 + :custom 135 + (corfu-auto t) 136 + (corfu-quit-no-match 'separator) 137 + :config 138 + (global-corfu-mode)) 56 139 57 - (use-package magit) 140 + (use-package eat) 58 141 59 - (add-to-list 'default-frame-alist '(font . "FiraCode Nerd Font Mono-10")) 60 - (set-face-attribute 'default t :font "FiraCode Nerd Font Mono-10") 142 + (use-package projectile 143 + :init (projectile-mode +1) 144 + :bind (:map projectile-mode-map 145 + ("C-c p" . projectile-command-map) 146 + ("C-c p x e" . 'eat-project-other-window)) 147 + :config (projectile-mode)) 61 148 62 - (use-package ivy 63 - :custom 64 - (ivy-use-virtual-buffers t) 65 - (enable-recursive-minibuffers t) 66 - :config 67 - (ivy-mode 1)) 68 149 69 - (use-package corfu 70 - :custom 71 - (corfu-auto t) 72 - (corfu-quit-no-match 'separator) 73 - :config 74 - (global-corfu-mode)) 150 + (use-package which-key 151 + :config (which-key-mode)) 75 152 76 - (use-package eat) 153 + ;; NeoTree 154 + (use-package neotree 155 + :ensure t 156 + :bind (("<f8>" . neotree-toggle)) 77 157 78 - (use-package projectile 79 - :init (projectile-mode +1) 80 - :bind (:map projectile-mode-map 81 - ("C-c p" . projectile-command-map) 82 - ("C-c p x e" . 'eat-project-other-window)) 83 - :config (projectile-mode)) 158 + :config 159 + (setq neo-theme (if (display-graphic-p) 'icons 'arrow) 160 + neo-window-width 30 161 + neo-window-fixed-size nil 162 + projectile-switch-project-action 'neotree-projectile-action)) 84 163 164 + ;; Rainbow delimiters :3 165 + (use-package rainbow-delimiters 166 + :hook (prog-mode . rainbow-delimiters-mode)) 85 167 86 - (use-package which-key 87 - :config (which-key-mode)) 168 + (use-package flycheck 169 + :init (global-flycheck-mode)) 170 + 171 + (use-package elcord) 172 + 173 + ;; (use-package dashboard 174 + ;; :config (dashboard-setup-startup-hook) 175 + ;; :custom 176 + ;; (dashboard-banner-logo-title "what that emacsussy do") 177 + ;; (dashboard-items '((recents . 5) 178 + ;; (project . 5))) 179 + ;; (dashboard-icon-type 'all-the-icons) 180 + ;; (dashboard-set-file-icons t)) 181 + (use-package dashboard 182 + :config (dashboard-setup-startup-hook) 183 + :custom 184 + (dashboard-center-content t) 185 + (dashboard-projects-backend 'projectile)) 186 + #+end_src 187 + 188 + #+begin_src emacs-lisp 189 + ;; Lang specific stuff 190 + (use-package cider 191 + :hook 192 + ;; Disable the ridiculous single ; comment indentation (in clojure-mode) 193 + (clojure-mode . (lambda () (setq-local comment-column 0)))) 88 194 89 - ;;; Disable the system bell holy wow that's obnoxious with pgtk 90 - (setf ring-bell-function 'ignore) 195 + ;;; Elpy 196 + (use-package elpy 197 + :ensure t 198 + :init 199 + (elpy-enable)) 91 200 92 - ;;; Change backup 93 - (setq backup-directory-alist '(("." . "~/.backups"))) 201 + #+end_src 94 202 95 - ;;; Disable prompt for git-controlled symlinks 96 - (setq vc-follow-symlinks t) 203 + #+begin_src emacs-lisp 204 + ;; LSP whack 97 205 98 - ;;; Stop warning buffer from popping up for not-emergencies 99 - (setq warning-minimum-level :emergency) 206 + (use-package lsp-mode 207 + :hook (haskell-mode . lsp-deferred) 208 + :commands (lsp lsp-deferred)) 209 + 210 + (use-package lsp-ivy 211 + :commands lsp-ivy-workspace-symbol) 212 + 213 + (use-package lsp-treemacs 214 + :commands lsp-treemacs-errors-list) 215 + 216 + #+end_src 217 + 218 + #+begin_src emacs-lisp 100 219 101 220 #+end_src