96 lines
3.2 KiB
Bash
96 lines
3.2 KiB
Bash
# 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 <name>' && 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 <<TOMLEND
|
|
|
|
[tool.coder]
|
|
workspace = "$CODER_WORKSPACE_NAME"
|
|
owner = "$CODER_WORKSPACE_OWNER"
|
|
owner_email = "$CODER_WORKSPACE_OWNER_EMAIL"
|
|
TOMLEND
|
|
fi
|
|
|
|
# Python .gitignore
|
|
cp -n "$HOME/.config/templates/python.gitignore" .gitignore 2>/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 <file> [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.
|