;; 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) (use-package! xclip :config (setq xclip-program "wl-copy" xclip-select-enable-clipboard t xclip-mode t xclip-method 'wl-copy)) (setq! migemo-options '("--quiet" "--emacs") skk-show-inline t) ;; 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")) ;; It's never a good idea to force specific indentation rules for Lisp, ;; the only rule should be is not to use tabs. editorconfig-exclude-modes '(emacs-lisp-mode clojure-mode scheme-mode lisp-mode racket-mode fennel-mode hy-mode dune-mode)) ;; LSP (after! lsp-mode (setq! lsp-enable-server-download nil lsp-enable-suggest-server-download nil 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"])))) ;; Go (setq! lsp-go-analyses '((unsedvariable . t) (unusedparams . t) (unusedwrite . t))) ;; Python (after! dap-mode (setq dap-python-debugger 'debugpy)) ;; Org (setq! org-directory "~/doc/org/" org-roam-directory "~/doc/roam/" org-roam-db-location (concat org-roam-directory ".db")) (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) (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)) (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 (map! :map cdlatex-mode-map :i "TAB" #'cdlatex-tab) ;; Typst (use-package! typst-ts-mode :custom (typst-ts-watch-options "--open") :config (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 (after! flycheck (pushnew! flycheck-disabled-checkers 'emacs-lisp-checkdoc)) ;; 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) ;; Magit (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") 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 (after! mu4e (setq! 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 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) ;; 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 :hook (doom-first-file . global-sops-mode)) ;; LLM (use-package! gptel :config (setq! gptel-model 'codegemma:7b gptel-backend (gptel-make-ollama "ollama" :host "eonwe.shire.net:11434" :stream t :models '(qwen2.5-coder:32b-instruct-q3_K_M qwen2.5-coder:14b-instruct-q8_0 qwen2.5-coder:7b-instruct-fp16 llama3.2:3b-instruct-fp16 llama3.1:8b-instruct-fp16 llama3:8b-instruct-fp16 gemma:7b-instruct-q8_0 mistral:7b-instruct-fp16)))) (use-package! ellama :custom (ellama-naming-scheme 'ellama-generate-name-by-time) :config (require 'llm-ollama) (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")) (magit-gptcommit-status-buffer-setup))