From 02808afa26f05def8f4079634fa00c88b3ac49ca Mon Sep 17 00:00:00 2001 From: aadil96 Date: Fri, 12 Jun 2026 23:19:07 +0530 Subject: [PATCH 01/18] feat: replace aeos script with homebrew and brewfile integration --- .../run_onchange_after_install_aeos.sh.tmpl | 85 ------------------- .../run_onchange_after_install_brew.sh.tmpl | 10 +++ dot_bashrc.tmpl | 2 + dot_config/brew/Brewfile | 3 + dot_zshrc.tmpl | 4 +- setup | 30 ++++++- 6 files changed, 44 insertions(+), 90 deletions(-) delete mode 100755 .chezmoiscripts/run_onchange_after_install_aeos.sh.tmpl create mode 100644 .chezmoiscripts/run_onchange_after_install_brew.sh.tmpl create mode 100644 dot_config/brew/Brewfile diff --git a/.chezmoiscripts/run_onchange_after_install_aeos.sh.tmpl b/.chezmoiscripts/run_onchange_after_install_aeos.sh.tmpl deleted file mode 100755 index 5f2b5a20..00000000 --- a/.chezmoiscripts/run_onchange_after_install_aeos.sh.tmpl +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash -# Managed by chezmoi — installs Anchor runtime -set -euo pipefail - -AEOS_REPO_URL="{{ .aeos_repo_url | default "https://github.com/aadil/autonomous-engineering-os.git" }}" -AEOS_DIR="{{ .aeos_dir | default "$HOME/.aeos" }}" -ANCHOR_BIN="{{ .anchor_bin_dir | default "$HOME/.local/bin" }}" -# Note: machine_id defaults to slugified short hostname (matching install-aeos.sh behavior) -# Override via chezmoi data: machine_id = "my-custom-name" -MACHINE_ID="{{ .machine_id | default "" }}" -SYNC_HUB="{{ .sync_hub | default "hermes-sandbox" }}" -AEOS_SSH_USER="{{ .aeos_ssh_user | default "vagrant" }}" - -export AEOS_REPO_URL AEOS_DIR ANCHOR_BIN MACHINE_ID SYNC_HUB AEOS_SSH_USER - -# Slugify machine ID if not explicitly set (match install-aeos.sh behavior) -if [ -z "$MACHINE_ID" ]; then - MACHINE_ID=$(hostname -s 2>/dev/null || echo "unknown") - MACHINE_ID=$(echo "$MACHINE_ID" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g; s/--*/-/g; s/^-//; s/-$//') -fi - -echo "==> chezmoi: Installing Anchor runtime..." - -# Clone or update AEOS repo -if [ ! -d "$AEOS_DIR" ]; then - echo "--> Cloning AEOS repo..." - git clone --depth 1 "$AEOS_REPO_URL" "$AEOS_DIR" -else - echo "--> Updating AEOS repo..." - cd "$AEOS_DIR" && git pull --ff-only origin main -fi - -# Ensure directories and symlinks -mkdir -p "$ANCHOR_BIN" "$AEOS_DIR/runtime"/{sessions,state,feedback} -ln -sf "$AEOS_DIR/scripts/anchor" "$ANCHOR_BIN/anchor" - -# Generate config if not present -if [ ! -f "$AEOS_DIR/config" ]; then - cat > "$AEOS_DIR/config" << EOF -machine_id=${MACHINE_ID} -sync_hub=${SYNC_HUB} -sync_enabled=$([[ -n "$SYNC_HUB" ]] && echo "true" || echo "false") -aeos_ssh_user=${AEOS_SSH_USER} -EOF - echo "--> Generated config at $AEOS_DIR/config" -fi - -# Set up sync timer -if command -v systemctl &>/dev/null; then - mkdir -p "$HOME/.config/systemd/user" - cat > "$HOME/.config/systemd/user/aeos-sync.service" << EOF -[Unit] -Description=AEOS sync push to Hermes hub - -[Service] -Type=oneshot -ExecStart=${AEOS_DIR}/scripts/sync-push.sh - -[Install] -WantedBy=default.target -EOF - cat > "$HOME/.config/systemd/user/aeos-sync.timer" << 'EOF' -[Unit] -Description=AEOS sync timer (every 10 min) - -[Timer] -OnBootSec=2min -OnUnitActiveSec=10min -RandomizedDelaySec=2min - -[Install] -WantedBy=timers.target -EOF - systemctl --user daemon-reload 2>/dev/null || true - systemctl --user enable --now aeos-sync.timer 2>/dev/null || true - echo "--> Enabled systemd timer" -elif command -v crontab &>/dev/null; then - (crontab -l 2>/dev/null | grep -v 'sync-push.sh'; echo "*/10 * * * * $AEOS_DIR/scripts/sync-push.sh") | crontab - || true - echo "--> Added crontab entry" -else - echo "--> WARNING: No systemd or cron found. Sync will not run automatically." - echo " Run 'anchor sync' manually or set up a scheduler." -fi - -echo "✓ Anchor runtime installed" diff --git a/.chezmoiscripts/run_onchange_after_install_brew.sh.tmpl b/.chezmoiscripts/run_onchange_after_install_brew.sh.tmpl new file mode 100644 index 00000000..3a5405f5 --- /dev/null +++ b/.chezmoiscripts/run_onchange_after_install_brew.sh.tmpl @@ -0,0 +1,10 @@ +#!/bin/bash +# brew hash: {{ include "dot_config/brew/Brewfile" | sha256sum }} + +set -euo pipefail + +BREW_BIN="{{ if $b := lookPath "brew" }}{{ $b }}{{ else }}/home/linuxbrew/.linuxbrew/bin/brew{{ end }}" + +BREWFILE="{{ .chezmoi.homeDir }}/.config/brew/Brewfile" + +"$BREW_BIN" bundle --file "$BREWFILE" --no-lock diff --git a/dot_bashrc.tmpl b/dot_bashrc.tmpl index 7eafe807..c077d8dd 100644 --- a/dot_bashrc.tmpl +++ b/dot_bashrc.tmpl @@ -33,3 +33,5 @@ fi if command -v bat >/dev/null; then alias cat="bat" fi + +export HOMEBREW_BUNDLE_FILE="$HOME/.config/brew/Brewfile" diff --git a/dot_config/brew/Brewfile b/dot_config/brew/Brewfile new file mode 100644 index 00000000..2811533b --- /dev/null +++ b/dot_config/brew/Brewfile @@ -0,0 +1,3 @@ +brew "zsh" + +cask "claude-code" diff --git a/dot_zshrc.tmpl b/dot_zshrc.tmpl index 7d9e8046..990b51e7 100644 --- a/dot_zshrc.tmpl +++ b/dot_zshrc.tmpl @@ -98,10 +98,12 @@ if command -v batcat > /dev/null ; then alias cat="batcat" fi -if command -v dagger > /dev/null ; then +if command -v dagger > /dev/null ; then export DAGGER_NO_NAG=1 fi +export HOMEBREW_BUNDLE_FILE="$HOME/.config/brew/Brewfile" + if [[ -d "$HOME/.zsh/zsh-autosuggestions" ]] ; then source "$HOME/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" fi diff --git a/setup b/setup index 747ca1c4..dbcf9a26 100755 --- a/setup +++ b/setup @@ -2,15 +2,37 @@ set -euo pipefail +# Ensure ~/.local/bin is on PATH (mise installs tools here) +export PATH="$HOME/.local/bin:$PATH" + +# Install Homebrew if missing +if ! command -v brew >/dev/null; then + echo "Installing Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +fi + +# Add brew to PATH for this session +if [ -f /home/linuxbrew/.linuxbrew/bin/brew ]; then + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" +elif [ -f /opt/homebrew/bin/brew ]; then + eval "$(/opt/homebrew/bin/brew shellenv)" +fi + +# Install zsh via brew if missing +if ! command -v zsh >/dev/null; then + echo "Installing zsh..." + brew install zsh +fi + +# Bootstrap chezmoi and apply dotfiles if command -v chezmoi >/dev/null; then - chezmoi init --apply --source $PWD + chezmoi init --apply --source "$PWD" exit 0 fi if command -v mise >/dev/null; then - mise exec chezmoi -- chezmoi init --apply --source $PWD + mise exec chezmoi -- chezmoi init --apply --source "$PWD" exit 0 fi -sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply --source $PWD -exit 0 +sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply --source "$PWD" From 803c3108881797929e99746a3d899f6c3bf9924a Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sat, 13 Jun 2026 08:45:30 +0530 Subject: [PATCH 02/18] Update .config/mise/mise.toml --- dot_config/mise/mise.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/dot_config/mise/mise.toml b/dot_config/mise/mise.toml index eb5f4b34..40541bbc 100644 --- a/dot_config/mise/mise.toml +++ b/dot_config/mise/mise.toml @@ -29,6 +29,7 @@ deno = "2.7.14" "npm:@agentmemory/agentmemory" = "latest" "npm:@agentmemory/mcp" = "latest" "npm:iii-sdk" = "0.12.0" +tmux = "latest" [settings] experimental = true From 8ab0e3dfa4297a440dd799f9dadcbe0567051fbb Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sat, 13 Jun 2026 11:29:40 +0530 Subject: [PATCH 03/18] feat: add @juliusbrussee/caveman-code and remove brew bundle --no-lock --- .../run_onchange_after_install_brew.sh.tmpl | 2 +- dot_config/mise/mise.lock | 392 ++++++++++++++---- dot_config/mise/mise.toml | 1 + 3 files changed, 313 insertions(+), 82 deletions(-) diff --git a/.chezmoiscripts/run_onchange_after_install_brew.sh.tmpl b/.chezmoiscripts/run_onchange_after_install_brew.sh.tmpl index 3a5405f5..47b57fff 100644 --- a/.chezmoiscripts/run_onchange_after_install_brew.sh.tmpl +++ b/.chezmoiscripts/run_onchange_after_install_brew.sh.tmpl @@ -7,4 +7,4 @@ BREW_BIN="{{ if $b := lookPath "brew" }}{{ $b }}{{ else }}/home/linuxbrew/.linux BREWFILE="{{ .chezmoi.homeDir }}/.config/brew/Brewfile" -"$BREW_BIN" bundle --file "$BREWFILE" --no-lock +"$BREW_BIN" bundle --file "$BREWFILE" diff --git a/dot_config/mise/mise.lock b/dot_config/mise/mise.lock index bea995d0..67ea0af9 100644 --- a/dot_config/mise/mise.lock +++ b/dot_config/mise/mise.lock @@ -1,90 +1,202 @@ +# @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html + [[tools."aqua:neovim"]] version = "0.11.6" backend = "aqua:neovim" -"platforms.linux-x64" = { checksum = "sha256:2fc90b962327f73a78afbfb8203fd19db8db9cdf4ee5e2bef84704339add89cc", url = "https://github.com/neovim/neovim/releases/download/v0.11.6/nvim-linux-x86_64.tar.gz"} + +[tools."aqua:neovim"."platforms.linux-x64"] +checksum = "sha256:2fc90b962327f73a78afbfb8203fd19db8db9cdf4ee5e2bef84704339add89cc" +url = "https://github.com/neovim/neovim/releases/download/v0.11.6/nvim-linux-x86_64.tar.gz" [[tools.bat]] version = "0.25.0" backend = "aqua:sharkdp/bat" -"platforms.linux-arm64" = { url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-aarch64-unknown-linux-musl.tar.gz"} -"platforms.linux-x64" = { url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-x86_64-apple-darwin.tar.gz"} -"platforms.windows-x64" = { url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-x86_64-pc-windows-msvc.zip"} + +[tools.bat."platforms.linux-arm64"] +url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-aarch64-unknown-linux-musl.tar.gz" + +[tools.bat."platforms.linux-x64"] +url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-x86_64-unknown-linux-musl.tar.gz" + +[tools.bat."platforms.macos-arm64"] +url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-aarch64-apple-darwin.tar.gz" + +[tools.bat."platforms.macos-x64"] +url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-x86_64-apple-darwin.tar.gz" + +[tools.bat."platforms.windows-x64"] +url = "https://github.com/sharkdp/bat/releases/download/v0.25.0/bat-v0.25.0-x86_64-pc-windows-msvc.zip" [[tools.btop]] version = "1.4.4" backend = "aqua:aristocratos/btop" -"platforms.linux-arm64" = { checksum = "sha256:e8845d3f69f6a32d00258a1f79c093970666ece3d05a430c7b24a16c56577bf5", url = "https://github.com/aristocratos/btop/releases/download/v1.4.4/btop-aarch64-linux-musl.tbz"} -"platforms.linux-x64" = { checksum = "sha256:fec7d1b59c671290a0f80d5a32617ea6d60412485fc04318fd194b9550ff6b49", url = "https://github.com/aristocratos/btop/releases/download/v1.4.4/btop-x86_64-linux-musl.tbz"} + +[tools.btop."platforms.linux-arm64"] +checksum = "sha256:e8845d3f69f6a32d00258a1f79c093970666ece3d05a430c7b24a16c56577bf5" +url = "https://github.com/aristocratos/btop/releases/download/v1.4.4/btop-aarch64-linux-musl.tbz" + +[tools.btop."platforms.linux-x64"] +checksum = "sha256:fec7d1b59c671290a0f80d5a32617ea6d60412485fc04318fd194b9550ff6b49" +url = "https://github.com/aristocratos/btop/releases/download/v1.4.4/btop-x86_64-linux-musl.tbz" [[tools.chezmoi]] version = "2.68.1" backend = "aqua:twpayne/chezmoi" -"platforms.linux-arm64" = { checksum = "sha256:057ab9ba1b0aa0615eadab1b25771ac1c837d79a4d60ace86296e4c8e2eae586", url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_linux_arm64.pkg.tar.zst"} -"platforms.linux-x64" = { checksum = "sha256:3013e9d8d5eeab832b28bc87c8666efddecfc0fe9a1c6597368d940498022fe1", url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_linux-glibc_amd64.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:4d5f98464382a29cb717b9fc39fce720d451f996181a15dd0dc6ca16305dacef", url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_darwin_arm64.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:c40fe3eb799154ebc126e806e3cb037eff93f9b5e05d4c295d565291db670b10", url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_darwin_amd64.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:a48169627572aeeaf7a46ab0d30906f3786ab84235adf5819850c65762aef3b1", url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_windows_amd64.zip"} + +[tools.chezmoi."platforms.linux-arm64"] +checksum = "sha256:057ab9ba1b0aa0615eadab1b25771ac1c837d79a4d60ace86296e4c8e2eae586" +url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_linux_arm64.pkg.tar.zst" + +[tools.chezmoi."platforms.linux-x64"] +checksum = "sha256:3013e9d8d5eeab832b28bc87c8666efddecfc0fe9a1c6597368d940498022fe1" +url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_linux-glibc_amd64.tar.gz" + +[tools.chezmoi."platforms.macos-arm64"] +checksum = "sha256:4d5f98464382a29cb717b9fc39fce720d451f996181a15dd0dc6ca16305dacef" +url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_darwin_arm64.tar.gz" + +[tools.chezmoi."platforms.macos-x64"] +checksum = "sha256:c40fe3eb799154ebc126e806e3cb037eff93f9b5e05d4c295d565291db670b10" +url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_darwin_amd64.tar.gz" + +[tools.chezmoi."platforms.windows-x64"] +checksum = "sha256:a48169627572aeeaf7a46ab0d30906f3786ab84235adf5819850c65762aef3b1" +url = "https://github.com/twpayne/chezmoi/releases/download/v2.68.1/chezmoi_2.68.1_windows_amd64.zip" [[tools.cloudflared]] version = "2025.11.1" backend = "aqua:cloudflare/cloudflared" -"platforms.linux-arm64" = { checksum = "sha256:9979dc152097a29b6de4d1ef13e2f1821c67a6f096f88cc18f0fd25106305d3a", url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-linux-arm64"} -"platforms.linux-x64" = { checksum = "sha256:991dffd8889ee9f0147b6b48933da9e4407e68ea8c6d984f55fa2d3db4bb431d", url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-linux-amd64"} -"platforms.macos-arm64" = { checksum = "sha256:155a288fef19dba08f0c7145c16a207baf137462d8a1289a78bf8564f9e51244", url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-darwin-amd64.tgz"} -"platforms.macos-x64" = { checksum = "sha256:155a288fef19dba08f0c7145c16a207baf137462d8a1289a78bf8564f9e51244", url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-darwin-amd64.tgz"} -"platforms.windows-x64" = { checksum = "sha256:413f9b24dc6e61a455564651524f167b8ce29ac4ccd40703dea7af93cd37ed39", url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-windows-amd64.exe"} + +[tools.cloudflared."platforms.linux-arm64"] +checksum = "sha256:9979dc152097a29b6de4d1ef13e2f1821c67a6f096f88cc18f0fd25106305d3a" +url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-linux-arm64" + +[tools.cloudflared."platforms.linux-x64"] +checksum = "sha256:991dffd8889ee9f0147b6b48933da9e4407e68ea8c6d984f55fa2d3db4bb431d" +url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-linux-amd64" + +[tools.cloudflared."platforms.macos-arm64"] +checksum = "sha256:155a288fef19dba08f0c7145c16a207baf137462d8a1289a78bf8564f9e51244" +url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-darwin-amd64.tgz" + +[tools.cloudflared."platforms.macos-x64"] +checksum = "sha256:155a288fef19dba08f0c7145c16a207baf137462d8a1289a78bf8564f9e51244" +url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-darwin-amd64.tgz" + +[tools.cloudflared."platforms.windows-x64"] +checksum = "sha256:413f9b24dc6e61a455564651524f167b8ce29ac4ccd40703dea7af93cd37ed39" +url = "https://github.com/cloudflare/cloudflared/releases/download/2025.11.1/cloudflared-windows-amd64.exe" [[tools.deno]] version = "2.7.14" backend = "core:deno" -"platforms.linux-x64" = { checksum = "blake3:d8373ad11ff78338f8e4dfcda53e6a65ea2654fbf46928b283a74205f3481498"} + +[tools.deno."platforms.linux-x64"] +checksum = "blake3:d8373ad11ff78338f8e4dfcda53e6a65ea2654fbf46928b283a74205f3481498" [[tools.doggo]] version = "1.0.5" backend = "aqua:mr-karan/doggo" -"platforms.linux-arm64" = { checksum = "sha256:999eca7a590e4230fb63cc4390a74355ad16023b3103914c6c051b3f6bf8973d", url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Linux_arm64.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:3e9047da1c473c3895230e4bf3303b1b7a5d1c82cc688043be431984e1de697d", url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Linux_x86_64.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:0535fdfc5084db88ca1eea2b6f90a64a1885303d669ff23ff4fe4860b5c556b1", url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Darwin_arm64.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:c6d7d6d31d60adef4b65ea04e602c4a40e72545ba218fd5b3372cd8ea1561eea", url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Darwin_x86_64.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:2dff0f18b26ae712ce6bfc89cc0290124465c0bba327f5157839fbebd5bae062", url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Windows_x86_64.zip"} + +[tools.doggo."platforms.linux-arm64"] +checksum = "sha256:999eca7a590e4230fb63cc4390a74355ad16023b3103914c6c051b3f6bf8973d" +url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Linux_arm64.tar.gz" + +[tools.doggo."platforms.linux-x64"] +checksum = "sha256:3e9047da1c473c3895230e4bf3303b1b7a5d1c82cc688043be431984e1de697d" +url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Linux_x86_64.tar.gz" + +[tools.doggo."platforms.macos-arm64"] +checksum = "sha256:0535fdfc5084db88ca1eea2b6f90a64a1885303d669ff23ff4fe4860b5c556b1" +url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Darwin_arm64.tar.gz" + +[tools.doggo."platforms.macos-x64"] +checksum = "sha256:c6d7d6d31d60adef4b65ea04e602c4a40e72545ba218fd5b3372cd8ea1561eea" +url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Darwin_x86_64.tar.gz" + +[tools.doggo."platforms.windows-x64"] +checksum = "sha256:2dff0f18b26ae712ce6bfc89cc0290124465c0bba327f5157839fbebd5bae062" +url = "https://github.com/mr-karan/doggo/releases/download/v1.0.5/doggo_1.0.5_Windows_x86_64.zip" [[tools.fd]] version = "10.2.0" backend = "aqua:sharkdp/fd" -"platforms.linux-arm64" = { url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-aarch64-unknown-linux-musl.tar.gz"} -"platforms.linux-x64" = { url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-apple-darwin.tar.gz"} -"platforms.windows-x64" = { url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-pc-windows-msvc.zip"} + +[tools.fd."platforms.linux-arm64"] +url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-aarch64-unknown-linux-musl.tar.gz" + +[tools.fd."platforms.linux-x64"] +url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-unknown-linux-musl.tar.gz" + +[tools.fd."platforms.macos-arm64"] +url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-aarch64-apple-darwin.tar.gz" + +[tools.fd."platforms.macos-x64"] +url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-apple-darwin.tar.gz" + +[tools.fd."platforms.windows-x64"] +url = "https://github.com/sharkdp/fd/releases/download/v10.2.0/fd-v10.2.0-x86_64-pc-windows-msvc.zip" [[tools.fzf]] version = "0.62.0" backend = "aqua:junegunn/fzf" -"platforms.linux-arm64" = { checksum = "sha256:929fd132705d02f222a52e23c076018ef3e699793dd5e8c3183bb11ed9b7696e", url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-linux_arm64.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:64b56dd484a2317d5f04c28ac0791b36807f034adb419209ad39fb6637255794", url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-linux_amd64.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:7ea045ffec6d5461a983e299eccfaa66324373c6e3d1894568f09e47fa7560c1", url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-darwin_arm64.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:7657712753fea74f9390b0dc99d175a9336ca722de413cccfca16aae86720acd", url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-darwin_amd64.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:dac80c9d652c34f0ccd5d7c1c7b0e3ac9aa2e26c86d0a98b206ce5126f8a9774", url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-windows_amd64.zip"} + +[tools.fzf."platforms.linux-arm64"] +checksum = "sha256:929fd132705d02f222a52e23c076018ef3e699793dd5e8c3183bb11ed9b7696e" +url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-linux_arm64.tar.gz" + +[tools.fzf."platforms.linux-x64"] +checksum = "sha256:64b56dd484a2317d5f04c28ac0791b36807f034adb419209ad39fb6637255794" +url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-linux_amd64.tar.gz" + +[tools.fzf."platforms.macos-arm64"] +checksum = "sha256:7ea045ffec6d5461a983e299eccfaa66324373c6e3d1894568f09e47fa7560c1" +url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-darwin_arm64.tar.gz" + +[tools.fzf."platforms.macos-x64"] +checksum = "sha256:7657712753fea74f9390b0dc99d175a9336ca722de413cccfca16aae86720acd" +url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-darwin_amd64.tar.gz" + +[tools.fzf."platforms.windows-x64"] +checksum = "sha256:dac80c9d652c34f0ccd5d7c1c7b0e3ac9aa2e26c86d0a98b206ce5126f8a9774" +url = "https://github.com/junegunn/fzf/releases/download/v0.62.0/fzf-0.62.0-windows_amd64.zip" [[tools.github-cli]] version = "2.82.1" backend = "aqua:cli/cli" -"platforms.linux-arm64" = { checksum = "sha256:80b467daabeabf4379b5b7138f4b8b47f56670cc615ab288361a602ce413d8bf", url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_linux_arm64.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:afada88676dfccea384e6cc28ae990b3e31bbc55f9d75c4697f902c757fa462b", url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_linux_amd64.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:8cf015d101a5a43bbf662155d47ba6242bd1a1630c814e764254efa86e448ba7", url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_macOS_arm64.zip"} -"platforms.macos-x64" = { checksum = "sha256:83499edd5830f345e01e187e4593a46919bd7440b43c5aabe2442ae918cad9f1", url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_macOS_amd64.zip"} -"platforms.windows-x64" = { checksum = "sha256:17bb2a19d25887cebd3b0ee2d3a3fdf56791eb0df15cf34b068fac56212f690b", url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_windows_amd64.zip"} + +[tools.github-cli."platforms.linux-arm64"] +checksum = "sha256:80b467daabeabf4379b5b7138f4b8b47f56670cc615ab288361a602ce413d8bf" +url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_linux_arm64.tar.gz" + +[tools.github-cli."platforms.linux-x64"] +checksum = "sha256:afada88676dfccea384e6cc28ae990b3e31bbc55f9d75c4697f902c757fa462b" +url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_linux_amd64.tar.gz" + +[tools.github-cli."platforms.macos-arm64"] +checksum = "sha256:8cf015d101a5a43bbf662155d47ba6242bd1a1630c814e764254efa86e448ba7" +url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_macOS_arm64.zip" + +[tools.github-cli."platforms.macos-x64"] +checksum = "sha256:83499edd5830f345e01e187e4593a46919bd7440b43c5aabe2442ae918cad9f1" +url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_macOS_amd64.zip" + +[tools.github-cli."platforms.windows-x64"] +checksum = "sha256:17bb2a19d25887cebd3b0ee2d3a3fdf56791eb0df15cf34b068fac56212f690b" +url = "https://github.com/cli/cli/releases/download/v2.82.1/gh_2.82.1_windows_amd64.zip" [[tools."github:anomalyco/opencode"]] version = "1.15.4" backend = "github:anomalyco/opencode" -"platforms.linux-x64" = { checksum = "sha256:3a314f4e400487b15b4f76897a957e86359e0bf53e50289edf7d64bc8af29d0b", url = "https://github.com/anomalyco/opencode/releases/download/v1.15.4/opencode-linux-x64-baseline.tar.gz", url_api = "https://api.github.com/repos/anomalyco/opencode/releases/assets/422624174"} + +[tools."github:anomalyco/opencode"."platforms.linux-x64"] +checksum = "sha256:3a314f4e400487b15b4f76897a957e86359e0bf53e50289edf7d64bc8af29d0b" +url = "https://github.com/anomalyco/opencode/releases/download/v1.15.4/opencode-linux-x64-baseline.tar.gz" +url_api = "https://api.github.com/repos/anomalyco/opencode/releases/assets/422624174" [[tools."github:nushell/nushell"]] version = "0.108.0" -backend = "github:nushell/nushell[exe=nu]" +backend = "github:nushell/nushell" [[tools.go]] version = "1.25.6" @@ -93,29 +205,69 @@ backend = "core:go" [[tools.jj]] version = "0.34.0" backend = "aqua:jj-vcs/jj" -"platforms.linux-arm64" = { checksum = "sha256:39b5d689bcdc37256fe5f9ed9caccf5e73b310d1f86848fdf610a7bea9d75c14", url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-aarch64-unknown-linux-musl.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:1e8e1ede656fecba91ceb8248a76402a110017ad677d0ecfd1f2040f5543cfa3", url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:8893d34ff0c76e16fdf46ba8771ea2498294957aec5efb0618de15cc493aee27", url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:807417125e574432b71c4568a0e2d6168c30af3b59e64ce02a45a54cf0880bd7", url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-x86_64-apple-darwin.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:138f2642a99afb08aff0f7dc54b2076dcdc625d07a9a2e21b52895ea72db900e", url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-x86_64-pc-windows-msvc.zip"} + +[tools.jj."platforms.linux-arm64"] +checksum = "sha256:39b5d689bcdc37256fe5f9ed9caccf5e73b310d1f86848fdf610a7bea9d75c14" +url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-aarch64-unknown-linux-musl.tar.gz" + +[tools.jj."platforms.linux-x64"] +checksum = "sha256:1e8e1ede656fecba91ceb8248a76402a110017ad677d0ecfd1f2040f5543cfa3" +url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-x86_64-unknown-linux-musl.tar.gz" + +[tools.jj."platforms.macos-arm64"] +checksum = "sha256:8893d34ff0c76e16fdf46ba8771ea2498294957aec5efb0618de15cc493aee27" +url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-aarch64-apple-darwin.tar.gz" + +[tools.jj."platforms.macos-x64"] +checksum = "sha256:807417125e574432b71c4568a0e2d6168c30af3b59e64ce02a45a54cf0880bd7" +url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-x86_64-apple-darwin.tar.gz" + +[tools.jj."platforms.windows-x64"] +checksum = "sha256:138f2642a99afb08aff0f7dc54b2076dcdc625d07a9a2e21b52895ea72db900e" +url = "https://github.com/jj-vcs/jj/releases/download/v0.34.0/jj-v0.34.0-x86_64-pc-windows-msvc.zip" [[tools.lazygit]] version = "0.57.0" backend = "aqua:jesseduffield/lazygit" -"platforms.linux-arm64" = { checksum = "sha256:6bc14dcfafe943363226ed2a2c222d5dda68247acc9bdc382d129dd7fe98f985", url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_linux_arm64.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:ced011ecd1459d069c66128fbf172b7248c8b99d8983fa17d84a247a98146d5e", url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_linux_x86_64.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:e90dd90c37bb012f1fe708e7f3d32d28747c8638c75a45268734c5e33277c3d0", url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_darwin_arm64.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:c34dd41ba01007b3684fd84761f7103dba4af087785200fa1d355a253acd31a2", url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_darwin_x86_64.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:775a210b3becd262a067d75be33d3d0ecd58cbc2dde3a36ca74e4757b080618c", url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_windows_x86_64.zip"} + +[tools.lazygit."platforms.linux-arm64"] +checksum = "sha256:6bc14dcfafe943363226ed2a2c222d5dda68247acc9bdc382d129dd7fe98f985" +url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_linux_arm64.tar.gz" + +[tools.lazygit."platforms.linux-x64"] +checksum = "sha256:ced011ecd1459d069c66128fbf172b7248c8b99d8983fa17d84a247a98146d5e" +url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_linux_x86_64.tar.gz" + +[tools.lazygit."platforms.macos-arm64"] +checksum = "sha256:e90dd90c37bb012f1fe708e7f3d32d28747c8638c75a45268734c5e33277c3d0" +url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_darwin_arm64.tar.gz" + +[tools.lazygit."platforms.macos-x64"] +checksum = "sha256:c34dd41ba01007b3684fd84761f7103dba4af087785200fa1d355a253acd31a2" +url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_darwin_x86_64.tar.gz" + +[tools.lazygit."platforms.windows-x64"] +checksum = "sha256:775a210b3becd262a067d75be33d3d0ecd58cbc2dde3a36ca74e4757b080618c" +url = "https://github.com/jesseduffield/lazygit/releases/download/v0.57.0/lazygit_0.57.0_windows_x86_64.zip" [[tools.lsd]] version = "1.1.5" backend = "aqua:lsd-rs/lsd" -"platforms.linux-arm64" = { url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-aarch64-unknown-linux-musl.tar.gz"} -"platforms.linux-x64" = { url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-x86_64-apple-darwin.tar.gz"} -"platforms.windows-x64" = { url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-x86_64-pc-windows-msvc.zip"} + +[tools.lsd."platforms.linux-arm64"] +url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-aarch64-unknown-linux-musl.tar.gz" + +[tools.lsd."platforms.linux-x64"] +url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-x86_64-unknown-linux-musl.tar.gz" + +[tools.lsd."platforms.macos-arm64"] +url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-aarch64-apple-darwin.tar.gz" + +[tools.lsd."platforms.macos-x64"] +url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-x86_64-apple-darwin.tar.gz" + +[tools.lsd."platforms.windows-x64"] +url = "https://github.com/lsd-rs/lsd/releases/download/v1.1.5/lsd-v1.1.5-x86_64-pc-windows-msvc.zip" [[tools.neovim]] version = "0.11.6" @@ -124,20 +276,43 @@ backend = "asdf:neovim" [[tools.node]] version = "23.11.0" backend = "core:node" -"platforms.linux-arm64" = { checksum = "sha256:12b29a87a7ccd7e1b97392d1e1533470d596578dad900430cff403e404fe72a7", url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-linux-arm64.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:66f768a7f2d89ecdda8fe1e33ee71ac04ed9180111cbf1c5fb944655fe7c90c7", url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-linux-x64.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:635990b46610238e3c008cd01480c296e0c2bfe7ec59ea9a8cd789d5ac621bb0", url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-darwin-arm64.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:a5782655748d4602c1ee1ee62732e0a16d29d3e4faac844db395b0fbb1c9dab8", url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-darwin-x64.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:42749f1e4583907ab92bac4b4bdb031201a0b3f7b028ea6b6e0d5bb40e433ae9", url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-win-x64.zip"} + +[tools.node."platforms.linux-arm64"] +checksum = "sha256:12b29a87a7ccd7e1b97392d1e1533470d596578dad900430cff403e404fe72a7" +url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-linux-arm64.tar.gz" + +[tools.node."platforms.linux-x64"] +checksum = "sha256:66f768a7f2d89ecdda8fe1e33ee71ac04ed9180111cbf1c5fb944655fe7c90c7" +url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-linux-x64.tar.gz" + +[tools.node."platforms.macos-arm64"] +checksum = "sha256:635990b46610238e3c008cd01480c296e0c2bfe7ec59ea9a8cd789d5ac621bb0" +url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-darwin-arm64.tar.gz" + +[tools.node."platforms.macos-x64"] +checksum = "sha256:a5782655748d4602c1ee1ee62732e0a16d29d3e4faac844db395b0fbb1c9dab8" +url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-darwin-x64.tar.gz" + +[tools.node."platforms.windows-x64"] +checksum = "sha256:42749f1e4583907ab92bac4b4bdb031201a0b3f7b028ea6b6e0d5bb40e433ae9" +url = "https://nodejs.org/dist/v23.11.0/node-v23.11.0-win-x64.zip" [[tools."npm:@agentmemory/agentmemory"]] version = "0.9.18" backend = "npm:@agentmemory/agentmemory" +[[tools."npm:@agentmemory/mcp"]] +version = "0.9.27" +backend = "npm:@agentmemory/mcp" + [[tools."npm:@google/gemini-cli"]] version = "0.41.2" backend = "npm:@google/gemini-cli" +[[tools."npm:@juliusbrussee/caveman-code"]] +version = "0.65.2" +backend = "npm:@juliusbrussee/caveman-code" + [[tools."npm:aicommits"]] version = "3.1.2" backend = "npm:aicommits" @@ -157,25 +332,58 @@ backend = "aqua:sst/opencode" [[tools.ripgrep]] version = "14.1.1" backend = "aqua:BurntSushi/ripgrep" -"platforms.linux-arm64" = { checksum = "sha256:c827481c4ff4ea10c9dc7a4022c8de5db34a5737cb74484d62eb94a95841ab2f", url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-aarch64-unknown-linux-gnu.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:4cf9f2741e6c465ffdb7c26f38056a59e2a2544b51f7cc128ef28337eeae4d8e", url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:24ad76777745fbff131c8fbc466742b011f925bfa4fffa2ded6def23b5b937be", url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:fc87e78f7cb3fea12d69072e7ef3b21509754717b746368fd40d88963630e2b3", url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-apple-darwin.tar.gz"} -"platforms.windows-x64" = { url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-pc-windows-msvc.zip"} + +[tools.ripgrep."platforms.linux-arm64"] +checksum = "sha256:c827481c4ff4ea10c9dc7a4022c8de5db34a5737cb74484d62eb94a95841ab2f" +url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-aarch64-unknown-linux-gnu.tar.gz" + +[tools.ripgrep."platforms.linux-x64"] +checksum = "sha256:4cf9f2741e6c465ffdb7c26f38056a59e2a2544b51f7cc128ef28337eeae4d8e" +url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-unknown-linux-musl.tar.gz" + +[tools.ripgrep."platforms.macos-arm64"] +checksum = "sha256:24ad76777745fbff131c8fbc466742b011f925bfa4fffa2ded6def23b5b937be" +url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-aarch64-apple-darwin.tar.gz" + +[tools.ripgrep."platforms.macos-x64"] +checksum = "sha256:fc87e78f7cb3fea12d69072e7ef3b21509754717b746368fd40d88963630e2b3" +url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-apple-darwin.tar.gz" + +[tools.ripgrep."platforms.windows-x64"] +url = "https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep-14.1.1-x86_64-pc-windows-msvc.zip" [[tools.starship]] version = "1.23.0" backend = "aqua:starship/starship" -"platforms.linux-arm64" = { checksum = "sha256:d37040138c68b5f3334bbe16d4615f0a83829deebecc5d014e779c302e8270d8", url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-aarch64-unknown-linux-musl.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:8d06d2cc67aedd6316ff58ab679fb80cded0d85de1dcd5727df0633d35356d57", url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:042c8001275316836a3c43fdb88d0787395edfd0c10d209e4892ab5577b80d57", url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:8cac7a18fb1faf0aec50bd221dd71ecc8553850d99c212231851ae64ba11f089", url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-x86_64-apple-darwin.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:50e670dda19bcc480ae4d1f7f0d3c7a092693252292406b54ababa706100f03c", url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-x86_64-pc-windows-msvc.zip"} + +[tools.starship."platforms.linux-arm64"] +checksum = "sha256:d37040138c68b5f3334bbe16d4615f0a83829deebecc5d014e779c302e8270d8" +url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-aarch64-unknown-linux-musl.tar.gz" + +[tools.starship."platforms.linux-x64"] +checksum = "sha256:8d06d2cc67aedd6316ff58ab679fb80cded0d85de1dcd5727df0633d35356d57" +url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-x86_64-unknown-linux-musl.tar.gz" + +[tools.starship."platforms.macos-arm64"] +checksum = "sha256:042c8001275316836a3c43fdb88d0787395edfd0c10d209e4892ab5577b80d57" +url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-aarch64-apple-darwin.tar.gz" + +[tools.starship."platforms.macos-x64"] +checksum = "sha256:8cac7a18fb1faf0aec50bd221dd71ecc8553850d99c212231851ae64ba11f089" +url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-x86_64-apple-darwin.tar.gz" + +[tools.starship."platforms.windows-x64"] +checksum = "sha256:50e670dda19bcc480ae4d1f7f0d3c7a092693252292406b54ababa706100f03c" +url = "https://github.com/starship/starship/releases/download/v1.23.0/starship-x86_64-pc-windows-msvc.zip" [[tools.supabase]] version = "2.95.4" backend = "aqua:supabase/cli" +[[tools.tmux]] +version = "3.6b" +backend = "aqua:tmux/tmux-builds" + [[tools."ubi:nushell/nushell"]] version = "0.108.0" backend = "ubi:nushell/nushell[exe=nu]" @@ -185,7 +393,7 @@ exe = "nu" [[tools."ubi:supabase/cli"]] version = "2.98.2" -backend = "ubi:supabase/cli[exe=supabase]" +backend = "ubi:supabase/cli" [tools."ubi:supabase/cli".options] exe = "supabase" @@ -193,16 +401,38 @@ exe = "supabase" [[tools.zellij]] version = "0.43.0" backend = "aqua:zellij-org/zellij" -"platforms.linux-arm64" = { checksum = "sha256:8b237b1dd7f0d2634e985347db8cad0cd5d67cfe01194f1b940abd89aff83e55", url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-aarch64-unknown-linux-musl.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:00070e052a86e3072dbd626cc0a0295106e7ed74c42871ba38185d4ebbcae58a", url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:03569f56e3f31d24471128169ba32be476c5dd25b261ae9193645bf7a2e52e7c", url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:d4933b805e127cc60edb77cf9356995863eb484aa014bc2f90804384ce1bb852", url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-x86_64-apple-darwin.tar.gz"} + +[tools.zellij."platforms.linux-arm64"] +checksum = "sha256:8b237b1dd7f0d2634e985347db8cad0cd5d67cfe01194f1b940abd89aff83e55" +url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-aarch64-unknown-linux-musl.tar.gz" + +[tools.zellij."platforms.linux-x64"] +checksum = "sha256:00070e052a86e3072dbd626cc0a0295106e7ed74c42871ba38185d4ebbcae58a" +url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-x86_64-unknown-linux-musl.tar.gz" + +[tools.zellij."platforms.macos-arm64"] +checksum = "sha256:03569f56e3f31d24471128169ba32be476c5dd25b261ae9193645bf7a2e52e7c" +url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-aarch64-apple-darwin.tar.gz" + +[tools.zellij."platforms.macos-x64"] +checksum = "sha256:d4933b805e127cc60edb77cf9356995863eb484aa014bc2f90804384ce1bb852" +url = "https://github.com/zellij-org/zellij/releases/download/v0.43.0/zellij-x86_64-apple-darwin.tar.gz" [[tools.zoxide]] version = "0.9.8" backend = "aqua:ajeetdsouza/zoxide" -"platforms.linux-arm64" = { url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-aarch64-unknown-linux-musl.tar.gz"} -"platforms.linux-x64" = { url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-x86_64-unknown-linux-musl.tar.gz"} -"platforms.macos-arm64" = { url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-aarch64-apple-darwin.tar.gz"} -"platforms.macos-x64" = { url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-x86_64-apple-darwin.tar.gz"} -"platforms.windows-x64" = { url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-x86_64-pc-windows-msvc.zip"} + +[tools.zoxide."platforms.linux-arm64"] +url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-aarch64-unknown-linux-musl.tar.gz" + +[tools.zoxide."platforms.linux-x64"] +url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-x86_64-unknown-linux-musl.tar.gz" + +[tools.zoxide."platforms.macos-arm64"] +url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-aarch64-apple-darwin.tar.gz" + +[tools.zoxide."platforms.macos-x64"] +url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-x86_64-apple-darwin.tar.gz" + +[tools.zoxide."platforms.windows-x64"] +url = "https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.8/zoxide-0.9.8-x86_64-pc-windows-msvc.zip" diff --git a/dot_config/mise/mise.toml b/dot_config/mise/mise.toml index 40541bbc..8d8aaef2 100644 --- a/dot_config/mise/mise.toml +++ b/dot_config/mise/mise.toml @@ -30,6 +30,7 @@ deno = "2.7.14" "npm:@agentmemory/mcp" = "latest" "npm:iii-sdk" = "0.12.0" tmux = "latest" +"npm:@juliusbrussee/caveman-code" = "0.65.2" [settings] experimental = true From 64c77f948f12dc3e8c75a3a5ff74d51c3825a5eb Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sat, 13 Jun 2026 13:05:59 +0530 Subject: [PATCH 04/18] feat: add tailscale installation and interactive setup prompts --- .chezmoi.toml.tmpl | 2 ++ .../run_once_after_install_tailscale.sh.tmpl | 18 ++++++++++ setup | 34 ++++++++++++++++--- 3 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 .chezmoiscripts/run_once_after_install_tailscale.sh.tmpl diff --git a/.chezmoi.toml.tmpl b/.chezmoi.toml.tmpl index 840ce261..17988fab 100644 --- a/.chezmoi.toml.tmpl +++ b/.chezmoi.toml.tmpl @@ -4,6 +4,7 @@ sourceDir = {{ .chezmoi.sourceDir | quote }} {{ $name := promptStringOnce . "name" "Git user.name" }} {{ $email := promptStringOnce . "email" "Git user.email" }} {{ $gpg_key := promptStringOnce . "gpg_signing_key" "GPG key fingerprint" }} +{{ $ts_key := promptStringOnce . "tailscale_authkey" "Tailscale auth key (leave blank to skip)" }} [data] remote = {{ $remote }} @@ -15,6 +16,7 @@ sourceDir = {{ .chezmoi.sourceDir | quote }} aeos_dir = "$HOME/.aeos" anchor_bin_dir = "$HOME/.local/bin" aeos_ssh_user = "vagrant" + tailscale_authkey = {{ $ts_key | quote }} {{- if not $remote }} [git] diff --git a/.chezmoiscripts/run_once_after_install_tailscale.sh.tmpl b/.chezmoiscripts/run_once_after_install_tailscale.sh.tmpl new file mode 100644 index 00000000..7741d118 --- /dev/null +++ b/.chezmoiscripts/run_once_after_install_tailscale.sh.tmpl @@ -0,0 +1,18 @@ +#!/bin/bash +# Installs Tailscale and authenticates once. Re-run by deleting chezmoi state entry. +set -euo pipefail + +if ! command -v tailscale &>/dev/null; then + curl -fsSL https://tailscale.com/install.sh | sh +fi + +sudo systemctl enable --now tailscaled + +{{- if .tailscale_authkey }} +sudo tailscale up \ + --authkey={{ .tailscale_authkey | quote }} \ + --accept-routes \ + --ssh +{{- else }} +echo "[tailscale] No auth key set. Run: tailscale up --authkey= --accept-routes --ssh" +{{- end }} diff --git a/setup b/setup index dbcf9a26..47dbb3a5 100755 --- a/setup +++ b/setup @@ -5,9 +5,33 @@ set -euo pipefail # Ensure ~/.local/bin is on PATH (mise installs tools here) export PATH="$HOME/.local/bin:$PATH" -# Install Homebrew if missing +# ── Collect config values upfront ──────────────────────────────────────────── +CHEZMOI_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi" +CHEZMOI_CONFIG="$CHEZMOI_CONFIG_DIR/chezmoi.toml" + +if [ ! -f "$CHEZMOI_CONFIG" ]; then + echo "==> Configuring dotfiles" + read -rp "Git user.name: " cfg_name + read -rp "Git user.email: " cfg_email + read -rp "GPG key fingerprint (leave blank to skip): " cfg_gpg + read -rp "Tailscale auth key (leave blank to skip): " cfg_ts + + # Escape backslashes and double-quotes for TOML string values + toml_quote() { printf '"%s"' "$(printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g')"; } + + mkdir -p "$CHEZMOI_CONFIG_DIR" + cat > "$CHEZMOI_CONFIG" </dev/null; then - echo "Installing Homebrew..." + echo "==> Installing Homebrew" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" fi @@ -18,13 +42,13 @@ elif [ -f /opt/homebrew/bin/brew ]; then eval "$(/opt/homebrew/bin/brew shellenv)" fi -# Install zsh via brew if missing +# ── Install zsh via brew if missing ────────────────────────────────────────── if ! command -v zsh >/dev/null; then - echo "Installing zsh..." + echo "==> Installing zsh" brew install zsh fi -# Bootstrap chezmoi and apply dotfiles +# ── Bootstrap chezmoi and apply dotfiles ───────────────────────────────────── if command -v chezmoi >/dev/null; then chezmoi init --apply --source "$PWD" exit 0 From b7f71eba1ae0c14d62712d4c2eed1d9de1fdb914 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sat, 13 Jun 2026 15:17:29 +0530 Subject: [PATCH 05/18] Add .claude/settings.local.json --- .claude/settings.local.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000..73f5f46f --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,7 @@ +{ + "permissions": { + "allow": [ + "Bash(brew --version)" + ] + } +} From fd8aa020c06176d9db393bd4c005da8bc8199351 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sat, 13 Jun 2026 16:56:40 +0530 Subject: [PATCH 06/18] Update .config/mise/mise.toml --- dot_config/mise/mise.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/dot_config/mise/mise.toml b/dot_config/mise/mise.toml index 8d8aaef2..b5ba0903 100644 --- a/dot_config/mise/mise.toml +++ b/dot_config/mise/mise.toml @@ -30,6 +30,7 @@ deno = "2.7.14" "npm:@agentmemory/mcp" = "latest" "npm:iii-sdk" = "0.12.0" tmux = "latest" +uv = "latest" "npm:@juliusbrussee/caveman-code" = "0.65.2" [settings] From 14b573ad289bc1e85836d16ae953e65c7c728100 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Mon, 15 Jun 2026 13:30:36 +0530 Subject: [PATCH 07/18] Update .config/mise/mise.toml --- dot_config/mise/mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dot_config/mise/mise.toml b/dot_config/mise/mise.toml index b5ba0903..b3b3da50 100644 --- a/dot_config/mise/mise.toml +++ b/dot_config/mise/mise.toml @@ -23,7 +23,7 @@ go = "1.25.6" "ubi:supabase/cli" = { version = "2.98.2", exe = "supabase" } deno = "2.7.14" "npm:wrangler" = "4.88.0" -"github:anomalyco/opencode" = "1.15.4" +"github:anomalyco/opencode" = "1.17.7" "npm:@google/gemini-cli" = "0.41.2" "npm:aicommits" = "3.1.2" "npm:@agentmemory/agentmemory" = "latest" From b3e2dbb35f7e54c8abdeb7e238a19616aaf22827 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Mon, 15 Jun 2026 18:41:57 +0530 Subject: [PATCH 08/18] Update .chezmoi.toml Update setup --- .chezmoi.toml.tmpl | 28 +++++++++++++++++++++++----- setup | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/.chezmoi.toml.tmpl b/.chezmoi.toml.tmpl index 17988fab..f33136e6 100644 --- a/.chezmoi.toml.tmpl +++ b/.chezmoi.toml.tmpl @@ -1,10 +1,28 @@ -{{- $remote := or (env "CODESPACES" | not | not) (env "SSH_CONNECTION" | not | not) (env "KUBERNETES_SERVICE_HOST" | not | not) (env "container" | not | not) (env "REMOTE_CONTAINERS" | not | not) (stat "/.dockerenv" | not | not) -}} +{{- $remote := or (env "CODESPACES" | not | not) (env "SSH_CONNECTION" | not | not) (env "KUBERNETES_SERVICE_HOST" | not | not) (env "container" | not | not) (env "REMOTE_CONTAINERS" | not | not) (env "DEVPOD" | not | not) (stat "/.dockerenv" | not | not) -}} sourceDir = {{ .chezmoi.sourceDir | quote }} -{{ $name := promptStringOnce . "name" "Git user.name" }} -{{ $email := promptStringOnce . "email" "Git user.email" }} -{{ $gpg_key := promptStringOnce . "gpg_signing_key" "GPG key fingerprint" }} -{{ $ts_key := promptStringOnce . "tailscale_authkey" "Tailscale auth key (leave blank to skip)" }} +{{- /* Collect configuration values */ -}} +{{- $name := "" -}} +{{- $email := "" -}} +{{- $gpg_key := "" -}} +{{- $ts_key := "" -}} + +{{- if $remote }} + {{- /* Non-interactive: use env vars or config data */ -}} + {{- $name = env "GIT_USER_NAME" | default .name -}} + {{- $email = env "GIT_USER_EMAIL" | default .email -}} + {{- $gpg_key = env "GPG_KEY" | default .gpg_signing_key -}} + {{- $ts_key = env "TAILSCALE_AUTHKEY" | default .tailscale_authkey -}} + {{- if or (eq $name "") (eq $email "") }} + {{- fail "GIT_USER_NAME and GIT_USER_EMAIL must be set in remote/container environment" -}} + {{- end }} +{{- else }} + {{- /* Interactive: prompt for values (stored in chezmoi state) */ -}} + {{- $name = promptStringOnce . "name" "Git user.name" -}} + {{- $email = promptStringOnce . "email" "Git user.email" -}} + {{- $gpg_key = promptStringOnce . "gpg_signing_key" "GPG key fingerprint" -}} + {{- $ts_key = promptStringOnce . "tailscale_authkey" "Tailscale auth key (leave blank to skip)" -}} +{{- end }} [data] remote = {{ $remote }} diff --git a/setup b/setup index 47dbb3a5..632bb0c3 100755 --- a/setup +++ b/setup @@ -3,7 +3,10 @@ set -euo pipefail # Ensure ~/.local/bin is on PATH (mise installs tools here) -export PATH="$HOME/.local/bin:$PATH" +case ":$PATH:" in + *:"$HOME/.local/bin":*) ;; + *) export PATH="$HOME/.local/bin:$PATH" ;; +esac # ── Collect config values upfront ──────────────────────────────────────────── CHEZMOI_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi" @@ -11,10 +14,30 @@ CHEZMOI_CONFIG="$CHEZMOI_CONFIG_DIR/chezmoi.toml" if [ ! -f "$CHEZMOI_CONFIG" ]; then echo "==> Configuring dotfiles" - read -rp "Git user.name: " cfg_name - read -rp "Git user.email: " cfg_email - read -rp "GPG key fingerprint (leave blank to skip): " cfg_gpg - read -rp "Tailscale auth key (leave blank to skip): " cfg_ts + + if [ -t 0 ]; then + # Interactive mode: prompt for values + while [ -z "$cfg_name" ]; do + read -rp "Git user.name: " cfg_name + done + while [ -z "$cfg_email" ]; do + read -rp "Git user.email: " cfg_email + done + read -rp "GPG key fingerprint (leave blank to skip): " cfg_gpg + read -rp "Tailscale auth key (leave blank to skip): " cfg_ts + else + # Non-interactive mode: use environment variables + cfg_name="${GIT_USER_NAME:-}" + cfg_email="${GIT_USER_EMAIL:-}" + cfg_gpg="${GPG_KEY:-}" + cfg_ts="${TAILSCALE_AUTHKEY:-}" + fi + + # Validate: name and email are required in non-interactive mode + if [ ! -t 0 ] && { [ -z "$cfg_name" ] || [ -z "$cfg_email" ]; }; then + echo "ERROR: GIT_USER_NAME and GIT_USER_EMAIL must be set in non-interactive mode" >&2 + exit 1 + fi # Escape backslashes and double-quotes for TOML string values toml_quote() { printf '"%s"' "$(printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g')"; } @@ -27,6 +50,7 @@ if [ ! -f "$CHEZMOI_CONFIG" ]; then gpg_signing_key = $(toml_quote "$cfg_gpg") tailscale_authkey = $(toml_quote "$cfg_ts") EOF + chmod 600 "$CHEZMOI_CONFIG" fi # ── Install Homebrew if missing ─────────────────────────────────────────────── @@ -55,8 +79,7 @@ if command -v chezmoi >/dev/null; then fi if command -v mise >/dev/null; then - mise exec chezmoi -- chezmoi init --apply --source "$PWD" - exit 0 + mise exec chezmoi -- chezmoi init --apply --source "$PWD" && exit 0 fi sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply --source "$PWD" From 8349fba9265210dd333e8b63b9f54f048c3c40fd Mon Sep 17 00:00:00 2001 From: aadil96 Date: Fri, 19 Jun 2026 17:38:59 +0530 Subject: [PATCH 09/18] feat(brew): add hashicorp tap, vagrant, and codex cask --- dot_config/brew/Brewfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dot_config/brew/Brewfile b/dot_config/brew/Brewfile index 2811533b..60971d3d 100644 --- a/dot_config/brew/Brewfile +++ b/dot_config/brew/Brewfile @@ -1,3 +1,7 @@ +tap "hashicorp/tap" + brew "zsh" +brew "hashicorp/tap/vagrant" cask "claude-code" +cask "codex" From 47a51ff2df9f2061958c43d6ee40482bdd5942f4 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sun, 28 Jun 2026 11:25:37 +0530 Subject: [PATCH 10/18] Update .zshrc --- dot_zshrc.tmpl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dot_zshrc.tmpl b/dot_zshrc.tmpl index 990b51e7..0b33f6a3 100644 --- a/dot_zshrc.tmpl +++ b/dot_zshrc.tmpl @@ -98,6 +98,11 @@ if command -v batcat > /dev/null ; then alias cat="batcat" fi +if command -v codex > /dev/null ; then + eval "$(codex completion zsh)" +fi + + if command -v dagger > /dev/null ; then export DAGGER_NO_NAG=1 fi @@ -127,6 +132,15 @@ export GPG_TTY=$(tty) export TERM=xterm-256color export COLORTERM=truecolor +take() { + if [[ $# -ne 1 ]]; then + echo "Usage: take " + return 1 + fi + + mkdir -p -- "$1" && cd -- "$1" +} + gca() { if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then echo "Not inside a git repository." From e38e67999df41d8dcf23dfcbca3bf0f4df0d09e0 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sun, 28 Jun 2026 18:17:09 +0530 Subject: [PATCH 11/18] Update .config/mise/mise.toml --- dot_config/mise/mise.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dot_config/mise/mise.toml b/dot_config/mise/mise.toml index b3b3da50..83f419fa 100644 --- a/dot_config/mise/mise.toml +++ b/dot_config/mise/mise.toml @@ -23,7 +23,7 @@ go = "1.25.6" "ubi:supabase/cli" = { version = "2.98.2", exe = "supabase" } deno = "2.7.14" "npm:wrangler" = "4.88.0" -"github:anomalyco/opencode" = "1.17.7" +"github:anomalyco/opencode" = "1.17.4" "npm:@google/gemini-cli" = "0.41.2" "npm:aicommits" = "3.1.2" "npm:@agentmemory/agentmemory" = "latest" @@ -32,6 +32,7 @@ deno = "2.7.14" tmux = "latest" uv = "latest" "npm:@juliusbrussee/caveman-code" = "0.65.2" +bun = "latest" [settings] experimental = true From bd1089f5b4c0b23d058697300715059ee04908a0 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Wed, 1 Jul 2026 12:40:27 +0530 Subject: [PATCH 12/18] Update .zshrc --- dot_zshrc.tmpl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dot_zshrc.tmpl b/dot_zshrc.tmpl index 0b33f6a3..f2fadbeb 100644 --- a/dot_zshrc.tmpl +++ b/dot_zshrc.tmpl @@ -127,6 +127,10 @@ if [[ -f "$HOME/.config/zsh/local.zsh" ]]; then source "$HOME/.config/zsh/local.zsh" fi +if command -v opencode > /dev/null ; then + opencode completion +fi + export GPG_TTY=$(tty) export TERM=xterm-256color From 45fb957221887b4441a82994644cc9812adc5b59 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Wed, 1 Jul 2026 12:41:47 +0530 Subject: [PATCH 13/18] Update .zshrc --- dot_zshrc.tmpl | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/dot_zshrc.tmpl b/dot_zshrc.tmpl index f2fadbeb..17be42bd 100644 --- a/dot_zshrc.tmpl +++ b/dot_zshrc.tmpl @@ -127,9 +127,35 @@ if [[ -f "$HOME/.config/zsh/local.zsh" ]]; then source "$HOME/.config/zsh/local.zsh" fi -if command -v opencode > /dev/null ; then - opencode completion + +#compdef opencode +###-begin-opencode-completions-### +# +# yargs command completion script +# +# Installation: opencode completion >> ~/.zshrc +# or opencode completion >> ~/.zprofile on OSX. +# +_opencode_yargs_completions() +{ + local reply + local si=$IFS + IFS=$' +' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" opencode --get-yargs-completions "${words[@]}")) + IFS=$si + if [[ ${#reply} -gt 0 ]]; then + _describe 'values' reply + else + _default + fi +} +if [[ "'${zsh_eval_context[-1]}" == "loadautofunc" ]]; then + _opencode_yargs_completions "$@" +else + compdef _opencode_yargs_completions opencode fi +###-end-opencode-completions-### + export GPG_TTY=$(tty) From 37711f6aef67fd5ecdfebf1eb624d8b712d1ea18 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Thu, 2 Jul 2026 14:44:38 +0530 Subject: [PATCH 14/18] Update .config/nvim/lazyvim.json --- dot_config/nvim/lazyvim.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dot_config/nvim/lazyvim.json b/dot_config/nvim/lazyvim.json index d8bcaf66..383e421e 100644 --- a/dot_config/nvim/lazyvim.json +++ b/dot_config/nvim/lazyvim.json @@ -1,6 +1,11 @@ { "extras": [ - + "lazyvim.plugins.extras.ai.copilot", + "lazyvim.plugins.extras.coding.yanky", + "lazyvim.plugins.extras.lang.docker", + "lazyvim.plugins.extras.lang.tailwind", + "lazyvim.plugins.extras.lang.typescript", + "lazyvim.plugins.extras.lang.typescript.vtsls" ], "install_version": 8, "news": { From f4748c35dded27fec1389b9df662e4ef96359e78 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Thu, 2 Jul 2026 14:45:17 +0530 Subject: [PATCH 15/18] Update .config/nvim/lazy-lock.json --- dot_config/nvim/lazy-lock.json | 59 ++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/dot_config/nvim/lazy-lock.json b/dot_config/nvim/lazy-lock.json index bf4f5844..ece91f36 100644 --- a/dot_config/nvim/lazy-lock.json +++ b/dot_config/nvim/lazy-lock.json @@ -1,39 +1,42 @@ { - "LazyVim": { "branch": "main", "commit": "c64a61734fc9d45470a72603395c02137802bc6f" }, - "SchemaStore.nvim": { "branch": "main", "commit": "eed1834170f343c14a6768f085b26b3571a55302" }, - "blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" }, + "LazyVim": { "branch": "main", "commit": "c10948c50b18fae7f256433afdef09e432410480" }, + "SchemaStore.nvim": { "branch": "main", "commit": "6ff1f21b2e2b77ec59f7433ce2d9fbc052d908ac" }, + "blink-copilot": { "branch": "main", "commit": "7ad8209b2f880a2840c94cdcd80ab4dc511d4f39" }, + "blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, - "catppuccin": { "branch": "main", "commit": "da33755d00e09bff2473978910168ff9ea5dc453" }, - "conform.nvim": { "branch": "master", "commit": "178b8f0d70ee63db616a8b3bda637218eef121dd" }, + "catppuccin": { "branch": "main", "commit": "e068ab5f8261f23f6f71ffd8791ae40315b77b9c" }, + "conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" }, + "copilot.lua": { "branch": "master", "commit": "760912b5992e1d6437378a9c7f2b0cb950966cf5" }, "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, - "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "gitsigns.nvim": { "branch": "main", "commit": "cdafc320f03f2572c40ab93a4eecb733d4016d07" }, - "grug-far.nvim": { "branch": "main", "commit": "b58b2d65863f4ebad88b10a1ddd519e5380466e0" }, + "friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, + "gitsigns.nvim": { "branch": "main", "commit": "eb60cc7b94c46005237fd34170d76f3a089a90aa" }, + "grug-far.nvim": { "branch": "main", "commit": "c69859c1d5427ab5fc7ed12380ab521b4e336691" }, "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, - "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" }, - "llama.vim": { "branch": "master", "commit": "ade8966eff57dcbe4a359dd26fb1ea97378ea03c" }, - "lualine.nvim": { "branch": "master", "commit": "3946f0122255bc377d14a59b27b609fb3ab25768" }, + "lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" }, + "llama.vim": { "branch": "master", "commit": "77db2afe488a7f700a2027527f17ab771988e358" }, + "lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" }, "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "b1d9a914b02ba5660f1e272a03314b31d4576fe2" }, - "mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" }, - "mini.ai": { "branch": "main", "commit": "0d3c9cf22e37b86b7a0dfbe7ef129ee7a5f4f93c" }, - "mini.icons": { "branch": "main", "commit": "ff2e4f1d29f659cc2bad0f9256f2f6195c6b2428" }, - "mini.indentscope": { "branch": "main", "commit": "0308f949f31769e509696af5d5f91cebb2159c69" }, - "mini.surround": { "branch": "main", "commit": "88c52297ed3e69ecf9f8652837888ecc727a28ee" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "47059d71b42d74b0a1e9f61c1d99d301039c3b5b" }, + "mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" }, + "mini.ai": { "branch": "main", "commit": "cb20f298ebf5ae91924cd0c6c310712de2ef4086" }, + "mini.icons": { "branch": "main", "commit": "e56797f90192d81f1fda02e662fc3e8e3d775027" }, + "mini.indentscope": { "branch": "main", "commit": "942bc13ccc624c825b086373b8bd6787b98245c8" }, + "mini.surround": { "branch": "main", "commit": "a2f644f3759edd3d3f8b6a6d55378408bfe6d290" }, "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, - "nvim-lint": { "branch": "master", "commit": "baf7c91c2b868b12446df511d4cdddc98e9bf66e" }, - "nvim-lspconfig": { "branch": "master", "commit": "dc7e7c7699cc01b1b6fefa97f9b496d8f447d7a1" }, - "nvim-treesitter": { "branch": "main", "commit": "c682a239a9404ce5f90a2d0da34790eff1ed2932" }, - "nvim-treesitter-textobjects": { "branch": "main", "commit": "227165aaeb07b567fb9c066f224816aa8f3ce63f" }, - "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, + "nvim-lint": { "branch": "master", "commit": "a219b2c9e5b4765e5c845aba119dad55806fcaf1" }, + "nvim-lspconfig": { "branch": "master", "commit": "292f44408498103c47996ff5c18fd366293840d8" }, + "nvim-treesitter": { "branch": "main", "commit": "7caec274fd19c12b55902a5b795100d21531391f" }, + "nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" }, + "nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" }, "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, - "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, - "render-markdown.nvim": { "branch": "main", "commit": "b2b135347e299ffbf7f4123fb7811899b0c9f4b8" }, - "snacks.nvim": { "branch": "main", "commit": "836e07336ba523d4da480cd66f0241815393e98e" }, + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, + "render-markdown.nvim": { "branch": "main", "commit": "f422cb5c6855f150e2ddcfaf44e7157b98b34f6a" }, + "snacks.nvim": { "branch": "main", "commit": "882c996cf28183f4d63640de0b4c02ec886d01f2" }, "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, - "tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }, + "tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" }, "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, - "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, - "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } + "ts-comments.nvim": { "branch": "main", "commit": "a59d6092213447450191122c9346f309161504cb" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }, + "yanky.nvim": { "branch": "main", "commit": "020c22d0cfa60358569e49d1d7b91630f175aef0" } } From 4debf292f534c48da84e87e72ce1c8d5a2a314f7 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Thu, 2 Jul 2026 14:48:16 +0530 Subject: [PATCH 16/18] Update .zshrc --- dot_zshrc.tmpl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dot_zshrc.tmpl b/dot_zshrc.tmpl index 17be42bd..047e3c4a 100644 --- a/dot_zshrc.tmpl +++ b/dot_zshrc.tmpl @@ -226,3 +226,5 @@ Hard rules: echo "Commit aborted." fi } + +export PATH="/home/aadil/.local/bin:$PATH" From 9f6ea612af3183c1020c04348240d4e10c673a63 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sat, 11 Jul 2026 12:41:07 +0530 Subject: [PATCH 17/18] docs: overhaul docs, trim AGENTS.md, expand BRANCHING.md, rewrite SECURITY.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Trim AGENTS.md (150→74 lines) — move git safety to BRANCHING.md - Expand BRANCHING.md with pre-change verification, safe ops, ask-before-doing, rationale - Rewrite SECURITY.md with repo-specific policy (scope, rules, CI, reporting) - Update quality-gates.md for dotfiles context (ShellCheck, markdownlint) - Add 7 troubleshooting entries (chezmoi init, mise, Brewfile, Tailscale, CI, etc.) - Remove 4 empty doc stubs (architecture, operations, references, workflows) - Relax opencode.json permissions to allow workflow with protected-branch guards --- AGENTS.md | 162 ++++++++----------------------- BRANCHING.md | 36 ++++++- SECURITY.md | 36 ++++--- docs/operations/quality-gates.md | 31 +++--- docs/troubleshooting.md | 38 +++++++- opencode.json | 71 +++----------- 6 files changed, 163 insertions(+), 211 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 17a998b8..76fcbfe8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,150 +2,74 @@ ## What this repo is -Personal dotfiles for a zsh/bash + Neovim + mise setup. Managed by [chezmoi](https://chezmoi.io/). No build step — only configuration files and templates. +Personal dotfiles for a zsh/bash + Neovim + mise setup. Managed by [chezmoi](https://chezmoi.io/). No build step — configuration files and templates only. -## Verified commands +## Quick commands ```sh ./setup # Bootstrap: install chezmoi, apply dotfiles chezmoi apply # Apply all dotfiles to $HOME -chezmoi update # Pull latest changes and re-apply -mise exec -- chezmoi apply # Run via mise if chezmoi not on PATH +chezmoi update # Pull latest changes and re-apply +mise exec -- chezmoi apply # Run via mise if chezmoi not on PATH ``` ## Repo structure -``` -dot_* → becomes $HOME/.filename (chezmoi auto-symlinks) -dot_config/ → becomes $HOME/.config/ -private_dot_* → private files; never tracked in git -.chezmoiexternals/ # External resources (mise, devpod, fonts) -.chezmoiscripts/ # Hook scripts run by chezmoi -.devcontainer/ # VS Code Dev Container config -setup # Bootstrap script -``` +| Prefix | Becomes | Notes | +|--------|---------|-------| +| `dot_*` | `$HOME/.filename` | Chezmoi auto-symlinks | +| `dot_config/` | `$HOME/.config/` | XDG config | +| `private_dot_*` | `$HOME/.filename` | Never tracked in git | +| `.chezmoiexternals/` | External resources | Mise, devpod, fonts | +| `.chezmoiscripts/` | Hook scripts | Run by chezmoi | +| `.devcontainer/` | VS Code Dev Container | - | -## How chezmoi works here +## Templates -- `dot_*` files become `$HOME/.filename` -- `.tmpl` extension = chezmoi Go template (supports `{{ .chezmoi.os }}`, `{{ lookPath "cmd" }}`, etc.) -- Templates must not fail on missing vars — use `{{ if ... }}{{ end }}` guards -- `.chezmoiignore` excludes: `.oh-my-zsh/cache/*`, `**/*.zwc`, `setup`, `README.md`, `dot_config/zsh/local.zsh`, `dot_config/opencode/bun.lockb`, `dot_config/opencode/package-lock.json` +- `.tmpl` extension = chezmoi Go template +- Supports `{{ .chezmoi.os }}`, `{{ lookPath "cmd" }}` +- Use `{{ if ... }}{{ end }}` guards for missing vars +- Template vars defined in `.chezmoi.toml.tmpl` ## Shell script standards - Shebang: `#!/bin/bash` or `#!/usr/bin/env bash` -- Required flags: `set -euo pipefail` +- Required: `set -euo pipefail` - No bare `cd` — use `cd ... || exit` or pushd/popd -- Functions welcome; keep small and single-purpose -## Security boundaries +## Security -- Never commit secrets; use `private_*` prefix for any file containing credentials -- `.chezmoiignore` does NOT redact secrets — only gitignore semantics apply -- GPG config lives in `private_dot_gnupg/` (not tracked) -- If a file should never leave this machine, prefix it `private_` +- `private_*` prefix = never commit to git +- GPG config in `private_dot_gnupg/` (not tracked) +- `.chezmoiignore` uses gitignore semantics only — does NOT redact secrets +- Never hardcode secrets; use `.chezmoi.toml.tmpl` env vars or prompts -## Read these first +## Key files to read -| For this... | Read that... | -|---|---| -| chezmoi config + template variables | `.chezmoi.toml.tmpl` | -| Tool versions and tool management | `dot_config/mise/mise.toml` | -| OpenCode profiles and settings | `dot_config/opencode/ocx.jsonc` + `profiles/` | +| Purpose | File | +|---------|------| +| chezmoi config + template vars | `.chezmoi.toml.tmpl` | +| Tool versions | `dot_config/mise/mise.toml` | +| OpenCode config | `.opencode/ocx.jsonc` | | Shell config | `dot_bashrc.tmpl`, `dot_zshrc.tmpl` | | Bootstrap logic | `setup` | +| Branch rules | `BRANCHING.md` | -## Git and branch safety rules - -### Protected branches - -- `main` and `master` are protected — never commit, push, merge, or rebase directly onto them - -### Feature branch workflow (mandatory) - -1. Before any change: `git switch -c ` (or `git checkout -b`) -2. Work on the feature branch -3. Commit freely on the feature branch -4. Push with `git push --set-upstream origin ` (non-force) -5. When ready: open a PR or merge locally to main/master via a merge commit (no fast-forward) - -### Branch naming - -- Use format: `feat/`, `fix/`, `chore/` -- Examples: `feat/zsh-history`, `fix/mise-version`, `chore/update-starship` - -### Pre-change verification - -Before running `git checkout` or `git switch`: - -1. Run `git status` — confirm no uncommitted work will be lost -2. Run `git branch` — confirm you're on the intended branch - -### Force and destructive operations — ALWAYS DENIED - -- `git push --force` / `git force-push` — never, under any circumstances -- `git rebase` onto a protected branch — denied -- `git reset --hard` on main/master — denied -- `git reflog expire`, `git filter-branch` — denied -- `rm -rf` with a broad path — denied -- `sudo`, `dd`, `chmod -R` — denied on system paths - -### Safe operation whitelist (allowed without asking) - -- `git status`, `git diff`, `git log --oneline`, `git show`, `git branch -a` -- `chezmoi apply`, `chezmoi update`, `chezmoi status` -- `mise exec`, `ls`, `cat`, `grep`, `find`, `pwd` - -### Ask before doing - -- `git add`, `git commit`, non-protected `git push`, `git checkout` to existing branches -- `terraform apply`, `kubectl delete`, `docker system prune` -- Editing any `.env`, `kubeconfig`, or `terraform.tfstate` file - -## Safety and permission philosophy - -Permission rules in `opencode.json` are intentional guardrails, not suggestions. - -- `deny` means the operation is blocked — a blocked operation will not execute -- `ask` means the agent must confirm intent before proceeding -- `allow` means the operation proceeds without prompting - -If a task seems to require a denied operation, stop and report back. Do not work around permission rules by splitting commands or using alternatives. - -Destructive commands (`rm -rf`, `sudo`, `dd`) are always denied. When work requires clearing space or resetting state, use safe alternatives (e.g., `mv` to a trash directory) or ask. - -Protected branch enforcement is implemented in `opencode.json` permission rules. Even if an agent is given raw bash access, these rules apply at the session level. - -**Branch-switching safety:** -If a task requires switching branches or checking out code, always: - -- Verify the current branch first -- Ensure no uncommitted changes exist or stash them -- Never switch to main/master for direct work -- Return to the feature branch after inspection - -**Why these rules exist:** - -- Prevent accidental commits or pushes to protected branches -- Avoid destructive operations that cannot be easily undone -- Protect secrets, state files, and production config -- Ensure all work goes through proper review workflow - -## Documentation maintenance - -Docs are living context — update them when your work changes behavior, commands, setup, architecture, deployment, rollback, troubleshooting, or operational constraints. +## Git safety -- Update only the docs directly affected by your change -- Never leave a doc that contradicts the actual code or commands -- When you discover a failure mode or fix, add it to `docs/troubleshooting.md` -- In your final task summary, state whether docs were updated and which ones, or explicitly say "no docs updated" with the reason +- `main`/`master` protected — no direct commits/pushes/merges/rebases +- Feature branches for all changes: `feat/`, `fix/`, `chore/` +- See `BRANCHING.md` for full rules -Do not create new docs unless genuinely useful for future agents. A stub is justified if the repo has operational complexity (infra, multi-service, deployment concerns). +## Documentation -## What not to do +- Update docs when behavior changes +- Add failure modes to `docs/troubleshooting.md` +- Don't create new docs unless genuinely useful -- Do not run `make`, `npm install`, or any build commands in this repo -- Do not modify `setup` — it must remain runnable on any vanilla Linux/macOS machine -- Do not add hardcoded paths (use `$HOME`, `$XDG_CONFIG_HOME`, or chezmoi template vars instead) +## Forbidden +- `make`, `npm install`, or any build command +- Editing `setup` (must stay runnable on any vanilla Linux/macOS) +- Hardcoded paths (use `$HOME`, `$XDG_CONFIG_HOME`, or chezmoi vars) +- Force push, rebase to protected branches, destructive git ops diff --git a/BRANCHING.md b/BRANCHING.md index ef5a7407..8f25a4f9 100644 --- a/BRANCHING.md +++ b/BRANCHING.md @@ -16,9 +16,37 @@ docs/ — Documentation changes refactor/ — Code reorganization ``` +## Pre-change verification + +Before switching branches: + +1. `git status` — confirm no uncommitted work +2. `git branch` — confirm current branch + ## Forbidden Operations -- Force push to any branch -- Rebase onto protected branches -- Direct commits to main -- Destructive git operations (reset --hard, filter-branch) +- `git push --force` / `--force-with-lease` +- `git rebase` onto main/master +- `git reset --hard` on main/master +- `git reflog expire`, `git filter-branch`, `git filter-repo` +- `git commit` or `git push` directly to main/master + +## Safe operations (no prompt needed) + +- `git status`, `git diff`, `git log --oneline`, `git show`, `git branch -a` +- `chezmoi apply`, `chezmoi update`, `chezmoi status` +- `mise exec`, `ls`, `cat`, `grep`, `find`, `pwd` + +## Ask before doing + +- `git add`, `git commit`, `git push` (non-force) +- `git checkout`, `git switch`, `git merge`, `git rebase` +- `terraform apply`, `kubectl delete`, `docker system prune` +- Editing `.env`, `kubeconfig`, `terraform.tfstate` + +## Why these rules exist + +- Prevent accidental pushes to protected branches +- Avoid destructive operations +- Protect secrets, state files, and config +- Ensure proper review workflow diff --git a/SECURITY.md b/SECURITY.md index 034e8480..80deb31d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,21 +1,29 @@ # Security Policy -## Supported Versions +## Scope -Use this section to tell people about which versions of your project are -currently being supported with security updates. +This repo manages personal dotfiles and configuration. It does NOT run production services. -| Version | Supported | -| ------- | ------------------ | -| 5.1.x | :white_check_mark: | -| 5.0.x | :x: | -| 4.0.x | :white_check_mark: | -| < 4.0 | :x: | +## Key rules -## Reporting a Vulnerability +- **Never commit secrets.** Use `private_*` prefix for any file containing credentials. +- `.chezmoiignore` uses gitignore semantics only — it does NOT redact secrets from tracking. +- GPG configuration lives in `private_dot_gnupg/` (not tracked in git by convention — chezmoi ignores `private_*`). +- If a file should never leave this machine, prefix it `private_`. +- Template variables like `github_token` in `.chezmoi.toml.tmpl` must remain empty strings in version control. Set via environment variables or chezmoi's `promptStringOnce`. -Use this section to tell people how to report a vulnerability. +## External dependencies -Tell them where to go, how often they can expect to get an update on a -reported vulnerability, what to expect if the vulnerability is accepted or -declined, etc. +- **chezmoi** — dotfile manager. Installed via setup script or existing package manager. +- **mise** — tool version manager. Tools pinned in `dot_config/mise/mise.toml`. +- **Homebrew** — package manager for macOS/Linux. Brewfile referenced from chezmoiscripts. + +## CI security + +- GitHub Actions CI runs ShellCheck + markdownlint only +- No secrets deployed in CI +- No production access from CI + +## Reporting + +Personal repo — issues/PRs for concerns. Not a supported product. diff --git a/docs/operations/quality-gates.md b/docs/operations/quality-gates.md index 0d730815..22fbf23d 100644 --- a/docs/operations/quality-gates.md +++ b/docs/operations/quality-gates.md @@ -1,28 +1,25 @@ # Quality Gates -Before merging to main, verify ALL of the following: +Before merging to main, verify: -## Required Gates +## Required -- [ ] Code compiles/lints without errors -- [ ] Tests pass -- [ ] Documentation is updated -- [ ] No secrets committed -- [ ] ADR created for architecture changes -- [ ] CHANGELOG updated (if applicable) +- [ ] Shell scripts lint clean (ShellCheck) +- [ ] Markdown files lint clean (markdownlint) +- [ ] Documentation updated for any behavior changes +- [ ] No secrets committed (check for hardcoded tokens/keys) +- [ ] `./setup` still works on a vanilla system (if bootstrap changed) ## CI Enforcement -The CI pipeline (`.github/workflows/ci.yml`) will automatically enforce: +| Gate | Enforced By | Details | +|------|-------------|---------| +| Shell scripts | reviewdog/action-shellcheck | All `*.sh` files | +| Markdown | reviewdog/action-markdownlint | All `*.md` files | -| Gate | Enforced By | Details | -|-----------------|--------------------------------|----------------------------------| -| Linting | ShellCheck + markdownlint | All shell scripts and markdown | -| Tests | Test suite runner | `scripts/tests/run-all.sh` | - -Manual gates (not yet automated) must be checked by the developer: +## Manual checks (not automated) - Documentation updated - No secrets committed -- ADR created for architecture changes -- CHANGELOG updated +- Private files not accidentally tracked +- setup script remains portable diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index d2fafc9a..e6f61c4f 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -11,9 +11,43 @@ - Use `{{ if ... }}{{ end }}` guards to handle missing values gracefully ### Private files not appearing -- Files prefixed `private_` are excluded from git — they only exist in this repo -- Do NOT copy private_* files to other machines +- Files prefixed `private_` are excluded from git — they only exist locally +- Do NOT copy `private_*` files to other machines ### Shell scripts failing on new machine - Run `./setup` first — it bootstraps chezmoi and applies all dotfiles - Verify `set -euo pipefail` is set in any new shell scripts you add + +### chezmoi init fails with "not a directory" +- Ensure the source directory exists: `~/.local/share/chezmoi` +- If cloning fresh: `chezmoi init --apply https://github.com/aadil/dotfiles.git` + +### mise install fails +- Check `dot_config/mise/mise.toml` for pinned versions +- Run `mise trust` on the config file first +- Try `mise install --force` to retry failed installations + +### Brewfile not applying +- Run `brew bundle --file ~/.config/brew/Brewfile` +- The chezmoiscript `run_onchange_after_install_brew.sh.tmpl` triggers on Brewfile changes + +### Tailscale not connecting +- `.chezmoiscripts/run_once_after_install_tailscale.sh.tmpl` handles install + auth +- If no auth key set, run manually: `tailscale up --authkey= --accept-routes --ssh` +- Run once only — delete chezmoi state to re-trigger + +### CI failures (ShellCheck) +- ShellCheck runs on all `*.sh` files in PRs +- Fix shellcheck warnings before merging + +### markdownlint failures +- Config in `.markdownlint.yaml` +- Run locally: `markdownlint '**/*.md' --ignore .opencode/node_modules` + +### chezmoi external resources not refreshing +- Run `chezmoi apply --refresh-externals` to force refresh +- External resources defined in `.chezmoiexternal.toml` + +### Dev Container not building +- Dockerfile uses `mcr.microsoft.com/devcontainers/base:debian-13` +- Ensure Docker is running and has network access diff --git a/opencode.json b/opencode.json index 63279638..5a9549a9 100644 --- a/opencode.json +++ b/opencode.json @@ -5,21 +5,21 @@ "./docs/troubleshooting.md" ], "permission": { - "*": "ask", + "*": "allow", "bash": { - "*": "ask", - "git status*": "allow", - "git diff*": "allow", - "git log*": "allow", - "git show*": "allow", - "git branch*": "allow", - "git remote*": "allow", - "git config --get*": "allow", - "git rev-parse*": "allow", + "*": "allow", + "rm -rf*": "ask", + "rm -r *": "ask", + "rm * /": "ask", + "rmdir *": "ask", + "chmod -R*": "ask", + "chown -R*": "ask", + "sudo *": "ask", + "npm publish*": "deny", + "pnpm publish*": "deny", + "terraform destroy*": "ask", "git checkout main": "deny", "git checkout master": "deny", - "git checkout -b * main": "deny", - "git checkout -b * master": "deny", "git switch main": "deny", "git switch master": "deny", "git merge * main": "deny", @@ -38,47 +38,11 @@ "git reflog expire*": "deny", "git filter-branch*": "deny", "git filter-repo*": "deny", - "git add *": "ask", - "git commit*": "ask", - "git push*": "ask", - "git pull*": "ask", - "git fetch*": "allow", - "git checkout*": "ask", - "git switch*": "ask", - "git merge*": "ask", - "git rebase*": "ask", - "git stash*": "ask", - "ls*": "allow", - "cat *": "allow", - "grep*": "allow", - "find*": "allow", - "pwd": "allow", - "echo*": "allow", - "which*": "allow", - "head*": "allow", - "tail*": "allow", - "rm -rf*": "deny", - "rm -r *": "deny", - "rm * /": "deny", - "mv * ../*": "deny", - "chmod -R*": "deny", - "chown -R*": "deny", - "dd *": "deny", - "> /dev/*": "deny", - "sudo *": "deny", - "curl *": "ask", - "wget *": "ask", - "docker rm*": "ask", - "docker rmi*": "ask", - "kubectl delete*": "ask", - "terraform destroy*": "deny", - "terraform apply*": "ask", - "helm delete*": "ask", - "npm publish*": "deny", - "pnpm publish*": "deny" + "git commit --amend*": "deny", + "git branch -D*": "deny" }, "edit": { - "*": "ask", + "*": "allow", "*.env": "deny", "*.env.*": "deny", ".env.example": "allow", @@ -87,10 +51,7 @@ "**/kubeconfig": "deny", "**/.kube/config": "deny", "**/terraform.tfstate": "deny", - "**/.terraform/*": "deny", - ".github/workflows/*": "ask", - "Makefile": "ask", - "Taskfile.yml": "ask" + "**/.terraform/*": "deny" }, "read": { "*": "allow", From 2d5d58b1910a07aa7abea017ac823cd2316d4f37 Mon Sep 17 00:00:00 2001 From: aadil96 Date: Sat, 11 Jul 2026 13:05:32 +0530 Subject: [PATCH 18/18] fix: markdownlint errors in AGENTS.md, quality-gates.md, troubleshooting.md --- AGENTS.md | 18 +++++++++--------- docs/operations/quality-gates.md | 8 ++++---- docs/troubleshooting.md | 12 ++++++++++++ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 76fcbfe8..c36484fb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,14 +15,14 @@ mise exec -- chezmoi apply # Run via mise if chezmoi not on PATH ## Repo structure -| Prefix | Becomes | Notes | -|--------|---------|-------| -| `dot_*` | `$HOME/.filename` | Chezmoi auto-symlinks | -| `dot_config/` | `$HOME/.config/` | XDG config | -| `private_dot_*` | `$HOME/.filename` | Never tracked in git | -| `.chezmoiexternals/` | External resources | Mise, devpod, fonts | -| `.chezmoiscripts/` | Hook scripts | Run by chezmoi | -| `.devcontainer/` | VS Code Dev Container | - | +| Prefix | Becomes | Notes | +| --------------------- | ------------------------ | ----------------------- | +| `dot_*` | `$HOME/.filename` | Chezmoi auto-symlinks | +| `dot_config/` | `$HOME/.config/` | XDG config | +| `private_dot_*` | `$HOME/.filename` | Never tracked in git | +| `.chezmoiexternals/` | External resources | Mise, devpod, fonts | +| `.chezmoiscripts/` | Hook scripts | Run by chezmoi | +| `.devcontainer/` | VS Code Dev Container | - | ## Templates @@ -47,7 +47,7 @@ mise exec -- chezmoi apply # Run via mise if chezmoi not on PATH ## Key files to read | Purpose | File | -|---------|------| +| --------- | ------ | | chezmoi config + template vars | `.chezmoi.toml.tmpl` | | Tool versions | `dot_config/mise/mise.toml` | | OpenCode config | `.opencode/ocx.jsonc` | diff --git a/docs/operations/quality-gates.md b/docs/operations/quality-gates.md index 22fbf23d..f7ffdaec 100644 --- a/docs/operations/quality-gates.md +++ b/docs/operations/quality-gates.md @@ -12,10 +12,10 @@ Before merging to main, verify: ## CI Enforcement -| Gate | Enforced By | Details | -|------|-------------|---------| -| Shell scripts | reviewdog/action-shellcheck | All `*.sh` files | -| Markdown | reviewdog/action-markdownlint | All `*.md` files | +| Gate | Enforced By | Details | +| --------------- | -------------------------------- | ------------------- | +| Shell scripts | reviewdog/action-shellcheck | All `*.sh` files | +| Markdown | reviewdog/action-markdownlint | All `*.md` files | ## Manual checks (not automated) diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index e6f61c4f..4453bdef 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -3,51 +3,63 @@ ## Common issues with this dotfiles repo ### chezmoi apply does nothing + - Make sure you're in the correct source directory (`~/.local/share/chezmoi`) - Run `chezmoi status` to see what would change before applying ### Template variables missing + - Check `.chezmoi.toml.tmpl` for available variables - Use `{{ if ... }}{{ end }}` guards to handle missing values gracefully ### Private files not appearing + - Files prefixed `private_` are excluded from git — they only exist locally - Do NOT copy `private_*` files to other machines ### Shell scripts failing on new machine + - Run `./setup` first — it bootstraps chezmoi and applies all dotfiles - Verify `set -euo pipefail` is set in any new shell scripts you add ### chezmoi init fails with "not a directory" + - Ensure the source directory exists: `~/.local/share/chezmoi` - If cloning fresh: `chezmoi init --apply https://github.com/aadil/dotfiles.git` ### mise install fails + - Check `dot_config/mise/mise.toml` for pinned versions - Run `mise trust` on the config file first - Try `mise install --force` to retry failed installations ### Brewfile not applying + - Run `brew bundle --file ~/.config/brew/Brewfile` - The chezmoiscript `run_onchange_after_install_brew.sh.tmpl` triggers on Brewfile changes ### Tailscale not connecting + - `.chezmoiscripts/run_once_after_install_tailscale.sh.tmpl` handles install + auth - If no auth key set, run manually: `tailscale up --authkey= --accept-routes --ssh` - Run once only — delete chezmoi state to re-trigger ### CI failures (ShellCheck) + - ShellCheck runs on all `*.sh` files in PRs - Fix shellcheck warnings before merging ### markdownlint failures + - Config in `.markdownlint.yaml` - Run locally: `markdownlint '**/*.md' --ignore .opencode/node_modules` ### chezmoi external resources not refreshing + - Run `chezmoi apply --refresh-externals` to force refresh - External resources defined in `.chezmoiexternal.toml` ### Dev Container not building + - Dockerfile uses `mcr.microsoft.com/devcontainers/base:debian-13` - Ensure Docker is running and has network access