From 487d1383c883c5707bdece8a9c95b00f6bad7a1e Mon Sep 17 00:00:00 2001 From: Gerg-L Date: Mon, 28 Apr 2025 22:36:30 -0400 Subject: [PATCH] nixos/direnv: fix silent option... again --- nixos/modules/programs/direnv.nix | 47 ++++++++++++++++++------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/nixos/modules/programs/direnv.nix b/nixos/modules/programs/direnv.nix index 2558985a822e..51f2c795433f 100644 --- a/nixos/modules/programs/direnv.nix +++ b/nixos/modules/programs/direnv.nix @@ -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;