diff options
author | azahi <azat@bahawi.net> | 2025-03-12 20:17:13 +0300 |
---|---|---|
committer | azahi <azat@bahawi.net> | 2025-03-12 20:17:13 +0300 |
commit | c81dc5a13b469c511fac6fa2390b70422d1b4da5 (patch) | |
tree | 4dab5909006ab5c25da6bd9fde6a714c7719ded7 /modules/emacs | |
parent | 2025-02-17 (diff) |
Diffstat (limited to 'modules/emacs')
-rw-r--r-- | modules/emacs/default.nix | 59 | ||||
-rw-r--r-- | modules/emacs/doom/config.el | 208 | ||||
-rw-r--r-- | modules/emacs/doom/init.el | 51 | ||||
-rw-r--r-- | modules/emacs/doom/packages.el | 23 |
4 files changed, 140 insertions, 201 deletions
diff --git a/modules/emacs/default.nix b/modules/emacs/default.nix index e546ddd..80d77a3 100644 --- a/modules/emacs/default.nix +++ b/modules/emacs/default.nix @@ -72,17 +72,16 @@ in { "doom/init.el".source = ./doom/init.el; "doom/packages.el".source = ./doom/packages.el; - "doom/config.el" = { - text = lib.concatLines [ + "doom/config.el".text = + [ ( let - extraBins = with pkgs; [ - (aspellWithDicts ( - p: with p; [ - en - ru - ] - )) # :checkers (spell +aspell) + packages = with pkgs; [ + (hunspellWithDicts [ + hunspellDicts.en-gb-large + hunspellDicts.en-us-large + hunspellDicts.ru-ru + ]) # :checkers (spell +hunspell) asmfmt # :editor format shirepyright # :lang (python +lsp) bash-language-server # :lang (sh +lsp) @@ -117,8 +116,10 @@ in haskell-language-server # :lang (haskell +lsp) haskellPackages.cabal-fmt # :lang haskell :editor format haskellPackages.hoogle # :lang haskell + helm-ls html-tidy # :lang web :editor format jdk # :lang java :lang plantuml :checkers grammar + jq # :lang (rest +jq) languagetool # :checkers grammar libxml2 # :lang data :editor format markdownlint-cli # :lang markdown @@ -132,7 +133,9 @@ in pandoc # :lang org markdown latex pinentry-emacs # doom! pre-commit # :tools magit + prettypst python3 # :lang python + python3Packages.debugpy # :lang (python +lsp) :tools debugger ripgrep # doom! rust-analyzer # :lang (rust +lsp) rustc # :lang rust @@ -156,18 +159,15 @@ in ]; in '' + ;;; init.el -*- lexical-binding: t; -*- + ;; Integrate packages which are required by various modules ;; without polluting the user's profile. - (setq exec-path (append exec-path '(${lib.concatMapStringsSep " " (x: ''"${x}/bin"'') extraBins}))) - (setenv "PATH" (concat (getenv "PATH") ":${lib.concatMapStringsSep ":" (x: "${x}/bin") extraBins}")) + (setq exec-path (append exec-path '(${lib.concatMapStringsSep " " (x: ''"${x}/bin"'') packages}))) + (setenv "PATH" (concat (getenv "PATH") ":${lib.concatMapStringsSep ":" (x: "${x}/bin") packages}")) - (appendq! auth-sources '(("${config.secrets.authinfo.path}"))) + (prependq! auth-sources '(("${config.secrets.authinfo.path}"))) - ;; 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 "${ pkgs.fetchurl { name = "tvl.el"; @@ -181,14 +181,15 @@ in skk-large-jisyo "${pkgs.skkDictionaries.l}/share/skk/SKK-JISYO.L") ;; :editor parinfer - (setq parinfer-rust-library "${pkgs.parinfer-rust-emacs}/lib/libparinfer_rust.so") + (setq parinfer-rust-library "${pkgs.parinfer-rust-emacs}/lib/libparinfer_rust.so" + parinfer-rust-auto-download nil) ;; :lang (org +roam2) :email mu4e (setq emacsql-sqlite-executable "${lib.getExe pkgs.emacsql-sqlite}") ;; :lang plantuml (setq plantuml-jar-path "${pkgs.plantuml}/lib/plantuml.jar" - plantuml-executable-path "${lib.getExe' pkgs.plantuml "plantuml"}" + plantuml-executable-path "${lib.getExe pkgs.plantuml}" org-plantuml-jar-path plantuml-jar-path org-plantuml-executable-path plantuml-executable-path) @@ -233,16 +234,28 @@ in '' ) (builtins.readFile ./doom/config.el) - ]; - }; + ] + |> lib.concatLines; }; programs = { emacs = { enable = true; - package = pkgs.emacs29-pgtk; + package = pkgs.emacs30-pgtk; + extraPackages = + epkgs: with epkgs; [ + (treesit-grammars.with-grammars ( + grammars: with grammars; [ + tree-sitter-typst + ] + )) + mu4e + vterm + ]; }; + git.extraConfig."github.com".user = lib.my.username; # :tools (magit +forge) + bash.initExtra = lib.mkAfter '' export PATH="$PATH:$XDG_CONFIG_HOME/emacs/bin" @@ -257,5 +270,7 @@ in ''; }; }; + + nixpkgs.overlays = [ inputs.emacs-overlay.overlays.default ]; }; } diff --git a/modules/emacs/doom/config.el b/modules/emacs/doom/config.el index d7ab80e..4ff9af8 100644 --- a/modules/emacs/doom/config.el +++ b/modules/emacs/doom/config.el @@ -1,6 +1,4 @@ -;; -;;; Misc -;; +;; Misc (setq! frame-title-format '("GNU Emacs")) @@ -22,9 +20,7 @@ (setq! migemo-options '("--quiet" "--emacs") skk-show-inline t) -;; -;;; Doom-specific -;; +;; Doom-specific (setq! doom-theme 'modus-operandi doom-modeline-icon nil @@ -32,9 +28,7 @@ doom-modeline-total-line-number t doom-modeline-height 30) -;; -;;; Editorconfig -;; +;; Editorconfig (setq! +editorconfig-mode-alist '((sh-mode . "sh")) ;; It's never a good idea to force specific indentation rules for Lisp, @@ -48,51 +42,31 @@ hy-mode dune-mode)) -;; -;;; LSP -;; +;; LSP (after! lsp-mode (setq! lsp-enable-server-download nil lsp-enable-suggest-server-download nil - lsp-modeline-code-action-fallback-icon "~")) + lsp-modeline-code-action-fallback-icon "~" + lsp-yaml-schemas `((,(intern "https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json") + . ["*-compose.y*"]) + (,(intern "https://json.schemastore.org/kustomization.json") + . ["kustomization.yaml"]) + (kubernetes + . ["*.yaml"])))) -;; -;;; 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 -;; - -(after! 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 "nixd") - :activation-fn (lsp-activate-on "nix") - :server-id 'nixd - :major-modes 'nix-mode)) - (add-hook 'nix-mode-hook 'lsp-deferred))) - -;; -;;; Go -;; +;; Go (setq! lsp-go-analyses '((unsedvariable . t) (unusedparams . t) (unusedwrite . t))) -;; -;;; Org -;; +;; Python + +(after! dap-mode + (setq dap-python-debugger 'debugpy)) + +;; Org (setq! org-directory "~/doc/org/" org-roam-directory "~/doc/roam/" @@ -149,88 +123,86 @@ (add-hook 'org-capture-mode-hook 'evil-insert-state) -;; -;;; LaTeX -;; +;; LaTeX (map! :map cdlatex-mode-map :i "TAB" #'cdlatex-tab) -;; -;;; Typst -;; +;; 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 -;; + (after! lsp-mode + (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)) + + (after! apheleia + (add-to-list 'apheleia-mode-alist '(typst-ts-mode . prettypst)) + (add-to-list 'apheleia-formatters '(prettypst "prettypst" "--use-std-in" "--use-std-out")))) + +(use-package! typst-preview + :custom + (typst-preview-invert-colors "never") + (typst-preview-open-browser-automatically t) + :config + (advice-add 'typst-preview-start :before (lambda (&rest r) + (setq tp--master-file buffer-file-name)))) + +;; PlantUML (setq! plantuml-default-exec-mode 'executable org-plantuml-exec-mode 'plantuml) -;; -;;; Elisp -;; +;; Elisp (after! flycheck (pushnew! flycheck-disabled-checkers 'emacs-lisp-checkdoc)) -;; -;;; Haskell -;; +;; Haskell (setq! lsp-haskell-formatting-provider "ormolu") -;; -;;; Nickel -;; +;; 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") - :server-id 'nls - :major-modes '(nickel-mode))) + (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 -;; +;; 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!)))) +;; (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) -(setq-hook! 'yaml-mode-hook +format-with-lsp nil) +;; Magit -;; -;;; Elfeed -;; +(setq! code-review-auth-login-marker 'forge) + +(add-hook 'code-review-mode-hook (lambda () + (persp-add-buffer (current-buffer)))) + +;; Elfeed (setq! elfeed-db-directory "~/.elfeed" elfeed-enclosure-default-dir (concat elfeed-db-directory "/enclosures") @@ -239,9 +211,7 @@ elfeed-goodies/entry-pane-size 0.75 elfeed-goodies/entry-pane-position 'bottom) -;; -;;; mu4e -;; +;; mu4e (after! mu4e (setq! sendmail-program (executable-find "msmtp") @@ -256,9 +226,7 @@ (setq-hook! 'mu4e-main-mode-hook mu4e-update-interval 30) -;; -;;; Circe -;; +;; Circe (setq! circe-network-options (mapcar (lambda (server) @@ -273,44 +241,12 @@ (+pass-get-secret "server/soju.shire.net/azahi")))) '("libera" "oftc" "hackint" "rizon"))) -;; -;;; Sops -;; +;; Sops (use-package! sops :hook (doom-first-file . global-sops-mode)) -;; -;;; 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)) - -;; -;;; LLM -;; +;; LLM (use-package! gptel :config diff --git a/modules/emacs/doom/init.el b/modules/emacs/doom/init.el index eddaf28..966b156 100644 --- a/modules/emacs/doom/init.el +++ b/modules/emacs/doom/init.el @@ -1,54 +1,54 @@ +;;; init.el -*- lexical-binding: t; -*- + (doom! :input japanese :completion - ;; company (corfu +icons +orderless +dabbrev) - vertico + (vertico +icons) :ui - deft - doom - (emoji +unicode) + ;; (emoji +unicode) hl-todo indent-guides ligatures modeline - nav-flash + ;; nav-flash ophints (popup +defaults) - (vc-gutter +diff-hl +pretty) - window-select + ;; unicode + (vc-gutter +pretty) + (window-select +switch-window) workspaces :editor (evil +everywhere) file-templates fold - (format +onsave) - ;; lispy - ;; multiple-cursors - ;; objed + (format +onsave +lsp) + multiple-cursors + (objed +manual) parinfer - ;; rotate-text + rotate-text snippets word-wrap :emacs - dired + (dired +dirvish +icons) electric eww - ibuffer + (ibuffer +icons) undo vc :term eshell + shell vterm :checkers - syntax - (spell +flyspell +everywhere +icons) + (syntax +icons) + (spell +hunspell +flyspell +everywhere) grammar :tools @@ -60,7 +60,7 @@ (eval +overlay) (lookup +dictionary +offline) (lsp +peek) - magit + (magit +forge) make (pass +auth) pdf @@ -70,7 +70,7 @@ upload :os - tty + ;; tty :lang (cc +lsp +tree-sitter) @@ -79,7 +79,7 @@ (go +lsp +tree-sitter) (graphql +lsp +tree-sitter) (haskell +lsp +tree-sitter) - javascript + (javascript +lsp +tree-sitter) (json +lsp +tree-sitter) (latex +latexmk +cdlatex +lsp) markdown @@ -88,12 +88,11 @@ plantuml graphviz (python +lsp +tree-sitter +pyright) - ;; (racket +lsp +tree-sitter +xp +hash-lang) - rest + (rest +jq) (rust +lsp +tree-sitter) - ;; (scheme +chicken +guile +racket) + (scheme +guile) (sh +lsp +tree-sitter) - web + (web +lsp +tree-sitter) (yaml +lsp +tree-sitter) :email @@ -103,7 +102,7 @@ calendar emms irc - (rss +org) + (rss +org +youtube) :config - (default +bindings +smartparens)) + (default +bindings +gnupg +smartparens)) diff --git a/modules/emacs/doom/packages.el b/modules/emacs/doom/packages.el index f818377..8084808 100644 --- a/modules/emacs/doom/packages.el +++ b/modules/emacs/doom/packages.el @@ -1,10 +1,6 @@ -(disable-packages! writegood-mode) - -(unpin! (:editor parinfer)) - -(unpin! evil-collection) +;;; init.el -*- lexical-binding: t; -*- -(package! treesit-auto) +(disable-packages! writegood-mode) (package! xclip) @@ -13,7 +9,10 @@ (package! nickel-mode) -(package! hledger-mode) +(package! typst-ts-mode + :recipe (:host codeberg :repo "meow_king/typst-ts-mode")) +(package! typst-preview + :recipe (:host github :repo "havarddj/typst-preview.el")) (package! sops :recipe (:host github :repo "djgoku/sops")) @@ -21,13 +20,3 @@ (package! gptel) (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" -;; :build nil)) |