Skip to content

Commit 1934680

Browse files
authored
programs/direnv: fix silent option (nix-darwin#1491)
2 parents 9753a87 + daf8e22 commit 1934680

File tree

1 file changed

+49
-20
lines changed

1 file changed

+49
-20
lines changed

modules/programs/direnv.nix

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
...
66
}: let
77
cfg = config.programs.direnv;
8+
format = pkgs.formats.toml {};
89
in {
910
meta.maintainers = [
1011
lib.maintainers.mattpolzin or "mattpolzin"
1112
];
1213
options.programs.direnv = {
13-
1414
enable = lib.mkEnableOption ''
1515
direnv integration. Takes care of both installation and
1616
setting up the sourcing of the shell. Additionally enables nix-direnv
@@ -19,6 +19,12 @@ in {
1919

2020
package = lib.mkPackageOption pkgs "direnv" {};
2121

22+
finalPackage = lib.mkOption {
23+
type = lib.types.package;
24+
readOnly = true;
25+
description = "The wrapped direnv package.";
26+
};
27+
2228
direnvrcExtra = lib.mkOption {
2329
type = lib.types.lines;
2430
default = "";
@@ -54,53 +60,76 @@ in {
5460

5561
package = lib.mkPackageOption pkgs "nix-direnv" {};
5662
};
63+
64+
settings = lib.mkOption {
65+
inherit (format) type;
66+
default = {};
67+
example = lib.literalExpression ''
68+
{
69+
global = {
70+
log_format = "-";
71+
log_filter = "^$";
72+
};
73+
}
74+
'';
75+
description = ''
76+
Direnv configuration. Refer to {manpage}`direnv.toml(1)`.
77+
'';
78+
};
5779
};
5880

5981
config = lib.mkIf cfg.enable {
60-
6182
programs = {
83+
direnv = {
84+
finalPackage = pkgs.symlinkJoin {
85+
inherit (cfg.package) name;
86+
paths = [cfg.package];
87+
# direnv has a fish library which automatically sources direnv for some reason
88+
postBuild = ''
89+
rm -rf "$out/share/fish"
90+
'';
91+
meta.mainProgram = "direnv";
92+
};
93+
settings = lib.mkIf cfg.silent {
94+
global = {
95+
log_format = lib.mkDefault "-";
96+
log_filter = lib.mkDefault "^$";
97+
};
98+
};
99+
};
62100
zsh.interactiveShellInit = ''
63101
if ${lib.boolToString cfg.loadInNixShell} || printenv PATH | grep -vqc '/nix/store'; then
64-
eval "$(${lib.getExe cfg.package} hook zsh)"
102+
eval "$(${lib.getExe cfg.finalPackage} hook zsh)"
65103
fi
66104
'';
67105

68106
#$NIX_GCROOT for "nix develop" https://github.com/NixOS/nix/blob/6db66ebfc55769edd0c6bc70fcbd76246d4d26e0/src/nix/develop.cc#L530
69107
#$IN_NIX_SHELL for "nix-shell"
70108
bash.interactiveShellInit = ''
71109
if ${lib.boolToString cfg.loadInNixShell} || [ -z "$IN_NIX_SHELL$NIX_GCROOT$(printenv PATH | grep '/nix/store')" ] ; then
72-
eval "$(${lib.getExe cfg.package} hook bash)"
110+
eval "$(${lib.getExe cfg.finalPackage} hook bash)"
73111
fi
74112
'';
75113

76114
fish.interactiveShellInit = ''
77115
if ${lib.boolToString cfg.loadInNixShell};
78116
or printenv PATH | grep -vqc '/nix/store';
79-
${lib.getExe cfg.package} hook fish | source
117+
${lib.getExe cfg.finalPackage} hook fish | source
80118
end
81119
'';
82120
};
83121

84122
environment = {
85-
systemPackages =
86-
if cfg.loadInNixShell then [cfg.package]
87-
else [
88-
#direnv has a fish library which sources direnv for some reason
89-
(cfg.package.overrideAttrs (old: {
90-
installPhase =
91-
(old.installPhase or "")
92-
+ ''
93-
rm -rf $out/share/fish
94-
'';
95-
}))
96-
];
97-
123+
systemPackages = [
124+
cfg.finalPackage
125+
];
98126
variables = {
99127
DIRENV_CONFIG = "/etc/direnv";
100-
DIRENV_LOG_FORMAT = lib.mkIf cfg.silent "";
101128
};
102-
103129
etc = {
130+
"direnv/direnv.toml".source = lib.mkIf (cfg.settings != {}) (
131+
format.generate "direnv.toml" cfg.settings
132+
);
104133
"direnv/direnvrc".text = ''
105134
${lib.optionalString cfg.nix-direnv.enable ''
106135
#Load nix-direnv

0 commit comments

Comments
 (0)