mirror of
https://github.com/nix-community/home-manager
synced 2024-11-26 21:19:45 +01:00
direnv: enable nushell integration
This enables nushell integration by default for direnv, similar to bash/zsh/fish. The slightly verbose way of setting this is to ensure that peoples' existing nushell configuration isn't overwritten, only appended to, as would be the case if we just used the integration example from the nushell docs: https://www.nushell.sh/cookbook/direnv.html Closes #3520
This commit is contained in:
parent
5a570962a9
commit
3ad22341a2
3 changed files with 45 additions and 0 deletions
|
@ -80,6 +80,15 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enableNushellIntegration = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = types.bool;
|
||||||
|
readOnly = true;
|
||||||
|
description = ''
|
||||||
|
Whether to enable Nushell integration.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
nix-direnv = {
|
nix-direnv = {
|
||||||
enable = mkEnableOption ''
|
enable = mkEnableOption ''
|
||||||
<link
|
<link
|
||||||
|
@ -119,5 +128,21 @@ in {
|
||||||
mkAfter ''
|
mkAfter ''
|
||||||
${pkgs.direnv}/bin/direnv hook fish | source
|
${pkgs.direnv}/bin/direnv hook fish | source
|
||||||
'');
|
'');
|
||||||
|
|
||||||
|
programs.nushell.extraConfig = mkIf cfg.enableNushellIntegration (
|
||||||
|
# Using mkAfter to make it more likely to appear after other
|
||||||
|
# manipulations of the prompt.
|
||||||
|
mkAfter ''
|
||||||
|
let-env config = ($env | default {} config).config
|
||||||
|
let-env config = ($env.config | default {} hooks)
|
||||||
|
let-env config = ($env.config | update hooks ($env.config.hooks | default [] pre_prompt))
|
||||||
|
let-env config = ($env.config | update hooks.pre_prompt ($env.config.hooks.pre_prompt | append {
|
||||||
|
code: "
|
||||||
|
let direnv = (${pkgs.direnv}/bin/direnv export json | from json)
|
||||||
|
let direnv = if ($direnv | length) == 1 { $direnv } else { {} }
|
||||||
|
$direnv | load-env
|
||||||
|
"
|
||||||
|
}))
|
||||||
|
'');
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
direnv-bash = ./bash.nix;
|
direnv-bash = ./bash.nix;
|
||||||
direnv-nix-direnv = ./nix-direnv.nix;
|
direnv-nix-direnv = ./nix-direnv.nix;
|
||||||
|
direnv-nushell = ./nushell.nix;
|
||||||
direnv-stdlib = ./stdlib.nix;
|
direnv-stdlib = ./stdlib.nix;
|
||||||
direnv-stdlib-and-nix-direnv = ./stdlib-and-nix-direnv.nix;
|
direnv-stdlib-and-nix-direnv = ./stdlib-and-nix-direnv.nix;
|
||||||
}
|
}
|
||||||
|
|
19
tests/modules/programs/direnv/nushell.nix
Normal file
19
tests/modules/programs/direnv/nushell.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.nushell.enable = true;
|
||||||
|
programs.direnv.enable = true;
|
||||||
|
|
||||||
|
test.stubs.nushell = { };
|
||||||
|
|
||||||
|
nmt.script = let
|
||||||
|
configFile = if pkgs.stdenv.isDarwin then
|
||||||
|
"home-files/Library/Application Support/nushell/config.nu"
|
||||||
|
else
|
||||||
|
"home-files/.config/nushell/config.nu";
|
||||||
|
in ''
|
||||||
|
assertFileExists "${configFile}"
|
||||||
|
assertFileRegex "${configFile}" \
|
||||||
|
'let direnv = (/nix/store/.*direnv.*/bin/direnv export json | from json)'
|
||||||
|
'';
|
||||||
|
}
|
Loading…
Reference in a new issue