flake.nixでポータブルな最小構成のEmacsを作成する
Table of Contents
Introduction
「任意のEmacs Packageが動かない」がおま環かバグかというのを切り分けることは非常に重要。 誰でも同じ環境を整えられるようにすると問題解決が捗るので構築方法をメモしておく。
作業手順
1. init.el作成
今回のサンプルはrainbow-delimitersが動作するか確認するものにする。
(use-package rainbow-delimiters
:ensure t
:hook
(prog-mode-hook . rainbow-delimiters-mode))
2. flake.nix作成
alwaysEnsure = true;
にすると init.el
内の :ensure t
を読んでNix Build時によしなにインストールしてくれる。
また、emacs-overlay を使うと unstable/stable/head
など複数バージョンで実行できるので検証の幅を簡単に広げられる。
https://github.com/nix-community/emacs-overlay/blob/master/overlays/emacs.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
emacs-overlay = {
url = "github:nix-community/emacs-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, emacs-overlay }:
let
system = "aarch64-darwin";
pkgs = import nixpkgs {
inherit system;
overlays = [ emacs-overlay.overlay ];
};
emacs = pkgs.emacsWithPackagesFromUsePackage {
config = ./init.el;
package = pkgs.emacs-unstable;
alwaysEnsure = true;
};
in
{
packages.${system}.default = emacs;
};
}
3. Nix Buildして実行
Localに一切依存しない形でEmacsをBuildできる。
$ nix build .#default
$ ./result/bin/emacs -nw -Q
終わりに
「最小構成を作ってください」の正解は flake.nix
だと思っている。
余談だが、natsukiumの「一般構築魔法(Nix)のVimへの応用について」の「Nixでプラグインの実行環境を提供する」でも同じことが書かれている。 https://zenn.dev/natsukium/articles/b4899d7b1e6a9a#nix%E3%81%A7%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%99%E3%82%8B