如何创建系统软件包及其描述的列表?

如何创建系统软件包及其描述的列表?

我需要创建一个文件,其中包含系统范围内安装的所有软件包的列表。

我可以在 repl 中看到pnamemeta可用于每个包

nix-repl> emacs.pname
"emacs"

nix-repl> emacs.meta.description
"The extensible, customizable GNU text editor"

当我尝试在 中执行以下操作时configuration.nixpis 类型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)));
}

相关内容