summaryrefslogtreecommitdiff
path: root/modules/emacs/doom/config.el
diff options
context:
space:
mode:
Diffstat (limited to 'modules/emacs/doom/config.el')
-rw-r--r--modules/emacs/doom/config.el248
1 files changed, 248 insertions, 0 deletions
diff --git a/modules/emacs/doom/config.el b/modules/emacs/doom/config.el
new file mode 100644
index 0000000..79c0156
--- /dev/null
+++ b/modules/emacs/doom/config.el
@@ -0,0 +1,248 @@
+;;
+;;; Misc
+;;
+
+(setq frame-title-format '("GNU Emacs"))
+
+(setq-hook! '(prog-mode-hook yaml-mode-hook)
+ display-line-numbers-type 'relative
+ scroll-margin 10
+ hscroll-margin 10)
+
+(setq browse-url-generic-program (executable-find "firefox")
+ browse-url-browser-function 'browse-url-generic)
+
+;;
+;;; Doom-specific
+;;
+
+(setq doom-theme 'modus-operandi
+ doom-modeline-icon nil
+ doom-modeline-indent-info t
+ doom-modeline-total-line-number t
+ doom-modeline-height 30)
+
+;;
+;;; Editorconfig
+;;
+
+(setq +editorconfig-mode-alist '((sh-mode . "sh"))
+ editorconfig-exclude-modes '(lisp-mode
+ common-lisp-mode
+ emacs-lisp-mode))
+
+;;
+;;; LSP
+;;
+
+(setq lsp-enable-suggest-server-download nil
+ lsp-modeline-code-actions-enable nil)
+
+;;
+;;; Go
+;;
+
+(setq lsp-go-analyses
+ '((unsedvariable . t)
+ (unusedparams . t)
+ (unusedwrite . t)))
+
+;;
+;;; Org
+;;
+
+(setq org-directory "~/doc/org/")
+
+;; For some reason only using `after!' work here. `setq-hook!' and etc doesn't
+;; produce expected results.
+(after! org
+ (setq org-todo-keywords '((sequence
+ "TODO(t)"
+ "LOOP(r)"
+ "STRT(s@)"
+ "WAIT(w@/!)"
+ "HOLD(h@/!)"
+ "IDEA(i)"
+ "PROJ(p)"
+ "|"
+ "DONE(d@/!)"
+ "KILL(k@/!)"))
+ org-todo-keyword-faces '(("STRT" . +org-todo-active)
+ ("WAIT" . +org-todo-onhold)
+ ("HOLD" . +org-todo-onhold)
+ ("PROJ" . +org-todo-project)
+ ("KILL" . +org-todo-cancel))
+ org-capture-templates '(("t" "Todo" entry
+ (file+headline +org-capture-todo-file "Inbox")
+ "* TODO %?\n%i\n%a" :prepend t)
+ ("n" "Note" entry
+ (file+headline +org-capture-notes-file "Inbox")
+ "* %u %?\n%i\n%a" :prepend t)
+ ("j" "Journal" entry
+ (file+olp+datetree +org-capture-journal-file)
+ "* %U %?\n%i\n%a" :prepend t))))
+
+(add-hook! 'org-mode-hook 'auto-fill-mode)
+
+(setq-hook! 'org-mode-hook fill-column 80)
+
+(setq org-roam-directory "~/doc/roam/"
+ org-roam-db-location (concat org-roam-directory ".db"))
+
+(use-package! org-roam-ui
+ :requires websocket
+ :after org-roam
+ :config
+ (setq org-roam-ui-sync-theme t
+ org-roam-ui-follow t
+ org-roam-ui-update-on-save t
+ org-roam-ui-open-on-start t))
+
+;;
+;;; LaTeX
+;;
+
+(map! :map cdlatex-mode-map
+ :i "TAB" #'cdlatex-tab)
+
+;;
+;;; PlantUML
+;;
+
+(setq plantuml-default-exec-mode 'executable
+ org-plantuml-exec-mode 'plantuml)
+
+;;
+;;; Elisp
+;;
+
+(after! flycheck
+ (pushnew! flycheck-disabled-checkers 'emacs-lisp-checkdoc))
+
+;; Turn this off because it leaves face artifacts when changing indentation.
+(add-hook! 'emacs-lisp-mode-hook
+ (highlight-indent-guides-mode -1))
+
+;;
+;;; Haskell
+;;
+
+(setq lsp-haskell-formatting-provider "ormolu")
+
+;;
+;;; Nickel
+;;
+
+(use-package! nickel-mode
+ :config
+ (after! lsp-mode
+ (add-to-list 'lsp-language-id-configuration '(nickel-mode . "nickel")
+ (lsp-register-client (make-lsp-client
+ :new-connection (lsp-stdio-connection "nls")
+ :activation-fn (lsp-activate-on "nickel")
+ :server-id 'nls
+ :major-modes 'nickel-mode)))
+ (add-hook 'nickel-mode-hook 'lsp-deferred)))
+
+;;
+;;; YAML
+;;
+
+;; Turn off `flycheck-mode' and `lsp-mode' for Helm templates.
+(add-hook! 'yaml-mode-hook
+ (defun nixfiles/disable-flycheck-for-helm-templates-h ()
+ (when (and buffer-file-name
+ (string-match-p "/templates/" buffer-file-name)
+ (or (string-suffix-p ".yaml" buffer-file-name)
+ (string-suffix-p ".yml" buffer-file-name)))
+ (remove-hook! 'yaml-mode-local-vars-hook #'lsp!))))
+
+(setq-hook! 'yaml-mode-hook +format-with-lsp nil)
+
+;;
+;;; Elfeed
+;;
+
+(setq elfeed-db-directory "~/.elfeed"
+ elfeed-enclosure-default-dir (concat elfeed-db-directory "/enclosures")
+ rmh-elfeed-org-files (list (concat elfeed-db-directory "/index.org"))
+ elfeed-goodies/powerline-default-separator nil
+ elfeed-goodies/entry-pane-size 0.75
+ elfeed-goodies/entry-pane-position 'bottom)
+
+(add-hook! 'elfeed-new-entry-hook
+ '((elfeed-make-tagger :before "2 weeks ago"
+ :remove 'unread)
+ (elfeed-make-tagger :feed-title "SberMarket Tech"
+ :entry-title (not ".*(DevOps|Golang).*")
+ :add 'junk
+ :remove 'unread)
+ (elfeed-make-tagger :feed-title "dotconferences"
+ :entry-title (not ".*dotGo.*")
+ :add 'junk
+ :remove 'unread)))
+
+;;
+;;; mu4e
+;;
+
+(setq-hook! 'mu4e-main-mode-hook
+ mu4e-update-interval 30
+ message-send-mail-function #'message-send-mail-with-sendmail
+ message-sendmail-extra-arguments '("--read-envelope-from")
+ message-sendmail-f-is-evil t
+ send-mail-function #'sendmail-send-it
+ sendmail-program (executable-find "msmtp"))
+
+;;
+;;; Circe
+;;
+
+(setq circe-network-options
+ (mapcar (lambda (server)
+ `(,server
+ :server-buffer-name ,server
+ :host "azahi.cc"
+ :port 6697
+ :tls t
+ :logging nil
+ :user ,(concat circe-default-user "/" server)
+ :pass ,(lambda (&rest _)
+ (+pass-get-secret "server/soju.shire.net/azahi"))))
+ '("libera" "oftc" "hackint" "rizon")))
+
+;;
+;;; Sops
+;;
+
+(use-package! sops
+ :config
+ (global-sops-mode 1))
+
+;;
+;;; Hledger
+;;
+
+(use-package! hledger-mode
+ :disabled
+ :mode ("\\.journal\\'")
+ :hook ((hledger-view-mode . hl-line-mode)
+ (hledger-view-mode . center-text-for-reading))
+ :init
+ (setq hledger-jfile "~/doc/accounting/current.journal")
+ :config
+ (set-company-backend! 'hledger-mode 'hledger-company)
+ (add-hook! 'hledger-mode-hook
+ (lambda (&rest _)
+ (make-local-variable 'company-backends)
+ (add-to-list 'company-backends 'hledger-company))))
+
+(use-package! hledger-input
+ :disabled
+ :hook ((hledger-input-post-commit . hledger-show-new-balances)
+ (hledger-input-mode . auto-fill-mode)
+ (hledger-input-mode . (lambda (&rest _)
+ (make-local-variable 'compay-idle-delay)
+ (setq-local company-idle-delay 0.1))))
+ :init
+ (setq hledger-input-buffer-height 20))