;;; ~/.config/doom/config.el -*- lexical-binding: t; -*- ;; (defvar xdg-data (getenv "XDG_DATA_HOME")) ;; (defvar xdg-bin (getenv "XDG_BIN_HOME")) ;; (defvar xdg-cache (getenv "XDG_CACHE_HOME")) ;; (defvar xdg-config (getenv "XDG_CONFIG_HOME")) (add-to-list 'default-frame-alist '(inhibit-double-buffering . t)) (setq user-full-name "Colin Powell" user-mail-address "colin@onec.me" doom-theme 'nimbus doom-font (font-spec :family "Iosevka" :size 16) doom-big-font (font-spec :family "Iosevka" :size 22)) ;; ;; Host-specific config (pcase (system-name) ("halimede" (font-put doom-font :size 9)) ; smaller display ("triton" ;; I've swapped these keys on my keyboard (setq x-super-keysym 'meta x-meta-keysym 'super))) (when IS-LINUX (font-put doom-font :weight 'semi-light)) (when IS-MAC (setq ns-use-thin-smoothing t)) ;; ;; Keybinds (map! :m "M-j" '+hlissner:multi-next-line :m "M-k" '+hlissner:multi-previous-line ;; Easier window movement :n "C-h" 'evil-window-left :n "C-j" 'evil-window-down :n "C-k" 'evil-window-up :n "C-l" 'evil-window-right (:map evil-treemacs-state-map "C-h" 'evil-window-left "C-l" 'evil-window-right) (:when IS-LINUX "s-x" #'execute-extended-command "s-;" #'eval-expression ;; use super for window/frame navigation/manipulation "s-w" #'delete-window "s-W" #'delete-frame "s-n" #'+default/new-buffer "s-N" #'make-frame "s-q" (if (daemonp) #'delete-frame #'evil-quit-all) ;; Restore OS undo, save, copy, & paste keys (without cua-mode, because ;; it imposes some other functionality and overhead we don't need) "s-z" #'undo "s-c" (if (featurep 'evil) #'evil-yank #'copy-region-as-kill) "s-v" #'yank "s-s" #'save-buffer ;; Buffer-local font scaling "s-+" (λ! (text-scale-set 0)) "s-=" #'text-scale-increase "s--" #'text-scale-decrease ;; Conventional text-editing keys "s-a" #'mark-whole-buffer :gi [s-return] #'+default/newline-below :gi [s-S-return] #'+default/newline-above :gi [s-backspace] #'doom/backward-kill-to-bol-and-indent) :leader (:prefix "f" :desc "Find file in dotfiles" "t" #'+hlissner/find-in-dotfiles :desc "Browse dotfiles" "T" #'+hlissner/browse-dotfiles) (:prefix "t" :desc "Toggle visual line mode" "v" #'visual-line-mode :desc "Toggle auto fill mode" "a" #'auto-fill-mode :desc "Switch themes" "t" #'counsel-load-theme) (:prefix "o" :desc "Elfeed feed reader" "f" #'elfeed) (:prefix "p" :desc "Black buffer" "b" #'blacken-buffer) (:prefix "y" :desc "Yank pop!" "p" #'counsel-yank-pop :desc "Git yank link" "g" #'git-link)) ;; app/rss (add-hook! 'elfeed-show-mode-hook (text-scale-set 1.5)) ;; ;; Modules (setq +workspaces-switch-project-function #'ignore +format-on-save-enabled-modes '(python-mode) +pretty-code-enabled-modes '(emacs-lisp-mode org-mode)) ;; app/rss (add-hook! 'elfeed-show-mode-hook (text-scale-set 2)) ;; emacs/eshell (after! eshell (set-eshell-alias! "f" "(other-window 1) && find-file $1" "l" "ls -lh" "d" "dired $1" "gl" "(call-interactively 'magit-log-current)" "gs" "magit-status" "gc" "magit-commit")) ;; tools/magit (setq magit-repository-directories '(("~/work" . 2)) magit-save-repository-buffers nil transient-values '((magit-commit "--gpg-sign=5F6C0EA160557395") (magit-rebase "--autosquash" "--gpg-sign=5F6C0EA160557395") (magit-pull "--rebase" "--gpg-sign=5F6C0EA160557395"))) ;; lang/org (setq org-directory (expand-file-name "~/org/") org-journal-dir "~/org/journal/") ;; Some appearance things (setq org-agenda-block-separator "" org-fontify-whole-heading-line t org-fontify-done-headline t org-fontify-quote-and-verse-blocks t org-pretty-entities t org-ellipsis " ▼ " ;; The standard unicode characters are usually misaligned depending on the ;; font. This bugs me. Markdown #-marks for headlines are more elegant. org-bullets-bullet-list '("#")) (after! org (setq org-capture-templates '(("i" "Send to inbox" entry (file+headline "~/org/inbox.org" "Inbox") "* TODO %?\n") ("w" "Work diary entry" entry (file "~/org/work_diary.org") "* %u\n%?\n")) org-use-tag-inheritance nil org-tags-exclude-from-inheritance '("PROJECT" "SPRINT") ;org-stuck-projects '("+PROJECT/-MAYBE-DONE" ("TODO" "NEXT") nil "\\") ;org-tag-alist '(("PROJECT" . ?p) ("@home" . ?h) ("@night" . ?n) ("@selectp" . ?s) ; ("@errand" . ?e) ("@read" . ?r) ("@work" . ?w) ("@family" . ?f)) ;org-modules '(org-drill org-clock org-id org-info org-habit org-protocol org-annotate-file ; org-eval org-expiry org-contacts org-man org-notmuch org-collector org-panel ; org-screen org-toc) org-refile-targets '(("~/org/todo.org" :maxlevel . 2) ("~/org/someday.org" :maxlevel . 2) ("~/org/town.org" :maxlevel . 2) ("~/org/personal.org" :maxlevel . 2) ("~/org/elation.org" :maxlevel . 2)) ) (setq org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "WAITING(w)" "MAYBE(m)" "|" "DONE(d)")))) ;; Org specific keybindings (map! :leader (:prefix "a" :desc "Org Agenda" "o" #'org-agenda :desc "Org open link" "l" #'org-open-at-point :desc "Sync gcal with org" "g" #'org-gcal-sync :desc "Set task deadline" "d" #'org-deadline :desc "Schedule task" "s" #'org-schedule :desc "New journal entry" "j" #'org-journal-new-entry :desc "Org set property" "p" #'org-set-progerty :desc "Save all org buffers" "a" #'org-save-all-org-buffers :desc "Org todo" "t" #'org-todo :desc "Org set tags" "T" #'org-set-tags-command)) ;;; Setup sending email with msmtp (setq send-mail-function 'sendmail-send-it sendmail-program "/usr/local/bin/msmtp" mail-specify-envelope-from t message-sendmail-envelope-from 'header mail-envelope-from 'header)