Skip to content

Commit

Permalink
direnv: enable nushell integration
Browse files Browse the repository at this point in the history
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 nix-community#3520
  • Loading branch information
autophagy authored and 15cm committed Feb 9, 2023
1 parent 3cb3bcc commit 9ced2e2
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
25 changes: 25 additions & 0 deletions modules/programs/direnv.nix
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@ in {
'';
};

enableNushellIntegration = mkOption {
default = true;
type = types.bool;
readOnly = true;
description = ''
Whether to enable Nushell integration.
'';
};

nix-direnv = {
enable = mkEnableOption ''
<link
Expand Down Expand Up @@ -119,5 +128,21 @@ in {
mkAfter ''
${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 change: 1 addition & 0 deletions tests/modules/programs/direnv/default.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
direnv-bash = ./bash.nix;
direnv-nix-direnv = ./nix-direnv.nix;
direnv-nushell = ./nushell.nix;
direnv-stdlib = ./stdlib.nix;
direnv-stdlib-and-nix-direnv = ./stdlib-and-nix-direnv.nix;
}
19 changes: 19 additions & 0 deletions tests/modules/programs/direnv/nushell.nix
Original file line number Diff line number Diff line change
@@ -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)'
'';
}

0 comments on commit 9ced2e2

Please sign in to comment.