From 65d276d63a2661f79f4ef5d27704a45ea5ce29d6 Mon Sep 17 00:00:00 2001 From: Sage Date: Tue, 20 Jan 2026 13:35:39 +0000 Subject: [PATCH] Add hr cli tool --- hosts/murk/home.nix | 1 + hosts/musk/home.nix | 1 + modules/home/terminal/default.nix | 1 + modules/home/terminal/hr.nix | 113 ++++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 modules/home/terminal/hr.nix diff --git a/hosts/murk/home.nix b/hosts/murk/home.nix index a16adb5..706f35d 100644 --- a/hosts/murk/home.nix +++ b/hosts/murk/home.nix @@ -19,6 +19,7 @@ in { mods.terminal.emulator.enable = true; mods.terminal.development.enable = true; mods.terminal.tools.enable = true; + mods.terminal.hr.enable = true; mods.desktop.development.enable = true; mods.desktop.productivity.enable = false; mods.zen.enable = true; diff --git a/hosts/musk/home.nix b/hosts/musk/home.nix index 5a2edf8..0bd1d49 100644 --- a/hosts/musk/home.nix +++ b/hosts/musk/home.nix @@ -16,6 +16,7 @@ in { mods.terminal.emulator.enable = true; mods.terminal.development.enable = true; mods.terminal.tools.enable = true; + mods.terminal.hr.enable = true; mods.desktop.development.enable = true; mods.desktop.productivity.enable = false; mods.zen.enable = true; diff --git a/modules/home/terminal/default.nix b/modules/home/terminal/default.nix index 3c3eebf..c3460de 100644 --- a/modules/home/terminal/default.nix +++ b/modules/home/terminal/default.nix @@ -9,6 +9,7 @@ ./development.nix ./tools.nix ./yazi.nix + ./hr.nix ./helix ./nvim ./zellij diff --git a/modules/home/terminal/hr.nix b/modules/home/terminal/hr.nix new file mode 100644 index 0000000..ad76433 --- /dev/null +++ b/modules/home/terminal/hr.nix @@ -0,0 +1,113 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.mods.terminal; + + hr-script = pkgs.writeShellScriptBin "hr" '' + #!/usr/bin/env bash + + set -e + + if [ "$1" = "init" ] && [ "$2" = "py" ]; then + echo "Initializing python devenv..." + + # 1. Init devenv + if [ -f .gitignore ]; then + cp .gitignore .gitignore.bak + fi + + if command -v devenv >/dev/null; then + devenv init + echo "Direnv allowed" + else + echo "Error: devenv not found in path." + exit 1 + fi + + if [ -f .gitignore.bak ]; then + mv .gitignore.bak .gitignore + elif [ -f .gitignore ]; then + rm .gitignore + fi + + # 2. Replace devenv.nix + cat < devenv.nix + { pkgs, ... }: + + { + languages.python.enable = true; + languages.python.venv.enable = true; + } + EOF + + # 3. Add to local git exclude + if git rev-parse --git-dir > /dev/null 2>&1; then + EXCLUDE_FILE=$(git rev-parse --git-path info/exclude) + mkdir -p "$(dirname "$EXCLUDE_FILE")" + + IGNORES=( + ".devenv*" + ".direnv" + "devenv.nix" + "devenv.yaml" + "devenv.lock" + ".envrc" + ) + + for file in "''${IGNORES[@]}"; do + if ! grep -q "^$file$" "$EXCLUDE_FILE"; then + echo "$file" >> "$EXCLUDE_FILE" + echo "Added $file to local git exclude ($EXCLUDE_FILE)" + fi + done + else + echo "Warning: Not a git repository. Skipping git ignore setup." + fi + + # 5. Install dependencies + echo "Installing dependencies..." + + direnv exec . pip install keyrings.google-artifactregistry-auth==1.1.2 + + if [ -f pyproject.toml ]; then + # Extract optional dependencies from [project.optional-dependencies] + OPTIONALS=$(sed -n '/^\[project.optional-dependencies\]/,/^\[/p' pyproject.toml | grep -v '^\[' | grep '=' | cut -d= -f1 | tr -d ' \t' | tr '\n' ',' | sed 's/,$//') + + if [ -n "$OPTIONALS" ]; then + echo "Found optional dependencies: $OPTIONALS" + direnv exec . pip install -e ".[$OPTIONALS]" + else + echo "No optional dependencies found in pyproject.toml." + direnv exec . pip install -e . + fi + elif [ -f requirements.txt ]; then + echo "Installing from requirements.txt..." + pip install -r requirements.txt + fi + + # 4. Allow direnv + if command -v direnv >/dev/null; then + direnv allow + echo "Direnv allowed" + else + echo "Error: direnv not found in path." + exit 1 + fi + + + else + echo "Usage: hr init py" + echo " init py Initialize a python devenv environment (git-ignored)" + exit 1 + fi + ''; +in { + options.mods.terminal.hr.enable = lib.mkEnableOption "Hefring (Work Tooling)"; + + config = lib.mkIf cfg.hr.enable { + home.packages = [hr-script]; + }; +}