diff --git a/modules/base/emacs/base-init.el b/modules/base/emacs/base-init.el index 86c9766c..80b8b3d9 100644 --- a/modules/base/emacs/base-init.el +++ b/modules/base/emacs/base-init.el @@ -13,6 +13,7 @@ (use-package diminish) ;; For :general in (use-package). Keybinding management framework. (use-package general + :after evil :config (general-evil-setup t) @@ -20,7 +21,7 @@ (general-create-definer lmap :states '(normal visual insert emacs motion) :prefix "SPC" - :non-normal-prefix "C-SPC" + :global-prefix "C-SPC" ) (lmap @@ -56,6 +57,22 @@ ) ) +;; Vim keybindings +(use-package evil + :custom + (evil-want-keybinding nil "Disable default evil keybindings, since + evil-collection is a superset. See + https://github.com/emacs-evil/evil-collection/issues/60.") + (evil-want-integration t "Also needed for evil-collection") + :config (evil-mode 1) + ) + +;; Vim keybindings in other packages +(use-package evil-collection + :after (evil) + :config (evil-collection-init) + ) + ;; Better defaults that aren't defaults for some reason. (use-package better-defaults ;; But don't enable ido-mode... @@ -65,18 +82,18 @@ ;; Autocomplete (use-package company :diminish (company-mode) + :defer t :config (global-company-mode) ) ;; Prescient in company (use-package company-prescient + :after (company prescient) :config (company-prescient-mode 1) ) ;; Replacements for emacs built-ins that better integrate with `selectrum'. (use-package consult - :demand t - :custom (consult-project-root-function #'projectile-project-root "Use projectile to determine project roots.") :general (lmap "bb" '(consult-buffer :which-key "switch") @@ -89,6 +106,7 @@ ;; General emacs settings (use-package emacs :ensure nil ;; Not a real package, but a place to collect global settings + :demand t :hook ;; Always display line numbers for text-based modes ((text-mode prog-mode) . display-line-numbers-mode) @@ -97,7 +115,7 @@ ;; major modes. ((text-mode prog-mode) . electric-pair-mode) :custom - (create-lockfiles nil "I'm the only user on my devices, so don't clutter with lockfiles") + (create-lockfiles nil "I'm the only user on my devices and use emacs as a daemon, so don't clutter with lockfiles") (inhibit-startup-screen t "Don't show default startup screen") :config ;; Only ask for y/n, never for yes/no. @@ -124,31 +142,16 @@ (column-number-mode) ) -;; Vim keybindings -(use-package evil - :custom - (evil-want-keybinding nil "Disable default evil keybindings, since - evil-collection is a superset. See - https://github.com/emacs-evil/evil-collection/issues/60.") - (evil-want-integration t "Also needed for evil-collection") - :config (evil-mode 1) - ) - -;; Vim keybindings in other packages -(use-package evil-collection - :after (evil) - :config (evil-collection-init) - ) - ;; Linting (use-package flycheck + :defer t :diminish (flycheck-mode) :config (global-flycheck-mode) ) ;; Annotations in selection interface (use-package marginalia - :demand t + :after (selectrum) :custom (marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) :config @@ -174,7 +177,9 @@ (use-package no-littering :custom (user-emacs-directory (expand-file-name "~/.cache/emacs/") "Don't put files into .emacs.d") - (url-history-file (expand-file-name "url/history" user-emacs-directory) "Same for url-history file") + :config + ;; Also make sure auto-save files are saved out-of-tree + (setq auto-save-file-name-transforms `((".*" ,(no-littering-expand-var-file-name "auto-save/") t))) ) ;; Orderless filtering @@ -210,6 +215,7 @@ ;; Prescient integration in selectrum (use-package selectrum-prescient + :after (selectrum prescient) :custom (selectrum-prescient-enable-filtering nil "`orderless' manages the filtering part.") :config (selectrum-prescient-mode 1)) diff --git a/modules/base/emacs/default.nix b/modules/base/emacs/default.nix index b4325368..baf5a05b 100644 --- a/modules/base/emacs/default.nix +++ b/modules/base/emacs/default.nix @@ -16,7 +16,7 @@ readOnly = true; default = pkgs.emacsWithPackagesFromUsePackage { config = config.chvp.base.emacs.fullConfig; - package = pkgs.emacsPgtk; + package = pkgs.emacsPgtkGcc; alwaysEnsure = true; # mu4e is included in the mu package and should be used from there extraEmacsPackages = epkgs: lib.optional config.chvp.graphical.mail.enable pkgs.mu; diff --git a/modules/base/nix/default.nix b/modules/base/nix/default.nix index 4f6fb04b..38150705 100644 --- a/modules/base/nix/default.nix +++ b/modules/base/nix/default.nix @@ -62,11 +62,16 @@ in emacs.extraConfig = [ '' ;; Nix syntax support - (use-package nix-mode :mode "\\.nix\\'") + (use-package nix-mode + :mode "\\.nix\\'" + ) '' ] ++ lib.optional config.chvp.base.nix.enableDirenv '' ;; Direnv integration in emacs. - (use-package direnv :config (direnv-mode)) + (use-package direnv + :defer t + :config (direnv-mode) + ) ''; zfs = { homeLinks = diff --git a/modules/development/default.nix b/modules/development/default.nix index d3474286..a1cfde45 100644 --- a/modules/development/default.nix +++ b/modules/development/default.nix @@ -18,13 +18,17 @@ '' ;; Editorconfig (use-package editorconfig + :defer t :diminish (editorconfig-mode) :custom (editorconfig-get-properties-function 'editorconfig-get-properties) :config (editorconfig-mode 1) ) ;; Language server support - (use-package lsp-mode :commands (lsp)) + (use-package lsp-mode + :commands (lsp lsp-deferred) + :config (lsp-enable-which-key-integration t) + ) ;; Markdown syntax support (use-package markdown-mode @@ -41,38 +45,50 @@ ) ;; R language support - (use-package ess) + (use-package ess + :mode "\\.r\\'" + :mode "\\.R\\'" + ) ;; Haskell language support (use-package haskell-mode - :mode "\\.hs\\'") + :mode "\\.hs\\'" + ) ;; Python syntax support - (use-package python-mode :mode "\\.py\\'") + (use-package python-mode + :mode "\\.py\\'" + ) ;; Ruby language support (use-package ruby-mode :ensure nil ;; Included with emacs + :mode "\\.\\(?:cap\\|gemspec\\|irbrc\\|gemrc\\|rake\\|rb\\|ru\\|thor\\)\\'" + :mode "\\(?:Brewfile\\|Capfile\\|Gemfile\\(?:\\.[a-zA-Z0-9._-]+\\)?\\|[rR]akefile\\)\\'" :custom (ruby-insert-encoding-magic-comment nil "Don't insert encoding magic comment") ) ;; Rust language support - (use-package rust-mode :mode "\\.rs\\'") + (use-package rust-mode + :mode "\\.rs\\'" + ) ;; TypeScript language support (use-package typescript-mode - :mode "\\.ts\\'") + :mode "\\.ts\\'" + ) ;; Vue language support (use-package vue-mode - :mode "\\.vue\\'") + :mode "\\.vue\\'" + ) ;; HTML (and HTML template) support (use-package web-mode - :mode "\\.html\\'" - :mode "\\.html\\.erb\\'" - ) + :mode "\\.html\\'" + :mode "\\.html\\.erb\\'" + ) '' ]; development = { diff --git a/modules/development/git/default.nix b/modules/development/git/default.nix index a5d55d60..78a74bde 100644 --- a/modules/development/git/default.nix +++ b/modules/development/git/default.nix @@ -56,7 +56,6 @@ ;; Git integration (use-package magit - :demand t :general (lmap "g" '(:ignore t :which-key "git") @@ -66,8 +65,8 @@ ;; Project management (use-package projectile - :after (ripgrep selectrum) - :demand t + :commands (projectile-project-root) + :custom (consult-project-root-function #'projectile-project-root "Use projectile to determine project roots.") :diminish (projectile-mode) :config (projectile-mode 1) :general @@ -84,7 +83,9 @@ ) ;; Ripgrep support (needed for `projectile-ripgrep') - (use-package ripgrep) + (use-package ripgrep + :after (projectile) + ) '' ]; home-manager.users.charlotte = { ... }: base; diff --git a/modules/graphical/mail/default.nix b/modules/graphical/mail/default.nix index 1d30cf99..a0452fe9 100644 --- a/modules/graphical/mail/default.nix +++ b/modules/graphical/mail/default.nix @@ -113,7 +113,7 @@ in (use-package mu4e ;; Use mu4e included in the mu package, see emacs.nix :ensure nil - :demand t + :commands (mu4e mu4e-update-index) :after (selectrum) :hook (mu4e-view-mode . display-line-numbers-mode) diff --git a/modules/graphical/pass/default.nix b/modules/graphical/pass/default.nix index edcef8c6..a6546088 100644 --- a/modules/graphical/pass/default.nix +++ b/modules/graphical/pass/default.nix @@ -17,6 +17,7 @@ '' (use-package auth-source-pass :ensure nil + :defer t :custom (auth-sources '(password-store)) (auth-source-pass-filename "${config.home-manager.users.charlotte.programs.password-store.settings.PASSWORD_STORE_DIR}")