我使用的是 NixOS 15 和 nix-shell v1.10。我现在使用 Zsh 作为我的主 shell,并且当我在由 Nix 表达式构建的开发环境中工作时,也希望将它与 nix-shell 中的 Oh-My-Zsh 结合使用。
如果有帮助,这里是我为 Rails 项目设置的 Nix 环境之一:
with import <nixpkgs> {}; {
cannyFreeRadicalEnv = stdenv.mkDerivation rec {
name = "canny-free-radical-env";
version = "0.1";
src = ./.;
buildInputs = [
stdenv
ruby_2_2_2
bundler_HEAD
zlib
postgresql94
sqlite
];
};
}
** 编辑**
以这种方式运行命令不会在 CLI 提示符中表明我位于 nix-shell 中。有没有一种简单的方法来检测这一点,以便我可以在我的
zshrc
中快速编写脚本?
使用以下命令打开 shell:
nix-shell . --command "zsh"
感谢#nixos IRC 频道上的人们给了我快速答复。
最近开设了PR #545,它将解决这个问题
您可能想尝试这个 Zsh 插件。
any-nix-shell对我有用。这里还提供了一种更手动的方法https://ianthehenry.com/posts/how-to-learn-nix/nix-zshell/
但请注意,这些解决方案不会转发
alias
和类似 unpackPhase
的阶段。
我尝试了一种简单的方法,它似乎有效。
$ alias nix-shell='nix-shell --run zsh'
多次提供
--run
似乎会导致使用最后一个:
$ nix-shell -p cowsay --run 'cowsay a' --run 'cowsay b'
___
< b >
---
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
所以这个别名只是为
--run
设置默认值。
这会破坏什么吗?我无法想象它会发生,但我知道什么?别名似乎没有导出到子 shell。