我在Nix shell中进行开发(在我的项目根目录中创建一个default.nix文件,然后运行nix-shell .
给我一个可以访问项目依赖项的shell)。
Spacemacs是我的主编辑,但是当我尝试通过emacs &
运行GUI版本时,我无法访问我的nix-shell中的程序(例如,如果我在Ruby on Rails项目中,那么Ruby被声明为在我的default.nix
中依赖,我在Spacemacs中没有语法高亮,因为Emacs的GUI版本没有看到我的Nix-shell依赖项)。如果我运行:!which ruby
,它甚至找不到which
命令。
现在,我正在通过emacs -nw
运行spacemacs并且只是从控制台使用它,但我真的希望能够使用GUI编辑器并获得完整的颜色方案,而不仅限于256色的外观。模式。在终端和编辑器之间切换比在tmux窗格或终端拆分之间切换到我的CLI编辑器也更快。
with import <nixpkgs> {}; {
cannyFreeRadicalEnv = stdenv.mkDerivation rec {
name = "rails-project-env";
version = "0.1";
src = ./.;
buildInputs = [
stdenv
ruby_2_2_2
bundler
zlib
postgresql94
sqlite
zsh
git
nodejs-0_12
];
};
}
我能够通过在守护进程模式下运行空间emacs来解决此问题。 https://www.emacswiki.org/emacs/EmacsAsDaemon
在default.nix:
nix-shell .
emacs --daemon
emacsclient -c -a emacs
的目录中
您可以将GUI Emacs作为
setsid nix-shell . --command "emacs" &> /dev/null
另见nix-shell
integration与flycheck
和ghc-mode
的讨论。
提示:您可以在.zshrc或.bashrc中使用别名
run-nix-emacs () {
setsid nix-shell . --command "emacs" &> /dev/null
}
alias ne='run-nix-emacs'
我推荐this nix-shell.el。我的fork提供了一些配置示例。虽然direnv与Emacs的集成有效但速度非常慢。并不是说这更快,但是当您执行M-x nix-shell-activate时会发生这种情况,因此您可以控制延迟发生的时间。如果您的org-directory中有一个shell.nix用于多语言环境中的org源块,并且在打开组织文件时并不总是需要direnv延迟,那么这将成为导入。马里奥的nix-shell.el应该更广为人知。 Here是我发现它的地方。