init-base.el (10881B)
1 ;;; init-base.el --- base config -*- lexical-binding: t -*- 2 3 ;;; Commentary: 4 5 ;;; Code: 6 7 ;; keybindings 8 (my-use-package general) 9 10 ;; mode names in mode line 11 (my-use-package delight 12 :config 13 (delight 14 `((eldoc-mode nil eldoc) 15 (org-indent-mode nil org-indent) 16 (desktop-environment-mode nil desktop-environment) 17 (hs-minor-mode nil hideshow)))) 18 19 ;; garbage collection 20 (my-use-package gcmh 21 :delight 22 :hook 23 (emacs-startup . gcmh-mode) 24 :init 25 (setq gcmh-idle-delay 'auto 26 gcmh-auto-idle-delay-factor 10 27 gcmh-high-cons-threshold #x4000000)) 28 29 ;; benchmark 30 (my-use-package benchmark-init 31 :init 32 (add-hook 'after-init-hook #'benchmark-init/deactivate 100)) 33 34 ;; server-mode 35 (my-use-package server my-enable-server 36 :straight nil 37 :demand t 38 :hook 39 (emacs-startup . my-enable-server) 40 :init 41 (defun my-enable-server () 42 (unless (server-running-p) 43 (server-mode 1)))) 44 45 ;; recently opened files 46 (my-use-package recentf 47 :straight nil 48 :hook 49 (after-init . recentf-mode) 50 :init 51 (setq recentf-max-saved-items 30 52 recentf-exclude 53 '("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks" 54 "\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$" 55 "\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/" 56 "^/tmp/" "^/var/folders/.+$" "^/ssh:" "/persp-confs/" 57 (lambda (file) (file-in-directory-p file package-user-dir)))) 58 :config 59 (add-to-list 'recentf-exclude "~/hywiki/.hywiki.eld") 60 (add-to-list 'recentf-exclude (abbreviate-file-name (straight--build-dir))) 61 (with-eval-after-load 'bookmark 62 (add-to-list 'recentf-exclude bookmark-default-file))) 63 64 ;; save minibuffer history 65 (my-use-package savehist 66 :straight nil 67 :hook 68 (after-init . savehist-mode) 69 :init 70 (setq history-length 50 71 savehist-additional-variables '(mark-ring 72 global-mark-ring 73 search-ring 74 regexp-search-ring 75 extended-command-history) 76 savehist-autosave-interval 300)) 77 78 ;; save cursor place 79 (my-use-package saveplace 80 :straight nil 81 :hook 82 (after-init . save-place-mode)) 83 84 ;; async 85 (my-use-package async (not *is-android*) 86 :hook 87 (dired-mode . dired-async-mode)) 88 89 ;; autorevert buffer 90 (my-use-package autorevert 91 :straight nil 92 :delight 93 :hook 94 (find-file . global-auto-revert-mode)) 95 96 ;; display keybindings 97 (my-use-package which-key 98 :straight nil 99 :delight 100 :commands which-key-enable-god-mode-support 101 :hook 102 (after-init . which-key-mode)) 103 104 ;; save window changes 105 (my-use-package winner 106 :straight nil 107 :hook 108 (after-init . winner-mode)) 109 110 ;; ibuffer 111 (my-use-package ibuffer 112 :straight nil 113 :hook 114 (ibuffer . my-ibuffer-setup) 115 :init 116 (defun my-ibuffer-setup () (ibuffer-switch-to-saved-filter-groups "Main")) 117 :config 118 (setq ibuffer-saved-filter-groups 119 '(("Main" 120 ("App" (mode . exwm-mode)) 121 ("Scratch" (or 122 (name . "^*scratch"))) 123 ("Text" (or 124 (predicate (lambda () (and (derived-mode-p 'org-mode) 125 (not (memq 'gptel-mode local-minor-modes))))) 126 (mode . markdown-mode) 127 (mode . rst-mode) 128 (filename . ".\\.md") 129 (name . "^\\*\\[D\\] FILE backlinks for"))) 130 ("Scripts" (or 131 (mode . shell-script-mode) 132 (mode . sh-mode) 133 (mode . bat-mode))) 134 ("Config" (or 135 (name . "\\.\\(toml\\|ya?ml\\|ini\\|cfg\\|conf\\|gitignore\\)$") 136 (mode . conf-mode) 137 (mode . conf-desktop-mode) 138 (mode . conf-toml-mode) 139 (mode . conf-xdefaults-mode) 140 (mode . conf-javaprop-mode) 141 (mode . conf-unix-mode))) 142 ("Web" (or (name . "\\.\\(html?\\|xml\\|css\\|s[ac]ss\\|less\\|jsx?\\|tsx?\\|json\\|md\\)$"))) 143 ("LSP" (or (name . "\\*EGLOT") 144 (name . "\\*Flycheck") 145 (derived-mode . eglot--managed-mode))) 146 ("C/C++" (name . "\\.\\(c\\|cpp\\|cc\\|h\\|hpp\\|cppm\\|ixx\\)$")) 147 ("Elisp" (or (mode . emacs-lisp-mode) 148 (filename . ".\\.eld"))) 149 ("Emacs" (or (mode . emacs-lisp-compilation-mode) 150 (mode . inferior-emacs-lisp-mode) 151 (mode . debugger-mode) 152 (mode . messages-buffer-mode) 153 (mode . backtrace-mode) 154 (mode . eldoc-mode) 155 (mode . my-elisp-macroexpand-mode))) 156 ("Scheme" (or 157 (mode . scheme-mode))) 158 ("Geiser" (or 159 (name . "^Geiser") 160 (mode . geiser-repl-mode) 161 (mode . geiser-debug-mode) 162 (mode . geiser-messages-mode) 163 (mode . geiser-debug-mode) 164 (mode . geiser-doc-mode) 165 (mode . geiser-autodoc-mode))) 166 ("Common-lisp" (or 167 (mode . common-lisp-mode) 168 (mode . lisp-mode))) 169 ("Sly" (or 170 (mode . lisp-data-mode) 171 (mode . sly-db-mode) 172 (mode . sly-mrepl-mode) 173 (mode . sly-inspector-mode) 174 (name . "\\*sly-compilation\\*") 175 (name . "^\\*sly-inferior-lisp") 176 (name . "^\\*sly-events") 177 (name . "^\\*img-cache\\*"))) 178 ("Shell" (or 179 (mode . shell-mode) 180 (mode . eshell-mode) 181 (mode . term-mode) 182 (mode . ghostel-mode))) 183 ("Tramp"(or 184 (name . "^\\*tramp"))) 185 ("VC" (or 186 (mode . magit-blame-mode) 187 (mode . magit-cherry-mode) 188 (mode . magit-diff-mode) 189 (mode . magit-log-mode) 190 (mode . magit-process-mode) 191 (mode . magit-status-mode) 192 (mode . magit-revision-mode) 193 (mode . magit-refs-mode) 194 (mode . vc-annotate-mode) 195 (name . "^\\*vc"))) 196 ("Assets" (or (name . "\\.\\(png\\|jpe?g\\|svg\\|webp\\|bpm\\|ppm\\|mp[34]\\|mov\\|avi\\|obj\\)$"))) 197 ("Directories" (or 198 (mode . dired-mode) 199 (name . "^*dirvish") 200 (mode . trashed-mode))) 201 ("Eww" (or 202 (mode . eww-mode) 203 (mode . eww-bookmark-mode) 204 (mode . eww-buffers-mode) 205 (mode . eww-history-mode))) 206 ("Feeds" (or 207 (name . "\\*elfeed-"))) 208 ("AI" (or 209 (predicate (lambda () (memq 'gptel-mode local-minor-modes))) 210 (name . "^\\*gptel-") 211 (name . "^\\*pilish"))) 212 ("Calc" (or 213 (mode . calc-mode) 214 (mode . calc-trail-mode))) 215 ("Help" (or 216 (mode . help-mode) 217 (mode . helpful-mode) 218 (mode . Info-mode) ;`Info' must be capitalized 219 (mode . Man-mode))) ;`Man' too 220 ("Grep" (or 221 (mode . grep-mode) 222 (mode . xref--xref-buffer-mode) 223 (mode . xref-edit-mode) 224 (mode . occur-mode) 225 (mode . occur-edit-mode))) 226 ("Diff" (or 227 (name . "^*Diff") 228 (mode . diff-mode) 229 (mode . ediff-mode) 230 (mode . vundo-diff-mode) 231 (name . "^\\*ediff-") 232 (name . "\\*Ediff Registry\\*"))) 233 ("Process" (predicate get-buffer-process (current-buffer)))))) 234 235 (setq ibuffer-formats 236 '((mark modified read-only locked 237 " " (name 55 55 :left :elide) 238 " " (size 8 -1 :right) 239 " " (mode 18 18 :left :elide) " " filename-and-process) 240 (mark " " (name 16 -1) " " filename))) 241 242 (setq ibuffer-show-empty-filter-groups nil 243 ibuffer-default-sorting-mode 'alphabetic 244 ibuffer-human-readable-size t)) 245 246 (my-use-package simple 247 :straight nil 248 :hook 249 (after-init . size-indication-mode) 250 (after-init . column-number-mode) 251 :config 252 (setq kill-whole-line t 253 set-mark-command-repeat-pop t)) ;easier to pop marks 254 255 ;; scroll 256 (my-use-package pixel-scroll (not *is-mac*) 257 :straight nil 258 :hook 259 (after-init . pixel-scroll-precision-mode) 260 :init 261 (setq scroll-preserve-screen-position t 262 scroll-conservatively 101) 263 264 (defun my-pixel-scroll-precision-hack (fun event) 265 (cl-letf (((symbol-function 'device-class) 266 (lambda (&rest _) 'mouse))) 267 (funcall fun event))) 268 :config 269 (advice-add 'pixel-scroll-precision :around #'my-pixel-scroll-precision-hack)) 270 271 ;; eww 272 (my-use-package eww 273 :straight nil 274 :config 275 (setq eww-auto-rename-buffer t)) 276 277 (my-use-package shr 278 :straight nil 279 :config 280 (setq shr-use-fonts nil)) 281 282 ;; tramp 283 (my-use-package tramp 284 :straight nil 285 :config 286 (setq tramp-default-method 'ssh 287 tramp-auto-save-directory 288 (expand-file-name "tramp-auto-save" user-emacs-directory) 289 tramp-completion-use-auth-sources nil)) 290 291 ;; speedbar 292 (my-use-package speedbar 293 :straight nil 294 :init 295 (setq speedbar-window-default-width 30) 296 297 (defun my-speedbar () 298 "Run `speedbar-get-focus' if current buffer is not speedbar, otherwise run `speedbar'" 299 (interactive) 300 (if (or (not (boundp 'speedbar-buffer)) 301 (eq (current-buffer) speedbar-buffer)) 302 (speedbar) 303 (speedbar-get-focus))) 304 305 (defun my-speedbar-line-expanded-p () 306 "Return non-nil if the speedbar line at point is expanded." 307 (save-excursion 308 (beginning-of-line) 309 (and (re-search-forward ":\\s-*.\\([-+?]\\)" (line-end-position) t) 310 (equal (match-string 1) "-")))) 311 312 (defun my-speedbar-tab () 313 "Expand or contract current line." 314 (interactive) 315 (if (my-speedbar-line-expanded-p) 316 (speedbar-contract-line) 317 (speedbar-expand-line))) 318 319 :config 320 (if (boundp 'speedbar-prefer-window) 321 (setq speedbar-prefer-window t)) 322 (setq speedbar-use-images nil) 323 (setq speedbar-file-unshown-regexp "\\`0123456789abcdefghijklmnopqrstuvwxyz\\'") ; nonsense here because I cannot set this to nil 324 (setq speedbar-directory-unshown-regexp "\\`\\.\\.?\\'") 325 (setq speedbar-show-unknown-files t)) 326 327 (provide 'init-base) 328 ;;; init-base.el ends here