aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Cassou <damien@cassou.me>2020-06-01 09:56:48 +0200
committerRobert Helgesson <robert@rycee.net>2020-06-06 22:17:43 +0200
commitb33802ca7f0675fa8f64dd0f322ab7a57e45ba6a (patch)
treea439a2a18ea2e1989b93638874e003ee9722cec5
parent575cd4b8bac4775c724b95224cd5e23d8a2064ef (diff)
direnv: add support for nix-direnv
PR #1297
-rw-r--r--modules/programs/direnv.nix12
-rw-r--r--tests/modules/programs/direnv/default.nix2
-rw-r--r--tests/modules/programs/direnv/nix-direnv.nix18
-rw-r--r--tests/modules/programs/direnv/stdlib-and-nix-direnv.nix23
4 files changed, 53 insertions, 2 deletions
diff --git a/modules/programs/direnv.nix b/modules/programs/direnv.nix
index de57727fd46..1d1374b8e26 100644
--- a/modules/programs/direnv.nix
+++ b/modules/programs/direnv.nix
@@ -70,6 +70,11 @@ in {
Whether to enable Fish integration.
'';
};
+
+ enableNixDirenvIntegration = mkEnableOption ''
+ <link
+ xlink:href="https://github.com/nix-community/nix-direnv">nix-direnv</link>,
+ a fast, persistent use_nix implementation for direnv'';
};
config = mkIf cfg.enable {
@@ -78,8 +83,11 @@ in {
xdg.configFile."direnv/config.toml" =
mkIf (cfg.config != { }) { source = configFile cfg.config; };
- xdg.configFile."direnv/direnvrc" =
- mkIf (cfg.stdlib != "") { text = cfg.stdlib; };
+ xdg.configFile."direnv/direnvrc" = let
+ text = concatStringsSep "\n" (optional (cfg.stdlib != "") cfg.stdlib
+ ++ optional cfg.enableNixDirenvIntegration
+ "source ${pkgs.nix-direnv}/share/nix-direnv/direnvrc");
+ in mkIf (text != "") { inherit text; };
programs.bash.initExtra = mkIf cfg.enableBashIntegration (
# Using mkAfter to make it more likely to appear after other
diff --git a/tests/modules/programs/direnv/default.nix b/tests/modules/programs/direnv/default.nix
index 82ad15ff06b..3efad2b6945 100644
--- a/tests/modules/programs/direnv/default.nix
+++ b/tests/modules/programs/direnv/default.nix
@@ -1,4 +1,6 @@
{
direnv-bash = ./bash.nix;
+ direnv-nix-direnv = ./nix-direnv.nix;
direnv-stdlib = ./stdlib.nix;
+ direnv-stdlib-and-nix-direnv = ./stdlib-and-nix-direnv.nix;
}
diff --git a/tests/modules/programs/direnv/nix-direnv.nix b/tests/modules/programs/direnv/nix-direnv.nix
new file mode 100644
index 00000000000..57b3907dda8
--- /dev/null
+++ b/tests/modules/programs/direnv/nix-direnv.nix
@@ -0,0 +1,18 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.bash.enable = true;
+ programs.direnv.enable = true;
+ programs.direnv.enableNixDirenvIntegration = true;
+
+ nmt.script = ''
+ assertFileExists home-files/.bashrc
+ assertFileRegex \
+ home-files/.config/direnv/direnvrc \
+ 'source /nix/store/.*nix-direnv.*/share/nix-direnv/direnvrc'
+ '';
+ };
+}
diff --git a/tests/modules/programs/direnv/stdlib-and-nix-direnv.nix b/tests/modules/programs/direnv/stdlib-and-nix-direnv.nix
new file mode 100644
index 00000000000..1dc224317a2
--- /dev/null
+++ b/tests/modules/programs/direnv/stdlib-and-nix-direnv.nix
@@ -0,0 +1,23 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let expectedContent = "something important";
+in {
+ config = {
+ programs.bash.enable = true;
+ programs.direnv.enable = true;
+ programs.direnv.enableNixDirenvIntegration = true;
+ programs.direnv.stdlib = expectedContent;
+
+ nmt.script = ''
+ assertFileExists home-files/.bashrc
+ assertFileRegex \
+ home-files/.config/direnv/direnvrc \
+ 'source /nix/store/.*nix-direnv.*/share/nix-direnv/direnvrc'
+ assertFileRegex \
+ home-files/.config/direnv/direnvrc \
+ '${expectedContent}'
+ '';
+ };
+}