# kusanagi-only desktop extras. The shared niri/dark/audio/firefox base comes # from ../../profiles/desktop.nix (imported in ./default.nix); this file holds # a few GNOME apps (no GNOME session), printing/scanning, pro-audio, richer # fonts, and cursor theme. (Hardware-specific audio/NAS/server config lives in # ./default.nix.) { pkgs, ... }: { # --- GNOME apps without the GNOME session --- # We run niri, not GNOME, so the full `services.desktopManager.gnome` isn't # enabled: it dragged in gnome-shell, GDM, an X server, and — the reason this # went away — ibus, whose XDG autostart fired `ibus-daemon` under niri and # popped the "IBus has been started" notification on every login. Instead we # install just the GNOME apps we use (see systemPackages below) and enable # gvfs so Nautilus keeps trash, network shares, and removable-media mounting. # dconf (needed for their gsettings) comes from the shared desktop profile. services.gvfs.enable = true; # --- Printing / discovery / disks --- services.printing = { enable = true; drivers = with pkgs; [ gutenprint ]; }; # prevent auto-mounting optical disks services.udisks2.enable = true; # --- Pro audio (extends the shared pipewire base) --- security.rtkit.enable = true; services.pipewire = { alsa.support32Bit = true; jack.enable = true; wireplumber.enable = true; }; # --- GPG: forward the ssh-agent socket (workstation signs/auths via GPG) --- programs.gnupg.agent.enableSSHSupport = true; # --- Graphics: 32-bit for Steam/Wine --- hardware.graphics.enable32Bit = true; # --- Fonts: workstation extras + defaults (base packages from shared) --- fonts = { packages = with pkgs; [ noto-fonts-cjk-sans noto-fonts-cjk-serif inter ibm-plex public-sans ]; fontconfig = { defaultFonts = { monospace = [ "Berkeley Mono" "Liberation Mono" "Symbols Nerd Font" ]; sansSerif = [ "Liberation Sans" "Noto Sans" ]; serif = [ "Liberation Serif" ]; emoji = [ "Nerd Font Symbols Only" ]; }; # Force ui-sans-serif and system-ui to resolve correctly localConf = '' system-ui Liberation Sans ui-sans-serif Liberation Sans ''; }; fontDir.enable = true; }; # --- Renderer --- # (Cursor theme is shared — see ../../profiles/desktop.nix.) environment.sessionVariables = { GSK_RENDERER = "gl"; }; # --- User: desktop groups (niri essentials + printing). Hardware groups # (cdrom/optical/sg/scanner) stay in ./default.nix. --- users.users.henz.extraGroups = [ "audio" "lp" "input" ]; # --- Desktop tools specific to kusanagi (shared ones come from the profile) --- environment.systemPackages = with pkgs; [ waybar networkmanagerapplet # TODO: remove and combine network admin between machines xwayland-satellite # run X11 apps under niri # GNOME apps we use standalone (no GNOME session; see gvfs note above). # TODO: replace GNOME apps nautilus # file manager loupe # image viewer ]; # --- Bar + wallpaper (was spawn-at-startup in the shared niri config.kdl) --- # The bar and wallpaper differ per host, so they live in nixos-config rather # than the stowed niri config. Long-running user services bound to # graphical-session.target (the target niri-session activates). # NOTE: there's no waybar package in the dotfiles repo yet, so this starts # default waybar; styling/modules are a separate follow-up. systemd.user.services.waybar = { description = "waybar status bar"; wantedBy = [ "graphical-session.target" ]; partOf = [ "graphical-session.target" ]; after = [ "graphical-session.target" ]; serviceConfig = { ExecStart = "${pkgs.waybar}/bin/waybar"; Restart = "on-failure"; }; }; systemd.user.services.swaybg = { description = "swaybg wallpaper"; wantedBy = [ "graphical-session.target" ]; partOf = [ "graphical-session.target" ]; after = [ "graphical-session.target" ]; serviceConfig = { ExecStart = "${pkgs.swaybg}/bin/swaybg --image '/home/henz/resources/photography/nasa/55196710272_1289069236_o.jpg' --mode fill"; Restart = "on-failure"; }; }; }