Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/customisation.nix
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ rec {
};

outputsList = map outputToAttrListElement outputs;
in commonAttrs.${drv.outputName};
in commonAttrs // { outputUnspecified = true; };


/* Strip a derivation of all non-essential attributes, returning
Expand Down
2 changes: 1 addition & 1 deletion nixos/modules/config/debug-info.nix
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ with lib;
# environment.pathsToLink, and we can't have both.
#environment.pathsToLink = [ "/lib/debug/.build-id" ];

environment.outputsToLink =
environment.extraOutputsToInstall =
optional config.environment.enableDebugInfo "debug";

};
Expand Down
17 changes: 6 additions & 11 deletions nixos/modules/config/system-path.nix
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ in
description = "List of directories to be symlinked in <filename>/run/current-system/sw</filename>.";
};

outputsToLink = mkOption {
extraOutputsToInstall = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "doc" ];
description = "List of package outputs to be symlinked into <filename>/run/current-system/sw</filename>.";
example = [ "doc" "info" "docdev" ];
description = "List of additional package outputs to be symlinked into <filename>/run/current-system/sw</filename>.";
};

};
Expand Down Expand Up @@ -120,18 +120,13 @@ in
"/share/vim-plugins"
];

environment.outputsToLink = [ "bin" "lib" "out" ];

system.path = pkgs.buildEnv {
name = "system-path";
paths =
lib.filter (drv: drv != null && drv != (drv.dev or null))
(lib.concatMap (drv:
[ drv ] ++ map (outputName: drv.${outputName}.outPath or null) config.environment.outputsToLink)
config.environment.systemPackages);
inherit (config.environment) pathsToLink;
paths = config.environment.systemPackages;
inherit (config.environment) pathsToLink extraOutputsToInstall;
ignoreCollisions = true;
# !!! Hacky, should modularise.
# outputs TODO: note that the tools will often not be linked by default
postBuild =
''
if [ -x $out/bin/update-mime-database -a -w $out/share/mime ]; then
Expand Down
2 changes: 1 addition & 1 deletion nixos/modules/programs/man.nix
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ with lib;

environment.pathsToLink = [ "/share/man" ];

environment.outputsToLink = [ "man" ];
environment.extraOutputsToInstall = [ "man" ];

};

Expand Down
2 changes: 1 addition & 1 deletion nixos/modules/security/polkit.nix
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ in

config = mkIf cfg.enable {

environment.systemPackages = [ pkgs.polkit ];
environment.systemPackages = [ pkgs.polkit.bin pkgs.polkit.out ];

systemd.packages = [ pkgs.polkit.out ];

Expand Down
14 changes: 13 additions & 1 deletion pkgs/build-support/buildenv/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
# directories in the list is not symlinked.
pathsToLink ? ["/"]

, # The package outputs to include. By default, only the default
# output is included.
extraOutputsToInstall ? []

, # Root the result in directory "$out${extraPrefix}", e.g. "/share".
extraPrefix ? ""

Expand All @@ -43,7 +47,15 @@ runCommand name
inherit manifest ignoreCollisions checkCollisionContents passthru
meta pathsToLink extraPrefix postBuild buildInputs;
pkgs = builtins.toJSON (map (drv: {
paths = [ drv ];
paths =
# First add the usual output(s): respect if user has chosen explicitly,
# and otherwise use `meta.outputsToInstall` (guaranteed to exist by stdenv).
(if (drv.outputUnspecified or false)
then map (outName: drv.${outName}) drv.meta.outputsToInstall
else [ drv ])
# Add any extra outputs specified by the caller of `buildEnv`.
++ lib.filter (p: p!=null)
(builtins.map (outName: drv.${outName} or null) extraOutputsToInstall);
priority = drv.meta.priority or 5;
}) paths);
preferLocalBuild = true;
Expand Down
25 changes: 19 additions & 6 deletions pkgs/stdenv/generic/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -220,12 +220,25 @@ let
# The meta attribute is passed in the resulting attribute set,
# but it's not part of the actual derivation, i.e., it's not
# passed to the builder and is not a dependency. But since we
# include it in the result, it *is* available to nix-env for
# queries. We also a meta.position attribute here to
# identify the source location of the package.
meta = meta // (if pos' != null then {
position = pos'.file + ":" + toString pos'.line;
} else {});
# include it in the result, it *is* available to nix-env for queries.
meta = { }
# If the packager hasn't specified `outputsToInstall`, choose a default,
# namely `p.bin or p.out or p`;
# if he has specified it, it will be overridden below in `// meta`.
# Note: This default probably shouldn't be globally configurable.
# Services and users should specify outputs explicitly,
# unless they are comfortable with this default.
// { outputsToInstall =
let
outs = outputs'; # the value passed to derivation primitive
hasOutput = out: builtins.elem out outs;
in [( lib.findFirst hasOutput null (["bin" "out"] ++ outs) )];
}
// meta
# Fill `meta.position` to identify the source location of the package.
// lib.optionalAttrs (pos' != null)
{ position = pos'.file + ":" + toString pos'.line; }
;
inherit passthru;
} //
# Pass through extra attributes that are not inputs, but
Expand Down