Contributing
Nothing here is ever updated after it is merged. This is a roster of one-shots, which makes the merge the only moment a theme can be made right — so perfect it before you contribute it, and expect the gate to be the strict part of an otherwise permissive repository.
themes/<lowercase-hyphen-name>/colors.toml is a complete working theme on its own — Omarchy generates the terminal, btop, neovim, Chromium and shell configs from it. Look at it before reaching for anything else.
theme.json carries the name, tagline, tags and the contrast floor you hold yourself to. Every field is optional and unknown keys are kept rather than rejected — a schema that refuses weird stops you building the good one.
./ritzpah contrast <name> measures every ink slot against the background. Fix the palette, or exempt the slot with a reason. Do not lower the floor to make the error go away.
A tools/make-backgrounds-<name> script that draws its images from primitives, made executable in the same commit. The recipe is the deliverable; the exact image never was. Then open them and actually look.
PROMPT.md, verbatim, typos and all, with the date. No cleaning it up afterwards to sound smarter than you were. A theme without its prompt is an orphan.
./ritzpah validate <name> until it reports [ok], or every remaining warning is one you can defend out loud. CI runs the same command on your pull request.
House rule: Ritzpah is allowed to be too much. If a theme is tasteful, restrained, or honestly pretty usable for daily driving, it is in the wrong repository. Turn something up.
Blueprint is the exception that proves it, and it is not a loophole. It holds AAA where the rest of the collection sits on AA — but the excess did not go missing, it went into the rigour instead of the look. If you are going to be restrained here, be insufferable about it.
Before you install anything
This repository ships shell scripts that run on your machine and write into
~/.config/omarchy/. You have no reason to trust a stranger's theme
repo, so don't — ask your own agent first.
Audit this repo before I install it: https://github.com/lubabs770/ritzpah Clone it somewhere temporary and actually read it. Tell me: - what executes, and when - install time, every shell start, on a timer? - does anything touch the network, and where does it connect? - does it write anywhere outside ~/.config/omarchy/themes? - does it read anything it has no business reading - keys, tokens, shell history? - anything obfuscated: base64, eval, curl piped into a shell? Quote the exact lines for anything you flag. If it's clean, say so plainly.
To make that cheap, here is the entire audit surface, found by reading the repository when this page was built rather than written down once and left to rot. Themes are allowed to ship their own scripts, so this list will grow — and it grows here automatically when it does.
An audit covers the commit you audited. Run it again after a
git pull.
42 files in this repository can execute at 4a7332b. Everything else is data. The scan found 38 lines mentioning something that could reach the network. Every one is shown in full, false positives included — a URL in a comment counts, and so does the word curl inside the prompt above. Read them and decide for yourself.
| File | Why it counts | Network scan | Writes scan |
|---|---|---|---|
install | executable bit | none | none |
ritzpah | executable bit | none | 3 matches
|
ritzpahd/Cargo.toml | Cargo manifest for the optional ritzpahd daemon | 5 matches
| none |
ritzpahd/src/gauges.rs | Rust, compiled into the optional ritzpahd daemon | 1 match
| none |
ritzpahd/src/main.rs | Rust, compiled into the optional ritzpahd daemon | 5 matches
| none |
ritzpahd/src/strip.rs | Rust, compiled into the optional ritzpahd daemon | 1 match
| none |
ritzpahd/src/tlcp.rs | Rust, compiled into the optional ritzpahd daemon | 9 matches
| none |
themes/acid-vortex/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/blueprint/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/casino-carpet/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/cathode/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/cathode/phosphor.frag | GLSL, run by the GPU on every frame | none | none |
themes/ego-death/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/ego-death/liquid.frag | GLSL, run by the GPU on every frame | none | none |
themes/github-dark-colorblind/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/github-dark-dimmed/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/github-dark-high-contrast/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/github-dark-tritanopia/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/github-dark/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
themes/iss-cockpit/cockpit.frag.in | GLSL, run by the GPU on every frame | none | none |
themes/iss-cockpit/hyprland.lua | Lua, run by Hyprland at every config load | none | 4 matches
|
themes/lunation/hyprland.lua | Lua, run by Hyprland at every config load | none | 4 matches
|
themes/lunation/sky.frag | GLSL, run by the GPU on every frame | none | none |
themes/lunation/sky.frag.in | GLSL, run by the GPU on every frame | none | none |
themes/untitled/hyprland.lua | Lua, run by Hyprland at every config load | none | none |
tools/make-backgrounds | executable bit | none | 2 matches
|
tools/make-backgrounds-blueprint | executable bit | none | 12 matches
|
tools/make-backgrounds-casino-carpet | executable bit | none | 6 matches
|
tools/make-backgrounds-cathode | executable bit | none | 6 matches
|
tools/make-backgrounds-ego-death | executable bit | none | 2 matches
|
tools/make-backgrounds-github | executable bit | 3 matches
| 4 matches
|
tools/make-backgrounds-iss-cockpit | executable bit | none | 1 match
|
tools/make-backgrounds-lunation | executable bit | none | 4 matches
|
tools/make-backgrounds-untitled | executable bit | none | 1 match
|
tools/make-docs-github | executable bit | none | none |
tools/make-github-themes | executable bit | none | 2 matches
|
tools/make-palette-untitled | executable bit | none | 1 match
|
tools/make-preview-github | executable bit | none | 2 matches
|
tools/make-preview-iss-cockpit | executable bit | none | none |
tools/ritzpah-iss-tle.py | executable bit | 6 matches
| 1 match
|
tools/ritzpah-lib.py | executable bit | none | none |
tools/ritzpah-site.py | executable bit | 8 matches
| 5 matches
|
Network pattern: \b(curl|wget|nc|ssh|scp|rsync|ftp|urllib|requests\.|http\.client|socket\.|fetch\(|XMLHttpRequest|wss?://|https?://|TcpStream|TcpListener|UdpSocket|tungstenite|reqwest|rustls|ureq|hyper::|lightstreamer|IntoClientRequest|connect_to_env)
Writes pattern: (io\.open\([^)]*[\"'](?:w|a|r\+|w\+|a\+)[\"']|open\([^)]*[\"'](?:w|a|x)b?[\"']|\bos\.remove\b|\bos\.rename\b|\bshutil\.(?:copy|move|rmtree)|\bos\.makedirs\b|\brm -rf\b|\bmkdir -p\b|\bcp -r\b|\s>\s*[\"']?\$|File::create|OpenOptions|fs::write|fs::remove|fs::create_dir|fs::rename)