This repository contains installation scripts for setting up an Arch Linux environment with various tools and configurations.
packages/- Special-case package installers; plainyaypackages are declared inmaster-installation.shbrowsers/- Browser-specific preference bootstrap scriptscleanup/- Explicit cleanup and removal scripts for one-off maintenance tasksrepos/- Scripts for cloning personal repositories and setting up the Urchin keyboardplugins/- Idempotent installers for preferred Omarchy shell pluginshardware/- Hardware-specific installation scripts (e.g., for MacBook Air)master-installation.sh- Main script that runs all installations in ordermaster-cleanup.sh- Main script that runs the repo cleanup scripts in one passinstall-hyprland-overrides.sh- Validates Omarchy 4's Hyprland Lua entrypoint and user-module imports
Omarchy 4 configures Hyprland in Lua. The active entrypoint is
~/.config/hypr/hyprland.lua, which loads Omarchy's defaults followed by these
user-owned modules:
require("hypr.monitors")
require("hypr.input")
require("hypr.bindings")
require("hypr.looknfeel")
require("hypr.autostart")Personal Hyprland settings belong in the corresponding .lua files under
~/.config/hypr/. The chezmoi source repository must therefore manage:
dot_config/hypr/bindings.luaforhl.unbind(...)ando.bind(...)callsdot_config/hypr/monitors.luaforhl.env(...)andhl.monitor(...)callsdot_config/hypr/input.luaforhl.config({ input = ... })dot_config/hypr/looknfeel.luafor gaps, borders, and animation settingsdot_config/hypr/hyprland.luaonly when the stock Omarchy entrypoint itself needs changing
Legacy personal.conf, common.conf, and host .conf fragments are not loaded
by the Lua entrypoint. The install-hyprland-overrides.sh
script verifies the Lua bootstrap/imports and checks a live Hyprland session for
configuration errors; it no longer edits the inactive .conf stub.
Omarchy 4 replaced Waybar and Walker with the Omarchy shell built on Quickshell.
Bar layout and built-in widgets are configured by
~/.config/omarchy/shell.json; personal plugin code belongs under
~/.config/omarchy/plugins/. A chezmoi-managed dot_config/waybar/ directory
has no effect on the Omarchy 4 bar.
Common Waybar migrations are:
mpris-> add{ "id": "omarchy.media" }to abar.layoutsection- workspace numbers -> the built-in
{ "id": "omarchy.workspaces" } - custom workspace icons -> clone
omarchy.workspacesand customize the user-owned QML plugin - battery percentage -> use the
omarchy.powerwidget (right-click toggles percentage) - launcher refresh -> no Walker restart; Quickshell watches desktop entries
plugins/install-omarchy-plugins.sh installs
missing plugins and updates existing plugins to their latest upstream version on
every install or sync run. Plugin placement and settings remain managed by
chezmoi through ~/.config/omarchy/shell.json.
The preferred plugin sources are declared in
plugins/omarchy-plugins.txt. Add a plugin there
and add its desired layout entry to the chezmoi-managed shell.json.
- Radio Atlas - provides the Radio Atlas bar widget
The setup keeps the Urchin firmware repository at
~/Repos/zmk-urchin-kcodedev and installs the kcodedev.urchin Omarchy plugin
from its dedicated GitHub repository. The plugin is enabled after chezmoi
applies shell.json, while chezmoi remains responsible for its exact bar
placement and settings.
On sync, clean firmware and plugin checkouts are updated with fast-forward-only
pulls. A checkout with local changes is left untouched. Docker is reported by
doctor because local ZMK builds require it, but this repository does not
install or configure Docker automatically.
The repository sources and firmware destination can be overridden for a one-off run:
URCHIN_ZMK_REPO_URL=git@github.com:example/zmk-urchin.git \
URCHIN_ZMK_REPO_DIR="$HOME/Repos/zmk-urchin" \
URCHIN_OMARCHY_PLUGIN_URL=https://github.com/example/urchin-plugin.git \
./master-installation.sh sync- Clone this repository
- Run a full machine bootstrap:
./master-installation.sh install - Re-sync an existing machine after repo changes:
./master-installation.sh sync - Inspect the current machine state without changing anything:
./master-installation.sh doctor - Upgrade already-installed npm and pipx tools during a sync:
BOOTSTRAP_UPGRADE=1 ./master-installation.sh sync - Remove unwanted Omarchy apps in one pass:
./master-cleanup.sh - Also purge app data for supported cleanup scripts:
./master-cleanup.sh --purge-data
Dotfiles are managed with chezmoi. The default source repository is:
git@github.com:kcodedev/dotfiles-chezmoi.gitOverride it for a one-off run with:
CHEZMOI_DOTFILES_REPO_URL=git@github.com:kcodedev/other-dotfiles.git ./master-installation.sh syncThe intended setup is identical config across dell-7430, acer-revo-mini-pc, and
macbook-air-2015, so the first chezmoi repo should stay mostly plain files rather
than host-specific templates.
- Arch Linux with yay installed
- Git configured for SSH access to private repos
~/.local/binon yourPATHif you want npm global installs to fall back to a user-local prefix
installauto-detects MacBook hardware and runs the hardware extras for that hostsyncupdates existing repos withgit pull --ff-onlywhen they are clean, and skips pulling if you have local changessyncinstalls or updates the Urchin Omarchy plugin after applying dotfiles, preserving the chezmoi-owned bar layoutsyncapplies dotfiles with chezmoi from~/.local/share/chezmoi- Brave preferences and managed policies are re-applied during install/sync for repo-managed defaults such as vertical tabs and force-installed extensions
doctorreports command availability, repo state, Hyprland Lua module status, preferred Omarchy plugin status, and Urchin readinessmaster-cleanup.shruns the repo cleanup scripts without mixing removals into install/synccleanup/remove-helix.shremoves Helix, its theme overlays, and the oldhxalias; editor config is preserved unless--purge-datais passed- Hyprland-specific steps skip cleanly when
~/.config/hypr/hyprland.luais not present - npm and pipx tools are only upgraded when
BOOTSTRAP_UPGRADE=1is set - Hardware-specific scripts include detection to prevent running on incompatible systems
- Reboot recommended after installing kernel modules (e.g., FacetimeHD)