NW Omarchy
Attempt to bring Omarchy back to X11 (future XLibre support) with BSPWM
#nw-omarchy
A secondary login option for Omarchy: bspwm + picom (upstream v13) on XLibre, layered on top of an existing Omarchy install. Ports as much of the Hyprland look-and-feel and keybindings as the X11 stack allows — rounded corners, blur, shadows, fade-on-open/close — all running on a maintained X server.
"Not Wayland Omarchy." Sits parallel to Hyprland — your Omarchy session is untouched.
XLibre is the project's X server target (a maintained xorg-server fork). It coexists cleanly with omarchy's hyprland (xorg-xwayland is untouched). install.sh --apply runs the swap as the last step of the pipeline. See docs/xlibre.md for what it touches and how to revert.
#Screenshots
#Launchers / menus / TUIs
super + space — full drun launcher (every .desktop on the system, with icons) |
super + shift + space — pinned-apps cheat-sheet, chord shown next to each binding |
super + alt + space — 1:1 port of the omarchy system menu |
super + ctrl + w — impala wifi TUI as a floating overlay (one of the per-app TUI bindings) |
#Themes — every omarchy theme works as-is
nw-omarchy plugs into omarchy's existing omarchy-theme-set pipeline: bspwm border, polybar, rofi, and dunst all repaint on every theme change, and the wallpaper rotates with the theme via our nw-omarchy-bg-watch inotify daemon. The 19 themes shipped by omarchy (catppuccin, gruvbox, kanagawa, nord, tokyo-night, …) need zero porting work to look right under bspwm.
| ristretto — warm color-curves wallpaper | lumon — Severance "United in Severance" |
| everforest — misty tree-tops | retro-82 — synthwave grid |
#What this is not
- A replacement for Omarchy. Hyprland keeps working. Pick your session at SDDM.
- A fork. Nothing under
~/.local/share/omarchy/is modified. - Magic. Wayland-only features (real GPU compositing, native fractional scaling) don't come back; we approximate.
#Quick install (one-liner)
curl -fsSL https://raw.githubusercontent.com/akitaonrails/NW-Omarchy/master/boot.sh | bash
Pre-flights Arch + omarchy + git, clones to ~/.local/share/nw-omarchy, and runs the full install pipeline (bspwm session + picom v13 + XLibre swap). Asks for confirmation once before touching anything; pass --yes to skip:
curl -fsSL https://raw.githubusercontent.com/akitaonrails/NW-Omarchy/master/boot.sh | bash -s -- --yes
Reboot when it finishes, then pick nw-bspwm from the SDDM session selector.
#Bootstrap (from a clone)
cd ~/.local/share/nw-omarchy ./install.sh # dry-run by default; prints what it would do ./install.sh --apply # bspwm session + picom v13 + XLibre swap, in one shot
Reboot, then pick nw-bspwm from the SDDM session selector on next login.
Pre-1.0:
install.sh --applyis the canonical path to the latest target state from any starting point. Idempotent — safe to re-run after pulling repo updates. Post-1.0 we'll add proper upgrade migrations.
#Uninstall
~/.local/share/nw-omarchy/uninstall.sh --apply
Reads ~/.local/state/nw-omarchy/manifest.tsv and undoes everything: removes only packages it installed, restores backed-up configs, deletes the SDDM session entry, wipes state.
#Status / introspection
nw-omarchy-status # what's tracked, what would be removed nw-omarchy-doctor # lint live install (packages, themes, daemons, ...)
#Upgrade
nw-omarchy-upgrade --check # current vs latest, exit nw-omarchy-upgrade # yay -Syu, fetch new tag, run migrations, install
The script:
- Runs
yay -Syu --noconfirm(orpacman -Syuif yay isn't installed) for the system packages. - Compares the local installed tag against the latest
v*tag on the remote. - If a new tag is available:
git fetch && git checkout v<latest>, runs everymigrations/<v>.shbetween current and latest in version-sort order, theninstall.sh --apply, then writes the new version to~/.local/state/nw-omarchy/version.
Pass --no-pacman to skip the system upgrade and only update nw-omarchy. Pass --yes to skip confirmation prompts.
#Documentation
- docs/README.md — what works, what doesn't, gotchas
- docs/architecture.md — directory layout and conventions
- docs/gaps.md — parity with vanilla omarchy: what's done, what's intentionally dropped, what's still worth building
- docs/porting-hypr.md — Hyprland binding/feature → X11 map
- docs/why-xlibre.md — what XLibre is, why we chose it, what we gain by staying on X11, what we lose vs Hypr/Wayland
- docs/xlibre.md — what the install pipeline does for the X server swap, compatibility matrix, revert recipe
#Repo layout
| Path | Purpose |
|---|---|
install.sh / uninstall.sh / boot.sh |
Top-level entry points |
bin/nw-omarchy-* |
Runtime CLI (install, uninstall, status, track, upgrade) |
install/*.sh |
Idempotent install steps; each calls nw-omarchy-track |
migrations/*.sh |
Versioned upgrade steps run by nw-omarchy-upgrade. See migrations/README.md. |
default/{bspwm,sxhkd,picom,polybar,rofi,xinit}/ |
Configs symlinked into ~/.config |
default/xsessions/nw-bspwm.desktop |
The SDDM session file |
packages/nw-omarchy.packages |
Pacman/AUR package list |
docs/ |
The "what worked" docs (omarchy-style) |
VERSION / LICENSE |
Release version (one line, semver) and GPLv3 license text |
#Conventions inherited from Omarchy
- Idempotent scripts (re-running install does nothing on a clean state).
- "Document what worked" — every shipped change reachable from
docs/README.md. - Imperative commit subjects, scoped:
bspwm:,picom:,install:,docs:,fix(...). - Never edit
~/.local/share/omarchy/(their tree, clobbered byomarchy-update).
#State directory
Install actions are recorded in ~/.local/state/nw-omarchy/:
manifest.tsv # one row per action: pkg | pkg-skip | file | symlink | dir backups/ # files we displaced install.log # last install run output
Uninstall replays this in reverse. Lose the state dir → uninstall becomes manual; back it up if you care.
#License
GPL v3 — see LICENSE.