summaryrefslogtreecommitdiff
path: root/emacs
diff options
context:
space:
mode:
Diffstat (limited to 'emacs')
-rw-r--r--emacs/custom/my-packages.el157
-rw-r--r--emacs/init.el14
2 files changed, 95 insertions, 76 deletions
diff --git a/emacs/custom/my-packages.el b/emacs/custom/my-packages.el
index da5263b..e802c14 100644
--- a/emacs/custom/my-packages.el
+++ b/emacs/custom/my-packages.el
@@ -5,70 +5,99 @@
;;; Code:
-(require 'straight)
-
-;; packages needed for LSP
-(straight-use-package 'eglot)
-
-;; packages needed for python
-(straight-use-package 'blacken)
-(straight-use-package 'python-docstring)
-(straight-use-package 'python-mode)
-
-;; packages needed for go
-(straight-use-package 'go-mode)
-(straight-use-package 'gotest)
-
-;; packages needed for nix
-(straight-use-package 'nix-mode)
-
-;; packages needed for rust
-(straight-use-package 'rustic)
-
-;; packages needed to work with various configuration files
-(straight-use-package 'chef-mode)
-(straight-use-package 'terraform-doc)
-(straight-use-package 'terraform-mode)
-(straight-use-package 'toml-mode)
-(straight-use-package 'systemd)
-(straight-use-package 'dockerfile-mode)
-(straight-use-package 'hcl-mode)
-(straight-use-package 'jq-format)
-(straight-use-package 'yaml-mode)
-(straight-use-package 'protobuf-mode)
-
-;; packages needed for git
-(straight-use-package 'git-commit)
-(straight-use-package 'git-link)
-(straight-use-package 'git-modes)
-(straight-use-package 'magit)
-
-;; packages related to elfeed
-(straight-use-package 'elfeed)
-(straight-use-package 'elfeed-org)
-
-;; packages for various text modes
-(straight-use-package 'markdown-mode)
-(straight-use-package 'yasnippet)
-
-;; packages for tree-sitter
-(straight-use-package 'tree-sitter)
-(straight-use-package 'tree-sitter-langs)
-
-;; packages for navigation
-(straight-use-package 'cape)
-(straight-use-package 'consult)
-(straight-use-package 'corfu)
-(straight-use-package 'corfu-doc)
-(straight-use-package 'marginalia)
-(straight-use-package 'orderless)
-(straight-use-package 'vertico)
-(straight-use-package 'which-key)
-
-;; packages for interacting with tools
-(straight-use-package 'rg)
-(straight-use-package 'exec-path-from-shell)
-(straight-use-package 'envrc)
+(require 'package)
+(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
+
+(defvar my/package-list
+ '(eglot
+ ;; python
+ blacken
+ python-docstring
+ python-mode
+
+ ;; go
+ go-mode
+ gotest
+
+ ;; nix
+ nix-mode
+
+ ;; rust
+ rustic
+
+ ;; various configuration formats
+ chef-mode
+ dockerfile-mode
+ hcl-mode
+ jq-format
+ protobuf-mode
+ systemd
+ terraform-doc
+ terraform-mode
+ toml-mode
+ yaml-mode
+
+ ;; git
+ git-commit
+ git-link
+ git-modes
+ magit
+
+ ;; elfeed
+ elfeed
+ elfeed-org
+
+ ;; various text modes
+ markdown-mode
+
+ ;; tree-sitter
+ tree-sitter
+ tree-sitter-langs
+
+ ;; navigation
+ cape
+ consult
+ corfu
+ marginalia
+ orderless
+ vertico
+ which-key
+ yasnippet
+
+ ;; themes
+ standard-themes
+
+ ;; packages to interact with external tools
+ exec-path-from-shell
+ envrc
+ rg)
+ "List of packages to be installed.")
+
+(defun my/packages-installed-p ()
+ "Check if all packages in `my/package-list' are installed."
+ (cl-every #'package-installed-p my/package-list))
+
+(defun my/require-package (package)
+ "Install PACKAGE unless already installed."
+ (unless (memq package my/package-list)
+ (add-to-list 'my/package-list package))
+ (unless (package-installed-p package)
+ (package-install package)))
+
+(defun my/require-packages (packages)
+ "Ensure PACKAGES are installed.
+Missing packages are installed automatically."
+ (mapc #'my/require-package packages))
+
+(defun my/install-packages ()
+ "Install all packages listed in `my/package-list'."
+ (unless (my/packages-installed-p)
+ ;; check for new packages (package versions)
+ (message "%s" "Reloading packages DB...")
+ (package-refresh-contents)
+ (message "%s" " done.")
+ ;; install the missing packages
+ (my/require-packages my/package-list)))
(provide 'my-packages)
diff --git a/emacs/init.el b/emacs/init.el
index b1a6de6..4b66932 100644
--- a/emacs/init.el
+++ b/emacs/init.el
@@ -16,23 +16,13 @@
(setq gc-cons-threshold 64000000)
;; configure straight to manage packages
-(defvar bootstrap-version)
-(let ((bootstrap-file
- (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
- (bootstrap-version 5))
- (unless (file-exists-p bootstrap-file)
- (with-current-buffer
- (url-retrieve-synchronously
- "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
- 'silent 'inhibit-cookies)
- (goto-char (point-max))
- (eval-print-last-sexp)))
- (load bootstrap-file nil 'nomessage))
(add-to-list 'load-path (expand-file-name "custom/" user-emacs-directory))
(add-to-list 'load-path (expand-file-name "elisp/" user-emacs-directory))
+;; run package installation
(require 'my-packages)
+(my/install-packages)
(require 'envrc)
(envrc-global-mode)