Advertisement
snuffop

config.el

Oct 13th, 2022
2,391
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 34.76 KB | None | 0 0
  1. ;;; $doomdir/config.el --- My Emacs Config File -*- lexical-binding: t; -*-
  2. ;;
  3. ;; author: Marty Buchaus <marty@dabuke.com>
  4. ;; copyright © 2022, Marty Buchaus, all rights reserved.
  5. ;;
  6. ;;; Commentary:
  7. ;;
  8. ;;; Code:
  9. ;;;; Global
  10.  
  11. (setq user-full-name "Marty Buchaus")
  12. (setq user-mail-address "marty@dabuke.com")
  13.  
  14. (setq-default epg-gpg-program "/usr/bin/gpg2")
  15. (setq-default delete-by-moving-to-trash t)
  16. (setq-default enable-local-variables t)            ; allow for reading the local variables file
  17. (setq-default left-margin-width 1)                 ; Define new widths
  18. (setq-default right-margin-width 2)                ; Define new widths.
  19. (setq-default window-combination-resize t)
  20. (setq-default x-stretch-cursor t)
  21. (setq-default display-time-24hr-format t)                  ; I wonder what this does
  22. (setq-default evil-want-fine-undo t)                       ; by default while in insert all changes are one big blob. be more granular
  23. (setq-default truncate-string-ellipsis "…")                ; unicode ellispis are nicer than "...", and also save /precious/ space
  24. (setq-default auth-sources '("~/.authinfo.gpg"))
  25. (setq-default warning-minimum-level :emergency)
  26. (setq-default doom-scratch-initial-major-mode 'lisp-interaction-mode)  ; Make the scratch buffer start in lisp mode
  27. (setq-default display-time-load-average nil)
  28. (setq auto-save-default t)                         ; nobody likes to loose work, i certainly don't
  29. (setq confirm-kill-emacs nil)                      ; stop hounding me and quit
  30. (setq inhibit-compacting-font-caches t)
  31. (setq password-cache-expiry nil)                   ; i can trust my computers ... can't i?
  32. (setq read-process-output-max (* 1024 1024))
  33. (setq scroll-margin 2)                             ; it's nice to maintain a little margin
  34. (setq undo-limit 80000000)                         ; raise undo-limit to 80mb
  35.  
  36. (setq garbage-collection-messages nil)
  37.  
  38. (display-time-mode 1)                              ; enable time in the mode-line
  39. (global-subword-mode 1)                            ; CamelCase and it makes refactoring slightly Essie
  40.  
  41. (set-window-buffer nil (current-buffer))
  42.  
  43. (add-to-list 'load-path (expand-file-name "elisp/" doom-user-dir))
  44.  
  45. (setq safe-local-variable-values
  46.       (quote
  47.        ((buffer-read-only . 1))))
  48.  
  49. (doom-load-envvars-file (expand-file-name ".local/env" doom-emacs-dir))
  50.  
  51. ;;;;; Vterm
  52.  
  53. (setq-default vterm-kill-buffer-on-exit t)
  54. (setq-default vterm-always-compile-module t)               ; Always compile the vterm module
  55. (setq-default vterm-timer-delay nil)                       ; Make Vterm snappier
  56. (setq-default vterm-shell "/usr/bin/zsh")
  57.  
  58. ;;;; Key Bindings
  59.  
  60. (setq-default doom-localleader-key ",")
  61.  
  62. ;;;;; global Keybindings
  63.  
  64. (define-key! help-map
  65.    "h"    #'helpful-at-point)
  66.  
  67. (global-set-key [f7] 'hyrolo-fgrep)
  68.  
  69. (after! evil
  70.   (map! :m  "-"  #'dired-jump
  71.         :en "C-h"   #'evil-window-left
  72.         :en "C-j"   #'evil-window-down
  73.         :en "C-k"   #'evil-window-up
  74.         :en "C-l"   #'evil-window-right))
  75.  
  76. (map!
  77.  :n "C-:"    #'flyspell-correct-wrapper
  78.  :n "gz"     #'zoxide-find-file
  79.  :n "C-,"    #'flyspell-correct-next)
  80.  
  81.  
  82. ;;;;; Leader KeyBindings
  83.  
  84. (map! :leader
  85.       "TAB"  #'evil-switch-to-windows-last-buffer
  86.       "SPC"  #'execute-extended-command)
  87.  
  88. ;;;;;; <leader> a --- Application
  89.  
  90. (map! :leader
  91.       (:prefix-map ("a" . "app")
  92.        :desc "MU4E"              "m"  #'=mu4e
  93.        :desc "Dashboard"         "d"  #'+doom-dashboard/open
  94.        ;; :desc "consult-recoll"    "r"  #'consult-recoll
  95.        :desc "Paperless"         "P"  #'paperless
  96.        :desc "Xeft-mode"         "x"  #'xeft
  97.        (:prefix-map ("b" . "buku")
  98.                     "b"  #'ebuku
  99.                     "s"  #'ebuku-search-on-all)
  100.        ;; Pass
  101.        (:when (modulep! :tools pass)
  102.          (:prefix-map ("p" . "pass")
  103.                       "/"  #'+pass/consult
  104.                       "c"  #'password-store-edit
  105.                       "d"  #'password-store-remove
  106.                       "g"  #'password-store-generate
  107.                       "i"  #'password-store-insert
  108.                       "r"  #'password-store-rename
  109.                       "w"  #'password-store-url
  110.                       "y"  #'password-store-copy
  111.                       "D"  #'password-store-clear
  112.                       "I"  #'password-store-init))
  113.        (:prefix-map ("o" . "otp")
  114.                     "a" #'password-store-otp-append
  115.                     "i" #'password-store-otp-insert
  116.                     "y" #'password-store-otp-token-copy
  117.                     "A" #'password-store-otp-append-from-image
  118.                     "Y" #'password-store-otp-uri-copy)
  119.        ;; Tramp
  120.        (:prefix-map ("t" . "Tramp")
  121.         :desc "clean all connections" "C"  #'tramp-cleanup-all-connections
  122.         :desc "clean all buffers"     "B"  #'tramp-cleanup-all-buffers
  123.         :desc "clean connection"      "c"  #'tramp-cleanup-this-connection
  124.         :desc "consult-tramp"         "t"  #'consult-tramp
  125.         :desc "tramp-quit"            "q"  #'marty/tramp-quit)))
  126.  
  127. ;; ;;;;;; <leader> b
  128. ;; (map! :leader
  129. ;;       :prefix ("b")
  130. ;;       "b"  #'consult-buffer)
  131.  
  132. ;;;;;; <leader> d ---
  133.  
  134. (map! :leader
  135.       (:prefix-map ("d" . "Dired")
  136.        :desc "Peep-dired image previews"   "p"  #'peep-dired
  137.        :desc "Dired-FD"                    "d"  #'fd-dired
  138.        :desc "Dired Jump"                  "j"  #'dired-jump
  139.        :desc "Dired Jump o/window"         "J"  #'dired-jump-other-window
  140.        :desc "Dired view file"             "v"  #'dired-view-file))
  141.  
  142. ;;;;;; <leader> f --- file
  143.  
  144. (map! :leader
  145.       (:prefix ("f")
  146.        :desc "Search Directory FD"         "/"   #'+vertico/consult-fd))
  147.  
  148. ;;;;;; <leader> l --- workspace / Layout
  149.  
  150. (map! :leader
  151.       :prefix-map ("l" . "workspace")
  152.       :desc "Display tab bar"           "SPC" #'+workspace/display
  153.       :desc "Cycle tab bar"             "TAB" #'+workspace/cycle
  154.       :desc "Switch workspace"          "."   #'+workspace/switch-to
  155.       :desc "Switch to last workspace"  "`"   #'+workspace/other
  156.       :desc "Move workspace left"       "<"   #'+workspace/swap-left
  157.       :desc "Move workspace right"      ">"   #'+workspace/swap-right
  158.       :desc "New workspace"             "n"   #'+workspace/new
  159.       :desc "Create named workspace"    "N"   #'+workspace/new-named
  160.       :desc "open workspace from file"  "o"   #'+workspace/load
  161.       :desc "Save workspace to file"    "s"   #'+workspace/save
  162.       :desc "Delete session"            "x"   #'+workspace/kill-session
  163.       :desc "Delete this workspace"     "d"   #'+workspace/delete
  164.       :desc "Rename workspace"          "r"   #'+workspace/rename
  165.       :desc "Switch workspace"          "l"   #'+workspace/switch-to
  166.       :desc "Restore last session"      "R"   #'+workspace/restore-last-session
  167.       :desc "Next workspace"            "]"   #'+workspace/switch-right
  168.       :desc "Previous workspace"        "["   #'+workspace/switch-left
  169.       :desc "Switch to 1st workspace"   "1"   #'+workspace/switch-to-0
  170.       :desc "Switch to 2nd workspace"   "2"   #'+workspace/switch-to-1
  171.       :desc "Switch to 3rd workspace"   "3"   #'+workspace/switch-to-2
  172.       :desc "Switch to 4th workspace"   "4"   #'+workspace/switch-to-3
  173.       :desc "Switch to 5th workspace"   "5"   #'+workspace/switch-to-4
  174.       :desc "Switch to 6th workspace"   "6"   #'+workspace/switch-to-5
  175.       :desc "Switch to 7th workspace"   "7"   #'+workspace/switch-to-6
  176.       :desc "Switch to 8th workspace"   "8"   #'+workspace/switch-to-7
  177.       :desc "Switch to 9th workspace"   "9"   #'+workspace/switch-to-8
  178.       :desc "Switch to final workspace" "0"   #'+workspace/switch-to-final)
  179.  
  180. ;;;;;; <leader> n --- notes
  181.  
  182. (map! :leader
  183.       :prefix "n"
  184.       "r" #'transient-roam-jump)
  185.  
  186. ;;;;;; <leader> o --- open
  187.  
  188. (map! :leader
  189.       (:prefix ("o")
  190.                (:prefix-map ("m" . "My")
  191.                 :desc "0mobile"       "0" #'(lambda () (interactive) (find-file (concat org-directory "0mobile.org")))
  192.                 :desc "Bullets"       "b" #'(lambda () (interactive) (find-file (concat org-directory "Joyent/Bullets.org")))
  193.                 :desc "Desktop"       "d" #'(lambda () (interactive) (find-file (concat org-directory "desktop.org")))
  194.                 :desc "MD Cheat"      "D" #'(lambda () (interactive) (find-file "~/Nextcloud/Notes/markdown/markdown-cheat-sheet.md"))
  195.                 :desc "contacts"      "o" #'(lambda () (interactive) (find-file (concat org-directory "contacts.org")))
  196.                 :desc "read-later"    "r" #'(lambda () (interactive) (find-file (concat org-directory "read-later.org")))
  197.                 :desc "Tasks"         "g" #'(lambda () (interactive) (find-file (concat org-directory "Tasks.org")))
  198.                 :desc "Habits"        "h" #'(lambda () (interactive) (find-file (concat org-directory "Habits.org")))
  199.                 :desc "Joyent Index"  "j" #'(lambda () (interactive) (find-file (concat org-directory "Joyent/index.org")))
  200.                 :desc "read later"    "l" #'(lambda () (interactive) (find-file (concat org-directory "read-later.org")))
  201.                 :desc "Projects"      "p" #'(lambda () (interactive) (find-file (concat org-directory "Projects.org")))
  202.                 :desc "Someday"       "s" #'(lambda () (interactive) (find-file (concat org-directory "Someday.org")))
  203.                 :desc "Tip Jar"       "t" #'(lambda () (interactive) (find-file (concat org-directory "TipJar/index.org"))))
  204.                (:prefix-map ("c" . "+config")
  205.                 :desc "keybindings"  "k" #'(lambda () (interactive) (find-file (concat doom-private-dir "keybindings.el")))
  206.                 :desc "config"       "c" #'(lambda () (interactive) (find-file (concat doom-private-dir "config.el")))
  207.                 :desc "org"          "o" #'(lambda () (interactive) (find-file (concat doom-private-dir "org-mode.el")))
  208.                 :desc "init"         "i" #'(lambda () (interactive) (find-file (concat doom-private-dir "init.el")))
  209.                 :desc "packages"     "p" #'(lambda () (interactive) (find-file (concat doom-private-dir "packages.el")))
  210.                 :desc "mu4e"         "m" #'(lambda () (interactive) (find-file (concat doom-private-dir "mu4e.el"))))
  211.                (:prefix-map ("C" . "calendar")
  212.                 :desc "Calendar"      "C" #'(lambda () (interactive) (find-file (concat org-directory "snuffop-calendar.org")))
  213.                 :desc "Joyent-Calendar" "j" #'(lambda () (interactive) (find-file (concat org-directory "joyent-calendar.org"))))))
  214.  
  215.  
  216. ;;;; UI
  217. ;;;;; Set Fonts
  218.  
  219.  
  220. (cond (IS-MAC (setq doom-font (font-spec :family "DejaVuSansMono Nerd Font Mono" :size 13)
  221.                     doom-variable-pitch-font (font-spec :family "Ubuntu Nerd Font" :style "Regular" :size 13 :weight 'regular)))
  222.       (IS-LINUX (setq doom-font (font-spec :family "FiraCode Nerd Font" :size 13 :weight 'medium)
  223.                       doom-big-font (font-spec :family "FiraCode Nerd Font" :size 21 :weight 'regular)
  224.                       doom-variable-pitch-font (font-spec :family "Ubuntu" :size 14)
  225.                       doom-unicode-font (font-spec :family "Noto Color Emoji" :size 15))))
  226.  
  227. ;;;;; Faces
  228.  
  229. (custom-set-faces!
  230.   '(font-lock-comment-face :slant italic)
  231.   '(font-lock-keyword-face :slant italic))
  232. (setq global-prettify-symbols-mode t)
  233.  
  234. (cond (IS-MAC
  235.        (custom-set-faces!
  236.          '(mode-line :family "firacode nerd font mono" :height 140)
  237.          '(mode-line-inactive :family "firacode nerd font mono" :height 140)))
  238.       (t
  239.        (custom-set-faces!
  240.          '(mode-line :family "Ubuntu Nerd Font" :height 105)
  241.          '(mode-line-inactive :family "Ubuntu Nerd Font" :height 105))))
  242.  
  243. ;;;;; Theme
  244.  
  245. (setq doom-theme 'doom-dracula)
  246.  
  247. (remove-hook 'window-setup-hook #'doom-init-theme-h)
  248. (add-hook 'after-init-hook #'doom-init-theme-h 'append)
  249. (delq! t custom-theme-load-path)
  250.  
  251. (custom-set-faces!
  252.   '(doom-modeline-buffer-modified :foreground "orange"))
  253.  
  254. (after! doom-themes
  255.   (doom-themes-org-config)
  256.   (doom-themes-visual-bell-config)
  257.   (doom-themes-treemacs-config)
  258.   (setq doom-themes-enable-bold t
  259.         doom-themes-enable-italic t
  260.         doom-themes-padded-modeline t
  261.         doom-themes-treemacs-theme 'doom-colors))
  262.  
  263.  
  264. ;;;;; Modeline
  265.  
  266. (after! doom-modeline
  267.   (setq auto-revert-check-vc-info t
  268.         doom-modeline-buffer-file-name-style 'relative-to-project
  269.         doom-modeline-enable-word-count t
  270.         doom-modeline-github t
  271.         doom-modeline-major-mode-color-icon (display-graphic-p)
  272.         doom-modeline-major-mode-icon (display-graphic-p)
  273.         doom-modeline-mu4e t
  274.         doom-modeline-buffer-state-icon t
  275.         doom-modeline-buffer-modification-icon t
  276.         doom-modeline-modal-icon nil
  277.         doom-modeline-vcs-max-length 60)
  278.  
  279.   (set-face-attribute 'mode-line nil :family "Ubuntu" :height 100)
  280.   (set-face-attribute 'mode-line-inactive nil :family "Ubuntu" :height 100)
  281.  
  282.   (add-hook! 'doom-modeline-mode-hook
  283.     (progn
  284.       (set-face-attribute 'header-line nil
  285.                           :background (face-background 'mode-line)
  286.                           :foreground (face-foreground 'mode-line))))
  287.                          
  288.  
  289.   (doom-modeline-def-segment buffer-name
  290.     "Display the current buffer's name, without any other information."
  291.     (concat
  292.      (doom-modeline-spc)
  293.      (doom-modeline--buffer-name)))
  294.  
  295.   (doom-modeline-def-segment pdf-icon
  296.     "PDF icon from all-the-icons."
  297.     (concat
  298.      (doom-modeline-spc)
  299.      (doom-modeline-icon 'octicon "file-pdf" nil nil
  300.                          :face (if (doom-modeline--active)
  301.                                    'all-the-icons-red
  302.                                  'mode-line-inactive)
  303.                          :v-adjust 0.02))))
  304.  
  305.  
  306.  
  307. ;;;;; Dashboard
  308.  
  309. (setq doom-fallback-buffer-name "► Doom"
  310.       +doom-dashboard-name "► Doom")
  311.  
  312. (custom-theme-set-faces! 'doom-one
  313.   '(doom-dashboard-banner :foreground "red" :background "#000000" :weight bold)
  314.   '(doom-dashboard-footer :inherit font-lock-constant-face)
  315.   '(doom-dashboard-footer-icon :inherit all-the-icons-red)
  316.   '(doom-dashboard-loaded :inherit font-lock-warning-face)
  317.   '(doom-dashboard-menu-desc :inherit font-lock-string-face)
  318.   '(doom-dashboard-menu-title :inherit font-lock-function-name-face))
  319.  
  320. (setq fancy-splash-image (expand-file-name "banners/smaller-cute-demon.png" doom-private-dir))
  321.  
  322.  
  323. ;;;;; Line Numbers
  324.  
  325. (setq display-line-numbers-type 'relative)
  326.  
  327. ;; remove numbers from these modes
  328. (dolist (mode '(org-mode-hook
  329.                 term-mode-hook
  330.                 shell-mode-hook
  331.                 eshell-mode-hook))
  332.   (add-hook mode (lambda () (display-line-numbers-mode 0))))
  333.  
  334. (setq doom-fallback-buffer-name "► Doom"
  335.       +doom-dashboard-name "► Doom")
  336.  
  337. ;;;;; Syntax Lists
  338.  
  339. (add-to-list 'auto-mode-alist '("\\.service\\'" . systemd-mode))
  340. (add-to-list 'auto-mode-alist '("\\.service.tmpl\\'" . systemd-mode))
  341. (add-to-list 'auto-mode-alist '("\\.timer\\'" . systemd-mode))
  342. (add-to-list 'auto-mode-alist '("\\.timer.tmpl\\'" . systemd-mode))
  343. (add-to-list 'auto-mode-alist '("\\.target\\'" . conf-unix-mode))
  344. (add-to-list 'auto-mode-alist '("\\.mount\\'" . conf-unix-mode))
  345. (add-to-list 'auto-mode-alist '("\\.automount\\'" . conf-unix-mode))
  346. (add-to-list 'auto-mode-alist '("\\.slice\\'" . conf-unix-mode))
  347. (add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-unix-mode))
  348. (add-to-list 'auto-mode-alist '("\\.path\\'" . conf-unix-mode))
  349. (add-to-list 'auto-mode-alist '("\\.netdev\\'" . conf-unix-mode))
  350. (add-to-list 'auto-mode-alist '("\\.network\\'" . conf-unix-mode))
  351. (add-to-list 'auto-mode-alist '("\\.link\\'" . conf-unix-mode))
  352. (add-to-list 'auto-mode-alist '("\\.j2\\'" . jinja2-mode))
  353. (add-to-list 'auto-mode-alist '("hosts" . conf-mode))
  354.  
  355. ;;;;; Windows
  356.  
  357. (setq evil-vsplit-window-right t
  358.       evil-split-window-below t)
  359.  
  360. ;;;; PACKAGES
  361. ;;;;; Autoinsert
  362.  
  363. (defun marty/autoinsert-yas-expand ()
  364.   "Auto Insert Funtion that works for me."
  365.   (let ((template ( buffer-string)))
  366.     (delete-region (point-min) (point-max))
  367.     (yas-expand-snippet template)
  368.     (evil-insert-state)))
  369.  
  370. (use-package! autoinsert
  371.   :init
  372.   (setq auto-insert-query nil)
  373.   (setq auto-insert-directory (expand-file-name "templates" doom-private-dir))
  374.   (add-hook 'find-file-hook 'auto-insert)
  375.   (auto-insert-mode 1)
  376.   :config
  377.   (define-auto-insert "\\.html?$" ["default.html" marty/autoinsert-yas-expand])
  378.   (define-auto-insert "\\.org" ["default.org" marty/autoinsert-yas-expand])
  379.   (define-auto-insert "\\.sh" ["default.sh" marty/autoinsert-yas-expand])
  380.   (define-auto-insert "\\.el" ["default.el" marty/autoinsert-yas-expand])
  381.   (define-auto-insert "Roam/.+\\.org?$" ["org-roam-mode/defaultRoam.org" marty/autoinsert-yas-expand])
  382.   (define-auto-insert "masons/[^/].+\\.org?$" ["org-mode/masonsMeetingMinuets.org" marty/autoinsert-yas-expand])
  383.   (define-auto-insert "daily/[^/].+\\.org?$" ["org-roam-mode/defaultRoamDaily.org" marty/autoinsert-yas-expand]))
  384.  
  385.  
  386. ;;;;; Completion
  387.  
  388. (setq  completion-styles '(orderless basic substring partial-compltion  flex))
  389. (setq  read-file-name-completion-ignore-case t)
  390. (setq  read-buffer-completion-ignore-case t)
  391. (setq  completion-ignore-case t)
  392.  
  393. ;;;;;; Vertico
  394.  
  395. (after! vertico
  396.   (vertico-reverse-mode 1)
  397.   (setq vertico-resize t))
  398.  
  399.  
  400. ;;;;;; Embark
  401. ;; Open files in (Option) after C-; in embark
  402. ;;
  403. (defun my/vsplit-file-open (file)
  404.   "Vertically Split FILE below current."
  405.   (let ((evil-split-window-below t))
  406.     (+evil/window-vsplit-and-follow)
  407.     (find-file file)))
  408.  
  409. (defun my/split-file-open (file)
  410.   "Split Window Below Current opening FILE."
  411.   (let ((evil-split-window-below t))
  412.     (+evil/window-split-and-follow)
  413.     (find-file file)))
  414.  
  415. (map! :after embark
  416.       :map embark-file-map
  417.       "V" 'my/vsplit-file-open
  418.       "X" 'my/split-file-open)
  419.  
  420. ;;;;;; Marginalia
  421.  
  422. (after! marginalia
  423.   (setq marginalia-censor-variables nil)
  424.  
  425.   (defadvice! +marginalia--anotate-local-file-colorful (cand)
  426.     "Just a more colourful version of `marginalia--anotate-local-file'."
  427.     :override #'marginalia--annotate-local-file
  428.     (when-let (attrs (file-attributes (substitute-in-file-name
  429.                                        (marginalia--full-candidate cand))
  430.                                       'integer))
  431.       (marginalia--fields
  432.        ((marginalia--file-owner attrs)
  433.         :width 12 :face 'marginalia-file-owner)
  434.        ((marginalia--file-modes attrs))
  435.        ((+marginalia-file-size-colorful (file-attribute-size attrs))
  436.         :width 7)
  437.        ((+marginalia--time-colorful (file-attribute-modification-time attrs))
  438.         :width 12))))
  439.  
  440.   (defun +marginalia--time-colorful (time)
  441.     (let* ((seconds (float-time (time-subtract (current-time) time)))
  442.            (color (doom-blend
  443.                    (face-attribute 'marginalia-date :foreground nil t)
  444.                    (face-attribute 'marginalia-documentation :foreground nil t)
  445.                    (/ 1.0 (log (+ 3 (/ (+ 1 seconds) 345600.0)))))))
  446.       ;; 1 - log(3 + 1/(days + 1)) % grey
  447.       (propertize (marginalia--time time) 'face (list :foreground color))))
  448.  
  449.   (defun +marginalia-file-size-colorful (size)
  450.     (let* ((size-index (/ (log10 (+ 1 size)) 7.0))
  451.            (color (if (< size-index 10000000) ; 10m
  452.                       (doom-blend 'orange 'green size-index)
  453.                     (doom-blend 'red 'orange (- size-index 1)))))
  454.       (propertize (file-size-human-readable size) 'face (list :foreground color)))))
  455.  
  456.  
  457. ;;;;;; Consult
  458.  
  459. (after! consult
  460.   (evil-collection-init 'consult)
  461.   (set-face-attribute 'consult-file nil :inherit 'consult-buffer)
  462.   (setf (plist-get (alist-get 'perl consult-async-split-styles-alist) :initial) ";"))
  463.  
  464. ;;;;;; Consult-Recoll
  465.  
  466. ;; (defun my-recoll-format (title url mime-type)
  467. ;;   "remove from url the common prefixes /home/jao/{org/doc,doc,..."
  468. ;;   (let* ((u (replace-regexp-in-string "/home/marty/" "" url))
  469. ;;          (u (replace-regexp-in-string
  470. ;;              "\\(doc\\|org/doc\\|.emacs.d/gnus/Mail\\|var/mail\\)/" "" u)))
  471. ;;     (format "%s (%s, %s)"
  472. ;;             (propertize title 'face 'consult-recoll-title-face)
  473. ;;             (propertize u 'face 'consult-recoll-url-face)
  474. ;;             (propertize mime-type 'face 'consult-recoll-mime-face))))
  475.  
  476. ;; (setq consult-recoll-format-candidate #'my-recoll-format)
  477.  
  478. ;;;;; Chezmoi
  479.  
  480. (use-package! chezmoi
  481.   :commands (chezmoi-write
  482.              chezmoi-magit-status
  483.              chezmoi-diff
  484.              chezmoi-ediff
  485.              chezmoi-find
  486.              chezmoi-write-files
  487.              chezmoi-open-other
  488.              chezmoi-template-buffer-display
  489.              chezmoi-mode)
  490.   :config
  491.   ;; Company integration
  492.   (when (modulep! :completion company)
  493.     (defun +chezmoi--company-backend-h ()
  494.       (require 'chezmoi-company)
  495.       (if chezmoi-mode
  496.           (add-to-list 'company-backends 'chezmoi-company-backend)
  497.         (delete 'chezmoi-company-backend 'company-backends)))
  498.  
  499.     (add-hook 'chezmoi-mode-hook #'+chezmoi--company-backend-h))
  500.  
  501.   ;; Integrate with evil mode by toggling template display when entering insert mode.
  502.   (when (modulep! :editor evil)
  503.     (defun +chezmoi--evil-insert-state-enter-h ()
  504.       "Run after evil-insert-state-entry."
  505.       (chezmoi-template-buffer-display nil (point))
  506.       (remove-hook 'after-change-functions #'chezmoi-template--after-change 1))
  507.  
  508.     (defun +chezmoi--evil-insert-state-exit-h ()
  509.       "Run after evil-insert-state-exit."
  510.       (chezmoi-template-buffer-display nil)
  511.       (chezmoi-template-buffer-display t)
  512.       (add-hook 'after-change-functions #'chezmoi-template--after-change nil 1))
  513.  
  514.     (defun +chezmoi--evil-h ()
  515.       (if chezmoi-mode
  516.           (progn
  517.             (add-hook 'evil-insert-state-entry-hook #'+chezmoi--evil-insert-state-enter-h nil 1)
  518.             (add-hook 'evil-insert-state-exit-hook #'+chezmoi--evil-insert-state-exit-h nil 1))
  519.         (progn
  520.           (remove-hook 'evil-insert-state-entry-hook #'+chezmoi--evil-insert-state-enter-h 1)
  521.           (remove-hook 'evil-insert-state-exit-hook #'+chezmoi--evil-insert-state-exit-h 1))))
  522.  
  523.     (add-hook 'chezmoi-mode-hook #'+chezmoi--evil-h)))
  524.  
  525. (map! :leader :prefix "a"
  526.       (:prefix ("c" . "chezmoi")
  527.        :desc "Magit status" "g" #'chezmoi-magit-status
  528.        :desc "Write"        "w" #'chezmoi-write
  529.        :desc "Write files"  "W" #'chezmoi-write-files
  530.        :desc "Find source"  "f" #'chezmoi-find
  531.        :desc "Sync files"   "s" #'chezmoi-sync-files
  532.        :desc "Diff"         "d" #'chezmoi-diff
  533.        :desc "EDiff"        "e" #'chezmoi-ediff
  534.        :desc "Open other"   "o" #'chezmoi-open-other))
  535.  
  536. ;;;;; Circe
  537.  
  538. (after! circe
  539.   (setq circe-use-cycle-completion t)
  540.   (setq circe-reduce-lurker-spam t)
  541.   (setq circe-format-server-topic "*** Topic change by {userhost}: {topic-diff}")
  542.   (setq circe-format-say "{nick:-16s} {body}")
  543.   (circe-set-display-handler "JOIN" (lambda (&rest ignored) nil))
  544.  
  545.   (set-irc-server! "irc.libera.chat"
  546.     `(:tls t
  547.       :port 6697
  548.       :nick "snuffop"
  549.       :sasl-username ,(+pass-get-user   "irc/libera.chat")
  550.       :sasl-password ,(+pass-get-secret "irc/libera.chat")
  551.       :channels ("#doomemacs" "#b0fh"))))
  552.  
  553. ;;;;; Consult-Tramp
  554.  
  555. (use-package! consult-tramp
  556.   :commands (consult-tramp)
  557.   :config
  558.   (setq consult-tramp-extra-targets '("/sshx:mail.dabuke.com|sudo:mail.dabuke.com:/")))
  559.  
  560. ;;;;; Company
  561.  
  562. (after! company
  563.   (setq company-idle-delay 0.2
  564.         company-minimum-prefix-length 1
  565.         company-tooltip-align-annotations t
  566.         company-selection-wrap-around t
  567.         company-backends '(company-capf company-dabbrev company-files company-yasnippet)
  568.         company-global-modes '(not comint-mode erc-mode message-mode help-mode gud-mode)))
  569.  
  570. ;;;;; DIRed
  571.  
  572. (define-key! dired-mode-map
  573.   (kbd "C-t") #'marty/dired-copy-filename-as-tsfile-link)
  574.  
  575. (setq delete-by-moving-to-trash t
  576.       trash-directory "~/.local/share/Trash/files/")
  577.  
  578. ;;;;; Dirvish
  579.  
  580. (use-package! diredfl
  581.   :hook (dired-mode . diredfl-mode)
  582.   :hook (dirvish-directory-view-mode . diredfl-mode))
  583.  
  584.  
  585. (use-package! dirvish
  586.   :defer t
  587.   :general (dired-mode-map "C-c C-r" #'dirvish-rsync)
  588.   :after-call dired-noselect dired dired-jump
  589.   :custom
  590.   (dirvish-quick-access-entries
  591.    '(("." "~/.config/"                 "config")
  592.      ("h" "~/"                         "Home")
  593.      ("c" "~/.local/share/chezmoi/"    "chezmoi")
  594.      ("d" "~/Downloads/"               "Downloads")
  595.      ("p" "~/Nextcloud/Pictures"       "Pictures")
  596.      ("s" "~/Source"                   "Source")
  597.      ("S" "~/Sites"                    "Sites")
  598.      ("t" "~/.local/share/Trash/files" "TrashCan")))
  599.   :config
  600.   (dirvish-override-dired-mode)
  601.   (setq dirvish-cache-dir (concat doom-cache-dir "dirvish/"))
  602.   (set-popup-rule! "^ ?\\*Dirvish.*" :ignore t)
  603.   (map! :map dirvish-mode-map
  604.         :n  "?"   #'dirvish-dispatch
  605.         :n  "q"   #'dirvish-quit
  606.         :ng "a"   #'dirvish-quick-access
  607.         :ng "f"   #'dirvish-file-info-menu
  608.         :ng "y"   #'dirvish-yank-menu
  609.         :ng "s"   #'dirvish-quicksort
  610.         :ng "TAB" #'dirvish-subtree-toggle
  611.         :ng "M-t" #'dirvish-layout-toggle
  612.         :ng "M-b" #'dirvish-history-go-backward
  613.         :ng "M-f" #'dirvish-history-go-forward
  614.         :ng "M-n" #'dirvish-narrow
  615.         :ng "M-m" #'dirvish-mark-menu
  616.         :ng "M-s" #'dirvish-setup-menu
  617.         :ng "M-e" #'dirvish-emerge-menu)
  618.   (setq dirvish-attributes '(file-size collapse)
  619.         dirvish-mode-line-format
  620.         '(:left (sort file-time symlink) :right (omit yank index)))
  621.   (setq dirvish-attributes nil
  622.         dirvish-use-header-line nil
  623.         dirvish-mode-line-format nil
  624.         dirvish-hide-details nil
  625.         dirvish-hide-cursor nil)
  626.   (when (modulep! :ui vc-gutter)
  627.     (push 'vc-state dirvish-attributes))
  628.   (when (modulep! +icons)
  629.     (appendq! dirvish-attributes '(all-the-icons subtree-state))))
  630.  
  631. ;;;;; ebuku
  632.  
  633. (use-package! ebuku
  634.   :commands ebuku
  635.   :init
  636.   (+evil-collection-init 'ebuku)
  637.   :config
  638.   (evil-collection-ebuku-setup))
  639.  
  640. ;;;;; evil
  641.  
  642. (global-evil-matchit-mode 1)
  643.  
  644. ;;;;; Evil keys in DIRed
  645.  
  646. (map! :after dired
  647.       :map dired-mode-map
  648.       :localleader
  649.       :desc "Create TSfile link"   "t"  #'marty/dired-copy-filename-as-tsfile-link)
  650.  
  651. (evil-define-key 'normal dired-mode-map
  652.   (kbd "M-RET") 'dired-display-file
  653.   (kbd "h") 'dired-up-directory
  654.   (kbd "l") 'dired-view-file
  655.   (kbd "m") 'dired-mark
  656.   (kbd "t") 'dired-toggle-marks
  657.   (kbd "u") 'dired-unmark
  658.   (kbd "C") 'dired-do-copy
  659.   (kbd "D") 'dired-do-delete
  660.   (kbd "J") 'dired-goto-file
  661.   (kbd "M") 'dired-chmod
  662.   (kbd "O") 'dired-chown
  663.   (kbd "P") 'dired-do-print
  664.   (kbd "R") 'dired-do-rename
  665.   (kbd "T") 'dired-do-touch
  666.   (kbd "Y") 'dired-copy-filenamecopy-filename-as-kill ; copies filename to kill ring.
  667.   (kbd "+") 'dired-create-directory
  668.   (kbd "-") 'dired-up-directory
  669.   (kbd "% l") 'dired-downcase
  670.   (kbd "% u") 'dired-upcase
  671.   (kbd "* %") 'dired-mark-files-regexp
  672.   (kbd "* .") 'dired-mark-extension
  673.   (kbd "* /") 'dired-mark-directories
  674.   (kbd "; d") 'epa-dired-do-decrypt
  675.   (kbd "; e") 'epa-dired-do-encrypt
  676.   (kbd "; d") 'epa-dired-do-decrypt
  677.   (kbd "; e") 'epa-dired-do-encrypt)
  678.  
  679. (add-hook 'peep-dired-hook 'evil-normalize-keymaps)
  680. ;;
  681. ;; get file icons in dired
  682. (add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
  683. ;; with dired-open plugin, you can launch external programs for certain extensions
  684. ;; for example, i set all .png files to open in 'sxiv' and all .mp4 files to open in 'mpv'
  685. (setq dired-open-extensions '(("gif" . "sxiv")
  686.                               ("jpg" . "sxiv")
  687.                               ("png" . "sxiv")
  688.                               ("mkv" . "mpv")
  689.                               ("mp4" . "mpv")))
  690.  
  691. ;;;;; EWW
  692.  
  693. (map! :leader
  694.       :desc "Search web for text between BEG/END"
  695.       "s w" #'eww-search-words
  696.       (:prefix ("e" . "evaluate/ERC/EWW")
  697.        :desc "Eww web browser" "w" #'eww
  698.        :desc "Eww reload page" "R" #'eww-reload))
  699. ;;;;; EROS
  700.  
  701. (setq eros-eval-result-prefix "⟹ ")
  702.  
  703. ;;;;; Flycheck
  704.  
  705. (use-package! flycheck-org-vale
  706.   :after org flycheck)
  707.  
  708. (use-package flycheck-title
  709.   :after flycheck
  710.   :config
  711.   (flycheck-title-mode))
  712.  
  713. ;;;;; Google Translate
  714.  
  715. (use-package! google-translate
  716.   :defer t
  717.   :bind ("C-c T"  . 'google-translate-smooth-translate))
  718.  
  719.  
  720. ;;;;; Info-colors
  721.  
  722. (use-package! info-colors
  723.   :commands (info-colors-fontify-node)
  724.   :init
  725.   (add-hook 'Info-selection-hook 'info-colors-fontify-node))
  726.  
  727. ;;;;; I3 window manager config
  728.  
  729. ;; Syntax highlighting for i3 config
  730. (use-package! i3wm-config-mode
  731.   :defer t)
  732.  
  733. ;;;;; keychain-environment
  734.  
  735. (use-package! keychain-environment
  736.   :init
  737.   (keychain-refresh-environment))
  738.  
  739. ;;;;; Magit
  740.  
  741. (after! magit
  742.   (add-hook 'git-commit-setup-hook 'git-commit-turn-on-flyspell)
  743.   (magit-todos-mode 1)
  744.   (magit-delta-mode +1)
  745.   (add-hook 'magit-add-section-hook 'magit-status-selections-hook
  746.                           'magit-insert-modules
  747.                           'magit-insert-unpulled-from-upstream)
  748.   (setq magit-module-sections-nested nil)
  749.   (setq magit-diff-refine-hunk 'all)
  750.   (setq magit-revision-show-gravatars '("^author:     " . "^commit:     ")))
  751.  
  752. ;;;;; Markdown
  753.  
  754. (custom-set-faces
  755.  '(markdown-header-face ((t (:inherit font-lock-function-name-face :weight bold :family "variable-pitch"))))
  756.  '(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.7))))
  757.  '(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.6))))
  758.  '(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.5))))
  759.  '(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.4))))
  760.  '(markdown-header-face-5 ((t (:inherit markdown-header-face :height 1.3))))
  761.  '(markdown-header-face-6 ((t (:inherit markdown-header-face :height 1.2)))))
  762.  
  763. ;;;;;; Grip
  764.  
  765. (after! grip-mode
  766.   (setq grip-github-password (auth-source-pass-get 'secret "Application/github.com/emacs-token")))
  767.  
  768. ;;;;; mixed pitch
  769.  
  770. (use-package! mixed-pitch
  771.   :hook
  772.   (org-mode . mixed-pitch-mode))
  773.  
  774. ;;;;; neopastebin
  775.  
  776. (use-package! neopastebin
  777.   :commands
  778.   pastebin-list-buffer-refresh
  779.   pastebin-new
  780.   :config
  781.   (let ((credentials (auth-source-user-and-password "pastebin.com")))
  782.     (pastebin-create-login :username "snuffop"
  783.                            :dev-key (car credentials)
  784.                            :password (cadr credentials))))
  785.  
  786. ;;;;; nginx
  787.  
  788. (use-package! company-nginx
  789.   :after nginx-mode
  790.   :config
  791.   (add-hook 'nginx-mode-hook (lambda () (add-to-list 'company-backends #'company-nginx))))
  792.  
  793. (use-package! nginx-mode
  794.   :commands (nginx-mode)
  795.   :defer t)
  796.  
  797. ;;;;; outshine
  798.  
  799. (use-package! outshine
  800.   :hook (prog-mode . outshine-mode)
  801.   :config
  802.   (map! :map emacs-lisp-mode-map
  803.         "TAB" #'outshine-cycle)
  804.   (add-hook 'prog-mode-hook #'outline-minor-mode)
  805.   (add-hook 'outline-minor-mode-hook #'outshine-mode)
  806.   (defvar outline-minor-mode-prefix "\M-#"))
  807.  
  808. ;;;;; paperless
  809.  
  810. (use-package! paperless
  811.   :commands (paperless)
  812.   :config
  813.   (setq paperless-capture-directory "~/Nextcloud/Documents/INBOX")
  814.   (setq paperless-root-directory "~/Nextcloud/Documents")
  815.   (map! :after paperless
  816.         :map paperless-mode-map
  817.         :localleader
  818.         "v" #'paperless-display
  819.         "f" #'paperless-file
  820.         "x" #'paperless-execute
  821.         "D" #'paperless-delete
  822.         "r" #'paperless-rename
  823.         "s" #'paperless-scan-directories))
  824.  
  825. ;;;;; projectile
  826.  
  827. (after! projectile
  828.   (setq projectile-indexing-method 'alien)
  829.   (setq projectile-project-search-path '("~/Source" "~/Source/Joyent" "~/Sites" "~/.local/share" "~/.config"))
  830.   (setq projectile-ignored-projects '("~/" "/tmp" "~/.emacs.d/.local/straight/repos/"))
  831.   (defun projectile-ignored-project-function (filepath)
  832.     "Return t if FILEPATH is within any of `projectile-ignored-projects'"
  833.     (or (mapcar (lambda (p) (s-starts-with-p p filepath)) projectile-ignored-projects))))
  834.  
  835. ;;;;; Pop Up
  836.  
  837. (set-popup-rules! '(("^\\*helpful" :size 0.35)
  838.                     ("^\\*Ibuffer\\*$" :size 0.35)
  839.                     ("^\\*info.*" :size 80 :side right)
  840.                     ("^\\*Man.*" :size 80 :side right)
  841.                     ("^\\*keycast.*" :size 50 :side right)
  842.                     ("^\\*Customize" :actions display-buffer)
  843.                     ("^\\*edit-indirect" :size 0.6)
  844.                     ("^\\*YASnippet Tables\\*$" :size 0.35)
  845.                     ("^\\*grep\\*$" :size 0.35)
  846.                     ("^\\*pytest\\*" :size 0.35)
  847.                     ("^\\*Anaconda\\*$" :size 0.35)
  848.                     ("\\*.*server log\\*$" :side top :size 0.20 :select nil)
  849.                     ((lambda (buf _) (with-current-buffer buf (eq major-mode 'forge-topic-mode))) :size 0.35)
  850.                     ))
  851. ;;;;; SPELL
  852.  
  853. (after! flyspell
  854.   (setq ispell-personal-dictionary (expand-file-name "dictionary/personal" doom-private-dir))
  855.   (setq flyspell-lazy-idle-seconds 0.5))
  856.  
  857. ;;;;; systemd mode
  858.  
  859. (use-package! systemd
  860.   :commands (systemd-mode)
  861.   :mode "\\.service\\'"
  862.   :config
  863.   (map! :map systemd-mode
  864.         :localleader
  865.         :prefix ("h" . "help")
  866.         "d" #'systemd-doc-directives
  867.         "o" #'systemd-doc-open))
  868.  
  869. ;;;;; TRAMP
  870.  
  871. (after! tramp
  872.   (setenv "SHELL" "/bin/bash")
  873.   (setq tramp-shell-prompt-pattern "\\(?:^\\|\\)[^]#$%>\n]*#?[]#$%>] *\\(�\\[[0-9;]*[a-zA-Z] *\\)*"))
  874.  
  875. ;;;;; TREEMACS
  876.  
  877. (after! treemacs
  878.   (setq +treemacs-git-mode 'extended)
  879.   (setq treemacs-width 30))
  880.  
  881. ;;;;; vimrc-mode
  882.  
  883. (use-package! vimrc-mode
  884.   :commands vimrc-mode)
  885. (add-to-list 'auto-mode-alist '("\\.vim\\(rc\\)?\\'" . vimrc-mode))
  886.  
  887. ;;;;; vlf
  888.  
  889. (use-package! vlf-setup
  890.   :defer-incrementally  vlf-tune vlf-base vlf-write vlf-search vlf-occur vlf-follow vlf-ediff vlf)
  891.  
  892. ;;;;; wakatime
  893.  
  894. (defun marty/startwakatime ()
  895.   "Start wakatime mode."
  896.   (interactive)
  897.   (setq wakatime-api-key (auth-source-pass-get 'secret "Application/wakatime/apikey"))
  898.   (global-wakatime-mode))
  899.  
  900. (use-package! wakatime-mode
  901.   :config
  902.   (cond (IS-MAC (setq wakatime-cli-path "/usr/local/bin/wakatime-cli"))
  903.         (IS-LINUX (setq wakatime-cli-path "/usr/bin/wakatime"))))
  904.  
  905. (add-hook 'doom-first-buffer-hook  #'marty/startwakatime)
  906.  
  907. ;;;;; Whichkey
  908.  
  909. (setq which-key-idle-delay 1) ;; I need the help, I really do
  910. (setq which-key-idle-secondary-delay 0.05)
  911. (setq which-key-allow-multiple-replacements t)
  912. (after! which-key
  913.   (pushnew!
  914.    which-key-replacement-alist
  915.    '(("" . "\\`+?evil[-:]?\\(?:a-\\)?\\(.*\\)") . (nil . "◂\\1"))
  916.    '(("\\`g s" . "\\`evilem--?motion-\\(.*\\)") . (nil . "◃\\1"))))
  917.  
  918. ;; tell which-key to behave
  919. (setq which-key-use-C-h-commands t
  920.       prefix-help-command #'which-key-C-h-dispatch)
  921.  
  922. (defadvice! fix-which-key-dispatcher-a (fn &rest args)
  923.   "Fix which-key Dispatcher."
  924.   :around #'which-key-C-h-dispatch
  925.   (let ((keys (this-command-keys-vector)))
  926.     (if (equal (elt keys (1- (length keys))) ?\?)
  927.         (let ((keys (which-key--this-command-keys)))
  928.           (embark-bindings (seq-take keys (1- (length keys)))))
  929.       (apply fn args))))
  930.  
  931. ;;;;; xeft
  932.  
  933. (use-package! xeft
  934.   :defer t
  935.   :config
  936.   (setq xeft-directory "~/Nextcloud/Notes/org")
  937.   (setq xeft-database "~/.local/share/Doom/.local/cache")
  938.   (setq xeft-recursive t)
  939.   (map! :after xeft
  940.         :map xeft-mode-map
  941.         :n "C-n" #'xeft-next
  942.         :n "C-p" #'xeft-previous
  943.         :n "R"   #'xeft-full-reindex
  944.         :n "c"   #'xeft-create-note
  945.         :n "j"   #'xeft-next
  946.         :n "k"   #'xeft-previous
  947.         :n "r"   #'xeft-refresh))
  948.  
  949. ;;;;; zeal-at-point
  950.  
  951. (use-package! zeal-at-point
  952.   :defer t
  953.   :bind  ("C-c z" . zeal-at-point)
  954.   :config
  955.   (add-to-list 'zeal-at-point-mode-alist '(python-mode . "python")))
  956.  
  957.  
  958. ;;;; LOAD FILES
  959. (load! "functions.el")
  960. (load! "org-mode.el")
  961. (load! "mu4e.el")
  962. (load! "abbrev.el")
  963.  
  964. ;;;; CUSTOM
  965.  
  966. (when (file-directory-p custom-file)
  967.   (message (concat "Please delete " custom-file ". And customization in config.el and +ui.el.")))
  968.  
  969. (custom-set-variables
  970.  '(warning-suppress-log-types '((lsp-mode) (iedit)))
  971.  '(warning-suppress-types '((iedit))))
  972.  
  973. (provide 'config)
  974. ;;; config.el ends here
  975.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement