这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 自动使用这些包集?目前他们没有(只有直接启动的 emacs 才有)。
答案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
在我看来,切换后您没有重新启动守护进程。