From e6ed60548397627bf10f561f9438201dbba0a36e Mon Sep 17 00:00:00 2001 From: Azat Bahawi Date: Sun, 21 Apr 2024 02:15:42 +0300 Subject: 2024-04-21 --- modules/emacs/doom/config.el | 248 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 modules/emacs/doom/config.el (limited to 'modules/emacs/doom/config.el') 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)) -- cgit 1.4.1