A synthwave Omarchy theme — deep void purple, cyan text, magenta neon accents. Includes Ghostty GPU shaders, a custom bat syntax theme, Midnight Commander skin, and shell integration for syntax-highlighted cat.
| Requirement | Notes |
|---|---|
| Omarchy | Hyprland desktop stack, theme system, menu |
| Ghostty | Default Omarchy terminal; required for Neon FX shaders |
bat |
Syntax highlighting for cat (ships with Omarchy) |
| Fish or Bash | Both supported; fish colors + bat routing wired for each |
Optional: Midnight Commander, VS Code / Cursor (SynthWave '84 extension).
From a clone of this repo:
git clone https://github.com/pepijn-blom/NeonFX.git
cd NeonFX
./installOr install straight from git without cloning first:
git clone https://github.com/pepijn-blom/NeonFX.git /tmp/NeonFX
/tmp/NeonFX/installThe installer:
- Symlinks the theme into
~/.config/omarchy/themes/neonfx - Wires Omarchy hooks (bat, MC, bash, Neon FX menu)
- Installs CLI tools to
~/.local/bin - Runs
omarchy theme set "NeonFX"
Open a new terminal tab after install so fish/bash pick up BAT_THEME and the cat wrapper.
neonfx-doctorneonfx-uninstall --switch-to "Tokyo Night"Keep the theme files but remove wiring only:
neonfx-uninstall --keep-theme-dir --switch-to "Tokyo Night"# Wire hooks only; apply theme yourself later
./install --skip-apply
omarchy theme set "NeonFX"
# Clone from a remote repo, then install
./install --from-git https://github.com/pepijn-blom/NeonFX.git
# Help
./install --helpUse this if you prefer to understand each step or are developing the theme locally.
Development (live symlink):
ln -sfn ~/projects/NeonFX ~/.config/omarchy/themes/neonfxFrom git (Omarchy built-in):
omarchy theme install https://github.com/pepijn-blom/NeonFX.gitOmarchy runs hooks from ~/.config/omarchy/hooks/ on theme apply.
# Theme-specific wiring (bat, MC, bash, Neon FX)
ln -sfn ~/projects/NeonFX/hooks/theme-set.d/neonfx.sh \
~/.config/omarchy/hooks/theme-set.d/neonfx.sh
# Copies fish.conf → ~/.config/fish/conf.d/omarchy-theme.fish (if you don't have one yet)
ln -sfn ~/projects/NeonFX/hooks/theme-set \
~/.config/omarchy/hooks/theme-setThe theme-set.d/ directory is additive — it runs alongside any existing theme-set hook.
omarchy theme set "NeonFX"ln -sfn ~/projects/NeonFX/bin/neonfx-install ~/.local/bin/
ln -sfn ~/projects/NeonFX/bin/neonfx-doctor ~/.local/bin/
ln -sfn ~/projects/NeonFX/bin/omarchy-neonfx-apply ~/.local/bin/
ln -sfn ~/projects/NeonFX/bin/omarchy-neonfx-toggle ~/.local/bin/
ln -sfn ~/projects/NeonFX/bin/omarchy-neonfx-gui ~/.local/bin/When NeonFX is active, the theme hook creates these symlinks and files:
| Component | Source | Installed to |
|---|---|---|
| Theme files | neonfx/ |
~/.config/omarchy/themes/neonfx |
| Fish colors + cat→bat | fish.conf |
~/.config/fish/conf.d/omarchy-theme.fish (via theme-set hook) |
| eza / fzf / jq (fish) | cli.env.sh |
~/.config/fish/conf.d/neonfx-cli.fish (generated by theme hook) |
| Bash bat + cat→bat + CLI env | bash.conf + cli.env.sh |
~/.config/omarchy/theme.bash |
| bat syntax theme | bat/NeonFX.tmTheme |
~/.config/bat/themes/ |
| git CLI colors | git.conf |
~/.config/git/neonfx.gitconfig (+ include in ~/.gitconfig) |
| lazygit theme | lazygit/config.yml |
~/.config/lazygit/config.yml |
| yazi theme & flavor | yazi/theme.toml + yazi/flavors/neonfx.yazi/ |
~/.config/yazi/theme.toml + ~/.config/yazi/flavors/neonfx.yazi |
| starship prompt | starship.toml |
~/.config/starship.toml |
| fastfetch | fastfetch.jsonc |
~/.config/fastfetch/config.jsonc |
| delta pager (optional) | delta.gitconfig |
~/.config/git/neonfx-delta.gitconfig when delta is installed |
| MC skin | mc.ini |
~/.local/share/mc/skins/neonfx.ini |
| Grok CLI theme | grok/neonfx.toml |
~/.grok/themes/neonfx.toml |
| Omarchy menu extension | extensions/omarchy-menu.jsonc |
~/.config/omarchy/extensions/omarchy-menu.jsonc (Quickshell) / menu.sh |
| Ghostty shader overlay | generated | ~/.local/state/omarchy/neonfx/ghostty-shaders.conf |
| FX toggle state | touch files | ~/.local/state/omarchy/toggles/neonfx/ |
Bash users: the hook adds one line to ~/.bashrc (once) to source theme.bash, overriding Omarchy's default BAT_THEME=ansi.
| Role | Hex |
|---|---|
| Background | #0c0018 |
| Foreground | #00f5ff (terminal) / #ece6ff (waybar, walker) |
| Accent / selection | #ff0099 |
| Cursor | #00f5ff |
| Magenta highlight | #ff33aa |
| Mint | #33ffb8 |
Full terminal palette: colors.toml.
cat does not syntax-highlight on its own. This theme routes file arguments through bat with a custom NeonFX theme.
Configured in fish.conf, copied to ~/.config/fish/conf.d/omarchy-theme.fish on theme apply.
cat config.json # bat with neon colors
cat file | grep x # plain cat (piped)
cat -n file # plain cat (flags)Reload in an existing session:
source ~/.config/fish/conf.d/omarchy-theme.fishConfigured in bash.conf, sourced from ~/.config/omarchy/theme.bash.
exec bash # or open a new tab
cat config.json| Element | Color |
|---|---|
| JSON/TOML/YAML keys | Cyan #00f5ff |
| String values | Lavender #ffb3e6 |
| Numbers | Mint #33ffb8 |
| Booleans / constants | Magenta #ff33aa |
| Punctuation | Muted purple #5a3a88 |
If colors look wrong (yellow numbers, generic ansi):
bat cache --build
neonfx-doctorGit had no theme colors configured — output was plain cyan or generic ANSI. git.conf enables truecolor neon highlighting for status, diff, log, branch, and grep output.
| Git output | Color |
|---|---|
| Branch / refs | Cyan #00f5ff |
| Added / new lines | Mint #33ffb8 |
| Changed / deleted | Magenta / red #ff33aa / #ff3366 |
| Untracked | Magenta #ff33aa |
| Meta / frag | Muted purple #5a3a88 |
| Header / commit | Cyan #00f5ff |
Applied via include in ~/.gitconfig when the theme is active. Re-apply if missing:
./install --skip-apply
# or
bash ~/.config/omarchy/hooks/theme-set.d/neonfx.sh neonfxTry:
git status
git log -5 --oneline --decorate
git diffBeyond bat/git, these everyday terminal tools get neon colors when the theme is active.
| Tool | Config | What you get |
|---|---|---|
| eza | EXA_COLORS in cli.env.sh |
Light cyan dirs, mint executables, cyan files, magenta symlinks |
| fzf | FZF_DEFAULT_OPTS |
Neon picker borders, magenta selection, cyan info line |
| jq | JQ_COLORS |
Themed JSON keys, strings, numbers, booleans |
| lazygit | lazygit/config.yml |
Full TUI theme; diffs via bat (or delta if installed) |
| yazi | yazi/ |
Full synthwave file manager flavor + TextMate syntax previews + git status |
| starship | starship.toml |
Cyan path, pink branch, mint git status icons |
| fastfetch | fastfetch.jsonc |
Omarchy About screen with magenta/cyan section keys |
| delta | delta.gitconfig |
Rich git diff pager (auto-wired when delta is installed) |
| Grok CLI | grok/neonfx.toml + GROK_THEME=oscura |
Official Grok uses Oscura Midnight; forks can /theme neonfx |
Re-apply after pulling updates:
bash ~/.config/omarchy/hooks/theme-set.d/neonfx.sh neonfxOpen a new shell tab for EXA_COLORS, FZF_DEFAULT_OPTS, GROK_THEME, and starship changes.
Official Grok CLI 1.0.13 only has compiled-in themes, so NeonFX sets GROK_THEME=oscura (and [ui] theme / auto_dark_theme in ~/.grok/config.toml when that file exists). The shipped grok/neonfx.toml is installed to ~/.grok/themes/neonfx.toml for forks or future official support — then run /theme neonfx. Do not set theme = "neonfx" on official Grok; unknown names error.
Optional — install delta for prettier diffs:
omarchy pkg add git-delta # pacman package name; binary is `delta`
bash ~/.config/omarchy/hooks/theme-set.d/neonfx.sh neonfxTry:
eza -la
fzf --preview 'bat --color=always {}'
echo '{"neon":true,"count":42}' | jq
lazygit
yazi
fastfetchNeon skin mapped to Ghostty's 16-color palette:
- Cyan selection bar, magenta marks/menus, cyan text on void purple
- Skin file:
mc.ini→~/.local/share/mc/skins/neonfx.ini - Sets
skin=neonfxin~/.config/mc/ini
Important: MC reads user skins from ~/.local/share/mc/skins/, not ~/.config/mc/skins/.
Run mc from Ghostty with this theme active so the palette matches. Quit MC fully and relaunch after skin changes.
Stackable GPU post-processing shaders, controlled from the Omarchy menu:
Super+Alt+Space → Style → Neon FX → ⚡ Live Sliders & Controls
Launch the real-time cyberpunk slider control center (omarchy-neonfx-gui) to adjust bloom strength/radius, cursor trail duration/opacity/smear, glitch tearing, and CRT scanlines with instant live hot-reloading in Ghostty as you drag the sliders.
| Effect | Shader | Toggle file | Configurable Sliders |
|---|---|---|---|
| Text bloom (default on) | shaders/neon-glow.glsl |
bloom |
Strength (0.0–3.0), Radius (1.0–8.0px) |
| Cursor trail | selected shaders/trails/*.glsl compiled to cursor-trail.glsl |
cursor-trail |
Style picker (default Blaze Spear), Duration, Color. Comet Smear also has smear/opacity/bloom/glitch/aberration |
| Cursor glitch | shaders/cursor-glitch.glsl |
cursor-glitch |
Tear Strength, Duration, Radius |
| Terminal CRT scanlines | shaders/crt-scanlines.glsl |
terminal-crt |
Scanline Intensity, Vignette, Chromatic Aberration |
| Option | What it does |
|---|---|
| Live Sliders GUI | Opens real-time interactive GUI with live preview |
| Full stack | bloom (intense) + trail + glitch + CRT |
| Terminal only | bloom (medium) + trail + CRT |
| Subtle glow | bloom (subtle) only |
| Off | all shaders disabled |
| Glow: Subtle | Crisp text, gentle background ambient aura |
| Glow: Medium | Balanced synthwave neon bloom (default) |
| Glow: Intense | Heavy, vivid arcade bloom |
Trail Studio (⚙ Open Trail Studio...) picks the cursor style. Default is Blaze Spear. Styles (adapted from KroneCorylus/ghostty-shader-playground; Comet Smear from sahaj-b/ghostty-cursor-shaders):
- Blaze Spear (default), Blaze Ribbon, Blaze Core, Frost Blaze
- Comet Smear (previous theme trail, with bloom/glitch/aberration)
- Hex Smear, Hex Fade, Hex Gradient, Hex Rainbow
- Sparks, Party Sparks, Blaze Sparks, Ink Slash
- Zoom Punch, Letter Zoom, Plasma Border, Screen Shake
# Launch interactive Real-Time Sliders GUI
omarchy-neonfx-gui
# or: omarchy-neonfx-toggle gui
# Presets
omarchy-neonfx-toggle preset-full
omarchy-neonfx-toggle preset-terminal
omarchy-neonfx-toggle preset-subtle
omarchy-neonfx-toggle preset-off
# Glow Intensity
omarchy-neonfx-toggle bloom-intensity subtle
omarchy-neonfx-toggle bloom-intensity medium
omarchy-neonfx-toggle bloom-intensity intense
# Trail style (Blaze Spear is default)
omarchy-neonfx-toggle trail-style blaze-spear
omarchy-neonfx-toggle set trail_style hex-smear
# Direct Parameter Setting
omarchy-neonfx-toggle set bloom_strength 2.2
omarchy-neonfx-toggle set trail_duration 0.35
# Export & Import Settings
omarchy-neonfx-toggle export ~/my-neon-fx.json
omarchy-neonfx-toggle import ~/my-neon-fx.json
# Individual toggles
omarchy-neonfx-toggle bloom
omarchy-neonfx-toggle cursor-trail
omarchy-neonfx-toggle cursor-glitch
omarchy-neonfx-toggle terminal-crt
# Re-apply current toggle state (e.g. after editing shaders)
omarchy-neonfx-applyAll settings and state are stored in standard user state paths:
| File / Path | Purpose |
|---|---|
~/.local/state/omarchy/neonfx/fx-config.json |
Master JSON settings (all slider values, switches, and trail color) |
~/.local/state/omarchy/toggles/neonfx/ |
Fast toggle flag files (bloom, cursor-trail, etc.) |
~/.local/state/omarchy/neonfx/ghostty-shaders.conf |
Active Ghostty shader overlay directives |
~/.local/state/omarchy/current/theme/shaders/ |
Live compiled .glsl shader files with active parameters |
Ghostty loads shaders via ghostty.conf:
config-file = ?"~/.local/state/omarchy/neonfx/ghostty-shaders.conf"Alacritty gets brighter palette colors but no shader stack.
Note: Desktop-wide Hyprland CRT shaders were removed — they caused black-screen issues on some setups. All FX are terminal-only now.
SynthWave '84 is applied automatically via vscode.json.
For the neon glow effect (modifies editor chrome — opt-in):
- Command Palette (
Ctrl+Shift+P) - Enable Neon Dreams
- Restart the editor
Default background ships in backgrounds/:
omarchy theme bg nextActive recording / idle / DND indicators use @warning from the theme palette instead of hardcoded reds. After editing waybar.css:
omarchy restart waybar| Symptom | Fix |
|---|---|
cat shows no colors |
New terminal tab, or source fish/bash config. Run neonfx-doctor. |
| Yellow/brown bat colors | Bash still on BAT_THEME=ansi — run ./install or check ~/.config/omarchy/theme.bash. |
| Git output one color / no color | Re-run theme hook or ./install --skip-apply; check git config --global color.ui. |
string match: -*: unknown option (fish) |
Update fish.conf and re-apply theme. |
| MC shows "Unable to load skin" | Skin must be in ~/.local/share/mc/skins/. Re-apply theme. |
| MC looks like default | Quit MC fully; launch from Ghostty with theme active. |
| Neon FX menu missing | Apply NeonFX; check ~/.config/omarchy/extensions/omarchy-menu.jsonc. |
| Shaders not visible | omarchy-neonfx-apply; restart Ghostty. |
| bat theme not found | bat cache --build |
Validate Hyprland config after edits:
hyprctl reload && hyprctl configerrorsNeonFX/
├── install # one-command installer (calls bin/)
├── bin/
│ ├── neonfx-install # full setup + theme apply
│ ├── neonfx-doctor # verify wiring
│ ├── neonfx-uninstall
│ ├── omarchy-neonfx-apply
│ ├── omarchy-neonfx-toggle
│ └── omarchy-neonfx-gui
├── tests/ # bats unit + sandboxed E2E
├── lib/ # shared FX config, menu jsonc, cli.env helpers
├── hooks/
│ ├── theme-set # copies fish.conf on theme apply
│ └── theme-set.d/
│ └── neonfx.sh # bat, MC, bash, FX wiring
├── extensions/
│ ├── omarchy-menu.jsonc # Quickshell Style → Neon FX menu
│ └── menu.sh # Legacy Walker menu fallback
├── shaders/ # Ghostty GLSL effects
│ └── trails/ # Cursor trail style presets (Blaze Spear default)
├── bat/NeonFX.tmTheme
├── grok/neonfx.toml # Grok CLI user theme (forks / future official)
├── fish.conf / bash.conf / git.conf / cli.env.sh
├── lazygit/config.yml
├── yazi/theme.toml & yazi/flavors/neonfx.yazi/
├── starship.toml
├── fastfetch.jsonc
├── delta.gitconfig
├── mc.ini
├── colors.toml
├── ghostty.conf
├── waybar.css / hyprland.conf / …
└── backgrounds/
Symlink the repo and re-apply after changes:
ln -sfn ~/projects/NeonFX ~/.config/omarchy/themes/neonfx
./install --skip-apply
omarchy theme set "NeonFX"Edit shaders, then:
omarchy-neonfx-applyThe menu extension duplicates upstream Omarchy's show_style_menu — diff against Omarchy when updating.
Unit and E2E tests use bats and a fake $HOME. They do not touch your live desktop or send signals to a running Ghostty.
./tests/run
# or: bats tests/unit tests/e2eIf bats is not installed, ./tests/run clones bats-core into tests/vendor/ (gitignored). On Ubuntu CI, the workflow installs bats and ripgrep via apt.
| Suite | What it covers |
|---|---|
tests/unit |
FX toggle/import/set, presets, shared lib/fx_config.py, menu jsonc merge, cli.env.sh → fish, Walker submenu, remove_if_ours, palette parity, hex_to_rgb |
tests/e2e |
install --skip-apply, mock omarchy-theme-set, doctor, theme-switch cleanup, uninstall safety, shader apply output |
GTK GUI and live Ghostty visuals are not in the suite (they need a display).
MIT © 2026 Pepijn Blom
