176 lines
4.6 KiB
Markdown
176 lines
4.6 KiB
Markdown
# Desktop Environments
|
|
|
|
This directory contains system-level desktop environment configurations for NixOS desktop hosts.
|
|
|
|
## Structure
|
|
|
|
```
|
|
desktops/
|
|
├── base.nix # Shared desktop settings (XDG portals, polkit, gvfs)
|
|
├── plasma.nix # KDE Plasma 6 + SDDM
|
|
├── hyprland/ # Hyprland tiling compositor
|
|
│ └── default.nix
|
|
├── gaming.nix # Steam, Proton, GameMode, gaming tools
|
|
├── apps/ # Desktop applications
|
|
│ ├── browsers.nix # Brave, Zen Browser
|
|
│ └── terminals.nix # Alacritty (Dracula theme)
|
|
├── themes/ # Theme configurations
|
|
│ ├── catppuccin.nix # Catppuccin GTK/Qt theme
|
|
│ └── default.nix # Adwaita default theme
|
|
└── hardware-configuration.nix # Hardware-specific settings (generated)
|
|
```
|
|
|
|
## Available Desktop Environments
|
|
|
|
### KDE Plasma 6 (`plasma.nix`)
|
|
- Full-featured desktop with SDDM display manager
|
|
- Wayland-first with X11 fallback
|
|
- Includes essential KDE applications (commented out by default)
|
|
- User-level Plasma configuration via Home Manager (optional)
|
|
|
|
### Hyprland (`hyprland/default.nix`)
|
|
- Dynamic tiling Wayland compositor
|
|
- Minimal default keybinds (SUPER key)
|
|
- Includes Wayland utilities: wl-clipboard, grim, slurp
|
|
- User-level configuration for keybinds, visual settings
|
|
|
|
## Additional Modules
|
|
|
|
### Gaming (`gaming.nix`)
|
|
**Features:**
|
|
- Steam with Proton GE compatibility
|
|
- GameMode for performance optimization
|
|
- 32-bit graphics support for games
|
|
- Wine, Winetricks, Lutris, Heroic launcher
|
|
- MangoHud for FPS overlay
|
|
- Discord for communication
|
|
- Increased inotify watchers for modding tools
|
|
|
|
### Apps (`apps/`)
|
|
**Browsers** (`browsers.nix`):
|
|
- Brave, Zen Browser (enabled by default)
|
|
|
|
**Terminals** (`terminals.nix`):
|
|
- Alacritty enabled with JetBrains Mono + Dracula theme
|
|
- Kitty and WezTerm explicitly disabled to keep a single default
|
|
|
|
### Themes (`themes/`)
|
|
**Catppuccin** (`catppuccin.nix`):
|
|
- Soothing pastel theme for GTK and Qt
|
|
- Mocha variant with blue accents
|
|
- Kvantum Qt theme engine
|
|
- Papirus icon theme
|
|
- Catppuccin cursor theme
|
|
|
|
**Default** (`default.nix`):
|
|
- Adwaita theme (GNOME default)
|
|
- Minimal theming setup
|
|
|
|
## Usage
|
|
|
|
### Single Desktop Environment
|
|
|
|
Import one desktop environment in your host configuration:
|
|
|
|
```nix
|
|
# modules/nixos/hosts/your-host.nix
|
|
{
|
|
imports = [
|
|
../desktops/plasma.nix
|
|
# OR
|
|
# ../desktops/hyprland
|
|
];
|
|
}
|
|
```
|
|
|
|
### Multi-Desktop Setup (Switch at Login)
|
|
|
|
The current desktop host uses both KDE Plasma (for gaming) and Hyprland (for development):
|
|
|
|
```nix
|
|
# modules/nixos/hosts/desktop.nix
|
|
{
|
|
imports = [
|
|
# Hardware
|
|
../desktops/hardware-configuration.nix
|
|
|
|
# Desktop Environments
|
|
../desktops/plasma.nix # KDE Plasma (for gaming)
|
|
../desktops/hyprland # Hyprland (for development)
|
|
|
|
# Desktop Apps & Theme
|
|
../desktops/apps/browsers.nix
|
|
../desktops/apps/terminals.nix
|
|
../desktops/themes/catppuccin.nix
|
|
|
|
# Gaming & Features
|
|
../desktops/gaming.nix
|
|
../bluetooth.nix
|
|
];
|
|
|
|
boot = {
|
|
loader.systemd-boot.enable = true;
|
|
loader.efi.canTouchEfiVariables = true;
|
|
kernelPackages = pkgs.linuxPackages_cachyos-lts;
|
|
};
|
|
|
|
networking.hostName = "desktop";
|
|
system.stateVersion = "24.05";
|
|
}
|
|
```
|
|
|
|
**Boot Configuration:**
|
|
- CachyOS LTS kernel for gaming performance
|
|
- Systemd-boot for EFI boot management
|
|
|
|
**Switch Desktop at Login:**
|
|
- SDDM login screen shows both Plasma and Hyprland sessions
|
|
- Select desired environment before logging in
|
|
|
|
## Base Desktop Settings (`base.nix`)
|
|
|
|
Shared settings imported by all desktop environments:
|
|
|
|
- **XDG Portals**: Desktop integration, file picker, screen sharing
|
|
- **PolicyKit**: Privilege escalation for GUI apps
|
|
- **GVFS**: Trash, mounting, network drives
|
|
- **Common Packages**: pavucontrol, networkmanagerapplet
|
|
|
|
## Adding a New Desktop Environment
|
|
|
|
1. Create a new file (e.g., `gnome.nix`)
|
|
2. Import `./base.nix` for shared settings
|
|
3. Enable the desktop environment and display manager
|
|
4. Add essential system packages
|
|
5. Configure user-level settings via Home Manager
|
|
|
|
Example:
|
|
|
|
```nix
|
|
{ lib, pkgs, user, ... }: {
|
|
imports = [ ./base.nix ];
|
|
|
|
services.xserver = {
|
|
enable = true;
|
|
desktopManager.gnome.enable = true;
|
|
displayManager.gdm.enable = true;
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
gnome-tweaks
|
|
];
|
|
}
|
|
```
|
|
|
|
## Testing Desktop Changes
|
|
|
|
```bash
|
|
# Dry-run to check closure
|
|
nix build .#nixosConfigurations.desktop.config.system.build.toplevel --dry-run
|
|
|
|
# Build and switch
|
|
sudo nixos-rebuild switch --flake .#desktop
|
|
|
|
# Format before committing
|
|
nix fmt
|
|
```
|