My niri-noctalia setup
Find a file
2026-10-16 11:35:35 +04:00
dbus-1/services fix(desktop): route file manager activation to Dolphin 2026-10-12 14:44:53 +04:00
environment.d feat(install): link Qt environment configuration 2026-10-04 02:56:10 +04:00
keyd fix(input): enable Win-tap overview and restore Fn controls and mute light 2026-09-28 00:06:32 +04:00
kitty chore: update desktop shortcuts and application defaults 2026-10-12 14:37:52 +04:00
kvantum fix(niri): float overwrite prompts and update Kvantum theme 2026-10-04 02:55:07 +04:00
niri 2026-10-16 11:35:35 +04:00
noctalia feat(vscodium): make terminal ANSI opacity configurable 2026-10-07 00:12:42 +04:00
pipewire feat(audio): track custom PipeWire configs 2026-10-04 03:40:49 +04:00
prismlauncher/iconthemes/prism-papirus fix(prism): use Papirus Dark with Flat White icons 2026-10-12 14:38:32 +04:00
scripts feat(desktop): add file manager settings apply helper 2026-10-12 14:56:36 +04:00
systemd feat: inhibit suspend during active downloads 2026-10-07 11:42:47 +04:00
.gitmodules feat(kvantum): track theme and install symlinks 2026-10-04 02:00:37 +04:00
install.sh feat(desktop): add file manager settings apply helper 2026-10-12 14:56:36 +04:00
mimeapps.list 2026-10-16 11:35:35 +04:00
README.md feat(desktop): add file manager settings apply helper 2026-10-12 14:56:36 +04:00

Desktop configuration

This repository tracks the installed desktop configuration. Change and validate the tracked files before applying them; use Git history for rollback.

Run ./install.sh --dry-run to preview, then ./install.sh to install. The installer replaces the files below with symlinks into this checkout, installs the F1 mute-light helper as ~/.local/bin/rice-sync-mute-led, and enables keyd, the mute-light service, and the download suspend inhibitor. Use --user-only to skip system changes. Run it as your normal user; it uses sudo for keyd and the suspend delay. Keep the checkout in place.

Required commands: niri, noctalia, keyd, kitty, wl-copy, notify-send, jq, python3, wpctl, pactl, busctl, systemctl, systemd-inhibit, git, xdg-mime, and sudo. Existing applications, wallpapers, fonts, and cursor assets must already be installed.

Tracked file Installed location
niri/config.kdl ~/.config/niri/config.kdl
niri/conf.d ~/.config/niri/conf.d
niri/scripts/close-hovered-window.sh ~/.config/niri/scripts/close-hovered-window.sh
noctalia/settings.toml ~/.config/noctalia/rice.toml
environment.d/qt.conf ~/.config/environment.d/qt.conf
pipewire/pipewire.conf.d/99-hifi.conf ~/.config/pipewire/pipewire.conf.d/99-hifi.conf
pipewire/pipewire-pulse.conf.d/pipewire.conf ~/.config/pipewire/pipewire-pulse.conf.d/pipewire.conf
kitty/kitty.conf ~/.config/kitty/kitty.conf
kitty/copy.sh ~/.config/kitty/copy.sh
kitty/clean-copy.sh ~/.config/kitty/clean-copy.sh
kvantum/kvantum.kvconfig ~/.config/Kvantum/kvantum.kvconfig
kvantum/Kvantum-Tokyo-Night submodule's theme directory ~/.config/Kvantum/Kvantum-Tokyo-Night
noctalia/templates/vscodium-alpha.json ~/.config/noctalia/templates/vscodium-alpha.json
scripts/patch-vscodium-theme.py ~/.local/bin/rice-patch-vscodium-theme
scripts/inhibit-on-download ~/.local/bin/inhibit-on-download
scripts/apply-file-manager ~/.local/bin/rice-apply-file-manager
mimeapps.list ~/.config/mimeapps.list
prismlauncher/iconthemes/prism-papirus/index.theme ~/.local/share/PrismLauncher/iconthemes/prism-papirus/index.theme
dbus-1/services/org.freedesktop.FileManager1.service ~/.local/share/dbus-1/services/org.freedesktop.FileManager1.service
keyd/default.conf /etc/keyd/default.conf
systemd/user/mute-led.service ~/.config/systemd/user/mute-led.service
systemd/user/inhibit-on-download.service ~/.config/systemd/user/inhibit-on-download.service
systemd/system/systemd-suspend.service.d/lockscreen-delay.conf /etc/systemd/system/systemd-suspend.service.d/lockscreen-delay.conf
systemd/user/plasma-xdg-desktop-portal-kde.service.d/override.conf ~/.config/systemd/user/plasma-xdg-desktop-portal-kde.service.d/override.conf

