about summary refs log tree commit diff
path: root/modules/emacs/doom
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
committerAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
commite6ed60548397627bf10f561f9438201dbba0a36e (patch)
treef9a84c5957d2cc4fcd148065ee9365a0c851ae1c /modules/emacs/doom
parent2024-04-18 (diff)
2024-04-21
Diffstat (limited to 'modules/emacs/doom')
-rw-r--r--modules/emacs/doom/config.el248
-rw-r--r--modules/emacs/doom/init.el99
-rw-r--r--modules/emacs/doom/packages.el12
3 files changed, 359 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))
diff --git a/modules/emacs/doom/init.el b/modules/emacs/doom/init.el
new file mode 100644
index 0000000..571993b
--- /dev/null
+++ b/modules/emacs/doom/init.el
@@ -0,0 +1,99 @@
+(doom! :input
+       japanese
+
+       :completion
+       company
+       vertico
+
+       :ui
+       doom
+       (emoji +unicode)
+       hl-todo
+       indent-guides
+       ligatures
+       modeline
+       nav-flash
+       ophints
+       (popup +defaults)
+       (vc-gutter +diff-hl +pretty)
+       window-select
+       workspaces
+
+       :editor
+       (evil +everywhere)
+       file-templates
+       fold
+       format
+       parinfer
+       snippets
+       word-wrap
+
+       :emacs
+       dired
+       electric
+       ibuffer
+       undo
+       vc
+
+       :term
+       eshell
+       vterm
+
+       :checkers
+       syntax
+       (spell +aspell +everywhere)
+       grammar
+
+       :tools
+       ansible
+       (debugger +lsp)
+       direnv
+       (docker +lsp)
+       editorconfig
+       (eval +overlay)
+       (lookup +dictionary +offline)
+       (lsp +peek)
+       magit
+       make
+       (pass +auth)
+       pdf
+       (terraform +lsp)
+       tree-sitter
+       upload
+
+       :os
+       (:if (featurep :system 'macos) macos)
+
+       :lang
+       (cc +lsp +tree-sitter)
+       data
+       dhall
+       emacs-lisp
+       (go +lsp +tree-sitter)
+       (haskell +lsp +tree-sitter)
+       java
+       javascript
+       (json +lsp +tree-sitter)
+       kotlin
+       (latex +latexmk +cdlatex +lsp)
+       markdown
+       (nix +lsp +tree-sitter)
+       (org +pandoc +roam2)
+       plantuml
+       (python +poetry +lsp +tree-sitter)
+       (rust +lsp +tree-sitter)
+       (sh +lsp +tree-sitter)
+       web
+       (yaml +lsp +tree-sitter)
+       (zig +lsp +tree-sitter)
+
+       :email
+       mu4e
+
+       :app
+       calendar
+       irc
+       (rss +org)
+
+       :config
+       (default +bindings +smartparens))
diff --git a/modules/emacs/doom/packages.el b/modules/emacs/doom/packages.el
new file mode 100644
index 0000000..2ed0e4c
--- /dev/null
+++ b/modules/emacs/doom/packages.el
@@ -0,0 +1,12 @@
+(disable-packages! writegood-mode)
+
+(package! org-roam-ui)
+
+(package! nickel-mode)
+
+(package! hledger-mode)
+
+(package! sops
+  :recipe (:type git
+           :host github
+           :repo "djgoku/sops"))

Consider giving Nix/NixOS a try! <3