Switch desktop environment from Hyprland to Budgie; app/audio overhaul

Hyprland problems prompted a full switch to Budgie (X11, lightdm).
Removes every Hyprland/Quickshell dotfile, theming script, and
hypr-specific module (theme.nix, the whole scripts/ theming pipeline,
hyprland.conf/hyprpaper.conf, the Quickshell shell QML, kitty/mako/
rofi configs) in favor of Budgie's own panel/session/theming and a
GSettings-driven icon/cursor override.

App changes:
- Konsole/Dolphin replace kitty/Thunar as the default terminal and
  file manager; dropped xterm too (services.xserver.excludePackages)
- Added Okular (PDF/document viewer), KCalc (calculator), Elisa
  (audio player) -- nothing filled those roles before
- Added OBS Studio

Audio/voice:
- EasyEffects for real-time mic/output effects (creates its own
  selectable "Easy Effects Source" virtual mic automatically)
- A standalone "Virtual Microphone" PipeWire device (loopback module,
  services.pipewire.extraConfig), fully independent of the real mic,
  for routing EasyEffects/Soundux output separately from what Discord
  etc. use by default
- qpwgraph for manual patchbay routing into the above
- Soundux (soundboard) installed via Flatpak -- no longer packaged in
  this nixpkgs channel

default-apps.nix: Okular wired into mimeapps.list alongside the
existing Gwenview/Ark defaults; removed the Thunar-specific
"Open Terminal Here" custom-action tmpfiles rule (dead now that
Thunar's gone -- Dolphin gets the same via its built-in konsolepart
terminal panel for free).
This commit is contained in:
Nexoniarz 2026-09-04 18:37:42 +02:00
commit d332ed2ef6
45 changed files with 105 additions and 7711 deletions

View file

