JanStrap: My Homelab Bootstrap System
I just realized that most of my Omarchy posts are basically pointless. Why? Because I stumbled on a solution so simple that it makes all my previous manual tweaking look unnecessarily complicated.
The "Aha!" Moment
While browsing YouTube, I found typecraft's video about setting up Omarchy. He showed a straightforward approach: a Git repository with your packages, dotfiles, and a shell script that installs everything.
Run the script once, and your machine is configured exactly how you want it. Re-run it after updates, and everything stays in sync. Idempotent and zero manual tweaking.
I sat there thinking: "Why have I been writing blog posts about manually installing packages and editing configs when I could just... script it all?"
The Homelab Problem
Here's my situation: I run multiple Omarchy workstations in my homelab. Each machine needs mostly the same setup, but with some host-specific differences:
- Laptop1 needs battery indicators and power management
- Desktop needs different monitor configurations
- All machines should share the same shell aliases, nvim config, and common packages
Previously, I'd install Omarchy, manually install packages, copy dotfiles around, SSH into each machine to make changes... You know, the tedious way.
Enter JanStrap
I took typecraft's approach and pushed it to the next level. I built JanStrap — a complete bootstrap and configuration management system for my homelab.
What makes it special?
One repository, all machines. Common packages and dotfiles shared across all workstations, with easy host-specific overrides.
True idempotency. Run it once to bootstrap a fresh install. Run it again to apply updates. Run it a hundred times — it's always safe, never breaks anything.
Automatic propagation. Change your wallpaper config on laptop1, commit and push. Every other machine in your homelab can automatically pull and apply it. No SSH, no manual updates.
Smart dotfile overrides. Need a different waybar config on your laptop? Just override that one file. The rest stays shared. No duplication, no mess.
How It Changes Everything
Remember my posts about installing essential packages? Adding Firefox configurations? Setting up workspaces? All of that is now:
./install_all.sh
Done. Everything installed, configured, and ready to go.
Update my shell aliases? Commit, push, and within an hour (or whatever schedule you choose), all machines have the new aliases. No intervention needed.
Fresh Omarchy install? Clone the repo, run the script, grab coffee. When you're back, your machine is exactly how you like it.
Why I'm Not Explaining Everything
I could write a detailed guide about how JanStrap works — the package management, the GNU Stow integration, the host-specific override system, the automatic updates via cron.
You know what? I've already done that. Just hop over to the README file — it's all there: setup instructions, examples, the whole architecture.
What I will say is this: if you're running multiple Omarchy machines (or any Arch-based setup), and you're tired of manually keeping them in sync, check it out.
Full Circle
So yeah, most of my previous Omarchy posts? Consider them deprecated. Or rather, think of them as the "before" picture. JanStrap is the "after."
I still learned valuable things while writing those posts. But now, instead of documenting how to configure things manually, I just maintain a Git repository that does it all automatically.
Sometimes the best solution is the simple one you should have built from the start.
Repository: github.com/opajanvv/janstrap
Credits: Inspired by typecraft's omarchy-supplement