Zum Inhalt springen
Serkan Köse
Akzent

Ansible Bootstrap für meine Workstation

Älteres, weiterhin koexistierendes Ansible-Bootstrap für eine Linux/WSL2-Workstation. Ansible verwaltet die OS-Ebene, mise alle CLI-Tools und Language-Runtimes; unter WSL wird der Nerd Font auf dem Windows-Host installiert.

ansiblemisewsldotfilesneovimzshmolecule
Quellcode

Überblick

Ein Befehl macht aus einer frischen Maschine mein Arbeits-Setup. Das Repo ist der Vorgänger meines NixOS-Setups und läuft aktuell noch koexistent, vor allem für WSL2- und klassische Linux-Umgebungen. Das Design teilt die Zuständigkeit danach auf, was ein Tool braucht: alles, was Root benötigt oder ein System-Package ist, läuft über Ansible, alles im User-Space und versionsgepinnt über mise. Das Repo reproduziert einen bekannten Maschinen-Zustand, statt Installationen ad hoc zu skripten.

Credits

Die Docker-Engine wird über die Role geerlingguy.docker installiert. Die Neovim-Konfiguration ist mein LazyVim-Setup, unverändert übernommen. Die Shell baut auf Oh My Zsh und Starship auf.

Stack & Architektur

  • Ansible für die OS-Ebene (eine Role, eine site.yml, getaggte Tasks)
  • mise für CLI-Tools und Language-Runtimes, gepinnt in config.toml
  • Homebrew (linuxbrew) als Ad-hoc-Escape-Hatch
  • zsh mit Oh My Zsh und Starship
  • Neovim (LazyVim) als Konfiguration eingebunden
  • Molecule und ein tests/Dockerfile zur Verifikation

Ansible-Ebene: kümmert sich um apt-Packages, Fonts, den Docker-Daemon, die Installation von mise und das Ausrollen aller Dotfiles. Jeder Block ist per Tag wählbar und über eine with_*-Variable schaltbar.

mise-Ebene: eine eingecheckte config.toml listet jedes Tool und jede Runtime (Go, Node mit pnpm, Python, das Kubernetes-Tooling, Terraform) auf eine exakte Version fest. mise install erledigt den Rest.

Idempotenz: ein zweiter Lauf meldet keine Änderungen. Konfigurations-Bäume werden per copy ausgerollt, Tool-Installationen über einen Missing-Tool-Check abgesichert.

Terminal und Font, pro OS

Die Role erkennt WSL zur Laufzeit und verzweigt, damit der Font auf beiden Systemen im Terminal landet. Unter nativem Linux installiert sie den Font nach ~/.local/share/fonts, installiert das Terminal kitty und schreibt eine kitty.conf mit gesetztem Font. Unter WSL wird der Font stattdessen auf dem Windows-Host installiert: die .ttf-Dateien werden ins Windows-Font-Verzeichnis des Users kopiert, unter HKCU registriert, und die laufende Windows-Terminal-settings.json wird in place gepatcht, nur Font-Face und -Size, mit Timestamp-Backup. Andere Terminal-Einstellungen bleiben unangetastet. Font-Name und -Size sind geteilte Variablen, eine Änderung gilt also für beide Pfade.

Versionen und Updates

Jedes Tool ist auf eine exakte Version gepinnt. Renovate hält sie aktuell: der mise-Manager, die Manager für GitHub Actions und pre-commit, plus ein Custom-Regex-Manager für das eine Tool, das mise nicht installieren kann. Release Notes hängen an jedem PR; Minor- und Patch-Bumps mergen automatisch, Major-Bumps von Runtimes bleiben zur Prüfung offen.

broot

broot ist das einzige Tool, das nicht über mise läuft. Sein Release ist ein einzelnes Zip, das pro Plattform eine Binary in getrennten Unterordnern bündelt; mise's Backends können das nicht auflösen und griffen die falsche. Ein eigener Task lädt das Zip und extrahiert die zur Architektur passende Linux-Binary nach ~/.local/bin.