我需要创建一个文件,其中包含系统范围内安装的所有软件包的列表。
我可以在 repl 中看到pname
和meta
可用于每个包
nix-repl> emacs.pname
"emacs"
nix-repl> emacs.meta.description
"The extensible, customizable GNU text editor"
当我尝试在 中执行以下操作时configuration.nix
,p
is 类型path
而不是set
且 不具有pname
和等属性meta
。
environment.etc."packages".text = with lib;
builtins.concatStringsSep "\n" (builtins.sort builtins.lessThan (lib.unique
(builtins.map (
p: "${p.pname} ${p.meta.description}"
) config.environment.systemPackages)));
如何获取包名称和描述/etc/packages
?
答案1
您可以使用lib.getName
来获取派生的名称。
所有包都应该有一个meta
属性。您可能发现description
某些包裹丢失。您可以用来p.meta.description or "(none)"
处理这些情况。
把它们放在一起,你会得到:
{
environment.etc."packages".text = with lib;
builtins.concatStringsSep "\n" (builtins.sort builtins.lessThan (lib.unique
(builtins.map (
p: "${getName p} ${p.meta.description or "(none)"}"
) config.environment.systemPackages)));
}