about summary refs log tree commit diff
path: root/modules/common/emacs/doom
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2023-02-19 17:50:35 +0300
committerAzat Bahawi <azat@bahawi.net>2023-02-19 17:50:35 +0300
commit91fb4f28ef5d87e8bcf7749928d30ba4a9cbbd34 (patch)
treee07291fcb1cf62a561ffe58d1fd8e2968ff6fcb3 /modules/common/emacs/doom
parent2023-02-15 (diff)
2023-02-19
Diffstat (limited to 'modules/common/emacs/doom')
-rw-r--r--modules/common/emacs/doom/config.el223
-rw-r--r--modules/common/emacs/doom/init.el119
-rw-r--r--modules/common/emacs/doom/packages.el17
3 files changed, 359 insertions, 0 deletions
diff --git a/modules/common/emacs/doom/config.el b/modules/common/emacs/doom/config.el
new file mode 100644
index 0000000..9284e0b
--- /dev/null
+++ b/modules/common/emacs/doom/config.el
@@ -0,0 +1,223 @@
+;;
+;;; Misc
+;;
+
+(setq display-line-numbers-type t)
+
+(setq scroll-margin 10
+      hscroll-margin 10)
+
+(setq browse-url-generic-program (executable-find "firefox")
+      browse-url-browser-function 'browse-url-generic)
+
+;;
+;;; Doom-specific
+;;
+
+;; Make it more default-ey.
+(setq frame-title-format '("Emacs")
+      icon-title-format frame-title-format)
+
+(setq doom-theme 'doom-tomorrow-night)
+
+(setq +format-on-save-enabled-modes '(not nix-mode json-mode yaml-mode))
+
+;;
+;;; LSP
+;;
+
+(setq lsp-enable-suggest-server-download nil)
+
+;;
+;;; Org
+;;
+
+(setq org-directory "~/doc/org/")
+(after! org
+  (setq org-todo-keywords '((sequence
+                             "PROJ(p)" ; A master task.
+                             "TODO(t)" ; A task that needs to be done with statues:
+                             "STRT(s@)" ; - In progress.
+                             "HOLD(l@/!)" ; - Paused because of me.
+                             "WAIT(w@/!)" ; - Paused because of not me.
+                             "|"
+                             "DONE(d@/!)" ; Complete state.
+                             "KILL(k@/!)")) ; Incomplete state.
+        org-todo-keyword-faces '(("PROJ" . +org-todo-project)
+                                 ("TODO" . +org-todo-active)
+                                 ("STRT" . +org-todo-active)
+                                 ("HOLD" . +org-todo-onhold)
+                                 ("WAIT" . +org-todo-onhold)
+                                 ("DONE" . +org-todo-cancel)
+                                 ("KILL" . +org-todo-cancel))))
+
+(add-hook! 'org-mode-hook 'auto-fill-mode)
+
+(add-hook! 'org-mode-hook (lambda (&rest _)
+                            (setq 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))
+
+;;
+;;; Elisp
+;;
+
+(setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc))
+
+;;
+;;; Haskell
+;;
+
+(setq lsp-haskell-formatting-provider "ormolu")
+
+;;
+;;; Nix
+;;
+
+(after! lsp-mode
+  (add-to-list 'lsp-language-id-configuration '(nix-mode . "nix"))
+  (lsp-register-client
+   (make-lsp-client :new-connection (lsp-stdio-connection '("rnix-lsp"))
+                    :major-modes '(nix-mode)
+                    :server-id 'nix)))
+
+;;
+;;; YAML
+;;
+
+(add-hook! 'yaml-mode-hook
+  (defun +disable-flycheck-for-yaml-helm-templates ()
+    (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!)
+      (pushnew! flycheck-disabled-checkers 'yaml-jsyaml 'yaml-ruby 'yaml-yamllint))))
+
+(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 mu4e-root-maildir "~/mail"
+      mu4e-context-policy 'ask-if-none
+      mu4e-compose-context-policy 'always-ask
+      mu4e-compose--org-msg-toggle-next nil
+      mu4e-update-interval 60
+      sendmail-program (executable-find "msmtp")
+      send-mail-function #'smtpmail-send-it
+      message-sendmail-f-is-evil t
+      message-sendmail-extra-arguments '("--read-envelope-from")
+      message-send-mail-function #'message-send-mail-with-sendmail
+      +mu4e-personal-addresses (list "frodo@gondor.net"
+                                     "frodo@rohan.net"
+                                     "azahi@shire.me"
+                                     "admin@shire.me"
+                                     "ceo@shire.me"
+                                     "a.gondor@yahoo.com"
+                                     "a.gondor@yahoo.com"))
+
+(set-email-account! "shire"
+                    '((mu4e-drafts-folder . "/shire/Drafts")
+                      (mu4e-refile-folder . "/shire/Archive")
+                      (mu4e-sent-folder   . "/shire/Sent")
+                      (mu4e-trash-folder  . "/shire/Trash")
+                      (smtpmail-smtp-user . "azahi"))
+                    t)
+
+(set-email-account! "yahoo"
+                    '((mu4e-sent-folder   . "/yahoo/Sent")
+                      (mu4e-drafts-folder . "/yahoo/Drafts")
+                      (mu4e-trash-folder  . "/yahoo/Trash")
+                      (mu4e-refile-folder . "/yahoo/Archive")
+                      (smtpmail-smtp-user . "a.gondor"))
+                    t)
+
+(setq +mu4e-compose-org-msg-toggle-next nil)
+
+;;
+;;; Circe
+;;
+
+(defun nixfiles/irc-bouncer-password-f (&rest _)
+  (+pass-get-secret "server/soju.manwe.shire.me/azahi"))
+
+(set-irc-server! "libera"
+  `(:host "shire.me"
+    :port 6667
+    :user "azahi/libera"
+    :pass nixfiles/irc-bouncer-password-f))
+
+(set-irc-server! "oftc"
+  `(:host "shire.me"
+    :port 6667
+    :user "azahi/oftc"
+    :pass nixfiles/irc-bouncer-password-f))
+
+(set-irc-server! "hackint"
+  `(:host "shire.me"
+    :port 6667
+    :user "azahi/hackint"
+    :pass nixfiles/irc-bouncer-password-f))
+
+(set-irc-server! "rizon"
+  `(:host "shire.me"
+    :port 6667
+    :user "azahi/rizon"
+    :pass nixfiles/irc-bouncer-password-f))
+
+;; (use-package! hledger-mode
+;;   :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
+;;   :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))
+
+;; (use-package! kubernetes
+;;   :defer t
+;;   :commands (kubernetes-overview)
+;;   :init (setq kubernetes-poll-frequency 3600
+;;               kubernetes-redraw-frequency 3600))
+
+;; (use-package! kubernetes-evil
+;;   :after kubernetes-overview)
+
+;; (use-package! kubernetes-tramp
+;;   :defer t)
diff --git a/modules/common/emacs/doom/init.el b/modules/common/emacs/doom/init.el
new file mode 100644
index 0000000..cdab069
--- /dev/null
+++ b/modules/common/emacs/doom/init.el
@@ -0,0 +1,119 @@
+(doom! :input
+       ;; japanese
+
+       :completion
+       company
+       vertico
+
+       :ui
+       ;; deft
+       doom
+       ;; doom-dashboard
+       ;; doom-quit
+       ;; emoji
+       hl-todo
+       indent-guides
+       ;; ligatures
+       ;; modeline
+       ;; nav-flash
+       ophints
+       (popup +defaults)
+       ;; tabs
+       ;; unicode
+       (vc-gutter +diff-hl +pretty)
+       window-select
+       workspaces
+
+       :editor
+       (evil +everywhere)
+       file-templates
+       fold
+       format
+       ;; lispy
+       ;; multiple-cursors
+       parinfer
+       ;; rotate-text
+       snippets
+       word-wrap
+
+       :emacs
+       dired
+       ;; electric
+       ibuffer
+       undo
+       vc
+
+       :term
+       eshell
+       vterm
+
+       :checkers
+       syntax
+       (spell +enchant
+              +everywhere
+              +flyspell)
+       grammar
+
+       :tools
+       ansible
+       (debugger +lsp)
+       direnv
+       (docker +lsp)
+       editorconfig
+       (eval +overlay)
+       gist
+       (lookup +dictionary +offline)
+       (lsp +peek)
+       (magit +forge)
+       make
+       (pass +auth)
+       ;; pdf
+       terraform
+       tree-sitter
+       upload
+
+       :os
+       (:if IS-MAC macos)
+       ;; (tty +osc)
+
+       :lang
+       (cc +lsp +tree-sitter)
+       (common-lisp +lsp +tree-sitter)
+       (csharp +lsp +tree-sitter)
+       data
+       (dhall +lsp +tree-sitter)
+       (emacs-lisp +lsp +tree-sitter)
+       (go +lsp +tree-sitter)
+       ;; graphql
+       (:if IS-LINUX (haskell +lsp +tree-sitter))
+       (java +lsp +tree-sitter)
+       (javascript +lsp +tree-sitter)
+       (json +lsp +tree-sitter)
+       (kotlin +lsp +tree-sitter)
+       (latex +lsp +tree-sittter)
+       (markdown +lsp +tree-sitter)
+       (nix +lsp)
+       (org +pandoc +roam2)
+       plantuml
+       (python +lsp +tree-sitter)
+       (:if IS-LINUX (racket +lsp +tree-sitter))
+       ;; rst
+       (rust +lsp +tree-sitter)
+       (:if IS-LINUX (scheme +lsp +tree-sitter +racket))
+       (sh +lsp +tree-sitter)
+       web
+       (yaml +lsp +tree-sitter)
+       (zig +lsp +tree-sitter)
+
+       :email
+       mu4e
+
+       :app
+       calendar
+       ;; emms
+       ;; everywhere
+       irc
+       (rss +org)
+
+       :config
+       (default +bindings +smartparens))
diff --git a/modules/common/emacs/doom/packages.el b/modules/common/emacs/doom/packages.el
new file mode 100644
index 0000000..298a203
--- /dev/null
+++ b/modules/common/emacs/doom/packages.el
@@ -0,0 +1,17 @@
+(disable-packages! writegood-mode)
+
+(unpin! org-roam)
+(package! org-roam
+  :recipe (:host github
+           :repo "org-roam/org-roam"
+           :branch "main"))
+(package! org-roam-ui
+  :recipe (:host github
+           :repo "org-roam/org-roam-ui"
+           :branch "main"))
+
+;; (package! hledger-mode)
+
+;; (package! kubernetes)
+;; (package! kubernetes-evil)
+;; (package! kubernetes-tramp)

Consider giving Nix/NixOS a try! <3