From f0726dcd69ba30feafd88606882c317c7e9bd093 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Fri, 23 Sep 2022 22:17:05 +0200 Subject: modules/direnv: init nix-direnv is surprisingly annoying to configure correctly, due to it needing both system-wide adjustments (`nix.conf` changes), but also user-wide adjustments (telling direnv to load nix-direnv using ~/.config/direnv/direnvrc). This module puts an end to that, allowing a direnv + nix-direnv installation with just programs.direnv.enable = true; --- nixos/modules/programs/direnv.nix | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 nixos/modules/programs/direnv.nix diff --git a/nixos/modules/programs/direnv.nix b/nixos/modules/programs/direnv.nix new file mode 100644 index 000000000000..0e182052d3d3 --- /dev/null +++ b/nixos/modules/programs/direnv.nix @@ -0,0 +1,44 @@ +{ lib, config, pkgs, ... }: { + + options.programs.direnv.enable = lib.mkOption { + type = lib.types.bool; + default = false; + example = true; + description = '' + Whether to enable direnv integration. Takes care of both installation and + setting up the sourcing of the shell. Additionally enables nix-direnv + integration. Note that you need to logout and login for this change to apply. + ''; + }; + + config = lib.mkIf config.programs.direnv.enable { + + environment.systemPackages = with pkgs; [ + direnv + nix-direnv + ]; + + environment.pathsToLink = [ + "/share/direnv" + ]; + + environment.sessionVariables.DIRENV_CONFIG = "/run/current-system/sw/share/direnv"; + + programs.bash.interactiveShellInit = '' + eval "$(direnv hook bash)" + ''; + + programs.zsh.interactiveShellInit = '' + eval "$(direnv hook zsh)" + ''; + + programs.fish.interactiveShellInit = '' + direnv hook fish | source + ''; + + # nix options for derivations to persist garbage collection + nix.settings.keep-outputs = true; + nix.settings.keep-derivations = true; + }; + +} -- cgit v1.2.3