about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/programs/zsh/zsh-autoenv.nix28
-rw-r--r--pkgs/tools/misc/zsh-autoenv/default.nix40
-rw-r--r--pkgs/top-level/all-packages.nix2
4 files changed, 71 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index b271ca0f35576..d8d6749f7965b 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -114,6 +114,7 @@
   ./programs/yabar.nix
   ./programs/zsh/oh-my-zsh.nix
   ./programs/zsh/zsh.nix
+  ./programs/zsh/zsh-autoenv.nix
   ./programs/zsh/zsh-syntax-highlighting.nix
   ./rename.nix
   ./security/acme.nix
diff --git a/nixos/modules/programs/zsh/zsh-autoenv.nix b/nixos/modules/programs/zsh/zsh-autoenv.nix
new file mode 100644
index 0000000000000..630114bcda9f3
--- /dev/null
+++ b/nixos/modules/programs/zsh/zsh-autoenv.nix
@@ -0,0 +1,28 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  cfg = config.programs.zsh.zsh-autoenv;
+in {
+  options = {
+    programs.zsh.zsh-autoenv = {
+      enable = mkEnableOption "zsh-autoenv";
+      package = mkOption {
+        default = pkgs.zsh-autoenv;
+        defaultText = "pkgs.zsh-autoenv";
+        description = ''
+          Package to install for `zsh-autoenv` usage.
+        '';
+
+        type = types.package;
+      };
+    };
+  };
+
+  config = mkIf cfg.enable {
+    programs.zsh.interactiveShellInit = ''
+      source ${cfg.package}/share/zsh-autoenv/autoenv.zsh
+    '';
+  };
+}
diff --git a/pkgs/tools/misc/zsh-autoenv/default.nix b/pkgs/tools/misc/zsh-autoenv/default.nix
new file mode 100644
index 0000000000000..492b72a176edb
--- /dev/null
+++ b/pkgs/tools/misc/zsh-autoenv/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, bash }:
+
+stdenv.mkDerivation rec {
+  name = "zsh-autoenv-${version}";
+  version = "2017-12-16";
+
+  src = fetchFromGitHub {
+    owner = "Tarrasch";
+    repo = "zsh-autoenv";
+    rev = "2c8cfbcea8e7286649840d7ec98d7e9d5e1d45a0";
+    sha256 = "004svkfzhc3ab6q2qvwzgj36wvicg5bs8d2gcibx6adq042di7zj";
+  };
+
+  buildPhase = ":";
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp -R $src $out/share/zsh-autoenv
+
+    cat <<SCRIPT > $out/bin/zsh-autoenv-share
+    #!${stdenv.shell}
+    # Run this script to find the fzf shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/zsh-autoenv
+    SCRIPT
+    chmod +x $out/bin/zsh-autoenv-share
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Automatically sources whitelisted .autoenv.zsh files";
+    longDescription = ''
+      zsh-autoenv automatically sources (known/whitelisted)
+      .autoenv.zsh files, typically used in project root directories.
+      It handles "enter" and "leave" events, nesting, and stashing of
+      variables (overwriting and restoring).
+    '';
+    homepage = https://github.com/Tarrasch/zsh-autoenv;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index f17fe5260f3c4..25373f63212cb 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5550,6 +5550,8 @@ with pkgs;
   zpaq = callPackage ../tools/archivers/zpaq { };
   zpaqd = callPackage ../tools/archivers/zpaq/zpaqd.nix { };
 
+  zsh-autoenv = callPackage ../tools/misc/zsh-autoenv { };
+
   zsh-git-prompt = callPackage ../shells/zsh-git-prompt { };
 
   zsh-navigation-tools = callPackage ../tools/misc/zsh-navigation-tools { };