- Convert
guettli/dotfilesso it installs its tools via mise instead of nix — I write the PR now. - Clone the repo locally into the
code1..code4users on tc (which has mise, no nix — so the conversion is what makes it runnable there). - Add the repo to AgentLoop (register it as a managed repo in the running instance).
- Working clone:
~/dotfileson p16 (this host), branchmain@1fdb2c7. - Git/GitHub auth: git over SSH via the guettlibot key
~/.ssh/id_ed25519(authenticates as guettlibot).ghis logged in as guettlibot. - tc access:
ssh root@tc(Ubuntu 26.04). Userscode1..code4exist, key-login only, each already has the other 7 AgentLoop repos cloned +~/.env(guettlibot token, sourced on login via~/.profile) + mise tools (node@lts,claude). System mise =/usr/bin/mise; per-user tools viamise use -g. - tc gotcha: Ubuntu 26.04 ships uutils coreutils —
head/tailreject-1/-2; use-n1. Alsomise use -g ... >/dev/nullcan exit 1 (progress writer); don't redirect to /dev/null. - AgentLoop source:
~/agentloop. Running instance:agentloop.thomas-guettler.de, k8s nsagentloop,deploy/agentloop(KUBECONFIG=~/.kube/config). Daemon args include--repo-data /data/agentloop.
- L134-143
requiredPackages:nixpkgs#{starship,atuin,direnv,nix-direnv,mise,tmux,antidote,bash-completion}. - L151-179 apply/diff block: installs via
nix ... profile add. - L291-313
getMissingPackages: detects vianix ... profile list.
templates/shell/common.shL24:pathadd "$HOME/.nix-profile/bin". (mise activate + direnv hook already present L54-65.)templates/zsh/.zshrcL12-13: zsh site-functions from.nix-profile/share/zsh/site-functions; L17-18: antidote from.nix-profile/share/antidote/antidote.zsh.templates/bash/.bashrcL8-9: bash-completion from.nix-profile/etc/profile.d/bash_completion.sh.
- "installs required Nix dependencies",
nix profile, prerequisites mention Nix — update to mise.
| tool | in mise registry? | new install path |
|---|---|---|
| starship | ✅ aqua:starship/starship | mise use -g starship |
| atuin | ✅ aqua:atuinsh/atuin | mise use -g atuin |
| direnv | ✅ aqua:direnv/direnv | mise use -g direnv |
| tmux | ✅ aqua:tmux/tmux-builds | mise use -g tmux |
| mise | (is the installer) | drop — already present |
| nix-direnv | ❌ nix-only | drop — plain direnv + mise needs no nix-direnv |
| antidote | ❌ not in registry | git clone --depth=1 https://github.com/mattmc3/antidote ~/.antidote; source ~/.antidote/antidote.zsh |
| bash-completion | ❌ not in registry | system pkg (apt install bash-completion), source /usr/share/bash-completion/bash_completion |
- Branch:
git -C ~/dotfiles switch -c nix-to-mise. - main.go:
- Replace
requiredPackageswith mise tool list[]string{"starship","atuin","direnv","tmux"}. - Rewrite
getMissingPackagesto detect viamise ls -g/mise which <tool>(tool missing if not on shims). - Rewrite apply branch:
mise use -g <missing...>(idempotent; don't redirect stdout to /dev/null). Keep the diff branch listing "+ ". - Add antidote step: if
~/.antidoteabsent → git clone (apply) / report (diff). - bash-completion: don't try to install via mise; rely on system (note in output) — or
apt-get install -y bash-completionguarded bycommand -v apt-get+ root. Keep minimal: just stop referencing nix. - Update user-facing strings ("via Nix" → "via mise", "nix installed" → "mise installed").
- Replace
- templates/shell/common.sh: drop
.nix-profile/binpathadd; ensure~/.local/share/mise/shimson PATH (mise activate covers interactive; add shim path for non-interactive login) and~/.antidotenot needed on PATH. - templates/zsh/.zshrc: antidote source path →
~/.antidote/antidote.zsh; drop/replace nix-profile zsh site-functions block (mise completions instead, optional). - templates/bash/.bashrc: bash-completion source →
/usr/share/bash-completion/bash_completion(guard with-f). - README.md: replace Nix wording with mise; update prerequisites (Go + mise, drop nix).
- Build/verify:
cd ~/dotfiles && go build ./... && go vet ./.... Optionallygo run . diffin a scratch HOME to smoke-test (no nix required). - Commit (Co-Authored-By + Claude-Session trailers), push branch, open PR to
guettli/dotfilesviagh pr create. NOTE: guettlibot's shared GitHub REST limit — gh may 403 if the loop is busy; retry.
- Clone into tc users on the feature branch (so it runs there pre-merge; switch to main after merge):
for u in code1 code2 code3 code4; do ssh root@tc "sudo -u $u -H git -C /home/$u clone -b nix-to-mise git@github.com:guettli/dotfiles.git"; done(matches the existing 7-repo layout; known_hosts + key already in place.) - Register in AgentLoop —
POST /api/v1/reposon the running instance forguettli/dotfiles.- TODO on resume: find request schema + auth.
~/agentloopopenapi (locate the file; not at repo root) is source of truth;onboarder.go/serve.goreferencePOST /api/v1/repos(issue #700) and the onboarder installs webhooks. Confirm auth (instance uses webauthn/rpagentloop.thomas-guettler.de) — may need an API token/session or a direct store write.
- TODO on resume: find request schema + auth.
- PR target branch =
main. Keep change minimal & reviewable; call out droppednix-direnvand the antidote(git)/bash-completion(apt) relocations in the PR body. - Do NOT run
dotfiles applyas the code users until PR logic is verified — it rewrites ~/.zshrc, ~/.bashrc, ~/.gitconfig etc. (has .bak backup + cache-baseline guard, but still). - Cloning the feature branch means a later
git pullafter merge needs a switch back to main.