🙆

home-managerでemacs unstable(29.0.90) flake版

2023/04/16に公開

背景

昨日home-managerでemacs unstableをインストールしてみた
https://zenn.dev/eiel/articles/bb3b7b8a944b42

nix flakesを使ってやるとどうなるか試した。

前提

nix flakesをつかってhome-managerが使えているものとする。
参考
https://nix-community.github.io/home-manager/index.html#sec-flakes-standalone

やってみる

おそらく ~/.config/home-manager/flake.nixhome.nixが存在しているはず。

flake.nixはこのような感じに変更した。

{
  description = "Home Manager configuration of me";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
+    emacs-overlay.url = "github:nix-community/emacs-overlay";
  };

  outputs = { nixpkgs, home-manager, emacs-overlay, ... }:
    let
      system = "aarch64-darwin";
      pkgs = nixpkgs.legacyPackages.${system};
    in {
      homeConfigurations.cw-himura = home-manager.lib.homeManagerConfiguration {
        inherit pkgs;

        modules = [
+          ({ config, pkgs, ... }: { nixpkgs.overlays = [ emacs-overlay.overlays.emacs ]; })
	  ./home.nix
        ];
      };
    };
 }

home.nixには以下を書き加えればよい。overlaysの指定がflake.nixで行われているという状態なっている。

  programs.emacs = {
    enable = true;
+    package = pkgs.emacsUnstable; # from github:nix-community/emacs-overlay
  }

もうちょっと詳しく

home-manager.lib.homeManagerConfigurationの実装は以下にある。
https://github.com/nix-community/home-manager/blob/17198cf5ae27af5b647c7dac58d935a7d0dbd189/flake.nix#L41-L84

値を追加した、modules は configuration.imports に束縛され module/default.nix に渡される。そこでは、extendedLib.evalModulesのmodules属性に利用される。
https://github.com/nix-community/home-manager/blob/17198cf5ae27af5b647c7dac58d935a7d0dbd189/modules/default.nix#L33
extendedLibはnixpkgs.libに追加関数があるだけで、nixpkgs.lib.evalModulesである。
https://github.com/NixOS/nixpkgs/blob/cae90fefc13696a90e4a2cc1f97601134dbb84b6/lib/modules.nix#L105
おそらく、configとpkgsわたせて、home-managerの設定ファイルであるhome.nixの代わりとして使われるのだろう。

関連

flakeのinputsやoutputsの挙動を確認するなら以下が参考になるかもしれない。
https://zenn.dev/eiel/articles/538954db7a7f1c
https://zenn.dev/eiel/articles/337c3cb5630d0d

Discussion