diff --git a/modules/programs/direnv.nix b/modules/programs/direnv.nix index 74072589..308a7ef3 100644 --- a/modules/programs/direnv.nix +++ b/modules/programs/direnv.nix @@ -132,16 +132,21 @@ in { # Using mkAfter to make it more likely to appear after other # manipulations of the prompt. mkAfter '' - $env.config = ($env | default {} config).config - $env.config = ($env.config | default {} hooks) - $env.config = ($env.config | update hooks ($env.config.hooks | default [] pre_prompt)) - $env.config = ($env.config | update hooks.pre_prompt ($env.config.hooks.pre_prompt | append { - code: " - let direnv = (${cfg.package}/bin/direnv export json | from json) - let direnv = if not ($direnv | is-empty) { $direnv } else { {} } - $direnv | load-env - " - })) + $env.config = ($env.config? | default {}) + $env.config.hooks = ($env.config.hooks? | default {}) + $env.config.hooks.pre_prompt = ($env.config.hooks.pre_prompt? | default [] | append {|| + let direnv = (${cfg.package}/bin/direnv export json | from json | default {}) + if ($direnv | is-empty) { + return + } + $direnv + | items {|key, value| + { + key: $key + value: (do ($env.ENV_CONVERSIONS? | default {} | get -i $key | get -i from_string | default {|x| $x}) $value) + } + } | transpose -ird | load-env + }) ''); }; } diff --git a/tests/modules/programs/direnv/nushell.nix b/tests/modules/programs/direnv/nushell.nix index 3041770c..c202a6f8 100644 --- a/tests/modules/programs/direnv/nushell.nix +++ b/tests/modules/programs/direnv/nushell.nix @@ -14,6 +14,6 @@ in '' assertFileExists "${configFile}" assertFileRegex "${configFile}" \ - 'let direnv = (/nix/store/.*direnv.*/bin/direnv export json | from json)' + 'let direnv = (/nix/store/.*direnv.*/bin/direnv export json \| from json | default {})' ''; }