使 shell 别名以声明方式依赖于包

Make shell aliases declaratively depend on packages

在 NixOS 中,shell 别名的定义可以在 configurations.nix 文件中定义,如下所示:

environment.shellAliases = {
  "my_some_cmd" = "some_cmd -flag 123";
}

即使引用的命令(此处:some_cmd)在系统中不可用,它也会被分配。比如说,这个命令包含在一个包中。因此,最好声明只有在安装包时才分配别名。

这怎么可能?我是否必须只使用包装 if 语句,或者是否有其他方法来存档它?

如果 if 语句是可行的方法,那如何实现?

您可以使用命令的完整路径绕过安装包的需要,例如:

environment.shellAliases = {
  "colored-tree" = "${pkgs.tree}/bin/tree -C";
};