これ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
移行後にデーモンを再起動していないようです。