mirror of
https://github.com/nix-community/home-manager
synced 2024-12-24 18:59:47 +01:00
direnv: Apply nushell env transformations
In nushell, the ENV_CONVERSIONS environment variable is used to transform the defined variables from a string to a nushell value (PATH to a list being one of the most common uses). This commit applies user-defined conversions to direnv-loaded variables. This fixes binary autocompletion not being triggered for newly added paths and makes direnv work consistently with nushell
This commit is contained in:
parent
8f38f1a231
commit
67c4c05c29
2 changed files with 16 additions and 11 deletions
|
@ -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
|
||||
})
|
||||
'');
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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 {})'
|
||||
'';
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue