From 20e22b0d87d21e030320d86d61c9a46aa7057d9f Mon Sep 17 00:00:00 2001 From: Evie Litherland-Smith Date: Wed, 7 Aug 2024 15:13:03 +0100 Subject: [PATCH] Setup ensure rather than maintaining separate package-selected-packages list --- README.org | 180 +++++++++++++++++++++++++---------------------------- 1 file changed, 86 insertions(+), 94 deletions(-) diff --git a/README.org b/README.org index baabcc4..040662e 100644 --- a/README.org +++ b/README.org @@ -16,48 +16,13 @@ time it's used. (use-package package :custom (package-archive-priorities '(("melpa" . 4) ("stable" . 3) ("nongnu" . 2) ("gnu" . 1))) - (package-selected-packages - '( - ;; UI - base16-theme doom-modeline nerd-icons nerd-icons-completion - nerd-icons-corfu nerd-icons-dired nerd-icons-ibuffer - ligature which-key diff-hl - - ;; Completion - vertico orderless marginalia cape corfu corfu-terminal - consult consult-eglot flyspell-correct tempel - - ;; IDE - treesit-auto magit forge apheleia envrc rainbow-delimiters - flymake-shellcheck flymake-yamllint flymake-clippy - flymake-eslint markdown-mode pandoc-mode python-docstring - nix-mode lua-mode - - ;; Org + LaTeX - org-roam org-noter citar auctex htmlize - - ;; Other - password-store emms bbdb ement scad-mode - - )) :config (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (add-to-list 'package-archives '("stable" . "https://stable.melpa.org/packages/")) (package-initialize)) -#+end_src -Add custom function to ensure required packages are installed and -updated. - -#+begin_src emacs-lisp - (defun my/package-ensure () - "Ensure packages are installed and updated." - (interactive) - (require 'use-package) - (package-refresh-contents) - (package-install-selected-packages) - (package-autoremove) - (package-upgrade-all)) + ;; Plugins that still need adding / configuring: `auctex' `htmlize' + ;; `password-store' #+end_src Load =custom.el= if file exists in default location. @@ -107,51 +72,59 @@ Configure the look and feel of Emacs *** Theme and Icons #+begin_src emacs-lisp (use-package base16-theme - :if (package-installed-p 'base16-theme) - :demand - :defines (base16-one-light-theme-colors - my/load-theme-and-configure) - :hook (server-after-make-frame . my/load-theme-and-configure) + :ensure t + :defines (base16-one-light-theme-colors) :custom (base16-theme-distinct-fringe-background nil) - (base16-theme-highlight-mode-line 'contrast) - :init - (defun my/load-theme-and-configure () - "Load theme and configure some faces." - (load-theme 'base16-one-light t) + (base16-theme-highlight-mode-line 'contrast)) - ;; Change outline headers to follow rainbow order - (require 'outline) - (dolist (pairing '((outline-1 . :base08) - (outline-2 . :base09) - (outline-3 . :base0A) - (outline-4 . :base0B) - (outline-5 . :base0C) - (outline-6 . :base0D) - (outline-7 . :base0E) - (outline-8 . :base0F))) - (set-face-attribute (car pairing) nil - :foreground - (plist-get base16-one-light-theme-colors (cdr pairing))))) - :config - (if (display-graphic-p) (my/load-theme-and-configure))) + (defun my/load-theme-and-configure () + "Load theme and configure some faces." + (require 'base16-theme) + (load-theme 'base16-one-light t) + + ;; Change outline headers to follow rainbow order + (require 'outline) + (dolist (pairing '((outline-1 . :base08) + (outline-2 . :base09) + (outline-3 . :base0A) + (outline-4 . :base0B) + (outline-5 . :base0C) + (outline-6 . :base0D) + (outline-7 . :base0E) + (outline-8 . :base0F))) + (set-face-attribute (car pairing) nil + :foreground + (plist-get base16-one-light-theme-colors (cdr pairing))))) + + (when (display-graphic-p) + ;; (add-hook server-after-make-frame-hook #'my/load-theme-and-configure) + (my/load-theme-and-configure)) (use-package nerd-icons - :if (package-installed-p 'nerd-icons) + :ensure t :functions (nerd-icons-octicon)) (use-package nerd-icons-dired + :ensure t :requires nerd-icons :hook (dired-mode)) (use-package nerd-icons-ibuffer + :ensure t :requires nerd-icons :hook (ibuffer-mode)) (use-package nerd-icons-completion - :functions nerd-icons-completion-mode + :ensure t :requires nerd-icons + :functions nerd-icons-completion-mode :hook (after-init . (lambda () (nerd-icons-completion-mode +1)))) + + (use-package nerd-icons-corfu + :ensure t + :requires nerd-icons + :functions nerd-icons-corfu-formatter) #+end_src *** Modeline #+begin_src emacs-lisp @@ -161,6 +134,7 @@ Configure the look and feel of Emacs (which-function-mode -1) (use-package doom-modeline + :ensure t :functions (doom-modeline-mode) :hook (after-init . (lambda () (doom-modeline-mode +1))) :custom @@ -194,7 +168,7 @@ Configure the look and feel of Emacs *** Font ligatures #+begin_src emacs-lisp (use-package ligature - :if (package-installed-p 'ligature) + :ensure t :functions (ligature-set-ligatures global-ligature-mode) :config @@ -361,6 +335,7 @@ Configure email with iCalendar event support, to integrate with (mm-discouraged-alternatives '("text/html"))) (use-package mu4e + :ensure nil :if (package-installed-p 'mu4e) :bind (("C-c m" . mu4e) @@ -706,7 +681,7 @@ Configure email with iCalendar event support, to integrate with (flyspell-use-meta-tab nil)) (use-package flyspell-correct - :if (package-installed-p 'flyspell-correct) + :ensure t :after flyspell :bind ( :map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))) @@ -738,7 +713,7 @@ Configure email with iCalendar event support, to integrate with (add-hook 'prog-mode-hook #'(lambda () (display-line-numbers-mode +1))) (use-package which-key - :if (package-installed-p 'which-key) + :ensure t :functions which-key-mode :config (which-key-mode +1)) @@ -767,7 +742,7 @@ Configure email with iCalendar event support, to integrate with auto-cleanup))) (use-package diff-hl - :if (package-installed-p 'diff-hl) + :ensure t :functions (diff-hl-magit-pre-refresh diff-hl-magit-post-refresh global-diff-hl-mode) @@ -794,6 +769,7 @@ Configure email with iCalendar event support, to integrate with (ediff-window-setup-function #'ediff-setup-windows-plain)) (use-package emms + :ensure t :defines (emms-browser-mode-map emms-playlist-mode-map) :functions (emms-all @@ -940,7 +916,7 @@ Configure email with iCalendar event support, to integrate with (if (executable-find "sqlite3") (use-package org-roam - :if (package-installed-p 'org-roam) + :ensure t :after org :defines org-roam-directory :functions org-roam-db-autosync-mode @@ -1030,6 +1006,7 @@ Configure email with iCalendar event support, to integrate with (org-icalendar-combined-description "Emacs org-mode combined export")) (use-package org-noter + :ensure t :after (org doc-view citar) :commands org-noter :custom @@ -1044,6 +1021,7 @@ Configure email with iCalendar event support, to integrate with (org-noter-prefer-root-as-file-level nil)) (use-package citar + :ensure t :defines (citar-bibliography citar-indicators) :functions (citar-indicator-create @@ -1116,7 +1094,7 @@ Configure email with iCalendar event support, to integrate with (setq org-preview-latex-default-process 'dvisvgm) (use-package vertico - :if (package-installed-p 'vertico) + :ensure t :functions vertico-mode :hook (after-init . (lambda () (vertico-mode +1))) :custom @@ -1125,7 +1103,7 @@ Configure email with iCalendar event support, to integrate with (require 'vertico-directory)) (use-package marginalia - :if (package-installed-p 'marginalia) + :ensure t :functions marginalia-mode :hook (after-init . (lambda () (marginalia-mode +1))) :custom @@ -1135,7 +1113,7 @@ Configure email with iCalendar event support, to integrate with :config (marginalia-mode +1)) (use-package orderless - :if (package-installed-p 'orderless) + :ensure t :custom (completion-styles '(orderless basic)) (completion-category-defaults nil) @@ -1143,12 +1121,8 @@ Configure email with iCalendar event support, to integrate with (eglot (styles orderless)) (eglot-capf (styles orderless))))) - (use-package nerd-icons-corfu - :functions nerd-icons-corfu-formatter - :requires nerd-icons) - (use-package corfu - :if (package-installed-p 'corfu) + :ensure t :defines (corfu-map corfu-mode-map corfu-margin-formatters) @@ -1197,11 +1171,12 @@ Configure email with iCalendar event support, to integrate with (corfu-popupinfo-delay 0.3)) (use-package corfu-terminal + :ensure t :requires corfu :functions corfu-terminal-mode) (use-package cape - :if (package-installed-p 'cape) + :ensure t :after corfu :functions (cape-emoji cape-file @@ -1215,7 +1190,7 @@ Configure email with iCalendar event support, to integrate with (cape-dabbrev-min-length (+ corfu-auto-prefix 1))) (use-package consult - :if (package-installed-p 'consult) + :ensure t :functions (consult-org-heading consult-history) :bind ((" " . consult-imenu) @@ -1233,11 +1208,12 @@ Configure email with iCalendar event support, to integrate with (" " . consult-history))) (use-package consult-eglot + :ensure t :after (consult eglot) :bind (("C-c s s" . consult-eglot-symbols))) (use-package tempel - :if (package-installed-p 'tempel) + :ensure t :defines tempel-path :functions (tempel-expand tempel-abbrev-mode) @@ -1268,11 +1244,11 @@ Configure email with iCalendar event support, to integrate with ))) (use-package rainbow-delimiters - :if (package-installed-p 'rainbow-delimiters) + :ensure t :hook (prog-mode)) (use-package envrc - :if (package-installed-p 'envrc) + :ensure t :hook (after-init . envrc-global-mode) :custom (envrc-show-summary-in-minibuffer t)) @@ -1288,7 +1264,7 @@ Configure email with iCalendar event support, to integrate with (treesit-font-lock-level 3)) (use-package treesit-auto - :if (package-installed-p 'treesit-auto) + :ensure t :requires treesit :functions (treesit-auto-add-to-auto-mode-alist global-treesit-auto-mode) @@ -1361,7 +1337,7 @@ Configure email with iCalendar event support, to integrate with ) (use-package apheleia - :if (package-installed-p 'apheleia) + :ensure t :defines (apheleia-formatters apheleia-mode-alist) :bind (("C-c c f" . apheleia-format-buffer)) @@ -1380,28 +1356,28 @@ Configure email with iCalendar event support, to integrate with (flymake-show-diagnostics-at-end-of-line 'short)) (use-package flymake-shellcheck - :if (package-installed-p 'flymake-shellcheck) + :ensure t :functions flymake-shellcheck-load :requires flymake :hook (sh-mode . (lambda () (if (executable-find "shellcheck" t) (flymake-shellcheck-load))))) (use-package flymake-yamllint - :if (package-installed-p 'flymake-yamllint) + :ensure t :functions flymake-yamllint-setup :requires flymake :hook (yaml-ts-mode . (lambda () (if (executable-find "yamllint" t) (flymake-yamllint-setup))))) (use-package flymake-clippy - :if (package-installed-p 'flymake-clippy) + :ensure t :functions flymake-clippy-setup-backend :requires flymake :hook (rust-mode . (lambda () (if (executable-find "clippy" t) (flymake-clippy-setup-backend))))) (use-package flymake-eslint - :if (package-installed-p 'flymake-eslint) + :ensure t :functions flymake-eslint-enable :requires flymake :hook ((js-base-mode typescript-ts-base-mode) . (lambda () (if (executable-find "eslint" t) @@ -1431,6 +1407,7 @@ Configure email with iCalendar event support, to integrate with )) (use-package magit + :ensure t :bind (("C-c g g" . magit-status) ("C-c g d" . magit-dispatch) ("C-c g f" . magit-file-dispatch) @@ -1454,8 +1431,13 @@ Configure email with iCalendar event support, to integrate with ("\\`\\(?:sourcehut:\\|sh:\\)\\([^:]+\\)\\'" "git.sr.ht" "sourcehut.user") ("\\`\\(?:gitea:\\|gt:\\)\\([^:]+\\)\\'" "git.xenia.me.uk" "gitea.user")))) - (use-package nix-mode - :if (package-installed-p 'nix-mode) + (use-package forge + :ensure t + :defer t) + + (when (executable-find "nix") + (use-package nix-mode + :ensure t :mode "\\.nix\\'" :functions nix-prettify-global-mode :config @@ -1463,7 +1445,11 @@ Configure email with iCalendar event support, to integrate with (require 'nix-flake) (require 'nix-repl) (require 'nix-store) - (nix-prettify-global-mode +1)) + (nix-prettify-global-mode +1))) + + (use-package lua-mode + :ensure t + :mode "\\.lua\\'") (defun my/enable-fill-column (col) "Set and enable fill column to `COL'." @@ -1492,7 +1478,7 @@ Configure email with iCalendar event support, to integrate with (setq python-ts-mode-hook python-mode-hook)) (use-package python-docstring - :if (package-installed-p 'python-docstring) + :ensure t :hook python-base-mode) (use-package files @@ -1530,7 +1516,7 @@ Configure email with iCalendar event support, to integrate with (doc-view-image-width 850)) (use-package markdown-mode - :if (package-installed-p 'markdown-mode) + :ensure t :hook ((markdown-mode . turn-on-auto-fill)) :custom @@ -1544,11 +1530,12 @@ Configure email with iCalendar event support, to integrate with (set-face-attribute 'markdown-comment-face nil :inherit 'variable-pitch)) (use-package pandoc-mode - :if (package-installed-p 'pandoc-mode) + :ensure t :after (markdown-mode) :hook (markdown-mode . conditionally-turn-on-pandoc)) (use-package bbdb + :ensure t :bind (("M-g b" . bbdb-display-all-records)) :custom (bbdb-file (locate-user-emacs-file "bbdb.gpg"))) @@ -1589,9 +1576,14 @@ Configure email with iCalendar event support, to integrate with (eww-browse-url-new-window-is-tab nil)) (use-package password-store + :ensure t :defer t :functions password-store-get) + (use-package scad-mode + :ensure t + :defer t) + ;; Scratch buffer shortcut (keymap-global-set "C-c w x" #'scratch-buffer)