nixos/direnv: fix silent option... again

This commit is contained in:
Gerg-L 2025-04-28 22:36:30 -04:00
parent f771eb401a
commit 487d1383c8
No known key found for this signature in database

View file

@ -26,6 +26,12 @@ in
package = lib.mkPackageOption pkgs "direnv" { };
finalPackage = lib.mkOption {
type = lib.types.package;
readOnly = true;
description = "The wrapped direnv package.";
};
enableBashIntegration = enabledOption ''
Bash integration
'';
@ -92,18 +98,28 @@ in
};
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
'';
@ -111,14 +127,14 @@ in
#$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
'';
@ -138,20 +154,11 @@ in
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 != { }) {
source = format.generate "direnv.toml" cfg.settings;