Replacing straight.el with Nix to manage emacs packages
Why?
In short, for better reproducability and to free me from manual intervention because packages broke later.
For more details you can see my history of package.el -> straight.el -> Nix
for managing emacs packages in Package management and configuration in emacs.
The simple case
straight.el configuration
early-init.el
(setq package-enable-at-startup nil)
init.el
(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))
(setq straight-use-package-by-default t)
(straight-use-package 'use-package)
(use-package magit)
nix configuration
From NixOS
early-init.el
(setq package-enable-at-startup nil) ;; let's be really sure package.el isn't used (setq use-package-ensure-function 'ignore) (setq package-archives nil)
configuration.nix
{ config, pkgs, ... }: # note: you can store this in an external file like the NixOS manual example as well: # https://nixos.org/manual/nixos/stable/index.html#module-services-emacs-adding-packages let customEmacs = let myEmacs = pkgs.emacs; emacsWithPackages = (pkgs.emacsPackagesFor myEmacs).emacsWithPackages; in emacsWithPackages (epkgs: (with epkgs.melpaPackages; [ magit ])) in { # ... other configuration environment.systemPackages = with pkgs; [ # ... other packages myEmacs ]; # ... other configuration }
Using another distro with Nix: the package manager
TODO
From DevOS (nix flake configuration framework)
TODO
Install source version of a package
using straight.el
using nix
From NixOS
TODO
Using another distro with Nix: the package manager
TODO
From DevOS (nix flake configuration framework)
TODO
Downsides of using Nix emacs packages
I have to restart emacs when I install a new package
I could figure out how to modify the load-path appropriately and it’s on my backlog, but I’ve never gotten around to it.