|  | @@ -7,105 +7,167 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (add-to-list 'default-frame-alist '(inhibit-double-buffering . t))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -(setq-default
 | 
	
		
			
				|  |  | - user-full-name    "Colin Powell"
 | 
	
		
			
				|  |  | - user-mail-address "colin@onec.me"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | - +workspaces-switch-project-function #'ignore
 | 
	
		
			
				|  |  | - +pretty-code-enabled-modes '(emacs-lisp-mode org-mode)
 | 
	
		
			
				|  |  | - +format-on-save-enabled-modes '(not emacs-lisp-mode)
 | 
	
		
			
				|  |  | -)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; (setq-hook! 'minibuffer-setup-hook show-trailing-whitespace nil)
 | 
	
		
			
				|  |  | -(setq ns-use-thin-smoothing t)
 | 
	
		
			
				|  |  | -(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
 | 
	
		
			
				|  |  | -(add-to-list 'default-frame-alist '(ns-appearance . dark))
 | 
	
		
			
				|  |  | -;(add-hook 'window-setup-hook 'toggle-frame-maximized)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; Keybindings
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -(map!
 | 
	
		
			
				|  |  | - ;; Easier window navigation
 | 
	
		
			
				|  |  | - :n "C-h"   #'evil-window-left
 | 
	
		
			
				|  |  | - :n "C-j"   #'evil-window-down
 | 
	
		
			
				|  |  | - :n "C-k"   #'evil-window-up
 | 
	
		
			
				|  |  | - :n "C-l"   #'evil-window-right
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | - (:after treemacs-evil
 | 
	
		
			
				|  |  | -   (:map evil-treemacs-state-map
 | 
	
		
			
				|  |  | -     "C-h" #'evil-window-left
 | 
	
		
			
				|  |  | -     "C-l" #'evil-window-right))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | - ;; some handy alt shortcuts
 | 
	
		
			
				|  |  | - :n "s-g"   #'magit-status
 | 
	
		
			
				|  |  | - :n "s-c"   #'org-capture
 | 
	
		
			
				|  |  | - ;; Let's be like our friends Slack and Discord
 | 
	
		
			
				|  |  | - :n "s-p"   #'+ivy/project-search
 | 
	
		
			
				|  |  | - :n "s-k"   #'counsel-recentf
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; Leader tricks
 | 
	
		
			
				|  |  | - (:leader
 | 
	
		
			
				|  |  | -   (:prefix "f"
 | 
	
		
			
				|  |  | -     :desc "Find file in dotfiles" :n "t" #'+hlissner/find-in-dotfiles
 | 
	
		
			
				|  |  | -     :desc "Browse dotfiles"       :n "T" #'+hlissner/browse-dotfiles)
 | 
	
		
			
				|  |  | -   (:prefix "t"
 | 
	
		
			
				|  |  | -     :desc "Toggle visual line mode" :n "v" #'visual-line-mode
 | 
	
		
			
				|  |  | -     :desc "Toggle auto fill mode" :n "a" #'auto-fill-mode
 | 
	
		
			
				|  |  | -     :desc "Switch themes" :n "t" #'counsel-load-theme)
 | 
	
		
			
				|  |  | -   (:prefix "o"
 | 
	
		
			
				|  |  | -     :desc "Elfeed feed reader" :n "f" #'elfeed)
 | 
	
		
			
				|  |  | -   (:prefix "p"
 | 
	
		
			
				|  |  | -     :desc "Black buffer" :n "b" #'blacken-buffer)
 | 
	
		
			
				|  |  | -   (:prefix "y"
 | 
	
		
			
				|  |  | -     :desc "Yank pop!" :n "p" #'counsel-yank-pop
 | 
	
		
			
				|  |  | -     :desc "Git yank link" :n "g" #'git-link)
 | 
	
		
			
				|  |  | -   (:prefix "n"
 | 
	
		
			
				|  |  | -     :desc "Browse mode notes"     :n  "m" #'+hlissner/find-notes-for-major-mode
 | 
	
		
			
				|  |  | -     :desc "Browse project notes"  :n  "p" #'+hlissner/find-notes-for-project)))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; Company mode
 | 
	
		
			
				|  |  | -(require 'company)
 | 
	
		
			
				|  |  | -(setq company-idle-delay 0.2
 | 
	
		
			
				|  |  | -      completion-ignore-case t
 | 
	
		
			
				|  |  | -      company-minimum-prefix-length 3
 | 
	
		
			
				|  |  | -      company-async-timeout 2)
 | 
	
		
			
				|  |  | -;;(set! :company-backend 'python-mode '(company-anaconda))
 | 
	
		
			
				|  |  | -(add-hook 'prog-mode-hook 'global-company-mode)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; importmagic
 | 
	
		
			
				|  |  | -(add-hook 'python-mode-hook 'importmagic-mode)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; Golang
 | 
	
		
			
				|  |  | -(add-hook 'go-mode-hook 'gofmt-before-save)
 | 
	
		
			
				|  |  | +(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"   "find-file $1"
 | 
	
		
			
				|  |  | +   "f"   "(other-window 1) && find-file $1"
 | 
	
		
			
				|  |  |     "l"   "ls -lh"
 | 
	
		
			
				|  |  |     "d"   "dired $1"
 | 
	
		
			
				|  |  | -   "dc"   "docker-compose $1"
 | 
	
		
			
				|  |  |     "gl"  "(call-interactively 'magit-log-current)"
 | 
	
		
			
				|  |  |     "gs"  "magit-status"
 | 
	
		
			
				|  |  | -   "gc"  "magit-commit"
 | 
	
		
			
				|  |  | -   "rg"  "rg --color=always $*"))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; Add notice for lines over 88 chars
 | 
	
		
			
				|  |  | -;;(setq-default
 | 
	
		
			
				|  |  | -;;   whitespace-line-column 88
 | 
	
		
			
				|  |  | -;;   whitespace-style '(face lines-tail))
 | 
	
		
			
				|  |  | +   "gc"  "magit-commit"))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ;; tools/magit
 | 
	
		
			
				|  |  | -(setq magit-repository-directories '(("~/devel" . 2))
 | 
	
		
			
				|  |  | -      magit-save-repository-buffers nil)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; make the lines in the buffer wrap around the edges of the screen.
 | 
	
		
			
				|  |  | -;(add-hook 'org-mode-hook '(lambda () (visual-line-mode)))
 | 
	
		
			
				|  |  | +(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 "\\<IGNORE\\>")
 | 
	
		
			
				|  |  | +          ;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
 | 
	
	
		
			
				|  | @@ -113,19 +175,3 @@
 | 
	
		
			
				|  |  |        mail-specify-envelope-from t
 | 
	
		
			
				|  |  |        message-sendmail-envelope-from 'header
 | 
	
		
			
				|  |  |        mail-envelope-from 'header)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; enable ivy buffer icons
 | 
	
		
			
				|  |  | -(setq ivy-buffer-icons t)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;; Hide hidden files in treemacs
 | 
	
		
			
				|  |  | -(setq treemacs-show-hidden-files nil)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -;;(load! "+org-daypage") ;; hardwire this baby in here somewhere
 | 
	
		
			
				|  |  | -(load! "+ui")      ;; My ui mods. Also contains ligature stuff.
 | 
	
		
			
				|  |  | -(load! "+music")   ;; Music stuff, visible through SPC-a-m. Not perfect.
 | 
	
		
			
				|  |  | -(load! "+ranger")  ;; File manager stuff
 | 
	
		
			
				|  |  | -;;(load! "+reason")  ;; ReasonML stuff
 | 
	
		
			
				|  |  | -(load! "+mail")    ;; Mail stuff
 | 
	
		
			
				|  |  | -(load! "+org")     ;; Org mode stuff like todos and rebindings
 | 
	
		
			
				|  |  | -(load! "+org-gcal")     ;; Org mode stuff like todos and rebindings
 | 
	
		
			
				|  |  | -(load! "+wttrin")     ;; Weather config
 |