;; ;;; 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) (when (featurep :system 'linux) (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) ;; ;;; 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)) ;; ;;; elfeed ;; (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)))