@ -1,101 +1,41 @@
{ config, pkgs, ... }:
{
# --- Hyprland: Wayland compositor ---
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
# --- greetd + tuigreet: minimal TUI login manager, launches Hyprland directly ---
services.greetd = {
enable = true;
settings.default_session = {
# start-hyprland, not the raw Hyprland binary: it's Hyprland's own
# watchdog-wrapped launcher (ships alongside Hyprland in the same
# package) that also auto-restarts the compositor if it hangs.
# Launching the raw binary directly works but logs a startup warning
# ("Hyprland is being launched without start-hyprland. This is highly
# advised against.") and skips that recovery.
command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --remember-session --cmd start-hyprland";
user = "greeter";
};
};
# --- XDG portals: screen share, file pickers, etc. ---
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk ];
config.common.default = [ "hyprland" "gtk" ];
};
# --- Budgie: X11 desktop environment, lightdm login manager ---
services.xserver.enable = true;
services.xserver.displayManager.lightdm.enable = true;
services.desktopManager.budgie.enable = true;
security.polkit.enable = true;
# Keyboard layout for console/XWayland/greetd; Hyprland's own input block
# in hyprland/hyprland.conf mirrors this.
# Keyboard layout for console/X11/lightdm
services.xserver.xkb = {
layout = "pl";
variant = "";
};
# Thunar: thumbnails, trash/volume mount integration, settings storage
# Thumbnails + trash/volume mount integration for Dolphin and Budgie's
# default Nemo file manager alike.
services.tumbler.enable = true;
services.gvfs.enable = true;
programs.xfconf.enable = true;
# Native Wayland backend for Electron/Chromium-based apps
environment.sessionVariables.NIXOS_OZONE_WL = "1";
# Drop the xterm fallback terminal xserver.nix installs unconditionally —
# Konsole is the real terminal here.
services.xserver.excludePackages = [ pkgs.xterm ];
# --- Dotfiles: symlink tracked configs into the user's home ---
# Editing /etc/nixos/hyprland or /etc/nixos/dotfiles takes effect on the
# next reload of the respective app (no rebuild needed for config-only
# tweaks; a rebuild re-runs the symlink if the target path itself changes).
systemd.tmpfiles.rules = [
"d /home/nexoniarz/.config/hypr 0755 nexoniarz users -"
"L+ /home/nexoniarz/.config/hypr/hyprland.conf - - - - /etc/nixos/hyprland/hyprland.conf"
"L+ /home/nexoniarz/.config/hypr/hyprpaper.conf - - - - /etc/nixos/hyprland/hyprpaper.conf"
"d /home/nexoniarz/.config/kitty 0755 nexoniarz users -"
"L+ /home/nexoniarz/.config/kitty/kitty.conf - - - - /etc/nixos/dotfiles/kitty/kitty.conf"
# Colors set live via the Quickshell Theme picker — see kitty.conf's
# `include theme.conf`. Empty by default; kitty-theme-set writes to it.
"f /home/nexoniarz/.config/kitty/theme.conf 0644 nexoniarz users - -"
"d /home/nexoniarz/.config/rofi 0755 nexoniarz users -"
"L+ /home/nexoniarz/.config/rofi/config.rasi - - - - /etc/nixos/dotfiles/rofi/config.rasi"
# Colors set live via the Quickshell Theme picker — see config.rasi's
# `@import "theme.rasi"`. Empty by default; rofi-theme-set writes to it.
"f /home/nexoniarz/.config/rofi/theme.rasi 0644 nexoniarz users - -"
"d /home/nexoniarz/.config/mako 0755 nexoniarz users -"
"L+ /home/nexoniarz/.config/mako/config - - - - /etc/nixos/dotfiles/mako/config"
# Quickshell is multi-file with relative imports, so the whole directory
# is symlinked rather than a single file.
"L+ /home/nexoniarz/.config/quickshell - - - - /etc/nixos/dotfiles/quickshell"
# $HOME/Wallpapers, not $HOME/Pictures/Wallpapers — this system's locale
# (pl_PL) means the real XDG Pictures dir is ~/Obrazy, not ~/Pictures.
# Living directly under $HOME sidesteps that entirely.
"d /home/nexoniarz/Wallpapers 0755 nexoniarz users -"
"d /home/nexoniarz/Screenshots 0755 nexoniarz users -"
# User-editable cursor theme choice (set live via the Quickshell cursor
# picker) — created empty if missing, never overwritten if it already
# has content, since it's runtime state rather than tracked config.
"f /home/nexoniarz/.config/hypr/cursor.conf 0644 nexoniarz users - -"
# Same deal for display settings (mode/scale/transform per monitor,
# set via the Quickshell display picker) — without this file backing
# them, they only ever applied live via hyprctl and got silently
# reset by hyprland.conf's generic fallback monitor rule any time
# Hyprland re-evaluated monitor state.
"f /home/nexoniarz/.config/hypr/display.conf 0644 nexoniarz users - -"
# Same deal for window border colors (accent/border, set live via the
# Quickshell Theme picker) — without this file, they only ever applied
# via hyprctl and would fall back to hyprland.conf's own general{}
# defaults any time Hyprland re-evaluated its config.
"f /home/nexoniarz/.config/hypr/theme.conf 0644 nexoniarz users - -"
# GTK/Qt themselves stay at their stock defaults (no forced dark mode, no
# custom CSS) — only the icon and cursor theme are picked explicitly, via
# Budgie's own GSettings-override hook rather than a custom script.
# (extraGSettingsOverridePackages is for packages that ship their own
# gsettings-schema overrides, e.g. plugins — not theme packages, which
# just need to be on the system path for their icons/cursors to resolve.)
environment.systemPackages = [
pkgs.gruvbox-plus-icons
pkgs.bibata-cursors
];
services.desktopManager.budgie.extraGSettingsOverrides = ''
[org.gnome.desktop.interface]
icon-theme='Gruvbox-Plus-Dark'
cursor-theme='Bibata-Modern-Classic'
'';
}