summaryrefslogtreecommitdiff
path: root/modules/programs
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2024-04-05 10:59:38 +0200
committerGitHub <noreply@github.com>2024-04-05 10:59:38 +0200
commit6bd39d420578aacf7c0bab7de3e7027b952115ae (patch)
treee84978f345a91441855c396331aee4c68ee77c03 /modules/programs
parentd7f1482c47503d6508657ebcbaeef281b78c6c56 (diff)
parent36524adc31566655f2f4d55ad6b875fb5c1a4083 (diff)
Merge branch 'LnL7:master' into master
Diffstat (limited to 'modules/programs')
-rw-r--r--modules/programs/direnv.nix136
-rw-r--r--modules/programs/zsh/default.nix4
2 files changed, 140 insertions, 0 deletions
diff --git a/modules/programs/direnv.nix b/modules/programs/direnv.nix
new file mode 100644
index 0000000..648b3f9
--- /dev/null
+++ b/modules/programs/direnv.nix
@@ -0,0 +1,136 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}: let
+ cfg = config.programs.direnv;
+in {
+ meta.maintainers = [
+ lib.maintainers.mattpolzin or "mattpolzin"
+ ];
+ options.programs.direnv = {
+
+ enable = lib.mkEnableOption (lib.mdDoc ''
+ direnv integration. Takes care of both installation and
+ setting up the sourcing of the shell. Additionally enables nix-direnv
+ integration.
+ '');
+
+ package = lib.mkPackageOptionMD pkgs "direnv" {};
+
+ direnvrcExtra = lib.mkOption {
+ type = lib.types.lines;
+ default = "";
+ example = ''
+ export FOO="foo"
+ echo "loaded direnv!"
+ '';
+ description = lib.mdDoc ''
+ Extra lines to append to the sourced direnvrc
+ '';
+ };
+
+ silent = lib.mkEnableOption (lib.mdDoc ''
+ the hiding of direnv logging
+ '');
+
+ loadInNixShell =
+ lib.mkEnableOption (lib.mdDoc ''
+ loading direnv in `nix-shell` `nix shell` or `nix develop`
+ '')
+ // {
+ default = true;
+ };
+
+ nix-direnv = {
+ enable =
+ (lib.mkEnableOption (lib.mdDoc ''
+ a faster, persistent implementation of use_nix and use_flake, to replace the built-in one
+ ''))
+ // {
+ default = true;
+ };
+
+ package = lib.mkPackageOptionMD pkgs "nix-direnv" {};
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+
+ programs = {
+ zsh.interactiveShellInit = ''
+ if ${lib.boolToString cfg.loadInNixShell} || printenv PATH | grep -vqc '/nix/store'; then
+ eval "$(${lib.getExe cfg.package} hook zsh)"
+ fi
+ '';
+
+ #$NIX_GCROOT for "nix develop" https://github.com/NixOS/nix/blob/6db66ebfc55769edd0c6bc70fcbd76246d4d26e0/src/nix/develop.cc#L530
+ #$IN_NIX_SHELL for "nix-shell"
+ bash.interactiveShellInit = ''
+ if ${lib.boolToString cfg.loadInNixShell} || [ -z "$IN_NIX_SHELL$NIX_GCROOT$(printenv PATH | grep '/nix/store')" ] ; then
+ eval "$(${lib.getExe cfg.package} hook bash)"
+ fi
+ '';
+
+ fish.interactiveShellInit = ''
+ if ${lib.boolToString cfg.loadInNixShell};
+ or printenv PATH | grep -vqc '/nix/store';
+ ${lib.getExe cfg.package} hook fish | source
+ end
+ '';
+ };
+
+ environment = {
+ systemPackages =
+ if cfg.loadInNixShell then [cfg.package]
+ else [
+ #direnv has a fish library which sources direnv for some reason
+ (cfg.package.overrideAttrs (old: {
+ installPhase =
+ (old.installPhase or "")
+ + ''
+ rm -rf $out/share/fish
+ '';
+ }))
+ ];
+
+ variables = {
+ DIRENV_CONFIG = "/etc/direnv";
+ DIRENV_LOG_FORMAT = lib.mkIf cfg.silent "";
+ };
+
+ etc = {
+ "direnv/direnvrc".text = ''
+ ${lib.optionalString cfg.nix-direnv.enable ''
+ #Load nix-direnv
+ source ${cfg.nix-direnv.package}/share/nix-direnv/direnvrc
+ ''}
+
+ #Load direnvrcExtra
+ ${cfg.direnvrcExtra}
+
+ #Load user-configuration if present (~/.direnvrc or ~/.config/direnv/direnvrc)
+ direnv_config_dir_home="''${DIRENV_CONFIG_HOME:-''${XDG_CONFIG_HOME:-$HOME/.config}/direnv}"
+ if [[ -f $direnv_config_dir_home/direnvrc ]]; then
+ source "$direnv_config_dir_home/direnvrc" >&2
+ elif [[ -f $HOME/.direnvrc ]]; then
+ source "$HOME/.direnvrc" >&2
+ fi
+
+ unset direnv_config_dir_home
+ '';
+
+ "direnv/lib/zz-user.sh".text = ''
+ direnv_config_dir_home="''${DIRENV_CONFIG_HOME:-''${XDG_CONFIG_HOME:-$HOME/.config}/direnv}"
+
+ for lib in "$direnv_config_dir_home/lib/"*.sh; do
+ source "$lib"
+ done
+
+ unset direnv_config_dir_home
+ '';
+ };
+ };
+ };
+}
diff --git a/modules/programs/zsh/default.nix b/modules/programs/zsh/default.nix
index 615589a..cce645c 100644
--- a/modules/programs/zsh/default.nix
+++ b/modules/programs/zsh/default.nix
@@ -219,5 +219,9 @@ in
"2af1b563e389d11b76a651b446e858116d7a20370d9120a7e9f78991f3e5f336" # DeterminateSystems installer
];
+ environment.etc."zshenv".knownSha256Hashes = [
+ "d07015be6875f134976fce84c6c7a77b512079c1c5f9594dfa65c70b7968b65f" # DeterminateSystems installer
+ ];
+
};
}