nixos/direnv: fix silent option... again (#402399)

Ramses 6f9a8cf2 ca74454a

Changed files
+27 -20
nixos
modules
programs
+27 -20
nixos/modules/programs/direnv.nix
···
package = lib.mkPackageOption pkgs "direnv" { };
+
finalPackage = lib.mkOption {
+
type = lib.types.package;
+
readOnly = true;
+
description = "The wrapped direnv package.";
+
};
+
enableBashIntegration = enabledOption ''
Bash integration
'';
···
};
config = lib.mkIf cfg.enable {
-
programs = {
-
direnv.settings = lib.mkIf cfg.silent {
-
global = {
-
log_format = lib.mkDefault "-";
-
log_filter = lib.mkDefault "^$";
+
direnv = {
+
finalPackage = pkgs.symlinkJoin {
+
inherit (cfg.package) name;
+
paths = [ cfg.package ];
+
# direnv has a fish library which automatically sources direnv for some reason
+
postBuild = ''
+
rm -rf "$out/share/fish"
+
'';
+
meta.mainProgram = "direnv";
+
};
+
settings = lib.mkIf cfg.silent {
+
global = {
+
log_format = lib.mkDefault "-";
+
log_filter = lib.mkDefault "^$";
+
};
};
};
zsh.interactiveShellInit = lib.mkIf cfg.enableZshIntegration ''
if ${lib.boolToString cfg.loadInNixShell} || printenv PATH | grep -vqc '/nix/store'; then
-
eval "$(${lib.getExe cfg.package} hook zsh)"
+
eval "$(${lib.getExe cfg.finalPackage} hook zsh)"
fi
'';
···
#$IN_NIX_SHELL for "nix-shell"
bash.interactiveShellInit = lib.mkIf cfg.enableBashIntegration ''
if ${lib.boolToString cfg.loadInNixShell} || [ -z "$IN_NIX_SHELL$NIX_GCROOT$(printenv PATH | grep '/nix/store')" ] ; then
-
eval "$(${lib.getExe cfg.package} hook bash)"
+
eval "$(${lib.getExe cfg.finalPackage} hook bash)"
fi
'';
fish.interactiveShellInit = lib.mkIf cfg.enableFishIntegration ''
if ${lib.boolToString cfg.loadInNixShell};
or printenv PATH | grep -vqc '/nix/store';
-
${lib.getExe cfg.package} hook fish | source
+
${lib.getExe cfg.finalPackage} hook fish | source
end
'';
···
environment = {
systemPackages = [
-
# direnv has a fish library which automatically sources direnv for some reason
-
# I don't see any harm in doing this if we're sourcing it with fish.interactiveShellInit
-
(pkgs.symlinkJoin {
-
inherit (cfg.package) name;
-
paths = [ cfg.package ];
-
nativeBuildInputs = [ pkgs.makeBinaryWrapper ];
-
postBuild = ''
-
wrapProgram "$out/bin/direnv" \
-
--set-default 'DIRENV_CONFIG' '/etc/direnv'
-
rm -rf "$out/share/fish"
-
'';
-
})
+
cfg.finalPackage
];
+
+
variables.DIRENV_CONFIG = "/etc/direnv";
etc = {
"direnv/direnv.toml" = lib.mkIf (cfg.settings != { }) {