[{"data":1,"prerenderedAt":116},["ShallowReactive",2],{"project:griffin":3},{"id":4,"title":5,"body":6,"demo":78,"description":79,"docs":80,"draft":81,"extension":82,"highlights":83,"image":78,"language":93,"meta":94,"navigation":95,"order":96,"path":97,"repo":98,"seo":99,"site":78,"stack":100,"stem":108,"tagline":109,"tags":110,"__hash__":115},"projects\u002Fprojects\u002Fgriffin.md","Griffin",{"type":7,"value":8,"toc":71},"minimark",[9,14,23,26,30,37,48,52],[10,11,13],"h2",{"id":12},"the-premise","The premise",[15,16,17,18,22],"p",{},"A development machine accumulates state. Six months of ",[19,20,21],"code",{},"apt install",", a dotfile\nedited at 1am, a PATH entry nobody remembers adding. Then the laptop dies, or a\nnew person joins, and the setup is archaeology.",[15,24,25],{},"Griffin makes the workstation reproducible: the machine is described in version\ncontrol, and rebuilding it is a command rather than a weekend.",[10,27,29],{"id":28},"why-it-earns-its-place-here","Why it earns its place here",[15,31,32,36],{},[33,34,35],"strong",{},"It is tested on three platforms in continuous integration."," Ubuntu, WSL, and\nmacOS each have their own workflow that runs the playbook on a clean runner. An\nAnsible role that works on the author's machine is a script; one that provisions\na fresh Ubuntu runner, a WSL environment, and both Intel and Apple Silicon macOS\nis infrastructure.",[15,38,39,40,43,44,47],{},"That is also the hard part. The same intent - install this tool, set this\npreference - is ",[19,41,42],{},"apt"," here, ",[19,45,46],{},"homebrew"," there, and a registry-adjacent quirk in\nWSL. The playbooks abstract the intent and branch on the platform, rather than\nforking into three copies that drift.",[10,49,51],{"id":50},"structure","Structure",[53,54,55,62,65,68],"ul",{},[56,57,58,61],"li",{},[33,59,60],{},"65 YAML task files",", organized by concern, each idempotent, so re-running\nconverges rather than duplicating",[56,63,64],{},"Separate playbooks for Linux and macOS sharing common roles",[56,66,67],{},"Configuration import for KDE and editor settings",[56,69,70],{},"Linting via reviewdog in CI, documentation built and published automatically,\nreleases managed by release-please",{"title":72,"searchDepth":73,"depth":73,"links":74},"",2,[75,76,77],{"id":12,"depth":73,"text":13},{"id":28,"depth":73,"text":29},{"id":50,"depth":73,"text":51},null,"Ansible playbooks that take a bare Linux or macOS machine to a fully configured development workstation, verified on every push across Ubuntu, WSL, and macOS runners.","https:\u002F\u002Fterrorsquad.github.io\u002Fansible-post-installation\u002F",false,"md",[84,87,90],{"value":85,"label":86},"3","platforms tested in CI: Ubuntu, WSL, macOS",{"value":88,"label":89},"65","YAML task files, idempotent by construction",{"value":91,"label":92},"0","manual steps to rebuild a machine","Ansible \u002F YAML",{},true,5,"\u002Fprojects\u002Fgriffin","https:\u002F\u002Fgithub.com\u002FTerrorSquad\u002Fansible-post-installation",{"title":5,"description":79},[101,102,103,104,105,106,107],"Ansible","YAML","Bash","Zsh","GitHub Actions","Homebrew","WSL","projects\u002Fgriffin","A dev workstation from bare metal, reproducibly",[111,112,113,114],"Infrastructure","Automation","Cross-platform","CI","VOJPWWFenOl09nRglF71orFSdXYzJFBJKtYZ68jvSqw",1785847686124]