NixOSのパッケージで構成されたEmacsデーモン

NixOSのパッケージで構成されたEmacsデーモン

これNixOS マニュアル特定のパッケージを使用してEmacsをデーモンとして起動するには、次の設定をお勧めします。

services.emacs.enable = true;
services.emacs.package = import /home/cassou/.emacs.d { pkgs = pkgs; };

しかし、これらの部分が何を意味するのかは明確ではありませんpkgs = pkgs。私のファイルにconfiguration.nix必要なEmacsパッケージのリストを指定しました。

  environment.systemPackages = with pkgs; [
    # Emacs
    (emacsWithPackages (with emacsPackagesNg; [
      evil
      haskell-mode
      intero
      nix-mode
      org
      python-mode
    ]))
  }

私の質問:Emacsデーモンにこれらのパッケージセットを自動的に使用させるにはどうすればよいですか?現在はそうではありません(直接起動するemacだけが可能です)。

答え1

進行中の回答(下記参照)

Nix言語構文を読んだ後、次の解決策が得られました。移動する構成中のパッケージ定義services.emacs.package

  services.emacs.enable = true;
  services.emacs.package = with pkgs; (emacsWithPackages (with emacsPackagesNg; [
      evil
      haskell-mode
      intero
      nix-mode
      org
      python-mode
  ]));

これが機能している間、リストに新しいパッケージを追加するたびに機能しません(emacsはそのパッケージをロードしません)。これを行う正しい方法は何ですか?

答え2

数年後... (2021)

カスタム emacs 定義をインストールしました。

emacs.nix

{ pkgs ? import <nixpkgs> {} }:

let
  myEmacs = pkgs.emacs;
  emacsWithPackages = (pkgs.emacsPackagesNgGen myEmacs).emacsWithPackages;
in
  emacsWithPackages (epkgs: (with epkgs.melpaStablePackages;
  [
    solarized-theme
  ]) ++ (with epkgs.melpaPackages; [
    alchemist
    all-the-icons
    auto-complete
    auto-compile
...
  ])
)

configuration.nix

  services.emacs.enable = true;
  services.emacs.package = pkgs.callPackage ./emacs.nix { };

emacs明らかに切り替えたときにデーモンが実行されていたので、新しい設定を使用するにはデーモンを再起動する必要があります。

$ sudo nixos-rebuild switch
$ systemctl --user restart emacs

移行後にデーモンを再起動していないようです。

関連情報