{ 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]; }; }