Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
dd53a65
Fix SSH signing: gitconfig quoting broke gpg.ssh.defaultKeyCommand
akan72 Jul 5, 2026
149ade5
Make assimilate.sh cross-platform (macOS + Linux)
akan72 May 16, 2026
07a2c59
Drop ls=lsd alias
akan72 May 16, 2026
5c1a4f6
Guard ~/.cargo/env source against missing file
akan72 May 16, 2026
60d1f92
Install neovim on Linux from a pinned tarball
akan72 May 16, 2026
bc9f3ea
Pin neovim to 0.9.5 to match macOS version
akan72 May 17, 2026
2c3483b
Guard brew-shipped zsh plugin sources and ~/.cargo/env
akan72 May 17, 2026
885daf5
Source nvm with --no-use to suppress "N/A" auto-use errors
akan72 May 17, 2026
e9d2417
Set zed project panel on lhs
akan72 May 18, 2026
cf9a1e3
Clean up Brewfile
akan72 May 18, 2026
4afa8a7
Pin Linux SHA256 for delta and neovim tarballs
akan72 May 29, 2026
6bf971b
Make clone_pinned work on git <2.49 (drop --revision)
akan72 May 29, 2026
56bd4cf
Keep lsd ls alias on machines that have lsd
akan72 Jul 7, 2026
a141974
ci: validate dotfiles installs on macOS and Linux
akan72 Aug 14, 2026
7876782
ci: fix hosted runner prerequisites
akan72 Aug 14, 2026
45f8b09
ci: preserve hosted Homebrew trust
akan72 Aug 14, 2026
9d3961e
ci: trust hosted runner AWS tap
akan72 Aug 14, 2026
b37b649
ci: use hosted runner home for integration
akan72 Aug 14, 2026
35093fe
ci: test clean VPS installs
akan72 Aug 14, 2026
d7b027d
ci: attach VPS container input
akan72 Aug 14, 2026
d4f5a5a
fix: support clean Linux bootstrap
akan72 Aug 14, 2026
3e78d24
test: verify interactive VPS shell
akan72 Aug 14, 2026
aa6cb5a
test: load VPS bashrc
akan72 Aug 14, 2026
c61056e
test: verify interactive VPS zsh
akan72 Aug 14, 2026
7779525
test: ignore shell startup output
akan72 Aug 14, 2026
cbc3ee1
feat: install pinned Google Cloud CLI
akan72 Aug 15, 2026
c16116a
Clean up bashrc: remove dead config, fix aliases, dedupe
akan72 May 29, 2026
c7fbc8c
Clean up zshrc: stop sourcing bashrc, drop OMZ git plugin, fix shell …
akan72 May 29, 2026
7de5316
Fix comment: OMZ git plugin shadowed the custom aliases, not vice versa
akan72 Jul 5, 2026
31087f4
Restructure shell config into shared.sh sourced by both shells
akan72 May 29, 2026
8a81d79
Guard brew --prefix in shared.sh for hosts without Homebrew
akan72 Jul 5, 2026
6e0e633
Migrate Neovim plugins from Packer to lazy.nvim
akan72 May 29, 2026
bad8a46
Track lazy-lock.json so transitive plugin state is reproducible
akan72 Jul 5, 2026
1e77e4f
Harden assimilate.sh: arch-aware delta, quoted $HOME, perms
akan72 May 29, 2026
f51608a
Add repo hygiene: secret gitignore patterns + gitleaks pre-commit
akan72 May 29, 2026
f4c22c3
Ignore homebrew/ — brew writes its tap trust store into XDG_CONFIG_HO…
akan72 Jul 7, 2026
6a54a8b
Refresh checklist.md for current tooling
akan72 May 29, 2026
5dbc10f
Remove empty Zed keymap entry
akan72 May 29, 2026
a13334d
Add hardened SSH client config
akan72 May 29, 2026
a3babe5
Support machine-local hosts via Include + keep macOS UseKeychain
akan72 Jul 5, 2026
1702334
Manage Python with uv + 7-day rolling minimum release age
akan72 May 29, 2026
d8822c2
Turn off Claude Code attribution via assimilate.sh (append-only)
akan72 May 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
cooldown:
default-days: 7
161 changes: 161 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
name: CI

on:
pull_request:
push:
branches:
- main
workflow_dispatch:

