![如何创建系统软件包及其描述的列表?](https://linux22.com/image/217772/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%8F%8A%E5%85%B6%E6%8F%8F%E8%BF%B0%E7%9A%84%E5%88%97%E8%A1%A8%EF%BC%9F.png)
我需要创建一个文件,其中包含系统范围内安装的所有软件包的列表。
我可以在 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)));
}