From c1403be2573ec9f9756114731d19544338a38cdb Mon Sep 17 00:00:00 2001 From: Anish Pallati Date: Sun, 19 Jul 2026 00:12:33 -0400 Subject: [PATCH] programs/devenv: init module Signed-off-by: Anish Pallati --- modules/module-list.nix | 1 + modules/programs/devenv.nix | 53 +++++++++++++++++++++++++++++++++++++ release.nix | 1 + tests/programs-devenv.nix | 42 +++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 modules/programs/devenv.nix create mode 100644 tests/programs-devenv.nix diff --git a/modules/module-list.nix b/modules/module-list.nix index d77afc66..24649383 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -108,6 +108,7 @@ ./programs/_1password-gui.nix ./programs/arqbackup.nix ./programs/bash + ./programs/devenv.nix ./programs/direnv.nix ./programs/fish.nix ./programs/gnupg.nix diff --git a/modules/programs/devenv.nix b/modules/programs/devenv.nix new file mode 100644 index 00000000..4452b2aa --- /dev/null +++ b/modules/programs/devenv.nix @@ -0,0 +1,53 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.devenv; + + hook = shell: "${lib.getExe cfg.package} hook ${shell}"; +in +{ + meta.maintainers = [ + lib.maintainers.domenkozar or "domenkozar" + lib.maintainers.sandydoo or "sandydoo" + lib.maintainers.anish or "anish" + ]; + + options.programs.devenv = { + enable = lib.mkEnableOption "devenv, fast, declarative, reproducible and composable developer environments"; + + package = lib.mkPackageOption pkgs "devenv" { }; + + enableBashIntegration = lib.mkEnableOption "auto-activation of devenv environments in Bash" // { + default = true; + }; + + enableFishIntegration = lib.mkEnableOption "auto-activation of devenv environments in Fish" // { + default = true; + }; + + enableZshIntegration = lib.mkEnableOption "auto-activation of devenv environments in Zsh" // { + default = true; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ cfg.package ]; + + programs.bash.interactiveShellInit = lib.mkIf cfg.enableBashIntegration '' + eval "$(${hook "bash"})" + ''; + + programs.fish.interactiveShellInit = lib.mkIf cfg.enableFishIntegration '' + ${hook "fish"} | source + ''; + + programs.zsh.interactiveShellInit = lib.mkIf cfg.enableZshIntegration '' + eval "$(${hook "zsh"})" + ''; + }; +} diff --git a/release.nix b/release.nix index e6dc9e21..93305ac6 100644 --- a/release.nix +++ b/release.nix @@ -94,6 +94,7 @@ in { tests.nix-enable = makeTest ./tests/nix-enable.nix; tests.nixpkgs-overlays = makeTest ./tests/nixpkgs-overlays.nix; tests.nixpkgs-config-allow-unfree = makeTest ./tests/nixpkgs-config-allow-unfree.nix; + tests.programs-devenv = makeTest ./tests/programs-devenv.nix; tests.programs-gnupg = makeTest ./tests/programs-gnupg.nix; tests.programs-mas = makeTest ./tests/programs-mas.nix; tests.programs-mas-no-cleanup = makeTest ./tests/programs-mas-no-cleanup.nix; diff --git a/tests/programs-devenv.nix b/tests/programs-devenv.nix new file mode 100644 index 00000000..fdf3c001 --- /dev/null +++ b/tests/programs-devenv.nix @@ -0,0 +1,42 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + devenv = + pkgs.runCommand "devenv-0.0.0" { } '' + mkdir -p $out/bin + cat > $out/bin/devenv <<'EOF' + #!/usr/bin/env bash + exit 0 + EOF + chmod +x $out/bin/devenv + '' + // { + meta.mainProgram = "devenv"; + }; +in +{ + programs.bash.enable = true; + programs.zsh.enable = true; + programs.fish.enable = true; + + programs.devenv = { + enable = true; + package = devenv; + }; + + test = '' + echo >&2 "checking devenv bash integration in /etc/bashrc" + grep 'devenv hook bash' ${config.out}/etc/bashrc + + echo >&2 "checking devenv zsh integration in /etc/zshrc" + grep 'devenv hook zsh' ${config.out}/etc/zshrc + + echo >&2 "checking devenv fish integration in /etc/fish/config.fish" + grep 'devenv hook fish' ${config.out}/etc/fish/config.fish + ''; +}