diff --git a/examples/example.nix b/examples/example.nix index 4a78aa30..674442b7 100644 --- a/examples/example.nix +++ b/examples/example.nix @@ -3,6 +3,8 @@ config = { nixpkgs.hostPlatform = "x86_64-linux"; + programs.direnv.enable = true; + services.nginx.enable = true; environment = { diff --git a/nix/modules/default.nix b/nix/modules/default.nix index b1cc3dc9..89e49195 100644 --- a/nix/modules/default.nix +++ b/nix/modules/default.nix @@ -9,6 +9,7 @@ imports = [ ./environment.nix ./etc.nix + ./direnv.nix ./systemd.nix ./tmpfiles.nix ./upstream/nixpkgs diff --git a/nix/modules/direnv.nix b/nix/modules/direnv.nix new file mode 100644 index 00000000..634f4d6c --- /dev/null +++ b/nix/modules/direnv.nix @@ -0,0 +1,35 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.programs.direnv; +in +{ + options.programs.direnv = { + enable = lib.mkEnableOption "direnv integration"; + package = lib.mkPackageOption pkgs "direnv" { }; + nix-direnv = { + enable = lib.mkEnableOption "nix-direnv integration"; + package = lib.mkPackageOption pkgs "nix-direnv" { }; + }; + }; + config = lib.mkIf cfg.enable { + environment = { + etc = { + "profile.d/direnv.sh".source = pkgs.writeText "direnv.sh" '' + eval "$(${lib.getExe cfg.package} hook bash)" + ''; + }; + systemPackages = + [ + cfg.package + ] + ++ lib.optionals cfg.nix-direnv.enable [ + cfg.nix-direnv.package + ]; + }; + }; +} diff --git a/test/nix/modules/default.nix b/test/nix/modules/default.nix index 0b3c6541..3b4386f4 100644 --- a/test/nix/modules/default.nix +++ b/test/nix/modules/default.nix @@ -308,6 +308,7 @@ forEachUbuntuImage "example" { vm.fail("bash --login -c '$(which rg)'") vm.fail("bash --login -c '$(which fd)'") + vm.fail("bash --login -c '$(which direnv)'") ${system-manager.lib.activateProfileSnippet { node = "vm"; @@ -320,6 +321,7 @@ forEachUbuntuImage "example" { #vm.fail("bash --login -c '$(which fish)'") vm.succeed("bash --login -c 'realpath $(which rg) | grep -F ${hostPkgs.ripgrep}/bin/rg'") vm.succeed("bash --login -c 'realpath $(which fd) | grep -F ${hostPkgs.fd}/bin/fd'") + vm.succeed("bash --login -c 'realpath $(which direnv) | grep -F ${hostPkgs.direnv}/bin/direnv'") ${system-manager.lib.activateProfileSnippet { node = "vm"; @@ -328,6 +330,7 @@ forEachUbuntuImage "example" { vm.fail("bash --login -c '$(which rg)'") vm.fail("bash --login -c '$(which fd)'") + vm.fail("bash --login -c '$(which direnv)'") vm.succeed("bash --login -c 'realpath $(which fish) | grep -F ${hostPkgs.fish}/bin/fish'") ''; }