From 0ed4c47c0e727283c46695987f60431ebb0ab278 Mon Sep 17 00:00:00 2001 From: Michael Thomson Date: Thu, 12 Feb 2026 15:50:39 -0500 Subject: [PATCH] removed nixos emacs --- modules/nixos/emacs/default.nix | 33 -- modules/nixos/emacs/init.el | 739 -------------------------------- 2 files changed, 772 deletions(-) delete mode 100644 modules/nixos/emacs/default.nix delete mode 100644 modules/nixos/emacs/init.el diff --git a/modules/nixos/emacs/default.nix b/modules/nixos/emacs/default.nix deleted file mode 100644 index d0385fa..0000000 --- a/modules/nixos/emacs/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{pkgs, ...}: { - services.emacs = { - enable = true; - package = pkgs.emacs-unstable; - }; - - environment.systemPackages = [ - pkgs.cmake - pkgs.cmake - pkgs.libtool - pkgs.glibtool - pkgs.graphviz - (pkgs.emacsWithPackagesFromUsePackage { - config = ./init.el; - - defaultInitFile = false; - - extraEmacsPackages = epkgs: [ - epkgs.mu4e - epkgs.pdf-tools - epkgs.vterm - - pkgs.tree-sitter - pkgs.fd - pkgs.ripgrep - pkgs.typescript-language-server - pkgs.typescript - pkgs.vscode-langservers-extracted - pkgs.nodejs - ]; - }) - ]; -} diff --git a/modules/nixos/emacs/init.el b/modules/nixos/emacs/init.el deleted file mode 100644 index 809e546..0000000 --- a/modules/nixos/emacs/init.el +++ /dev/null @@ -1,739 +0,0 @@ -;; performance enhancements -(setq gc-cons-threshold #x40000000) - -(setq read-process-output-max (* 1024 1024 4)) - -; ;; disable package.el on startup -; (setq package-enable-at-startup nil) -; ;; bootstrap `straight.el` -; (defvar bootstrap-version) -; (let ((bootstrap-file -; (expand-file-name -; "straight/repos/straight.el/bootstrap.el" -; (or (bound-and-true-p straight-base-dir) -; user-emacs-directory))) -; (bootstrap-version 7)) -; (unless (file-exists-p bootstrap-file) -; (with-current-buffer -; (url-retrieve-synchronously -; "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" -; 'silent 'inhibit-cookies) -; (goto-char (point-max)) -; (eval-print-last-sexp))) -; (load bootstrap-file nil 'nomessage)) -; (straight-use-package 'use-package) - -;; add MELPA -(require 'package) -(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) - -; (straight-use-package 'org) - -;; EMACS -(use-package emacs - :ensure nil - :custom - (column-number-mode t) - (auto-save-default nil) - (create-lockfiles nil) - (display-line-numbers-type 'relative) - (global-auto-revert-non-file-buffers t) - (history-length 25) - (inhibit-startup-message t) - (initial-scratch-message "") - (ispell-dictionary "en_US") - (make-backup-files nil) - (pixel-scroll-precision-mode t) - (pixel-scroll-precision-use-momentum nil) - (ring-bell-function 'ignore) - (split-width-threshold 300) - (switch-to-buffer-obey-display-actions t) - (tab-always-indent t) - (tab-width 4) - ;; (treesit-font-lock-level 4) - (truncate-lines t) - (use-dialog-box nil) - (use-short-answers t) - ;;(warning-minimum-level :emergency) - - :hook - (prog-mode . display-line-numbers-mode) - - :config - (defun skip-these-buffers (_window buffer _bury-or-kill) - "Function for `switch-to-prev-buffer-skip'." - (string-match "\\*[^*]+\\*" (buffer-name buffer))) - (setq switch-to-prev-buffer-skip 'skip-these-buffers) - - (set-face-attribute 'default nil :family "JetBrainsMono Nerd Font" :height 100) - - (setq custom-file (locate-user-emacs-file "custom-vars.el")) - (load custom-file 'noerror 'nomessage) - - :init - (tool-bar-mode -1) - (menu-bar-mode -1) - (scroll-bar-mode -1) - (global-hl-line-mode 1) - (global-auto-revert-mode 1) - (indent-tabs-mode -1) - (recentf-mode 1) - (savehist-mode 1) - (save-place-mode 1) - (winner-mode 1) - (xterm-mouse-mode 1) - (file-name-shadow-mode 1)) - -(use-package doom-themes - :ensure t - :custom - ;; Global settings (defaults) - (doom-themes-enable-bold t) ; if nil, bold is universally disabled - (doom-themes-enable-italic t) ; if nil, italics is universally disabled - :config - (load-theme 'modus-operandi t) - - ;; Enable flashing mode-line on errors - (doom-themes-visual-bell-config) - ;; Corrects (and improves) org-mode's native fontification. - (doom-themes-org-config)) - -(use-package eldoc - :ensure nil - :init - (global-eldoc-mode)) - -(use-package flymake - :ensure nil - :defer t - :hook (prog-mode . flymake-mode)) - -(use-package org - :ensure nil - :defer t - :custom - (org-return-follows-link t) - (org-hide-emphasis-markers t) - (org-log-into-drawer t) - (org-log-done 'time) - (org-agenda-span 'day) - (org-todo-keywords - '((sequence "TODO(t)" "NEXT(n)" "PROG(p)" "INTR(i)" "WAIT(w)" "SOMEDAY(s)" "|" "DONE(d)" "CANCELLED(c)"))) - (org-capture-templates - `(("i" "Inbox" entry (file+headline "todo.org" "Inbox") - ,(concat "* TODO %?\n" - "%U")) - ("j" "Journal" entry (file denote-journal-path-to-new-or-existing-entry) - "* %U %?\n%i\n%a" - :kill-buffer t - :empty-lines 1) - ("@" "Inbox [email]" entry (file+headline "todo.org" "Inbox") - ,(concat "* TODO Process \"%a\" %?\n" - "%U")))) - (org-refile-use-outline-path 'file) - (org-outline-path-complete-in-steps nil) - (org-refile-targets '((nil :maxlevel . 9) - (org-agenda-files :maxlevel . 9))) - (org-agenda-skip-scheduled-if-done t) - (org-agenda-skip-deadline-if-done t) - (org-agenda-include-deadlines t) - (org-agenda-include-diary t) - (org-agenda-block-separator nil) - (org-agenda-compact-blocks t) - (org-agenda-start-with-log-mode t) - :config - (setq org-directory "~/org") - (setq org-agenda-files (list "todo.org")) - :hook - (org-mode . org-indent-mode) - :init - (require 'org-tempo)) - -(use-package org-modern - :ensure t - :hook - (org-mode . global-org-modern-mode) - :custom - (org-modern-keyword nil) - (org-modern-checkbox nil) - (org-modern-table nil)) - -(use-package toc-org - :ensure t - :hook (org-mode . toc-org-mode)) - -(use-package denote - :ensure t - :hook - ((dired-mode . denote-dired-mode) - (text-mode . denote-fontify-links-mode)) - :bind - (("C-c n n" . denote) - ("C-c n r" . denote-rename-file) - ("C-c n l" . denote-link) - ("C-c n b" . denote-backlinks) - ("C-c n d" . denote-dired)) - :config - (setq denote-directory (expand-file-name "~/org/note")) - (denote-rename-buffer-mode 1)) - -(use-package consult-denote - :ensure t - :bind - (("C-c n f" . consult-denote-find) - ("C-c n g" . consult-denote-grep)) - :config - (consult-denote-mode 1)) - -(use-package denote-journal - :ensure t - :commands (denote-journal-new-entry - denote-journal-new-or-existing-entry - denote-journal-link-or-create-entry ) - :hook (calendar-mode . denote-journal-calendar-mode) - :config - (setq denote-journal-directory - (expand-file-name "journal" denote-directory)) - (setq denote-journal-keyword "journal") - (setq denote-journal-title-format 'day-date-month-year)) - -;; (use-package org-superstar -;; :ensure t -;; :hook -;; (org-mode . org-superstar-mode)) - -(use-package org-super-agenda - :ensure t - :custom - (org-super-agenda-groups - '( - (:name "Today" - :time-grid t - :date today - :todo "TODAY" - :scheduled today - :order 1) - (:name "Next Items" - :todo "NEXT" - :order 2) - (:name "Due Today" - :deadline today - :order 3) - (:name "Due Soon" - :deadline future - :order 4) - (:name "Overdue" - :deadline past - :order 5) - (:name "Scheduled Soon" - :scheduled future - :order 6) - (:name "Waiting" - :todo "WAIT" - :order 7) - (:habit t - :order 8) - (:name "Project" - :category "Project" - :order 9) - ))) - -(use-package which-key - :ensure nil - :defer t - :hook - (after-init . which-key-mode)) - -(use-package nerd-icons - :ensure t - :defer t) - -(use-package nerd-icons-dired - :ensure t - :defer t - :hook - (dired-mode . nerd-icons-dired-mode)) - -(use-package doom-modeline - :ensure t - :config - (display-battery-mode t) - (display-time-mode t) - :init (doom-modeline-mode 1)) - -(use-package evil - :ensure t - :defer t - :hook - (after-init . evil-mode) - :init - (setq evil-want-integration t) - (setq evil-want-keybinding nil) - (setq evil-want-C-u-scroll t) - (setq evil-want-C-u-delete t) - :config - (evil-set-undo-system 'undo-tree) - (evil-set-leader 'normal (kbd "SPC")) - (evil-set-leader 'visual (kbd "SPC"))) - -(use-package evil-collection - :defer t - :ensure t - :custom - (evil-collection-want-find-usages-bindings t) - :hook - (evil-mode . evil-collection-init)) - -(use-package evil-surround - :ensure t - :after evil-collection - :config - (global-evil-surround-mode 1)) - -(use-package evil-matchit - :ensure t - :after evil-collection - :config - (global-evil-matchit-mode 1)) - -(use-package undo-tree - :defer t - :ensure t - :hook - (after-init . global-undo-tree-mode) - :init - (setq undo-tree-visualizer-timestamps t - undo-tree-visualizer-diff t - undo-limit 800000 - undo-strong-limit 12000000 - undo-outer-limit 120000000) - :config - (setq undo-tree-history-directory-alist '(("." . "~/.config/emacs/.cache/undo")))) - -(use-package general - :ensure t - :config - (defun mthomson/lsp-describe-and-jump () - "Show hover documentation and jump to *lsp-help* buffer." - (interactive) - (lsp-describe-thing-at-point) - (let ((help-buffer "*lsp-help*")) - (when (get-buffer help-buffer) - (switch-to-buffer-other-window help-buffer)))) - (general-evil-setup t) - - (general-define-key - :states 'normal - "] d" '(flymake-goto-next-error :wk "Goto next error") - "[ d" '(flymake-goto-prev-error :wk "Goto prev error") - "] c" '(diff-hl-next-hunk :wk "Goto next hunk") - "[ c" '(diff-hl-previous-hunk :wk "Goto prev hunk") - "K" '(mthomson/lsp-describe-and-jump :wk "Describe")) - - (general-define-key - :states 'normal - :predicate 'lsp-mode - "g r" '(lsp-find-references :wk "Go to references") - "g d" '(lsp-find-definition :wk "Go to definition") - "g D" '(lsp-find-declaration :wk "Go to declaration") - "g I" '(lsp-find-implementation :wk "Go to implementation") - "g t" '(lsp-find-type-definition :wk "Go to type definition") - "K" '(mthomson/lsp-describe-and-jump :wk "Describe")) - - (general-create-definer my-leader-def - :states '(normal insert visual motion emacs) - :keymaps 'override - :prefix "SPC" - :global-prefix "C-SPC") - (my-leader-def - "f" '(:ignore t :wk "Find") - "f c" '((lambda () (interactive) (find-file "~/.config/emacs/init.el")) :wk "Edit emacs config") - "f r" '(consult-recent-file :wk "Recent files") - "f f" '(consult-find :wk "Find Files") - "f g" '(consult-ripgrep :wk "Ripgrep search in files") - "f l" '(consult-line :wk "Find line") - "f i" '(consult-imenu :wk "Imenu buffer locations")) - - (my-leader-def - "c" '(:ignore t :wk "Code") - "c a" '(lsp-execute-code-action :wk "Code actions")) - - (my-leader-def - "h" '(:ignore t :wk "Help") - "h v" '(describe-variable :wk "Describe variable") - "h f" '(describe-function :wk "Describe function") - "h k" '(describe-key :wk "Describe key")) - - (my-leader-def - "p" '(:ignore t :wk "Project") - "p b" '(consult-project-buffer :wk "Project buffers") - "p p" '(project-switch-project :wk "Project switch") - "p f" '(project-find-file :wk "Project find file") - "p g" '(project-find-regexp :wk "Project grep file") - "p k" '(project-kill-buffers :wk "Project kill buffers") - "p d" '(project-dired :wk "Project dired")) - - (my-leader-def - "x" '(:ignore t :wk "Flymake") - "x x" '(consult-flymake :wk "Show diagnostics")) - - (my-leader-def - "g" '(:ignore t :wk "Git") - "g g" '(magit-status :wk "Magit status") - "g l" '(magit-log-current :wk "Magit log")) - - (my-leader-def - "u" '(undo-tree-visualize :wk "Undo-tree"))) - -(use-package vertico - :ensure t - :hook - (after-init . vertico-mode)) - -(use-package orderless - :ensure t - :custom - (completion-styles '(orderless partial-completion basic)) - (completion-category-defaults nil) - (completion-category-overrides '((file (styles partial-completion))))) - -(use-package marginalia - :ensure t - :hook - (after-init . marginalia-mode)) - -(use-package consult - :ensure t - :defer t) - -(use-package embark - :ensure t - :defer t) - -(use-package embark-consult - :ensure t - :hook - (embark-collect-mode . consult-preview-at-point-mode)) - -(use-package treesit-auto - :ensure t - :after emacs - :custom - (treesit-auto-install 'prompt) - :config - (treesit-auto-add-to-auto-mode-alist 'all) - (global-treesit-auto-mode) - :init - (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))) - -(use-package corfu - :ensure t - :custom - (corfu-auto t) - (corfu-cycle t) - (corfu-auto-prefix 2) - (corfu-popupinfo-mode t) - (corfu-popupinfo-delay 0.5) - (corfu-on-exact-match nil) - (completion-ignore-case t) - :init - (global-corfu-mode)) - -(use-package nerd-icons-corfu - :ensure t - :after corfu - :init (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)) - -(use-package cape - :ensure t - :after corfu - :bind ("C-c p" . cape-prefix-map) - :init - (add-hook 'completion-at-point-functions #'cape-dabbrev) - (add-hook 'completion-at-point-functions #'cape-dict) - (add-hook 'completion-at-point-functions #'cape-file) - (add-hook 'completion-at-point-functions #'cape-elisp-block) - (add-hook 'completion-at-point-functions #'cape-keyword)) - -;; (use-package company -;; :ensure t -;; :defer t -;; :custom -;; (company-tooltip-align-annotations t) -;; (company-minimum-prefix-length 1) -;; (company-idle-delay 0.2) -;; :hook -;; (after-init . global-company-mode)) - -(use-package lsp-mode - :ensure t - :defer t - :hook ( - (bash-ts-mode . lsp) - (typescript-ts-mode . lsp) - (tsx-ts-mode . lsp) - (js-mode . lsp) - (js-ts-mode . lsp) - (css-ts-mode . lsp) - (c-ts-mode . lsp) - (c++-ts-mode . lsp) - (lsp-mode . lsp-enable-which-key-integration) - (lsp-completion-mode . my/lsp-mode-setup-completion)) - :commands lsp - :init - (defun my/lsp-mode-setup-completion () - (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) - '(flex))) ;; Configure flex - :custom - (lsp-keymap-prefix "C-c l") ;; Set the prefix for LSP commands. - (lsp-inlay-hint-enable t) ;; Enable inlay hints. - (lsp-completion-provider :none) ;; Disable the default completion provider. - (lsp-session-file (locate-user-emacs-file ".lsp-session")) ;; Specify session file location. - (lsp-log-io nil) ;; Disable IO logging for speed. - (lsp-idle-delay 0) ;; Set the delay for LSP to 0 (debouncing). - (lsp-keep-workspace-alive nil) ;; Disable keeping the workspace alive. - ;; Core settings - (lsp-enable-xref t) ;; Enable cross-references. - (lsp-auto-configure t) ;; Automatically configure LSP. - (lsp-enable-links nil) ;; Disable links. - (lsp-eldoc-enable-hover t) ;; Enable ElDoc hover. - (lsp-enable-file-watchers nil) ;; Disable file watchers. - (lsp-enable-folding nil) ;; Disable folding. - (lsp-enable-imenu t) ;; Enable Imenu support. - (lsp-enable-indentation t) ;; Enable indentation. - (lsp-enable-on-type-formatting nil) ;; Disable on-type formatting. - (lsp-enable-suggest-server-download t) ;; Enable server download suggestion. - (lsp-enable-symbol-highlighting t) ;; Enable symbol highlighting. - (lsp-enable-text-document-color nil) ;; Disable text document color. - ;; Modeline settings - (lsp-modeline-code-actions-enable nil) ;; Keep modeline clean. - (lsp-modeline-diagnostics-enable nil) ;; Use `flymake' instead. - (lsp-modeline-workspace-status-enable t) ;; Display "LSP" in the modeline when enabled. - (lsp-signature-doc-lines 1) ;; Limit echo area to one line. - (lsp-eldoc-render-all t) ;; Render all ElDoc messages. - ;; Completion settings - (lsp-completion-enable t) ;; Enable completion. - (lsp-completion-enable-additional-text-edit t) ;; Enable additional text edits for completions. - (lsp-enable-snippet t) ;; Disable snippets - (lsp-completion-show-kind t) ;; Show kind in completions. - ;; Lens settings - (lsp-lens-enable t) ;; Enable lens support. - ;; Headerline settings - (lsp-headerline-breadcrumb-enable-symbol-numbers t) ;; Enable symbol numbers in the headerline. - (lsp-headerline-arrow "▶") ;; Set arrow for headerline. - (lsp-headerline-breadcrumb-enable-diagnostics nil) ;; Disable diagnostics in headerline. - (lsp-headerline-breadcrumb-icons-enable nil) ;; Disable icons in breadcrumb. - ;; Semantic settings - (lsp-semantic-tokens-enable nil)) ;; Disable semantic tokens. - -;; lsp-booster -(defun lsp-booster--advice-json-parse (old-fn &rest args) - "Try to parse bytecode instead of json." - (or - (when (equal (following-char) ?#) - (let ((bytecode (read (current-buffer)))) - (when (byte-code-function-p bytecode) - (funcall bytecode)))) - (apply old-fn args))) -(advice-add (if (progn (require 'json) - (fboundp 'json-parse-buffer)) - 'json-parse-buffer - 'json-read) - :around - #'lsp-booster--advice-json-parse) - -(defun lsp-booster--advice-final-command (old-fn cmd &optional test?) - "Prepend emacs-lsp-booster command to lsp CMD." - (let ((orig-result (funcall old-fn cmd test?))) - (if (and (not test?) ;; for check lsp-server-present? - (not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper - lsp-use-plists - (not (functionp 'json-rpc-connection)) ;; native json-rpc - (executable-find "emacs-lsp-booster")) - (progn - (when-let ((command-from-exec-path (executable-find (car orig-result)))) ;; resolve command from exec-path (in case not found in $PATH) - (setcar orig-result command-from-exec-path)) - (message "Using emacs-lsp-booster for %s!" orig-result) - (cons "emacs-lsp-booster" orig-result)) - orig-result))) -(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command) - -;; (use-package yasnippet -;; :ensure t -;; :straight t) - -;; (use-package yasnippet-snippets -;; :ensure t -;; :straight t -;; :hook (prog-mode . yas-minor-mode)) - -;; Configure Tempel -(use-package tempel - :ensure t - :bind (("M-+" . tempel-complete) - ("M-*" . tempel-insert)) - :init - (defun tempel-setup-capf () - (setq-local completion-at-point-functions - (cons #'tempel-expand - completion-at-point-functions))) - (add-hook 'conf-mode-hook 'tempel-setup-capf) - (add-hook 'prog-mode-hook 'tempel-setup-capf) - (add-hook 'text-mode-hook 'tempel-setup-capf) - (add-hook 'prog-mode-hook #'tempel-abbrev-mode) - (global-tempel-abbrev-mode)) - -(use-package tempel-collection - :ensure t) - -(use-package exec-path-from-shell - :ensure t - :init - (exec-path-from-shell-initialize)) - -;; (use-package direnv -;; :ensure t -;; :config -;; (direnv-mode)) - -(use-package envrc - :ensure t - :init - (setq envrc-show-summary-in-minibuffer nil) - :hook - (after-init . envrc-global-mode)) - -;; (use-package add-node-modules-path -;; :ensure t -;; :defer t -;; :custom -;; (eval-after-load 'typescript-ts-mode -;; '(add-hook 'typescript-ts-mode-hook #'add-node-modules-path)) -;; (eval-after-load 'tsx-ts-mode -;; '(add-hook 'tsx-ts-mode-hook #'add-node-modules-path)) -;; (eval-after-load 'typescriptreact-mode -;; '(add-hook 'typescriptreact-mode-hook #'add-node-modules-path)) -;; (eval-after-load 'js-mode -;; '(add-hook 'js-mode-hook #'add-node-modules-path))) - -(use-package pulsar - :defer t - :ensure t - :hook - (after-init . pulsar-global-mode) - :config - (setq pulsar-pulse t) - (setq pulsar-delay 0.025) - (setq pulsar-iterations 10) - (setq pulsar-face 'evil-ex-lazy-highlight) - - (add-to-list 'pulsar-pulse-functions 'evil-scroll-down) - (add-to-list 'pulsar-pulse-functions 'flymake-goto-next-error) - (add-to-list 'pulsar-pulse-functions 'flymake-goto-prev-error) - (add-to-list 'pulsar-pulse-functions 'evil-yank) - (add-to-list 'pulsar-pulse-functions 'evil-yank-line) - (add-to-list 'pulsar-pulse-functions 'evil-delete) - (add-to-list 'pulsar-pulse-functions 'evil-delete-line) - (add-to-list 'pulsar-pulse-functions 'evil-jump-item) - (add-to-list 'pulsar-pulse-functions 'diff-hl-next-hunk) - (add-to-list 'pulsar-pulse-functions 'diff-hl-previous-hunk)) - -(use-package magit - :ensure t - :defer t) - -(use-package diff-hl - :ensure t - :config - (global-diff-hl-mode)) - -;; Mu4e -(use-package mu4e - :config - ;; mbsync - ;;(setq mu4e-mu-binary "mu") - (setq mu4e-get-mail-command (concat (executable-find "mbsync") " -a")) - (setq mu4e--get-mail-password-regexp "^Master Password: $") - (setq mu4e-update-interval 300) - (setq mu4e-change-filenames-when-moving t) - (setq mu4e-attachment-dir "~/Downloads") - - ;;smtp - (setq send-mail-function 'sendmail-send-it) - (setq sendmail-program (executable-find "msmtp")) - (setq message-sendmail-envelop-from 'header) - - ;; contexts - (setq mu4e-contexts - `(,(make-mu4e-context - :name "personal" - :enter-func - (lambda () (mu4e-message "Opening personal")) - :leave-func - (lambda () (mu4e-message "Closing personal")) - :match-func - (lambda (msg) - (when msg - (string-match-p "^/personal" (mu4e-message-field msg :maildir)))) - :vars '((user-mail-address . "michael@michaelthomson.dev" ) - (user-full-name . "Michael Thomson") - (mu4e-drafts-folder . "/personal/Drafts") - (mu4e-refile-folder . "/personal/Archive") - (mu4e-sent-folder . "/personal/Sent") - (mu4e-trash-folder . "/personal/Trash")))))) - -(use-package notmuch - :ensure t - :bind (("C-c m" . notmuch-hello)) - :custom - (notmuch-search-oldest-first nil) - (notmuch-saved-searches - '((:name "inbox" :query "tag:inbox") - (:name "unread" :query "tag:unread") - (:name "sent" :query "tag:sent") - (:name "drafts" :query "tag:draft"))) - :init - (add-hook 'message-send-hook (lambda () - (let ((from (message-fetch-field "From"))) - (if (string-match-p (regexp-quote "michael@michaelthomson.dev") from) - (progn - (setq sendmail-program "msmtp") - (setq message-sendmail-extra-arguments nil)) - (progn - (setq sendmail-program "gmi") - (setq message-sendmail-extra-arguments '("send" "--quiet" "-t" "-C" "~/Maildir/work"))))))) - :config - (setq notmuch-fcc-dirs nil)) - -(use-package ol-notmuch - :ensure t - :bind - ("C-c l" . org-store-link)) - -;; epubs -(use-package nov - :ensure t) - -;; docker -(use-package docker - :ensure t - :bind ("C-c d" . docker)) - -(use-package vterm - :ensure t) - -(use-package nix-mode - :ensure t - :mode "\\.nix\\'") - - -;; RSS -(use-package elfeed - :ensure t - :custom - (elfeed-feeds - '(("https://hnrss.org/frontpage" hn) - ("https://lwn.net/headlines/rss" lwn)))) - -(provide 'init) -;;; init.el ends here