#!/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"; env.PROJECT_ID = "mk2-test"; 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 -Fxq "$file" "$EXCLUDE_FILE" 2>/dev/null; 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