dotfiles/DESKTOP-SETUP.md

3 KiB

Desktop Setup Guide

This guide explains how to add desktop configurations to your NixOS system.

Architecture

Desktop configuration is split into 3 layers:

Layer 1: Base Infrastructure (modules/nixos/*.nix)

Hardware support that all desktops need:

  • audio.nix - PipeWire audio stack
  • bluetooth.nix - Bluetooth support
  • graphics.nix - OpenGL/Vulkan acceleration
  • fonts.nix - System fonts

Layer 2: Desktop Environments (modules/nixos/desktops/)

System-level DE/WM configuration:

  • hyprland.nix - Hyprland compositor
  • plasma.nix - KDE Plasma 6
  • niri.nix - Niri compositor
  • base.nix - Shared DE settings

Layer 3: User Configuration (modules/home/rsydn/desktop/)

Home Manager user-level configs:

  • base.nix - GTK/Qt theming
  • apps/ - GUI application configs
  • wayland/ - Compositor user configs
  • themes/ - Theme configurations

Quick Start

1. Update flake.nix

Add a new host configuration:

nixosConfigurations.my-desktop = nixpkgs.lib.nixosSystem {
  system = "x86_64-linux";
  modules = [
    ./modules/nixos/system.nix
    ./modules/nixos/hosts/desktop-dev.nix  # Your host config
    home-manager.nixosModules.home-manager {
      home-manager.users.rsydn = import ./modules/nixos/home/desktop.nix;
    }
  ];
};

2. Update modules/nixos/system.nix

Add desktop infrastructure imports:

{ lib, ... }: {
  imports = [
    ./users.nix
    ./network.nix
    ./ssh.nix
    ./containerization.nix
    # Add these for desktop:
    ./audio.nix
    ./bluetooth.nix
    ./graphics.nix
    ./fonts.nix
  ];
  # ... rest of config
}

3. Customize Host Configuration

Copy and modify modules/nixos/hosts/desktop-dev.nix:

  • Set hostname
  • Choose desktop environment (import from desktops/)
  • Add hardware-specific settings (GPU drivers, etc.)

4. Enable Compositor in Home Manager

Edit modules/home/rsydn/desktop/wayland/default.nix:

imports = [
  ./hyprland  # Uncomment the compositor you want
  # ./niri
];

5. Build and Switch

# Check configuration
nix flake check

# Build
sudo nixos-rebuild switch --flake .#my-desktop

Examples

Hyprland Development Workstation

  1. Host imports desktops/hyprland.nix
  2. Home Manager imports desktop/wayland/hyprland
  3. Customize keybinds in desktop/wayland/hyprland/default.nix

KDE Plasma Gaming Rig

  1. Host imports desktops/plasma.nix
  2. Home Manager imports desktop/base.nix only
  3. Enable Steam in host config
  4. Add gaming packages

Ricing Guide

All customization should happen in Layer 3 (modules/home/rsydn/desktop/):

  1. Themes: Add theme files in desktop/themes/
  2. Compositor styling: Edit desktop/wayland/{hyprland,niri}/
  3. Application configs: Edit desktop/apps/
  4. Keep Layer 1 & 2 minimal - they provide functionality, not aesthetics

Switching Desktop Environments

Simply change the import in your host config:

# Before
imports = [ ../desktops/hyprland.nix ];

# After
imports = [ ../desktops/plasma.nix ];

Then rebuild your system.