Noctalia rewrites ~/.local/state/noctalia/settings.toml when settings change through the UI, so the installer links the declarative config instead. Existing GUI overrides are preserved and take precedence over the tracked settings.

The installer initializes the HTTPS Kvantum submodule when needed, then links the theme directory and selection config. It backs up an existing theme directory as ~/.config/Kvantum/.Kvantum-Tokyo-Night.rice-backup before linking it.

Matching Discord theme: DiscordTokyoNightTransparent.

Prism Launcher's Prism + Papirus Dark icon theme inherits Papirus-Dark first, then its built-in flat_white theme. This gives file dialogs visible icons and supplies Prism-specific icons from Flat (White). Papirus must already be installed. After installation, restart Prism and select Prism + Papirus Dark under Settings → Launcher → Appearance → Icons. The installer respects XDG_DATA_HOME and only links the icon theme; it does not replace Prism's application settings. This fixes icon contrast, not KDE file picker integration.

The D-Bus org.freedesktop.FileManager1 activation override points apps that request “show in folder” (including browsers and launchers) to Dolphin. Some systems ship the same well-known service name with Nautilus as its executable; the user service file overrides that system registration.

To change the file manager, edit inode/directory under [Default Applications] in mimeapps.list and Exec in dbus-1/services/org.freedesktop.FileManager1.service. Dolphin uses org.kde.dolphin.desktop and /usr/bin/dolphin --daemon; Nautilus uses org.gnome.Nautilus.desktop and /usr/bin/nautilus --gapplication-service. Then run rice-apply-file-manager (or ./scripts/apply-file-manager before installation). It applies the MIME default, links the D-Bus override, reloads D-Bus activation files, and restarts xdg-desktop-portal so an already-running portal picks up the new default. The installer also refreshes both services. A previous file manager that still owns FileManager1 must quit before the new activation command can take effect; the helper does not close its windows.

Kitty reads colors from ~/.config/kitty/themes/noctalia.conf, which Noctalia generates. The installer links Kitty's main config and copy helpers while leaving the generated color file in place.

The VSCodium opacity template runs after the community VSCode template. Its synchronous post-hook patches every installed noctalia.noctaliatheme-* variant, preserving generated RGB colors and capping all background tokens at A6 alpha. _terminalAnsiAlpha separately caps the 16 terminal ANSI palette colors at A6. Change that one value to tune colored terminal cells; the same palette also colors ANSI foreground text. The base terminal.background remains fully transparent. VSCodium's GPU-accelerated terminal renderer draws colored cells opaque despite their alpha values, so disable it in ~/.config/VSCodium/User/settings.json with "terminal.integrated.gpuAcceleration": "off" for these colors to work. Already translucent highlights stay at their lower opacity. Popup and context menu surfaces use FF so they remain opaque without compositor blur. Explicit entries use 80 for inactive title/tabs and B3 for the active tab. Missing tokens use the overlay's current palette color. Edit noctalia/templates/vscodium-alpha.json to change opacity; keep the VSCode community template enabled in Noctalia. Reapply with noctalia msg templates-apply.

mimeapps.list assigns both plain text and empty files to VSCodium: xdg-open identifies an empty config as inode/x-empty, while GIO uses application/x-zerosize. Without an empty-file association, xdg-open can fall back to a browser. Apply the tracked associations with install -m 600 mimeapps.list ~/.config/mimeapps.list.

Keyd sends F24 when Win is tapped and keeps Win as a modifier when held. Niri maps F24 to its overview. Fn brightness, volume, and media shortcuts use Noctalia. The user service updates the F1 light from the default output's mute state, including USB audio devices, through logind.

The download monitor checks incoming bytes on non-loopback network interfaces once per second. It blocks suspend above 64 KiB/s and releases the block 30 seconds after traffic drops. This is a traffic heuristic, so streaming and other sustained incoming traffic also keep the machine awake.

The systemd suspend drop-in waits two seconds before freezing the user session, giving Noctalia's lock animation time to finish. Install it separately with sudo bash scripts/install-suspend-delay.sh if the rest of the setup is already linked.