config.el 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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. doom-theme 'nimbus
  10. doom-font (font-spec :family "Iosevka" :size 16)
  11. doom-big-font (font-spec :family "Iosevka" :size 22))
  12. ;;
  13. ;; Host-specific config
  14. (pcase (system-name)
  15. ("halimede"
  16. (font-put doom-font :size 9)) ; smaller display
  17. ("triton"
  18. ;; I've swapped these keys on my keyboard
  19. (setq x-super-keysym 'meta
  20. x-meta-keysym 'super)))
  21. (when IS-LINUX
  22. (font-put doom-font :weight 'semi-light))
  23. (when IS-MAC
  24. (setq ns-use-thin-smoothing t))
  25. ;;
  26. ;; Keybinds
  27. (map! :m "M-j" '+hlissner:multi-next-line
  28. :m "M-k" '+hlissner:multi-previous-line
  29. ;; Easier window movement
  30. :n "C-h" 'evil-window-left
  31. :n "C-j" 'evil-window-down
  32. :n "C-k" 'evil-window-up
  33. :n "C-l" 'evil-window-right
  34. (:map evil-treemacs-state-map
  35. "C-h" 'evil-window-left
  36. "C-l" 'evil-window-right)
  37. (:when IS-LINUX
  38. "s-x" #'execute-extended-command
  39. "s-;" #'eval-expression
  40. ;; use super for window/frame navigation/manipulation
  41. "s-w" #'delete-window
  42. "s-W" #'delete-frame
  43. "s-n" #'+default/new-buffer
  44. "s-N" #'make-frame
  45. "s-q" (if (daemonp) #'delete-frame #'evil-quit-all)
  46. ;; Restore OS undo, save, copy, & paste keys (without cua-mode, because
  47. ;; it imposes some other functionality and overhead we don't need)
  48. "s-z" #'undo
  49. "s-c" (if (featurep 'evil) #'evil-yank #'copy-region-as-kill)
  50. "s-v" #'yank
  51. "s-s" #'save-buffer
  52. ;; Buffer-local font scaling
  53. "s-+" (λ! (text-scale-set 0))
  54. "s-=" #'text-scale-increase
  55. "s--" #'text-scale-decrease
  56. ;; Conventional text-editing keys
  57. "s-a" #'mark-whole-buffer
  58. :gi [s-return] #'+default/newline-below
  59. :gi [s-S-return] #'+default/newline-above
  60. :gi [s-backspace] #'doom/backward-kill-to-bol-and-indent)
  61. :leader
  62. (:prefix "f"
  63. :desc "Find file in dotfiles" "t" #'+hlissner/find-in-dotfiles
  64. :desc "Browse dotfiles" "T" #'+hlissner/browse-dotfiles)
  65. (:prefix "t"
  66. :desc "Toggle visual line mode" "v" #'visual-line-mode
  67. :desc "Toggle auto fill mode" "a" #'auto-fill-mode
  68. :desc "Switch themes" "t" #'counsel-load-theme)
  69. (:prefix "o"
  70. :desc "Elfeed feed reader" "f" #'elfeed)
  71. (:prefix "p"
  72. :desc "Black buffer" "b" #'blacken-buffer)
  73. (:prefix "y"
  74. :desc "Yank pop!" "p" #'counsel-yank-pop
  75. :desc "Git yank link" "g" #'git-link))
  76. ;; app/rss
  77. (add-hook! 'elfeed-show-mode-hook (text-scale-set 1.5))
  78. ;;
  79. ;; Modules
  80. (setq +workspaces-switch-project-function #'ignore
  81. +format-on-save-enabled-modes '(python-mode)
  82. +pretty-code-enabled-modes '(emacs-lisp-mode org-mode))
  83. ;; app/rss
  84. (add-hook! 'elfeed-show-mode-hook (text-scale-set 2))
  85. ;; emacs/eshell
  86. (after! eshell
  87. (set-eshell-alias!
  88. "f" "(other-window 1) && find-file $1"
  89. "l" "ls -lh"
  90. "d" "dired $1"
  91. "gl" "(call-interactively 'magit-log-current)"
  92. "gs" "magit-status"
  93. "gc" "magit-commit"))
  94. ;; tools/magit
  95. (setq magit-repository-directories '(("~/work" . 2))
  96. magit-save-repository-buffers nil
  97. transient-values '((magit-commit "--gpg-sign=5F6C0EA160557395")
  98. (magit-rebase "--autosquash" "--gpg-sign=5F6C0EA160557395")
  99. (magit-pull "--rebase" "--gpg-sign=5F6C0EA160557395")))
  100. ;; lang/org
  101. (setq org-directory (expand-file-name "~/org/")
  102. org-journal-dir "~/org/journal/")
  103. ;; Some appearance things
  104. (setq org-agenda-block-separator ""
  105. org-fontify-whole-heading-line t
  106. org-fontify-done-headline t
  107. org-fontify-quote-and-verse-blocks t
  108. org-pretty-entities t
  109. org-ellipsis " ▼ "
  110. ;; The standard unicode characters are usually misaligned depending on the
  111. ;; font. This bugs me. Markdown #-marks for headlines are more elegant.
  112. org-bullets-bullet-list '("#"))
  113. (after! org
  114. (setq org-capture-templates '(("i" "Send to inbox" entry (file+headline "~/org/inbox.org" "Inbox") "* TODO %?\n")
  115. ("w" "Work diary entry" entry (file "~/org/work_diary.org")
  116. "* %u\n%?\n"))
  117. org-use-tag-inheritance nil
  118. org-tags-exclude-from-inheritance '("PROJECT" "SPRINT")
  119. ;org-stuck-projects '("+PROJECT/-MAYBE-DONE" ("TODO" "NEXT") nil "\\<IGNORE\\>")
  120. ;org-tag-alist '(("PROJECT" . ?p) ("@home" . ?h) ("@night" . ?n) ("@selectp" . ?s)
  121. ; ("@errand" . ?e) ("@read" . ?r) ("@work" . ?w) ("@family" . ?f))
  122. ;org-modules '(org-drill org-clock org-id org-info org-habit org-protocol org-annotate-file
  123. ; org-eval org-expiry org-contacts org-man org-notmuch org-collector org-panel
  124. ; org-screen org-toc)
  125. org-refile-targets '(("~/org/todo.org" :maxlevel . 2)
  126. ("~/org/someday.org" :maxlevel . 2)
  127. ("~/org/town.org" :maxlevel . 2)
  128. ("~/org/personal.org" :maxlevel . 2)
  129. ("~/org/elation.org" :maxlevel . 2))
  130. )
  131. (setq org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "WAITING(w)" "MAYBE(m)" "|" "DONE(d)"))))
  132. ;; Org specific keybindings
  133. (map! :leader
  134. (:prefix "a"
  135. :desc "Org Agenda" "o" #'org-agenda
  136. :desc "Org open link" "l" #'org-open-at-point
  137. :desc "Sync gcal with org" "g" #'org-gcal-sync
  138. :desc "Set task deadline" "d" #'org-deadline
  139. :desc "Schedule task" "s" #'org-schedule
  140. :desc "New journal entry" "j" #'org-journal-new-entry
  141. :desc "Org set property" "p" #'org-set-progerty
  142. :desc "Save all org buffers" "a" #'org-save-all-org-buffers
  143. :desc "Org todo" "t" #'org-todo
  144. :desc "Org set tags" "T" #'org-set-tags-command))
  145. ;;; Setup sending email with msmtp
  146. (setq send-mail-function 'sendmail-send-it
  147. sendmail-program "/usr/local/bin/msmtp"
  148. mail-specify-envelope-from t
  149. message-sendmail-envelope-from 'header
  150. mail-envelope-from 'header)