diff --git a/modules/home/terminal/default.nix b/modules/home/terminal/default.nix index c3460de..fc43170 100644 --- a/modules/home/terminal/default.nix +++ b/modules/home/terminal/default.nix @@ -9,7 +9,7 @@ ./development.nix ./tools.nix ./yazi.nix - ./hr.nix + ./hr ./helix ./nvim ./zellij diff --git a/modules/home/terminal/hr.nix b/modules/home/terminal/hr.nix deleted file mode 100644 index 6599b0d..0000000 --- a/modules/home/terminal/hr.nix +++ /dev/null @@ -1,134 +0,0 @@ -{ - 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, ...}: { - packages = [ pkgs.google-cloud-sdk ]; - - languages.python = { - enable = true; - venv.enable = true; - uv = { - enable = true; - sync.enable = false; - }; - }; - - # We use the named index "google" defined in pyproject.toml - # This environment variable overrides the URL for that index, allow it to be configured here - env.UV_INDEX_GOOGLE_URL = "https://europe-west1-python.pkg.dev/mk2-prod/python-packages/simple/"; - env.UV_INDEX_GOOGLE_USERNAME = "oauth2accesstoken"; - - enterShell = \'\' - if ! gcloud auth print-access-token >/dev/null 2>&1; then - echo "⚠️ gcloud not authenticated. Run 'gcloud auth login' to access Google Artifact Registry." - else - export UV_INDEX_GOOGLE_PASSWORD=$(gcloud auth print-access-token) - fi - uv sync - \'\'; - } - 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" - "uv.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]; - }; -} diff --git a/modules/home/terminal/hr/default.nix b/modules/home/terminal/hr/default.nix new file mode 100644 index 0000000..eef1a98 --- /dev/null +++ b/modules/home/terminal/hr/default.nix @@ -0,0 +1,16 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.mods.terminal; + + hr = pkgs.writeShellScriptBin "hr" (builtins.readFile ./hr.sh); +in { + options.mods.terminal.hr.enable = lib.mkEnableOption "Hefring (Work Tooling)"; + + config = lib.mkIf cfg.hr.enable { + home.packages = [hr]; + }; +} diff --git a/modules/home/terminal/hr/hr.sh b/modules/home/terminal/hr/hr.sh new file mode 100644 index 0000000..7edf3f5 --- /dev/null +++ b/modules/home/terminal/hr/hr.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash + +set -e + +if [ "$1" = "py" ] && [ "$2" = "init" ]; 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, ...}: { + packages = [ pkgs.google-cloud-sdk ]; + + languages.python = { + enable = true; + venv.enable = true; + uv = { + enable = true; + sync.enable = false; + }; + }; + + # We use the named index "google" defined in uv.toml + env.UV_INDEX_GOOGLE_USERNAME = "oauth2accesstoken"; + + enterShell = '' + if ! gcloud auth print-access-token >/dev/null 2>&1; then + echo "⚠️ gcloud not authenticated. Run 'gcloud auth login' to access Google Artifact Registry." + else + export UV_INDEX_GOOGLE_PASSWORD=\$(gcloud auth print-access-token) + fi + uv sync + ''; +} +EOF + + cat <uv.toml +[[index]] +name = "google" +url = "https://europe-west1-python.pkg.dev/mk2-prod/python-packages/simple/" +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" + "uv.lock" + "uv.toml" + ".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 + + # 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 py init" + echo " py init Initialize a python devenv environment (git-ignored)" + exit 1 +fi