permissions: {}

concurrency:
group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
UV_MALWARE_CHECK: "1"

jobs:
static-checks:
name: Static checks
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
contents: read
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Install Zsh
run: |
sudo apt-get update
sudo apt-get install --yes zsh
- name: Check shell syntax
run: |
bash -n assimilate.sh bashrc bash_profile claude/statusline.sh scripts/ci/*.sh
zsh -n zshrc
- name: Test VPS container harness
run: scripts/ci/test-vps-container.sh
- name: Check Git configuration
run: git config --file gitconfig --list >/dev/null
- name: Check strict JSON
run: |
jq empty nvim/coc-settings.json
jq empty vscode/code_settings.json
jq empty zed/keymap.json

pre-commit:
name: Pre-commit
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
contents: read
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Install pre-commit
run: python3 -m pip install --user pre-commit==4.6.2
- name: Run repository hooks
run: python3 -m pre_commit run --all-files --show-diff-on-failure

actions-security:
name: Actions security
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
contents: read
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Validate workflows with actionlint
run: go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.12
- name: Audit workflows with zizmor
run: pipx run zizmor==1.29.0 .

secret-history:
name: Secret history
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
contents: read
steps:
- name: Check out full history
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false
- name: Install pinned Gitleaks
env:
GOBIN: ${{ runner.temp }}/bin
run: go install github.com/zricethezav/gitleaks/v8@v8.30.1
- name: Scan Git history
run: '"${RUNNER_TEMP}/bin/gitleaks" git --redact --verbose'

install:
name: Install (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os:
- macos-26
- ubuntu-24.04
runs-on: ${{ matrix.os }}
timeout-minutes: 60
permissions:
contents: read
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Install Linux test prerequisites
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install --yes zsh
- name: Install dotfiles twice on hosted runner
env:
HOMEBREW_NO_ANALYTICS: "1"
run: |
# The hosted VM and its home directory are discarded after this job.
# Keep the runner's package-manager state while honoring assimilate's
# documented requirement that the repository live at $HOME/dotfiles.
test ! -e "$HOME/dotfiles"
ln -s "$GITHUB_WORKSPACE" "$HOME/dotfiles"

./assimilate.sh
DOTFILES="$HOME/dotfiles" scripts/ci/verify-assimilate.sh
backup_count="$(find "$HOME/backups" -mindepth 1 -maxdepth 1 | wc -l | tr -d ' ')"

./assimilate.sh
DOTFILES="$HOME/dotfiles" scripts/ci/verify-assimilate.sh

test "$(find "$HOME/backups" -mindepth 1 -maxdepth 1 | wc -l | tr -d ' ')" = "$backup_count"

vps-install:
name: VPS install (${{ matrix.target }})
strategy:
fail-fast: false
matrix:
target:
- ubuntu
- amazon-linux
runs-on: ubuntu-24.04
timeout-minutes: 60
permissions:
contents: read
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Install dotfiles twice in a minimal VPS image
env:
VPS_TARGET: ${{ matrix.target }}
run: scripts/ci/run-vps-container.sh run "$VPS_TARGET"
13 changes: 12 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
local
.DS_Store
nvim/plugin/
gh/
.claude
.wrangler
# Secrets and machine-local tool state
*.pem
*.key
.env
.env.*
credentials.json
*.secret
Brewfile.lock.json

# XDG_CONFIG_HOME points at this repo, so tools sometimes drop machine-local
# state here. Homebrew writes its tap trust store (homebrew/trust.json).
homebrew/
9 changes: 9 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Pre-commit hooks for this dotfiles repo.
# Install once with: pre-commit install
# Run against all files: pre-commit run --all-files
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.30.1
hooks:
# Scans staged changes for secrets before they can be committed.
- id: gitleaks
6 changes: 2 additions & 4 deletions Brewfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,15 @@ brew "gh"
brew "hashicorp/tap/terraform", trusted: true
brew "htop"
brew "jq"
brew "k9s"
brew "lsd"
brew "lua"
brew "neovim"
brew "mosh"
brew "node"
brew "postgresql@17"
brew "py-spy"
brew "pyenv"
brew "pre-commit"
brew "tmux"
brew "tree"
brew "uv"
brew "wget"
brew "zsh-autosuggestions"
brew "zsh-syntax-highlighting"
Expand Down
Loading
Loading