diff --git a/nixos/modules/programs/direnv.nix b/nixos/modules/programs/direnv.nix index 751e279b47bc..ec000d2cbf50 100644 --- a/nixos/modules/programs/direnv.nix +++ b/nixos/modules/programs/direnv.nix @@ -13,6 +13,7 @@ let default = true; example = false; }; + format = pkgs.formats.toml { }; in { options.programs.direnv = { @@ -72,11 +73,34 @@ in ''; }; }; + + settings = lib.mkOption { + inherit (format) type; + default = { }; + example = lib.literalExpression '' + { + global = { + log_format = "-"; + log_filter = "^$"; + }; + } + ''; + description = '' + Direnv configuration. Refer to {manpage}`direnv.toml(1)`. + ''; + }; }; config = lib.mkIf cfg.enable { programs = { + 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)" @@ -119,18 +143,19 @@ in (pkgs.symlinkJoin { inherit (cfg.package) name; paths = [ cfg.package ]; + nativeBuildInputs = [ pkgs.makeBinaryWrapper ]; postBuild = '' - rm -rf $out/share/fish + wrapProgram "$out/bin/direnv" \ + --set-default 'DIRENV_CONFIG' '/etc/direnv' + rm -rf "$out/share/fish" ''; }) ]; - variables = { - DIRENV_CONFIG = "/etc/direnv"; - DIRENV_LOG_FORMAT = lib.mkIf cfg.silent ""; - }; - etc = { + "direnv/direnv.toml".source = lib.mkIf (cfg.settings != { }) ( + format.generate "direnv.toml" cfg.settings + ); "direnv/direnvrc".text = '' ${lib.optionalString cfg.nix-direnv.enable '' #Load nix-direnv