config.el 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. ;;; ~/.config/doom/config.el -*- lexical-binding: t; -*-
  2. ;; (defvar xdg-data (getenv "XDG_DATA_HOME"))
  3. ;; (defvar xdg-bin (getenv "XDG_BIN_HOME"))
  4. ;; (defvar xdg-cache (getenv "XDG_CACHE_HOME"))
  5. ;; (defvar xdg-config (getenv "XDG_CONFIG_HOME"))
  6. (add-to-list 'default-frame-alist '(inhibit-double-buffering . t))
  7. (setq user-full-name "Colin Powell"
  8. user-mail-address "colin@onec.me")
  9. (setq doom-theme 'manoj-dark)
  10. (if (display-graphic-p)
  11. (setq doom-theme 'kaolin-temple))
  12. ;; Fonts
  13. (setq doom-font (font-spec :family "IBM Plex Mono" :size 14))
  14. (setq doom-big-font (font-spec :family "IBM Plex Mono" :size 21))
  15. ;; Host-specific config
  16. (pcase (system-name)
  17. ("prometheus"
  18. (font-put doom-font :size 14)
  19. (font-put doom-big-font :size 20)) ; smaller display
  20. ("triton"
  21. ;; I've swapped these keys on my keyboard
  22. (setq x-super-keysym 'meta
  23. x-meta-keysym 'super)))
  24. (set-frame-parameter nil 'internal-border-width 10)
  25. (when IS-MAC
  26. (setq ns-use-thin-smoothing t))
  27. ;;
  28. ;; Keybinds
  29. ;;:m "M-j" '+hlissner:multi-next-line
  30. ;;:m "M-k" '+hlissner:multi-previous-line
  31. (map! ;; Easier window movement
  32. :n "C-h" 'evil-window-left
  33. :n "C-j" 'evil-window-down
  34. :n "C-k" 'evil-window-up
  35. :n "C-l" 'evil-window-right
  36. (:map evil-treemacs-state-map
  37. "C-h" 'evil-window-left
  38. "C-l" 'evil-window-right)
  39. (:when IS-LINUX
  40. "s-x" #'execute-extended-command
  41. "s-;" #'eval-expression
  42. ;; use super for window/frame navigation/manipulation
  43. "s-w" #'delete-window
  44. "s-W" #'delete-frame
  45. "s-n" #'+default/new-buffer
  46. "s-j" #'org-move-subtree-down
  47. "s-k" #'org-move-subtree-up
  48. "s-N" #'make-frame
  49. "s-q" (if (daemonp) #'delete-frame #'evil-quit-all)
  50. ;; Restore OS undo, save, copy, & paste keys (without cua-mode, because
  51. ;; it imposes some other functionality and overhead we don't need)
  52. "s-z" #'undo
  53. "s-c" (if (featurep 'evil) #'evil-yank #'copy-region-as-kill)
  54. "s-v" #'yank
  55. "s-s" #'save-buffer
  56. ;; Buffer-local font scaling
  57. "s-+" (λ! (text-scale-set 0))
  58. "s-=" #'text-scale-increase
  59. "s--" #'text-scale-decrease
  60. ;; Conventional text-editing keys
  61. "s-a" #'mark-whole-buffer
  62. :gi [s-return] #'+default/newline-below
  63. :gi [s-S-return] #'+default/newline-above
  64. :gi [s-backspace] #'doom/backward-kill-to-bol-and-indent)
  65. :leader
  66. (:prefix "j"
  67. :desc "Dumb jump to def" "g" #'dumb-jump-go
  68. :desc "Dumb jump back" "b" #'dumb-jump-back)
  69. (:prefix "f"
  70. :desc "Find file in dotfiles" "t" #'+hlissner/find-in-dotfiles
  71. :desc "Browse dotfiles" "T" #'+hlissner/browse-dotfiles)
  72. (:prefix "t"
  73. :desc "Switch themes" "t" #'load-theme)
  74. (:prefix "o"
  75. :desc "Open imenu" "i" #'lsp-ui-imenu
  76. :desc "Elfeed feed reader" "f" #'elfeed
  77. :desc "Lobste.rs" "l" #'ivy-lobsters
  78. :desc "w3m goto URL" "g" #'w3m-goto-url
  79. :desc "w3m search" "s" #'w3m-search
  80. :desc "Compose an email" "c" #'notmuch-mua-new-mail)
  81. (:prefix "l"
  82. :desc "MPD Open playlist" "o" #'mpdel-playlist-open
  83. :desc "MPD Remove at point" "d" #'mpdel-playlist-delete
  84. :desc "MPD Start at point" "s" #'mpdel-playlist-play
  85. :desc "MPD Next track" "n" #'libmpdel-playback-next
  86. :desc "MPD Previous track" "p" #'libmpdel-playback-previous)
  87. (:prefix "b"
  88. :desc "Black format buffer" "f" #'blacken-buffer
  89. :desc "Links in buffer" "l" #'ace-link-org)
  90. (:prefix "/"
  91. :desc "Search the web" "w" #'web-search
  92. :desc "Search all the things" "g" #'deadgrep)
  93. (:prefix "y"
  94. :desc "Yank pop!" "p" #'counsel-yank-pop
  95. :desc "Git yank link" "g" #'git-link))
  96. ;; app/search
  97. (after! web-search
  98. (push '("Searx" "http://search.unbl.ink/?q=%s")
  99. web-search-providers)
  100. (setq web-search-default-provider "Searx"))
  101. (def-package! org-alert
  102. :commands (org-alert-enable))
  103. (after! org-alert-mode
  104. (setq alert-default-style 'libnotify))
  105. ;;
  106. ;; Modules
  107. (setq +workspaces-switch-project-function #'ignore
  108. +format-on-save-enabled-modes '(python-mode)
  109. +pretty-code-enabled-modes '(emacs-lisp-mode org-mode))
  110. ;; app/mpdel
  111. ;;
  112. (setq libmpdel-hostname "play.unbl.ink")
  113. ;; app/rss
  114. (add-hook! 'elfeed-show-mode-hook (text-scale-set 1.5))
  115. (setq rmh-elfeed-org-files (list "~/org/elfeed.org")
  116. elfeed-search-filter "@1-week-ago +unread ")
  117. ;; emacs/eshell
  118. (after! eshell
  119. (set-eshell-alias!
  120. "f" "(other-window 1) && find-file $1"
  121. "l" "ls -lh"
  122. "d" "dired $1"
  123. "gl" "(call-interactively 'magit-log-current)"
  124. "gs" "magit-status"
  125. "gc" "magit-commit"))
  126. (add-hook 'prog-mode-hook #'goto-address-mode) ;; Linkify links!
  127. ;; tools/deft
  128. (setq deft-extensions '("org"))
  129. (setq deft-directory "~/org")
  130. ;; tools/magit
  131. (setq magit-repository-directories '(("~/work" . 2))
  132. magit-save-repository-buffers nil)
  133. ;;; Setup sending email with msmtp
  134. (setq send-mail-function 'sendmail-send-it
  135. sendmail-program "/usr/local/bin/msmtp"
  136. mail-specify-envelope-from t
  137. message-sendmail-f-is-evil t
  138. message-sendmail-envelope-from 'header
  139. message-sendmail-extra-arguments '("--read-envelope-from")
  140. mail-envelope-from 'header)
  141. ;;; It is the opposite of fill-paragraph
  142. (defun unfill-paragraph ()
  143. "Takes a multi-line paragraph and makes it into a single line of text."
  144. (interactive)
  145. (let ((fill-column (point-max)))
  146. (fill-paragraph nil)))
  147. ;; Handy key definition
  148. (define-key global-map "\M-z" 'unfill-paragraph)
  149. (achievements-mode)
  150. (nyan-mode)
  151. (add-to-list 'auto-mode-alist '("\\.plantuml\\'" . planetuml-mode))
  152. (load! "+ui.el")
  153. (load! "+org") ;; Org mode stuff like todos and rebindings
  154. (load! "+org-cal")
  155. ;(load! "+elfeed")
  156. (load! "+mail") ;; Mail stuff
  157. (load! "+ranger")
  158. (load! "+wttrin") ;; Weather config
  159. (defun mpdel-playlist-play ()
  160. "Start playing the song at point."
  161. (interactive)
  162. (if (derived-mode-p 'mpdel-playlist-current-playlist-mode)
  163. (libmpdel-play-song (navigel-entity-at-point))
  164. (mpdel-core-insert-current-playlist)))
  165. (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))