# Oh My Zsh export ZSH="$HOME/.oh-my-zsh" ZSH_THEME="agnoster" plugins=(git docker python pip uv vscode command-not-found zsh-autosuggestions zsh-syntax-highlighting) source "$ZSH/oh-my-zsh.sh" # User PATH export PATH="$HOME/.local/bin:$PATH" export EDITOR="${EDITOR:-nano}" export MPLBACKEND="${MPLBACKEND:-Agg}" # Source LiteLLM model presets if dotfiles delivered them [ -f "$HOME/.config/models.env" ] && source "$HOME/.config/models.env" # Aliases alias ll='ls -lah --color=auto' alias g='git' alias gs='git status -sb' alias gd='git diff' alias gco='git checkout' alias uvr='uv run' alias uvs='uv sync' # Model-switch aliases for aider (override per-call) alias aider-code='AIDER_MODEL=$MODEL_CODE aider' alias aider-big='AIDER_MODEL=$MODEL_BIG_CODE aider' alias aider-reason='AIDER_MODEL=$MODEL_REASON aider' alias aider-fast='AIDER_MODEL=$MODEL_FAST aider' mkproj() { local name="$1" [ -z "$name" ] && echo 'usage: mkproj ' && return 1 local dir="$HOME/work/$name" mkdir -p "$dir" && cd "$dir" || return 1 uv init --no-readme >/dev/null # tag pyproject with workspace + owner from Coder env (when present) if [ -n "${CODER_WORKSPACE_NAME:-}" ]; then cat >> pyproject.toml </dev/null # Dev tooling + pre-commit uv add --dev pytest ruff ty pre-commit >/dev/null 2>&1 || true cp -n "$HOME/.config/templates/.pre-commit-config.yaml" . 2>/dev/null uv run pre-commit install >/dev/null 2>&1 || true # First commit git init -q -b main git add . && git commit -q -m "chore: scaffold $name (mkproj)" || true echo "$name ready at $dir" } savefig() { local file="$1" local key="${2:-$(date +%Y-%m-%d)/$(basename "$file")}" [ -z "$file" ] || [ ! -f "$file" ] && { echo "usage: savefig [key]"; return 1; } FILE="$file" KEY="$key" uv run --with boto3 --quiet - <<'PYEOF' import boto3, os, sys, mimetypes from botocore.config import Config path = os.environ["FILE"] key = os.environ["KEY"] ep = os.environ.get("CHAT_ARTIFACTS_ENDPOINT", "https://s3.nuclide.systems") acc = os.environ.get("CHAT_ARTIFACTS_ACCESS_KEY", "") sec = os.environ.get("CHAT_ARTIFACTS_SECRET_KEY", "") bkt = os.environ.get("CHAT_ARTIFACTS_BUCKET", "chat-artifacts") if not acc: print("CHAT_ARTIFACTS_ACCESS_KEY not set", file=sys.stderr); sys.exit(1) ct, _ = mimetypes.guess_type(path) s3 = boto3.client("s3", endpoint_url=ep, aws_access_key_id=acc, aws_secret_access_key=sec, region_name="garage", config=Config(signature_version="s3v4")) with open(path, "rb") as f: s3.put_object(Bucket=bkt, Key=key, Body=f.read(), ContentType=ct or "application/octet-stream") print(f"https://chat-artifacts.s3.nuclide.systems/{key}") PYEOF } # Docker — detach from a running attach with Ctrl+P, Ctrl+Q alias dps='docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"' alias da='docker attach' alias dl='docker logs -f --tail=200' alias de='docker exec -it' # Claude Code — sensible permission allowlist lives in ~/.claude/settings.json; # add --dangerously-skip-permissions per-call when you want full trust.