about summary refs log tree commit diff
path: root/modules/emacs
diff options
context:
space:
mode:
authorazahi <azat@bahawi.net>2025-02-17 02:21:56 +0300
committerazahi <azat@bahawi.net>2025-02-17 02:21:56 +0300
commit59180328cda59817d71cd58c8f48ead047375064 (patch)
tree2cdd7d1bfa309839ef624c19daf283f510aacf69 /modules/emacs
parent2025-02-05 (diff)
2025-02-17
Diffstat (limited to '')
-rw-r--r--modules/emacs/default.nix107
-rw-r--r--modules/emacs/doom/config.el274
-rw-r--r--modules/emacs/doom/init.el2
-rw-r--r--modules/emacs/doom/packages.el15
4 files changed, 222 insertions, 176 deletions
diff --git a/modules/emacs/default.nix b/modules/emacs/default.nix
index 71bc24c..e546ddd 100644
--- a/modules/emacs/default.nix
+++ b/modules/emacs/default.nix
@@ -5,17 +5,16 @@
   pkgs,
   ...
 }:
-with lib;
 let
   cfg = config.nixfiles.modules.emacs;
 in
 {
-  options.nixfiles.modules.emacs.enable = mkEnableOption "GNU Emacs";
+  options.nixfiles.modules.emacs.enable = lib.mkEnableOption "GNU Emacs";
 
-  config = mkIf cfg.enable {
+  config = lib.mkIf cfg.enable {
     secrets.authinfo = {
       file = "${inputs.self}/secrets/authinfo";
-      owner = my.username;
+      owner = lib.my.username;
     };
 
     nixfiles.modules = {
@@ -40,7 +39,7 @@ in
       stylix.targets.emacs.enable = false;
 
       xdg.configFile =
-        mapAttrs
+        lib.mapAttrs
           (
             _: value:
             value
@@ -50,7 +49,7 @@ in
                 export DOOMDIR="''${XDG_CONFIG_HOME:-$HOME/.config}/doom"
 
                 if [[ ! -d "$EMACSDIR/.git" ]]; then
-                  ${getExe git.package} clone --depth=1 --branch=master \
+                  ${lib.getExe git.package} clone --depth=1 --branch=master \
                     "https://github.com/doomemacs/doomemacs" "$EMACSDIR"
                 fi
 
@@ -74,7 +73,7 @@ in
             "doom/init.el".source = ./doom/init.el;
             "doom/packages.el".source = ./doom/packages.el;
             "doom/config.el" = {
-              text = concatLines [
+              text = lib.concatLines [
                 (
                   let
                     extraBins = with pkgs; [
@@ -85,6 +84,9 @@ in
                         ]
                       )) # :checkers (spell +aspell)
                       asmfmt # :editor format
+                      shirepyright # :lang (python +lsp)
+                      bash-language-server # :lang (sh +lsp)
+                      cabal-install # :lang haskell
                       cargo # :lang rust
                       clang-tools # :lang (cc +lsp) :editor format
                       cmake-format # :lang cc :editor format
@@ -95,6 +97,7 @@ in
                       dockerfile-language-server-nodejs # :tools (docker +lsp)
                       dockfmt # :tools docker :editor format
                       editorconfig-core-c # :tools editorconfig
+                      eslint # :lang (json +lsp)
                       fd # doom!
                       gcc # :lang cc
                       gdb # :tools debugger
@@ -111,11 +114,9 @@ in
                       gotools # :lang go
                       graphviz # :lang (org +roam2) :lang plantuml
                       gzip # :tools tree-sitter
+                      haskell-language-server # :lang (haskell +lsp)
                       haskellPackages.cabal-fmt # :lang haskell :editor format
-                      haskellPackages.cabal-install # :lang haskell
-                      haskellPackages.haskell-language-server # :lang (haskell +lsp)
                       haskellPackages.hoogle # :lang haskell
-                      haskellPackages.ormolu # :lang haskell :editor format
                       html-tidy # :lang web :editor format
                       jdk # :lang java :lang plantuml :checkers grammar
                       languagetool # :checkers grammar
@@ -124,24 +125,14 @@ in
                       nixd # :lang (nix +lsp)
                       nixfmt # :lang nix :editor format
                       nls # :lang (nickel +lsp)
-                      nodePackages.bash-language-server # :lang (sh +lsp)
-                      # nodePackages.eslint # :lang (json +lsp)
                       nodePackages.js-beautify # :lang web
                       nodePackages.prettier # :editor format
-                      nodePackages.stylelint # :lang web
                       nodejs # :tools debugger
+                      ormolu # :lang haskell :editor format
                       pandoc # :lang org markdown latex
                       pinentry-emacs # doom!
-                      pipenv # :lang python
-                      poetry # :lang python
                       pre-commit # :tools magit
-                      pyright # :lang python :editor format
                       python3 # :lang python
-                      python3Packages.black # :lang python :editor format
-                      python3Packages.isort # :lang python :editor format
-                      python3Packages.nose2 # :lang python
-                      python3Packages.pyflakes # :lang python :editor format
-                      python3Packages.pytest # :lang python
                       ripgrep # doom!
                       rust-analyzer # :lang (rust +lsp)
                       rustc # :lang rust
@@ -150,10 +141,14 @@ in
                       shfmt # :lang sh :editor format
                       sops
                       sqlite # :lang (org +roam2) :tools lookup
+                      stylelint # :lang web
                       terraform-ls # :tools (terraform +lsp)
                       texlab # lang (tex +lsp)
                       texlive.combined.scheme-full # :lang org tex
+                      tinymist
+                      typst
                       unzip # :tools debugger
+                      uv # :lang python
                       vscode-langservers-extracted # :lang (json +lsp) (web +lsp)
                       wordnet # :tools (lookup +dictionary +offline)
                       yaml-language-server # :lang (yaml +lsp)
@@ -163,14 +158,14 @@ in
                   ''
                     ;; Integrate packages which are required by various modules
                     ;; without polluting the user's profile.
-                    (setq exec-path (append exec-path '(${concatMapStringsSep " " (x: ''"${x}/bin"'') extraBins})))
-                    (setenv "PATH" (concat (getenv "PATH") ":${concatMapStringsSep ":" (x: "${x}/bin") extraBins}"))
+                    (setq exec-path (append exec-path '(${lib.concatMapStringsSep " " (x: ''"${x}/bin"'') extraBins})))
+                    (setenv "PATH" (concat (getenv "PATH") ":${lib.concatMapStringsSep ":" (x: "${x}/bin") extraBins}"))
 
                     (appendq! auth-sources '(("${config.secrets.authinfo.path}")))
 
-                    ;; HACK Explicitly load specific Emacs packages from Nixpkgs.
-                    ;; For some reason providing them as "extraPackages" doesn't
-                    ;; work.
+                    ;; HACK Explicitly load specific Emacs packages from
+                    ;; Nixpkgs. For some reason providing them as
+                    ;; "extraPackages" doesn't work.
                     (add-to-list 'load-path "${pkgs.mu.mu4e}/share/emacs/site-lisp/mu4e")
                     (add-to-list 'load-path "${pkgs.emacsPackages.vterm}/share/emacs/site-lisp/elpa/vterm-${pkgs.emacsPackages.vterm.version}")
                     (load "${
@@ -189,17 +184,17 @@ in
                     (setq parinfer-rust-library "${pkgs.parinfer-rust-emacs}/lib/libparinfer_rust.so")
 
                     ;; :lang (org +roam2) :email mu4e
-                    (setq emacsql-sqlite-executable "${getExe pkgs.emacsql-sqlite}")
+                    (setq emacsql-sqlite-executable "${lib.getExe pkgs.emacsql-sqlite}")
 
                     ;; :lang plantuml
                     (setq plantuml-jar-path "${pkgs.plantuml}/lib/plantuml.jar"
-                          plantuml-executable-path "${getExe' pkgs.plantuml "plantuml"}"
+                          plantuml-executable-path "${lib.getExe' pkgs.plantuml "plantuml"}"
                           org-plantuml-jar-path plantuml-jar-path
                           org-plantuml-executable-path plantuml-executable-path)
 
                     ;; :app irc
-                    (setq circe-default-nick "${my.username}"
-                          circe-default-realname "${my.email}"
+                    (setq circe-default-nick "${lib.my.username}"
+                          circe-default-realname "${lib.my.email}"
                           circe-default-user circe-default-nick)
                   ''
                 )
@@ -210,37 +205,29 @@ in
                         doom-emoji-font "${emoji.name}-${toString sizes.terminal}")
                 '')
                 (
-                  with config.hm.accounts.email;
                   let
                     mu4eAccounts =
-                      let
-                        muAccounts = filter (a: a.mu.enable) (attrValues accounts);
-                      in
-                      concatMapStringsSep "\n" (
-                        a:
-                        with a;
-                        let
-                          personalAddresses = concatMapStringsSep " " (v: ''"${v}"'') aliases;
-                        in
-                        ''
-                          (set-email-account! "${name}"
-                            '((user-full-name           . "${realName}")
-                              (user-mail-address        . "${address}")
-                              (mu4e-inbox-folder        . "/${name}/${folders.inbox}")
-                              (mu4e-sent-folder         . "/${name}/${folders.sent}")
-                              (mu4e-drafts-folder       . "/${name}/${folders.drafts}")
-                              (mu4e-trash-folder        . "/${name}/${folders.trash}")
-                              (mu4e-refile-folder       . "/${name}/Archive")
-                              ${optionalString (signature.showSignature != "none")
-                                ''(mu4e-compose-signature   . "${replaceStrings [ "\n" ] [ "\\n" ] signature.text}")''
-                              }
-                              (+mu4e-personal-addresses . (${personalAddresses})))
-                            t)
-                        ''
-                      ) muAccounts;
+                      config.hm.accounts.email.accounts
+                      |> lib.attrValues
+                      |> lib.filter (x: x.mu.enable)
+                      |> lib.concatMapStringsSep "\n" (a: ''
+                        (set-email-account! "${a.name}"
+                          '((user-full-name           . "${a.realName}")
+                            (user-mail-address        . "${a.address}")
+                            (mu4e-inbox-folder        . "/${a.name}/${a.folders.inbox}")
+                            (mu4e-sent-folder         . "/${a.name}/${a.folders.sent}")
+                            (mu4e-drafts-folder       . "/${a.name}/${a.folders.drafts}")
+                            (mu4e-trash-folder        . "/${a.name}/${a.folders.trash}")
+                            (mu4e-refile-folder       . "/${a.name}/Archive")
+                            ${lib.optionalString (a.signature.showSignature != "none")
+                              ''(mu4e-compose-signature   . "${lib.replaceStrings [ "\n" ] [ "\\n" ] a.signature.text}")''
+                            }
+                            (+mu4e-personal-addresses . (${lib.concatMapStringsSep " " (x: ''"${x}"'') a.aliases})))
+                          t)
+                      '');
                   in
                   ''
-                    (setq mu4e-root-maildir "${maildirBasePath}")
+                    (setq mu4e-root-maildir "${config.hm.accounts.email.maildirBasePath}")
 
                     ${mu4eAccounts}
                   ''
@@ -256,12 +243,12 @@ in
           package = pkgs.emacs29-pgtk;
         };
 
-        bash.initExtra = mkAfter ''
+        bash.initExtra = lib.mkAfter ''
           export PATH="$PATH:$XDG_CONFIG_HOME/emacs/bin"
 
-          # https://github.com/akermu/emacs-libvterm
+          # https://github.com/akermu/emacs-libvterm?tab=readme-ov-file#shell-side-configuration
           if [[ "$INSIDE_EMACS" = vterm ]] && [[ -n "$EMACS_VTERM_PATH" ]] && [[ -f "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh" ]]; then
-              source "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh"
+            source "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh"
           fi
 
           # Not sourced from inside Emacs for some reason. Maybe it's not
diff --git a/modules/emacs/doom/config.el b/modules/emacs/doom/config.el
index be481d4..d7ab80e 100644
--- a/modules/emacs/doom/config.el
+++ b/modules/emacs/doom/config.el
@@ -52,8 +52,21 @@
 ;;; LSP
 ;;
 
-(setq! lsp-enable-suggest-server-download nil
-       lsp-modeline-code-actions-enable nil)
+(after! lsp-mode
+  (setq! lsp-enable-server-download nil
+         lsp-enable-suggest-server-download nil
+         lsp-modeline-code-action-fallback-icon "~"))
+
+;;
+;;; Tree-Sitter
+;;
+
+(use-package! treesit-auto
+  :disabled
+  :custom (treesit-auto-install 'prompt)
+  :config
+  (treesit-auto-add-to-auto-mode-alist 'all)
+  (global-treesit-auto-mode))
 
 ;;
 ;;; Nix
@@ -81,52 +94,60 @@
 ;;; Org
 ;;
 
-(setq! org-directory "~/doc/org/")
+(setq! org-directory "~/doc/org/"
+       org-roam-directory "~/doc/roam/"
+       org-roam-db-location (concat org-roam-directory ".db"))
 
-;; 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))))
+  (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))
+  (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))
+
+(use-package! org-roam-timestamps
+  :after org-roam
+  :custom (org-roam-timestamps-parent-file t))
+
+(custom-set-faces! '(org-headline-done :strike-through t))
+
+(add-hook 'org-capture-mode-hook 'evil-insert-state)
 
 ;;
 ;;; LaTeX
@@ -136,6 +157,29 @@
       :i "TAB" #'cdlatex-tab)
 
 ;;
+;;; Typst
+;;
+
+(use-package! typst-ts-mode
+  :custom (typst-ts-watch-options "--open")
+  :config
+  (add-to-list 'lsp-language-id-configuration '(typst-ts-mode . "typst"))
+  (lsp-register-client (make-lsp-client
+                        :new-connection (lsp-stdio-connection "tinymist")
+                        :server-id 'tinymist
+                        :major-modes '(typst-ts-mode)))
+  (add-hook 'typst-ts-mode-hook 'lsp-deferred)
+
+  (when (boundp 'treesit-auto-recipe-list)
+    (add-to-list 'treesit-auto-recipe-list
+                 (make-treesit-auto-recipe
+                  :lang 'typst
+                  :ts-mode 'typst-ts-mode
+                  :url "https://github.com/uben0/tree-sitter-typst"
+                  :revision "master"
+                  :source-dir "src"))))
+
+;;
 ;;; PlantUML
 ;;
 
@@ -165,9 +209,8 @@
     (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))
+                          :major-modes '(nickel-mode)))
     (add-hook 'nickel-mode-hook 'lsp-deferred)))
 
 ;;
@@ -205,7 +248,11 @@
          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))
+         message-send-mail-function #'message-send-mail-with-sendmail
+         shr-use-colors nil))
+
+(use-package! mu4e-patch
+  :hook (mu4e-view-mode . mu4e-patch-highlight))
 
 (setq-hook! 'mu4e-main-mode-hook mu4e-update-interval 30)
 
@@ -281,80 +328,91 @@
                                    mistral:7b-instruct-fp16))))
 
 (use-package! ellama
-  :init
-  (setq! ellama-naming-scheme 'ellama-generate-name-by-time)
+  :custom (ellama-naming-scheme 'ellama-generate-name-by-time)
   :config
   (require 'llm-ollama)
-  (setq! ellama-provider (make-llm-ollama
-                          :scheme "http"
-                          :host "eonwe.shire.net"
-                          :port 11434
-                          :chat-model "llama3.2:3b-instruct-fp16"
-                          :embedding-model "nomic-embed-text:latest")
-         ellama-providers '(("llama" . (make-llm-ollama
-                                        :scheme "http"
-                                        :host "eonwe.shire.net"
-                                        :port 11434
-                                        :chat-model "llama3.2:3b-instruct-fp16"
-                                        :embedding-model "nomic-embed-text:latest"))
-                            ("qwen" . (make-llm-ollama
-                                       :scheme "http"
-                                       :host "eonwe.shire.net"
-                                       :port 11434
-                                       :chat-model "qwen2:7b-instruct-fp16"
-                                       :embedding-model "nomic-embed-text:latest"))
-                            ("qwen-coder" . (make-llm-ollama
-                                             :scheme "http"
-                                             :host "eonwe.shire.net"
-                                             :port 11434
-                                             :chat-model "qwen2.5-coder:14b-instruct-q8_0"
-                                             :embedding-model "nomic-embed-text:latest"))
-                            ("gemma" . (make-llm-ollama
-                                        :scheme "http"
-                                        :host "eonwe.shire.net"
-                                        :port 11434
-                                        :chat-model "gemma:7b-instruct-q8_0"
-                                        :embedding-model "nomic-embed-text:latest"))
-                            ("mistral" . (make-llm-ollama
-                                          :scheme "http"
-                                          :host "eonwe.shire.net"
-                                          :port 11434
-                                          :chat-model "mistral:7b-instruct-fp16"
-                                          :embedding-model "nomic-embed-text:latest"))
-                            ("opencoder" . (make-llm-ollama
-                                            :scheme "http"
-                                            :host "eonwe.shire.net"
-                                            :port 11434
-                                            :chat-model "opencoder:8b-instruct-fp16"
-                                            :embedding-model "nomic-embed-text:latest"))
-                            ("granite" . (make-llm-ollama
-                                          :scheme "http"
-                                          :host "eonwe.shire.net"
-                                          :port 11434
-                                          :chat-model "granite3.1-moe:3b-instruct-fp16"
-                                          :embedding-model "granite-embedding:278m-fp16")))
-         ellama-translation-provider (make-llm-ollama
-                                      :scheme "http"
-                                      :host "eonwe.shire.net"
-                                      :port 11434
-                                      :chat-model "mistral:7b-instruct-fp16"
-                                      :embedding-model "nomic-embed-text:latest")
-         ellama-summarization-provider (make-llm-ollama
-                                        :scheme "http"
-                                        :host "eonwe.shire.net"
-                                        :port 11434
-                                        :chat-model "mistral:7b-instruct-fp16"
-                                        :embedding-model "nomic-embed-text:latest")))
+  (setq! ellama-providers
+         '(("llama" .
+            (make-llm-ollama
+             :scheme "http"
+             :host "eonwe.shire.net"
+             :port 11434
+             :chat-model "llama3.2:3b-instruct-fp16"
+             :embedding-model "nomic-embed-text:latest"))
+           ("qwen" .
+            (make-llm-ollama
+             :scheme "http"
+             :host "eonwe.shire.net"
+             :port 11434
+             :chat-model "qwen2:7b-instruct-fp16"
+             :embedding-model "nomic-embed-text:latest"))
+           ("qwen-coder" .
+            (make-llm-ollama
+             :scheme "http"
+             :host "eonwe.shire.net"
+             :port 11434
+             :chat-model "qwen2.5-coder:14b-instruct-q8_0"
+             :embedding-model "nomic-embed-text:latest"))
+           ("gemma" .
+            (make-llm-ollama
+             :scheme "http"
+             :host "eonwe.shire.net"
+             :port 11434
+             :chat-model "gemma:7b-instruct-q8_0"
+             :embedding-model "nomic-embed-text:latest"))
+           ("mistral" .
+            (make-llm-ollama
+             :scheme "http"
+             :host "eonwe.shire.net"
+             :port 11434
+             :chat-model "mistral:7b-instruct-fp16"
+             :embedding-model "nomic-embed-text:latest"))
+           ("opencoder" .
+            (make-llm-ollama
+             :scheme "http"
+             :host "eonwe.shire.net"
+             :port 11434
+             :chat-model "opencoder:8b-instruct-fp16"
+             :embedding-model "nomic-embed-text:latest"))
+           ("granite" .
+            (make-llm-ollama
+             :scheme "http"
+             :host "eonwe.shire.net"
+             :port 11434
+             :chat-model "granite3.1-moe:3b-instruct-fp16"
+             :embedding-model "granite-embedding:278m-fp16")))
+         ellama-provider
+         (make-llm-ollama
+          :scheme "http"
+          :host "eonwe.shire.net"
+          :port 11434
+          :chat-model "llama3.2:3b-instruct-fp16"
+          :embedding-model "nomic-embed-text:latest")
+         ellama-translation-provider
+         (make-llm-ollama
+          :scheme "http"
+          :host "eonwe.shire.net"
+          :port 11434
+          :chat-model "mistral:7b-instruct-fp16"
+          :embedding-model "nomic-embed-text:latest")
+         ellama-summarization-provider
+         (make-llm-ollama
+          :scheme "http"
+          :host "eonwe.shire.net"
+          :port 11434
+          :chat-model "mistral:7b-instruct-fp16"
+          :embedding-model "nomic-embed-text:latest")))
 
 (use-package! magit-gptcommit
   :after magit
   :config
   (require 'llm-ollama)
-  (setq! magit-gptcommit-llm-provider (make-llm-ollama
-                                       :scheme "http"
-                                       :host "eonwe.shire.net"
-                                       :port 11434
-                                       :chat-model "qwen2.5-coder:32b-instruct-q3_K_M"
-                                       :embedding-model "nomic-embed-text:latest"))
+  (setq! magit-gptcommit-llm-provider
+         (make-llm-ollama
+          :scheme "http"
+          :host "eonwe.shire.net"
+          :port 11434
+          :chat-model "qwen2.5-coder:32b-instruct-q3_K_M"
+          :embedding-model "nomic-embed-text:latest"))
 
   (magit-gptcommit-status-buffer-setup))
diff --git a/modules/emacs/doom/init.el b/modules/emacs/doom/init.el
index 51d4291..eddaf28 100644
--- a/modules/emacs/doom/init.el
+++ b/modules/emacs/doom/init.el
@@ -87,7 +87,7 @@
        (org +pandoc +roam2)
        plantuml
        graphviz
-       (python +poetry +pyright +lsp +tree-sitter)
+       (python +lsp +tree-sitter +pyright)
        ;; (racket +lsp +tree-sitter +xp +hash-lang)
        rest
        (rust +lsp +tree-sitter)
diff --git a/modules/emacs/doom/packages.el b/modules/emacs/doom/packages.el
index a7085da..f818377 100644
--- a/modules/emacs/doom/packages.el
+++ b/modules/emacs/doom/packages.el
@@ -4,16 +4,12 @@
 
 (unpin! evil-collection)
 
+(package! treesit-auto)
+
 (package! xclip)
 
 (package! org-roam-ui)
-
-;; https://github.com/doomemacs/doomemacs/issues/8166
-;; https://github.com/org-roam/org-roam/issues/2485
-(unpin! emacsql)
-(package! emacsql
-  :recipe (:host github :repo "magit/emacsql")
-  :pin "491105a01f58bf0b346cbc0254766c6800b229a2")
+(package! org-roam-timestamps)
 
 (package! nickel-mode)
 
@@ -26,6 +22,11 @@
 (package! ellama)
 (package! magit-gptcommit)
 
+(unpin! (:tools tree-sitter))
+
+(package! typst-ts-mode
+  :recipe (:host codeberg :repo "meow_king/typst-ts-mode"))
+
 ;; (package! tvl
 ;;   :recipe (:host nil
 ;;            :repo "https://code.tvl.fyi/depot.git:/tools/emacs-pkgs/tvl.git"

Consider giving Nix/NixOS a try! <3