~ Hyprland + Noctalia dotfiles ~
Personal desktop config for a dual-monitor CachyOS / Arch laptop. Window management is Hyprland; the bar, launcher, notifications, and floating desktop widgets are Noctalia Shell on Quickshell (qs -c noctalia-shell).
Configs are GNU Stow packages. ./stow.sh links them into $HOME (nvim, hypr, fish, …). It does not install software.
| Piece | Choice |
|---|---|
| Distro | CachyOS (Arch) |
| WM | Hyprland 0.56.x |
| Shell UI | Noctalia Shell via Quickshell |
| Terminal | Kitty (Alacritty also present) |
| Font (terminal) | CaskaydiaCove Nerd Font (ttf-cascadia-code-nerd), size 12.5, opacity 0.88 |
| Editor | Neovim — Kickstart-based, tokyonight-night |
| Shell | Fish |
| Fetch | macchina (Fish greeting) |
| TTY clock | peaclock |
| File manager | Dolphin |
| Wallpaper | Hyprpaper |
| Lock / idle | hyprlock + hypridle |
| Theming | Matugen + Noctalia color pipeline |
| Launcher | Noctalia IPC (Super+Space) / Fuzzel config kept |
| Screenshots | Flameshot + grim/slurp OCR bind |
Not used anymore: i3, niri, Hyprpanel (legacy package hyprpanel/; ./stow.sh -a to link it).
Configured in hypr/.config/hypr/hyprland.conf (linked to ~/.config/hypr by Stow):
| Output | Role | Mode | Position |
|---|---|---|---|
eDP-1 |
Laptop | 1920×1080@60 |
0×0 |
HDMI-A-1 |
External / TV | 1920×1080@60 |
1920×0 (right of laptop) |
Desktop widgets live mostly on eDP-1. HDMI holds decorative custom stickers (images under assets/stickers/).
Change monitor lines if your outputs or Hz differ — widget coordinates assume this layout.
dots/
├── stow.sh # link packages into $HOME (no installs)
├── nvim/.config/nvim/
├── hypr/.config/hypr/ # Hyprland + paper/lock/idle + scripts/shaders
├── noctalia/.config/noctalia/
├── kitty/.config/kitty/
├── alacritty/.config/alacritty/
├── fish/.config/fish/
├── fuzzel/.config/fuzzel/
├── matugen/.config/matugen/
├── btop/.config/btop/
├── micro/.config/micro/
├── hyprpanel/.config/hyprpanel/ # unused legacy bar
├── fonts/.fonts/
├── wallpaper/.wallpaper/
│ ├── edp/b-660.jpg # hyprpaper → eDP-1
│ └── hdmi/b-1110.jpg # hyprpaper → HDMI-A-1
└── assets/
├── demo-*.png
└── stickers/ # Noctalia custom-sticker images (HDMI)
Needs only GNU Stow. Does not install Hyprland, Neovim, or anything else.
./stow.sh # nvim, hypr, fish, kitty, noctalia, fonts, wallpaper, …
./stow.sh nvim # one package
./stow.sh -R # restow
./stow.sh -D nvim # remove nvim links
./stow.sh -n # dry run
./stow.sh -a # also link legacy hyprpanelStow folds into an existing ~/.config directory:
~/.config/nvim → …/dots/nvim/.config/nvim
~/.config/hypr → …/dots/hypr/.config/hypr
~/.fonts → …/dots/fonts/.fonts
~/.wallpaper → …/dots/wallpaper/.wallpaper
Autostart
exec-once = touch /tmp/hypr_grayscale_active
exec-once = qs -c noctalia-shellThe desktop boots in grayscale. Two things make that stick:
decoration:screen_shaderpoints at.config/hypr/shaders/grayscale.glslinhyprland.confexec-once = touch /tmp/hypr_grayscale_activecreates the state file the toggle script expects, so the firstSuper+Gturns color on (shader off), and the next press returns to grayscale
| Shader | .config/hypr/shaders/grayscale.glsl |
| State file | /tmp/hypr_grayscale_active (present = grayscale on) |
| Toggle | Super + G → .config/hypr/scripts/toggle_grayscale.sh |
| Default at login | Grayscale enabled |
To start in color instead: remove the screen_shader line and the touch /tmp/hypr_grayscale_active exec-once (or invert the script logic).
Extra pieces under hypr/.config/hypr/:
| File / dir | Purpose |
|---|---|
hyprland.conf |
Monitors, binds, look & feel |
hyprpaper.conf |
Per-monitor walls (edp/ + hdmi/) |
hyprlock.conf |
Lock screen |
hypridle.conf |
Idle / DPMS |
colors.conf |
Shared colors |
shaders/ |
e.g. grayscale shader |
scripts/ |
grayscale toggle, focus mode, battery, ollama helpers, project manager |
Runtime: Quickshell, config name noctalia-shell.
| File | Role |
|---|---|
settings.json |
Desktop widget placement, bar, theming, per-monitor layout |
plugins.json |
Which plugins are enabled |
plugins/<id>/ |
Plugin code (DesktopWidget.qml, manifests, settings UIs) |
colors.json / colorschemes/ |
Color state |
config.toml |
Leftover / experimental bits (v5 era) — not the active shell path |
Reload Noctalia from the session menu when plugins change. Prefer that over pkill qs so the bar comes back cleanly.
Floating cards on eDP-1, mostly transparent (showBackground: false):
Network / identity
- Link status, network indicator, latency, public IP, DNS, Tailscale status + mesh, SSH sessions, uplink / bandwidth-by-process, open ports, conntrack remotes, socket world map (GeoIP)
Ops / security
- Failed systemd units, journal errors, nftables/firewall summary, auth failures, NIC errors, OOM kills, watched dev ports
Compute
- PSI pressure, TCP health, NVIDIA RTX 4050, AMD 760M, memory/swap, CPU clocks/load, thermals, Docker health, Ollama
Feeds
- RSS (add URLs in widget settings; click to open; expand for full list)
- X / Twitter via
bird+ Chrome cookies (handle list in settings; cached + rate-limit aware) - Reddit (subreddit list in settings; Atom RSS; cached + rate-limit aware)
Notes
- Obsidian vaults (from
~/.config/obsidian/obsidian.json; click opens viaobsidian://)
HDMI
custom-stickerimages fromassets/stickers/- News Globe — 3D Earth with news pins + ISS orbit trail; toggle Quakes / ADS-B layers on the globe
- Solar System — tiny live heliocentric planet disk (HDMI corner)
Community / utility plugins also installed (world-clock, catwalk, visualizer, hot-corners, battery-monitor-plus, …). Enable flags live in plugins.json.
- RSS: Python fetcher in
plugins/rss-feeds/fetch.py - Twitter:
plugins/twitter-feeds/fetch.pycalls~/.npm-global/bin/bird; needs you logged into x.com in Chrome; rotates accounts to avoid HTTP 429 - Reddit:
plugins/reddit-feeds/fetch.pyhitsreddit.com/r/<sub>/hot/.rss; rotates subs; caches under~/.cache/noctalia/reddit-feeds-cache.json(defaults: MachineLearning, deeplearning, computervision, LocalLLaMA) - Obsidian:
plugins/obsidian-vaults/reads vault list fromobsidian.json; opens withobsidian://open?path=… - News Globe:
plugins/news-globe/— 3D sphere; news pins; ISS full-orbit trail; toggleable Quakes (USGS) + ADS-B (OpenSky)
Greeting runs macchina (not fastfetch / neofetch). On a Linux TTY, the clock is peaclock (peaclock from a console).
Overrides at the bottom of .config/kitty/kitty.conf (after Noctalia theme includes):
font_family CaskaydiaCove Nerd Font
font_size 12.5
background_opacity 0.88
dynamic_background_opacity yes
window_padding_width 8Package: ttf-cascadia-code-nerd. Reload with Ctrl+Shift+F5 or a new window.
Kickstart-style config in nvim/.config/nvim/.
- Colorscheme:
tokyonight-night - Leader:
Space - Nerd Font assumed (
vim.g.have_nerd_font = true)
$mainMod = Super. Source of truth: hypr/.config/hypr/hyprland.conf.
| Bind | Action |
|---|---|
Super + Q |
Kitty |
Super + C |
Kill active window |
Super + M |
Exit Hyprland |
Super + E |
Dolphin |
Super + Space |
Noctalia launcher |
Super + R |
Noctalia clipboard launcher |
Super + V |
Toggle floating |
Super + P |
Float + pin |
Super + G |
Toggle grayscale (default: on at login) |
Super + F |
Focus mode — hide top bar + desktop widgets |
Super + Z |
Zotero |
Super + K |
Obsidian → kaleidoscope |
Super + N |
Obsidian → nucleus |
Super + L |
Obsidian → mnemonikos |
Super + A |
Microsoft Edge |
Super + S |
Foliate |
Super + W |
Kitty → hermes |
Print / Super+Shift+S |
Flameshot GUI → clipboard |
Alt+Shift+S |
Region OCR → clipboard |
| Bind | Action |
|---|---|
Super + Arrows |
Move focus |
Super + 1…0 |
Workspace 1–10 |
Super + Shift + 1…0 |
Move window to workspace |
Super + Shift + Left/Right |
Prev / next workspace |
Super + Mouse wheel |
Cycle workspaces |
Super + LMB / RMB |
Move / resize window |
Super + Ctrl + Arrows |
Resize active window |
Volume / mute / mic / brightness / media via wpctl, brightnessctl, playerctl.
- Clone to
~/personal/dots. - Install GNU Stow, then link configs only:
./stow.sh(no other packages are installed by that script). - Separately, install at least:
- Hyprland, hyprpaper, hyprlock, hypridle
- Quickshell + Noctalia Shell
- Kitty, Fish, Neovim
ttf-cascadia-code-nerdmacchina(fetch) andpeaclock(TTY clock)- Optional: Matugen, Fuzzel, Flameshot,
bird(npm i -g @steipete/bird) for the X widget
- Set Hyprland autostart to
qs -c noctalia-shell. - Edit monitor lines and widget
x/yif your layout differs. - For stickers, keep images under
assets/stickers/— paths innoctalia/settings.jsonpoint there.
- GNU Stow for linking packages into
$HOME - Noctalia Shell + community plugins
- tokyonight.nvim
- Kickstart.nvim lineage for the Neovim base
- macchina for fetch
- peaclock for the TTY clock
- bird for X timelines




