From a5b3690f9040073c57d35db5270d378327e88e0e Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Fri, 24 Oct 2025 10:48:14 +0700 Subject: [PATCH 1/9] fix: zig nightly -> zig 0_14 --- devshells/README.md | 7 ------ devshells/zig-nightly.nix | 13 ---------- flake.lock | 25 +----------------- flake.nix | 53 +-------------------------------------- 4 files changed, 2 insertions(+), 96 deletions(-) delete mode 100644 devshells/zig-nightly.nix diff --git a/devshells/README.md b/devshells/README.md index 5e5872b..e732e31 100644 --- a/devshells/README.md +++ b/devshells/README.md @@ -107,13 +107,6 @@ nix develop .#rust - rustfmt - clippy -### `zig-nightly` (optional) -Zig nightly development (only available if zig overlay is working). - -```bash -nix develop .#zig-nightly -``` - ## Usage from Any Directory ### Option 1: Direct Path Reference diff --git a/devshells/zig-nightly.nix b/devshells/zig-nightly.nix deleted file mode 100644 index 2d7b5be..0000000 --- a/devshells/zig-nightly.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs, lib, zigPackage, ... }: - -lib.optionalAttrs (zigPackage != null) (pkgs.mkShell { - name = "zig-nightly"; - packages = [ zigPackage pkgs.zls pkgs.pkg-config pkgs.cmake pkgs.gdb ]; - shellHook = '' - mkdir -p "$PWD/.cache/zig" - export ZIG_GLOBAL_CACHE_DIR="$PWD/.cache/zig" - echo "Zig shell using ${zigPackage.pname or "zig"} ${ - zigPackage.version or "" - }" - ''; -}) diff --git a/flake.lock b/flake.lock index 53c026c..3a4f6f6 100644 --- a/flake.lock +++ b/flake.lock @@ -212,8 +212,7 @@ "home-manager": "home-manager", "nix-ai-tools": "nix-ai-tools", "nixpkgs": "nixpkgs_2", - "sops-nix": "sops-nix", - "zig-overlay": "zig-overlay" + "sops-nix": "sops-nix" } }, "sops-nix": { @@ -331,28 +330,6 @@ "type": "github" } }, - "zig-overlay": { - "inputs": { - "flake-compat": "flake-compat_2", - "flake-utils": "flake-utils_2", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1760747435, - "narHash": "sha256-wNB/W3x+or4mdNxFPNOH5/WFckNpKgFRZk7OnOsLtm0=", - "owner": "mitchellh", - "repo": "zig-overlay", - "rev": "d0f239b887b1ac736c0f3dde91bf5bf2ecf3a420", - "type": "github" - }, - "original": { - "owner": "mitchellh", - "repo": "zig-overlay", - "type": "github" - } - }, "zon2nix": { "inputs": { "nixpkgs": "nixpkgs" diff --git a/flake.nix b/flake.nix index 3c84956..4284dd9 100644 --- a/flake.nix +++ b/flake.nix @@ -17,9 +17,6 @@ sops-nix.url = "github:Mic92/sops-nix"; sops-nix.inputs.nixpkgs.follows = "nixpkgs"; - - zig-overlay.url = "github:mitchellh/zig-overlay"; - zig-overlay.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = inputs@{ self, nixpkgs, darwin, home-manager, ghostty, nix-ai-tools @@ -36,11 +33,6 @@ overlaysList = [ ghostty.overlays.default ]; - zigOverlay = if builtins.hasAttr "zig-overlay" inputs then - inputs."zig-overlay" - else - null; - mkPkgs = system: import nixpkgs { inherit system; @@ -109,49 +101,8 @@ else pkgs.python3; - # Zig overlay setup for zig-nightly shell - zigPackages = - if zigOverlay != null && builtins.hasAttr "packages" zigOverlay then - zigOverlay.packages - else - { }; - - zigCandidate = - if zigOverlay != null && system == "aarch64-darwin" then - lib.attrByPath [ system "master" "zig" ] null zigPackages - else - null; - - zigCandidateBroken = if zigCandidate != null then - if zigCandidate ? meta && zigCandidate.meta ? broken then - zigCandidate.meta.broken - else - false - else - true; - - zigFallback = pkgs.zig; - zigFallbackBroken = - if zigFallback ? meta && zigFallback.meta ? broken then - zigFallback.meta.broken - else - false; - - zigPackage = - if zigCandidate != null && zigCandidateBroken == false then - zigCandidate - else if zigFallbackBroken == false then - zigFallback - else - null; - - zlsBroken = if pkgs.zls ? meta && pkgs.zls.meta ? broken then - pkgs.zls.meta.broken - else - false; - # Common arguments passed to all devshell imports - shellArgs = { inherit pkgs lib python zigPackage; }; + shellArgs = { inherit pkgs lib python; }; # Import all devshells from devshells/ directory importShell = name: import (./devshells + "/${name}.nix") shellArgs; @@ -163,8 +114,6 @@ go = importShell "go"; web-bun = importShell "web-bun"; rust = importShell "rust"; - } // lib.optionalAttrs (zigPackage != null && zlsBroken == false) { - zig-nightly = importShell "zig-nightly"; }); formatter = forEachSystem (system: (mkPkgs system).nixfmt-classic); From 5bc78a031f94ba7c679657518d7c048cc432a39a Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Fri, 24 Oct 2025 11:08:12 +0700 Subject: [PATCH 2/9] init(release): desktop template -> desktop wip --- AGENTS.md | 18 +-- DESKTOP-SETUP.md | 132 ++++++++++++++++++ modules/home/rsydn/desktop/apps/browsers.nix | 19 +++ modules/home/rsydn/desktop/apps/terminals.nix | 28 ++++ modules/home/rsydn/desktop/base.nix | 36 +++++ modules/home/rsydn/desktop/themes/README.md | 21 +++ .../home/rsydn/desktop/wayland/default.nix | 11 ++ .../desktop/wayland/hyprland/default.nix | 46 ++++++ .../rsydn/desktop/wayland/niri/default.nix | 39 ++++++ modules/nixos/audio.nix | 14 ++ modules/nixos/bluetooth.nix | 13 ++ modules/nixos/desktops/README.md | 34 +++++ modules/nixos/desktops/base.nix | 28 ++++ modules/nixos/desktops/hyprland.nix | 31 ++++ modules/nixos/desktops/niri.nix | 28 ++++ modules/nixos/desktops/plasma.nix | 16 +++ modules/nixos/fonts.nix | 40 ++++++ modules/nixos/graphics.nix | 22 +++ modules/nixos/home/desktop.nix | 24 ++++ modules/nixos/home/gaming.nix | 32 +++++ modules/nixos/hosts/desktop-dev.nix | 42 ++++++ modules/nixos/hosts/gaming-rig.nix | 53 +++++++ 22 files changed, 716 insertions(+), 11 deletions(-) create mode 100644 DESKTOP-SETUP.md create mode 100644 modules/home/rsydn/desktop/apps/browsers.nix create mode 100644 modules/home/rsydn/desktop/apps/terminals.nix create mode 100644 modules/home/rsydn/desktop/base.nix create mode 100644 modules/home/rsydn/desktop/themes/README.md create mode 100644 modules/home/rsydn/desktop/wayland/default.nix create mode 100644 modules/home/rsydn/desktop/wayland/hyprland/default.nix create mode 100644 modules/home/rsydn/desktop/wayland/niri/default.nix create mode 100644 modules/nixos/audio.nix create mode 100644 modules/nixos/bluetooth.nix create mode 100644 modules/nixos/desktops/README.md create mode 100644 modules/nixos/desktops/base.nix create mode 100644 modules/nixos/desktops/hyprland.nix create mode 100644 modules/nixos/desktops/niri.nix create mode 100644 modules/nixos/desktops/plasma.nix create mode 100644 modules/nixos/fonts.nix create mode 100644 modules/nixos/graphics.nix create mode 100644 modules/nixos/home/desktop.nix create mode 100644 modules/nixos/home/gaming.nix create mode 100644 modules/nixos/hosts/desktop-dev.nix create mode 100644 modules/nixos/hosts/gaming-rig.nix diff --git a/AGENTS.md b/AGENTS.md index b8dfdae..5822839 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,23 +1,19 @@ # Repository Guidelines ## Project Structure & Module Organization -This flake manages both macOS (`macbook-pro`) and NixOS (`dev-vm`) hosts. `flake.nix` collects shared modules while `flake.lock` pins inputs. Platform modules live in `modules/darwin/` and `modules/nixos/`; the Linux base `system.nix` pulls in `users.nix`, `network.nix`, `ssh.nix`, and `containerization.nix`. Host overlays such as `modules/nixos/hosts/dev-vm.nix` add virtio tooling or per-machine packages. User-facing configuration sits under `modules/home/rsydn/` with `programs/`, `shell/`, and `devtools/`; Darwin layers `shell/nushell.nix` and Linux sticks to `shell/fish.nix`. Secrets remain encrypted in `secrets/*.sops.yaml` and appear at runtime under `~/.config/secrets/`. +Shared logic lives in `flake.nix`, with inputs pinned in `flake.lock`. Platform modules sit under `modules/darwin/` and `modules/nixos/`; Linux hosts compose `modules/nixos/system.nix` plus `users.nix`, `network.nix`, `ssh.nix`, and `containerization.nix`. Host-specific overlays like `modules/nixos/hosts/dev-vm.nix` supply virtualization packages, while macOS tweaks belong in `modules/darwin/hosts/`. Home Manager layers for `rsydn` are under `modules/home/rsydn/` with `programs/`, `shell/`, and `devtools/`. Secrets stay encrypted in `secrets/*.sops.yaml` and surface at runtime in `~/.config/secrets/`. -## Build, Test & Development Commands -- `nix develop` – enter the dev shell with `git`, `nixfmt-classic`, and SOPS tooling prewired. -- `nix fmt` – format every Nix file; run before committing module or overlay changes. -- `XDG_CACHE_HOME=$PWD/.cache nix flake check` – evaluate all hosts without polluting the global cache. -- `darwin-rebuild --dry-run --flake .#macbook-pro` → `darwin-rebuild switch --flake .#macbook-pro` – preview then apply macOS updates. -- `nix build .#nixosConfigurations.dev-vm.config.system.build.toplevel` – validate the Linux VM closure before switching. +## Build, Test, and Development Commands +Use `nix develop` to enter the project shell with `git`, `nixfmt-classic`, and SOPS ready. Run `nix fmt` before committing to format all Nix sources. `XDG_CACHE_HOME=$PWD/.cache nix flake check` validates every host without polluting the global cache. For macOS changes, run `darwin-rebuild --dry-run --flake .#macbook-pro` and follow with `darwin-rebuild switch --flake .#macbook-pro`. Validate the Linux VM closure via `nix build .#nixosConfigurations.dev-vm.config.system.build.toplevel`. ## Coding Style & Naming Conventions -Use two-space indentation, trailing commas, and lower-kebab filenames (e.g. `shell/nushell.nix`). Declare custom options in the `rsydn.*` namespace and prefer shared modules over ad-hoc host tweaks. +Indent with two spaces and keep trailing commas in attribute sets. Prefer lower-kebab filenames (e.g. `shell/nushell.nix`), and expose custom options under the `rsydn.*` namespace. Format Nix with `nix fmt`; avoid ad-hoc host tweaks when a shared module fits. ## Testing Guidelines -Treat `nix flake check` as mandatory gatekeeping. Capture activation output (`darwin-rebuild --dry-run`, `nix build .#nixosConfigurations.dev-vm…`) and attach summaries to reviews. Co-locate regression tests next to their modules with the `.nix` pattern. +Treat `nix flake check` as the minimum gate; capture its output for reviews. When adjusting host builds, keep dry-run transcripts (`darwin-rebuild --dry-run`, `nix build .#nixosConfigurations.dev-vm…`) to share in PRs. Co-locate regression tests next to their modules using the `.nix` pattern. ## Commit & Pull Request Guidelines -Keep commit subjects short and imperative (`add dev-vm virtualization module`) and scope each commit narrowly. PRs should list validation commands, link issues or TODOs, and include screenshots or terminal snippets when modifying prompts, Tailscale, or SSH flows. +Write imperative commit subjects such as `add dev-vm virtualization module`, and keep each commit narrowly scoped. PRs should list validation commands run, link related issues or TODOs, and attach screenshots or terminal snippets when touching prompts, Tailscale, or SSH flows. ## Security & Configuration Tips -Age keys live at `~/.config/sops/age/keys.txt`; regenerate via Home Manager if missing. Read secrets from the managed files (`open ~/.config/secrets/openai-api-key | str trim`) and scope them with `with-env`. Tailscale and OpenSSH run by default on Linux; rotate keys regularly and audit `services.tailscale.extraUpFlags` before enabling exit nodes. +Age keys live at `~/.config/sops/age/keys.txt`; regenerate via Home Manager if missing. Access secrets with `open ~/.config/secrets/ | str trim` and scope them using `with-env`. Audit `services.tailscale.extraUpFlags` before enabling exit nodes, and rotate SSH/Tailscale keys regularly. diff --git a/DESKTOP-SETUP.md b/DESKTOP-SETUP.md new file mode 100644 index 0000000..3c467e2 --- /dev/null +++ b/DESKTOP-SETUP.md @@ -0,0 +1,132 @@ +# 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: + +```nix +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: + +```nix +{ 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`: + +```nix +imports = [ + ./hyprland # Uncomment the compositor you want + # ./niri +]; +``` + +### 5. Build and Switch + +```bash +# 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: + +```nix +# Before +imports = [ ../desktops/hyprland.nix ]; + +# After +imports = [ ../desktops/plasma.nix ]; +``` + +Then rebuild your system. diff --git a/modules/home/rsydn/desktop/apps/browsers.nix b/modules/home/rsydn/desktop/apps/browsers.nix new file mode 100644 index 0000000..85003cf --- /dev/null +++ b/modules/home/rsydn/desktop/apps/browsers.nix @@ -0,0 +1,19 @@ +{ pkgs, ... }: +{ + # Browser configurations + home.packages = with pkgs; [ + firefox + # chromium + # brave + ]; + + # Firefox config (expand as needed) + # programs.firefox = { + # enable = true; + # profiles.default = { + # settings = { + # "browser.startup.homepage" = "about:home"; + # }; + # }; + # }; +} diff --git a/modules/home/rsydn/desktop/apps/terminals.nix b/modules/home/rsydn/desktop/apps/terminals.nix new file mode 100644 index 0000000..0703a46 --- /dev/null +++ b/modules/home/rsydn/desktop/apps/terminals.nix @@ -0,0 +1,28 @@ +{ pkgs, lib, ... }: +{ + # Terminal emulators + + # Kitty - GPU-accelerated terminal + programs.kitty = { + enable = lib.mkDefault false; + # theme = "Dracula"; + # settings = { + # font_family = "JetBrains Mono"; + # font_size = 12; + # }; + }; + + # Alacritty - GPU-accelerated terminal + programs.alacritty = { + enable = lib.mkDefault false; + # settings = { + # font.normal.family = "JetBrains Mono"; + # font.size = 12; + # }; + }; + + # WezTerm - GPU-accelerated terminal + # programs.wezterm = { + # enable = false; + # }; +} diff --git a/modules/home/rsydn/desktop/base.nix b/modules/home/rsydn/desktop/base.nix new file mode 100644 index 0000000..83e62b0 --- /dev/null +++ b/modules/home/rsydn/desktop/base.nix @@ -0,0 +1,36 @@ +{ lib, pkgs, config, ... }: +{ + # Base desktop user configuration + + # GTK theming + gtk = { + enable = lib.mkDefault true; + theme = lib.mkDefault { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + }; + + # Qt theming + qt = { + enable = lib.mkDefault true; + platformTheme.name = lib.mkDefault "gtk"; + style.name = lib.mkDefault "adwaita-dark"; + }; + + # XDG user directories + xdg = { + enable = true; + userDirs = { + enable = true; + createDirectories = true; + }; + }; + + # Basic GUI packages + home.packages = with pkgs; [ + # Add common desktop apps here + # firefox + # vscodium + ]; +} diff --git a/modules/home/rsydn/desktop/themes/README.md b/modules/home/rsydn/desktop/themes/README.md new file mode 100644 index 0000000..6638359 --- /dev/null +++ b/modules/home/rsydn/desktop/themes/README.md @@ -0,0 +1,21 @@ +# Themes + +Add your theme configurations here. Each theme should set: +- GTK theme +- Qt theme +- Terminal colors +- Compositor colors (if applicable) +- Wallpapers + +Example structure: +```nix +# catppuccin.nix +{ pkgs, ... }: { + gtk.theme = { + name = "Catppuccin-Mocha"; + package = pkgs.catppuccin-gtk; + }; + + # ... more theme settings +} +``` diff --git a/modules/home/rsydn/desktop/wayland/default.nix b/modules/home/rsydn/desktop/wayland/default.nix new file mode 100644 index 0000000..8793109 --- /dev/null +++ b/modules/home/rsydn/desktop/wayland/default.nix @@ -0,0 +1,11 @@ +{ ... }: +{ + # Wayland compositor configurations + # Import the compositor you want to use + + imports = [ + # Uncomment the one you want: + # ./hyprland + # ./niri + ]; +} diff --git a/modules/home/rsydn/desktop/wayland/hyprland/default.nix b/modules/home/rsydn/desktop/wayland/hyprland/default.nix new file mode 100644 index 0000000..72edd32 --- /dev/null +++ b/modules/home/rsydn/desktop/wayland/hyprland/default.nix @@ -0,0 +1,46 @@ +{ lib, pkgs, ... }: +{ + # Hyprland user configuration + wayland.windowManager.hyprland = { + enable = lib.mkDefault true; + xwayland.enable = lib.mkDefault true; + + settings = { + # Minimal config - expand as needed + "$mod" = "SUPER"; + + # Example keybinds + bind = [ + "$mod, Return, exec, kitty" # Terminal + "$mod, Q, killactive" + "$mod, M, exit" + "$mod, F, fullscreen" + "$mod, Space, togglefloating" + + # Move focus + "$mod, h, movefocus, l" + "$mod, l, movefocus, r" + "$mod, k, movefocus, u" + "$mod, j, movefocus, d" + ]; + + # Example settings + general = { + gaps_in = 5; + gaps_out = 10; + border_size = 2; + }; + + decoration = { + rounding = 8; + }; + }; + }; + + # Hyprland utilities + home.packages = with pkgs; [ + # wofi # Launcher + # waybar # Status bar + # dunst # Notifications + ]; +} diff --git a/modules/home/rsydn/desktop/wayland/niri/default.nix b/modules/home/rsydn/desktop/wayland/niri/default.nix new file mode 100644 index 0000000..e3909e9 --- /dev/null +++ b/modules/home/rsydn/desktop/wayland/niri/default.nix @@ -0,0 +1,39 @@ +{ lib, pkgs, ... }: +{ + # Niri user configuration + programs.niri = { + settings = { + # Minimal config - expand as needed + input = { + keyboard.xkb = { + layout = "us"; + }; + }; + + # Example keybinds + binds = { + "Mod+Return".action.spawn = [ "kitty" ]; + "Mod+Q".action.close-window = { }; + "Mod+F".action.fullscreen-window = { }; + + # Focus movement + "Mod+H".action.focus-column-left = { }; + "Mod+L".action.focus-column-right = { }; + "Mod+J".action.focus-window-down = { }; + "Mod+K".action.focus-window-up = { }; + }; + + layout = { + gaps = 8; + center-focused-column = "never"; + }; + }; + }; + + # Niri utilities + home.packages = with pkgs; [ + # fuzzel # Launcher (recommended for niri) + # waybar # Status bar + # dunst # Notifications + ]; +} diff --git a/modules/nixos/audio.nix b/modules/nixos/audio.nix new file mode 100644 index 0000000..ad9707e --- /dev/null +++ b/modules/nixos/audio.nix @@ -0,0 +1,14 @@ +{ lib, ... }: +{ + # Modern audio stack - PipeWire replaces PulseAudio + JACK + ALSA + services.pipewire = { + enable = lib.mkDefault true; + alsa.enable = lib.mkDefault true; + alsa.support32Bit = lib.mkDefault true; # For 32-bit games/apps + pulse.enable = lib.mkDefault true; # PulseAudio compatibility + jack.enable = lib.mkDefault true; # JACK compatibility + }; + + # Real-time audio priority + security.rtkit.enable = lib.mkDefault true; +} diff --git a/modules/nixos/bluetooth.nix b/modules/nixos/bluetooth.nix new file mode 100644 index 0000000..cd64072 --- /dev/null +++ b/modules/nixos/bluetooth.nix @@ -0,0 +1,13 @@ +{ lib, ... }: +{ + hardware.bluetooth = { + enable = lib.mkDefault false; # Enable when needed + powerOnBoot = lib.mkDefault true; + settings = { + General = { + Enable = "Source,Sink,Media,Socket"; + Experimental = true; # Better codec support + }; + }; + }; +} diff --git a/modules/nixos/desktops/README.md b/modules/nixos/desktops/README.md new file mode 100644 index 0000000..dc7859a --- /dev/null +++ b/modules/nixos/desktops/README.md @@ -0,0 +1,34 @@ +# Desktop Environments + +This directory contains system-level desktop environment configurations. + +## Available Desktop Environments + +- `hyprland.nix` - Dynamic tiling Wayland compositor +- `plasma.nix` - KDE Plasma 6 desktop environment +- `niri.nix` - Scrollable-tiling Wayland compositor +- `base.nix` - Shared desktop settings (imported by all DEs) + +## Usage + +Import one desktop environment in your host configuration: + +```nix +# modules/nixos/hosts/your-host.nix +{ + imports = [ + ../desktops/hyprland.nix + # OR + # ../desktops/plasma.nix + # OR + # ../desktops/niri.nix + ]; +} +``` + +## Adding a New Desktop Environment + +1. Create a new file (e.g., `gnome.nix`) +2. Import `./base.nix` +3. Enable the desktop environment +4. Add essential system packages diff --git a/modules/nixos/desktops/base.nix b/modules/nixos/desktops/base.nix new file mode 100644 index 0000000..1caf9d6 --- /dev/null +++ b/modules/nixos/desktops/base.nix @@ -0,0 +1,28 @@ +{ lib, pkgs, ... }: +{ + # Shared desktop settings (imported by all DEs) + + # XDG portals for desktop integration + xdg.portal = { + enable = lib.mkDefault true; + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; + + # Policy kit for privilege escalation + security.polkit.enable = lib.mkDefault true; + + # GVFS for trash, mounting, etc + services.gvfs.enable = lib.mkDefault true; + + # Common desktop packages + environment.systemPackages = with pkgs; [ + # File managers (choose one) + # nautilus # GNOME + # dolphin # KDE + # thunar # XFCE + + # Basic utilities + pavucontrol # Audio control + networkmanagerapplet # Network management GUI + ]; +} diff --git a/modules/nixos/desktops/hyprland.nix b/modules/nixos/desktops/hyprland.nix new file mode 100644 index 0000000..f725ed8 --- /dev/null +++ b/modules/nixos/desktops/hyprland.nix @@ -0,0 +1,31 @@ +{ pkgs, lib, ... }: +{ + imports = [ ./base.nix ]; + + # Hyprland - Dynamic tiling Wayland compositor + programs.hyprland = { + enable = lib.mkDefault true; + xwayland.enable = lib.mkDefault true; + }; + + # Wayland-specific portal + xdg.portal.wlr.enable = lib.mkDefault true; + + # Essential Wayland tools (system-level) + environment.systemPackages = with pkgs; [ + # Wayland essentials + wayland + wl-clipboard + wlr-randr + + # Screenshot & screen recording + grim # Screenshot + slurp # Region selector + # wf-recorder # Screen recording (optional) + + # Add your preferred apps here + # kitty # Terminal + # wofi # Launcher + # waybar # Bar + ]; +} diff --git a/modules/nixos/desktops/niri.nix b/modules/nixos/desktops/niri.nix new file mode 100644 index 0000000..da5155b --- /dev/null +++ b/modules/nixos/desktops/niri.nix @@ -0,0 +1,28 @@ +{ pkgs, lib, ... }: +{ + imports = [ ./base.nix ]; + + # Niri - Scrollable-tiling Wayland compositor + programs.niri = { + enable = lib.mkDefault true; + }; + + # Wayland-specific portal + xdg.portal.wlr.enable = lib.mkDefault true; + + # Essential Wayland tools + environment.systemPackages = with pkgs; [ + # Wayland essentials + wayland + wl-clipboard + + # Screenshot tools + grim + slurp + + # Add your preferred apps here + # kitty # Terminal + # fuzzel # Launcher (recommended for niri) + # waybar # Bar + ]; +} diff --git a/modules/nixos/desktops/plasma.nix b/modules/nixos/desktops/plasma.nix new file mode 100644 index 0000000..3c7e150 --- /dev/null +++ b/modules/nixos/desktops/plasma.nix @@ -0,0 +1,16 @@ +{ lib, ... }: +{ + imports = [ ./base.nix ]; + + # KDE Plasma 6 + services.desktopManager.plasma6.enable = lib.mkDefault true; + + # SDDM display manager + services.displayManager.sddm = { + enable = lib.mkDefault true; + wayland.enable = lib.mkDefault true; + }; + + # KDE apps are managed by Plasma + # Add extra packages in your host config if needed +} diff --git a/modules/nixos/fonts.nix b/modules/nixos/fonts.nix new file mode 100644 index 0000000..995940e --- /dev/null +++ b/modules/nixos/fonts.nix @@ -0,0 +1,40 @@ +{ lib, pkgs, ... }: +{ + fonts = { + enableDefaultPackages = lib.mkDefault true; + + packages = with pkgs; [ + # Nerd Fonts for terminal icons + (nerdfonts.override { + fonts = [ + "FiraCode" + "JetBrainsMono" + "Iosevka" + ]; + }) + + # Core fonts + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + liberation_ttf + + # Code fonts + fira-code + jetbrains-mono + ]; + + fontconfig = { + enable = lib.mkDefault true; + defaultFonts = { + monospace = [ + "JetBrains Mono" + "FiraCode Nerd Font" + ]; + sansSerif = [ "Noto Sans" ]; + serif = [ "Noto Serif" ]; + emoji = [ "Noto Color Emoji" ]; + }; + }; + }; +} diff --git a/modules/nixos/graphics.nix b/modules/nixos/graphics.nix new file mode 100644 index 0000000..c696961 --- /dev/null +++ b/modules/nixos/graphics.nix @@ -0,0 +1,22 @@ +{ lib, pkgs, ... }: +{ + # Hardware acceleration (OpenGL/Vulkan) + hardware.graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; # For 32-bit games/apps + + extraPackages = with pkgs; [ + # Common drivers (expand based on your hardware) + mesa.drivers + vulkan-validation-layers + vulkan-tools + + # Intel-specific (comment out if not using Intel) + intel-media-driver + intel-vaapi-driver + + # AMD-specific (comment out if not using AMD) + # rocmPackages.clr.icd + ]; + }; +} diff --git a/modules/nixos/home/desktop.nix b/modules/nixos/home/desktop.nix new file mode 100644 index 0000000..b3a4d23 --- /dev/null +++ b/modules/nixos/home/desktop.nix @@ -0,0 +1,24 @@ +{ ... }: +{ + # Desktop user configuration (for Hyprland/Niri setups) + + imports = [ + # Base CLI tools + ../../home/rsydn/base.nix + + # Desktop additions + ../../home/rsydn/desktop/base.nix + ../../home/rsydn/desktop/apps/browsers.nix + ../../home/rsydn/desktop/apps/terminals.nix + + # Choose your compositor + ../../home/rsydn/desktop/wayland + # Enable specific compositor in wayland/default.nix + + # Add theme when ready + # ../../home/rsydn/desktop/themes/catppuccin.nix + ]; + + # Override options here + # programs.kitty.enable = true; +} diff --git a/modules/nixos/home/gaming.nix b/modules/nixos/home/gaming.nix new file mode 100644 index 0000000..0201926 --- /dev/null +++ b/modules/nixos/home/gaming.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: +{ + # Gaming user configuration (for KDE Plasma) + + imports = [ + # Base CLI tools + ../../home/rsydn/base.nix + + # Desktop base + ../../home/rsydn/desktop/base.nix + ../../home/rsydn/desktop/apps/browsers.nix + ]; + + # Gaming-specific user packages + home.packages = with pkgs; [ + # Communication + # discord + # teamspeak_client + + # Streaming/Recording + # obs-studio + + # Media + # spotify + ]; + + # KDE-specific settings (optional) + # programs.plasma = { + # enable = true; + # workspace.theme = "breeze-dark"; + # }; +} diff --git a/modules/nixos/hosts/desktop-dev.nix b/modules/nixos/hosts/desktop-dev.nix new file mode 100644 index 0000000..c612c08 --- /dev/null +++ b/modules/nixos/hosts/desktop-dev.nix @@ -0,0 +1,42 @@ +{ pkgs, ... }: +{ + # Example desktop development workstation configuration + # Copy and modify for your actual hardware + + # Boot configuration (adjust for your system) + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + # Hostname + networking.hostName = "desktop-dev"; + + # Import desktop environment (choose one) + imports = [ + ../desktops/hyprland.nix + # ../desktops/plasma.nix + # ../desktops/niri.nix + ]; + + # Hardware-specific settings (adjust for your hardware) + # boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "sd_mod" ]; + + # GPU drivers (uncomment if using NVIDIA) + # services.xserver.videoDrivers = [ "nvidia" ]; + # hardware.nvidia = { + # modesetting.enable = true; + # open = false; # Use proprietary driver + # }; + + # Optional: Enable bluetooth + # hardware.bluetooth.enable = true; + + # Development-specific packages + environment.systemPackages = with pkgs; [ + # Add desktop dev tools here + # docker-compose + # k9s + ]; + + # This value determines the NixOS release compatibility + system.stateVersion = "24.05"; +} diff --git a/modules/nixos/hosts/gaming-rig.nix b/modules/nixos/hosts/gaming-rig.nix new file mode 100644 index 0000000..3ff8034 --- /dev/null +++ b/modules/nixos/hosts/gaming-rig.nix @@ -0,0 +1,53 @@ +{ pkgs, ... }: +{ + # Example gaming desktop configuration + # Copy and modify for your actual hardware + + # Boot configuration + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + # Hostname + networking.hostName = "gaming-rig"; + + # Import KDE Plasma for gaming + imports = [ ../desktops/plasma.nix ]; + + # Gaming-specific settings + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; + + # GameMode for performance optimization + programs.gamemode.enable = true; + + # GPU drivers (example: NVIDIA) + # services.xserver.videoDrivers = [ "nvidia" ]; + # hardware.nvidia = { + # modesetting.enable = true; + # powerManagement.enable = false; + # open = false; + # package = config.boot.kernelPackages.nvidiaPackages.stable; + # }; + + # Gaming packages + environment.systemPackages = with pkgs; [ + # Launchers + lutris + heroic + # bottles + + # Tools + mangohud # FPS overlay + # gamescope # Gaming compositor + # protonup-qt # Proton version manager + + # Communication + discord + ]; + + # This value determines the NixOS release compatibility + system.stateVersion = "24.05"; +} From 1ae2855bb1eabc0478b003ff5de50ebf7461239d Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Fri, 24 Oct 2025 11:09:00 +0700 Subject: [PATCH 3/9] init(release): desktop template -> desktop wip --- modules/home/rsydn/desktop/apps/browsers.nix | 14 ++++++------ modules/home/rsydn/desktop/apps/terminals.nix | 3 +-- modules/home/rsydn/desktop/base.nix | 14 ++++++------ .../home/rsydn/desktop/wayland/default.nix | 3 +-- .../desktop/wayland/hyprland/default.nix | 18 +++++++-------- .../rsydn/desktop/wayland/niri/default.nix | 20 +++++++---------- modules/nixos/audio.nix | 3 +-- modules/nixos/bluetooth.nix | 3 +-- modules/nixos/desktops/base.nix | 3 +-- modules/nixos/desktops/hyprland.nix | 3 +-- modules/nixos/desktops/niri.nix | 7 ++---- modules/nixos/desktops/plasma.nix | 3 +-- modules/nixos/fonts.nix | 16 +++----------- modules/nixos/graphics.nix | 3 +-- modules/nixos/home/desktop.nix | 3 +-- modules/nixos/home/gaming.nix | 22 +++++++++---------- modules/nixos/hosts/desktop-dev.nix | 14 ++++++------ modules/nixos/hosts/gaming-rig.nix | 3 +-- 18 files changed, 63 insertions(+), 92 deletions(-) diff --git a/modules/home/rsydn/desktop/apps/browsers.nix b/modules/home/rsydn/desktop/apps/browsers.nix index 85003cf..5d3db50 100644 --- a/modules/home/rsydn/desktop/apps/browsers.nix +++ b/modules/home/rsydn/desktop/apps/browsers.nix @@ -1,11 +1,11 @@ -{ pkgs, ... }: -{ +{ pkgs, ... }: { # Browser configurations - home.packages = with pkgs; [ - firefox - # chromium - # brave - ]; + home.packages = with pkgs; + [ + firefox + # chromium + # brave + ]; # Firefox config (expand as needed) # programs.firefox = { diff --git a/modules/home/rsydn/desktop/apps/terminals.nix b/modules/home/rsydn/desktop/apps/terminals.nix index 0703a46..eb83db9 100644 --- a/modules/home/rsydn/desktop/apps/terminals.nix +++ b/modules/home/rsydn/desktop/apps/terminals.nix @@ -1,5 +1,4 @@ -{ pkgs, lib, ... }: -{ +{ pkgs, lib, ... }: { # Terminal emulators # Kitty - GPU-accelerated terminal diff --git a/modules/home/rsydn/desktop/base.nix b/modules/home/rsydn/desktop/base.nix index 83e62b0..4048746 100644 --- a/modules/home/rsydn/desktop/base.nix +++ b/modules/home/rsydn/desktop/base.nix @@ -1,5 +1,4 @@ -{ lib, pkgs, config, ... }: -{ +{ lib, pkgs, config, ... }: { # Base desktop user configuration # GTK theming @@ -28,9 +27,10 @@ }; # Basic GUI packages - home.packages = with pkgs; [ - # Add common desktop apps here - # firefox - # vscodium - ]; + home.packages = with pkgs; + [ + # Add common desktop apps here + # firefox + # vscodium + ]; } diff --git a/modules/home/rsydn/desktop/wayland/default.nix b/modules/home/rsydn/desktop/wayland/default.nix index 8793109..76627e4 100644 --- a/modules/home/rsydn/desktop/wayland/default.nix +++ b/modules/home/rsydn/desktop/wayland/default.nix @@ -1,5 +1,4 @@ -{ ... }: -{ +{ ... }: { # Wayland compositor configurations # Import the compositor you want to use diff --git a/modules/home/rsydn/desktop/wayland/hyprland/default.nix b/modules/home/rsydn/desktop/wayland/hyprland/default.nix index 72edd32..3fc4a75 100644 --- a/modules/home/rsydn/desktop/wayland/hyprland/default.nix +++ b/modules/home/rsydn/desktop/wayland/hyprland/default.nix @@ -1,5 +1,4 @@ -{ lib, pkgs, ... }: -{ +{ lib, pkgs, ... }: { # Hyprland user configuration wayland.windowManager.hyprland = { enable = lib.mkDefault true; @@ -31,16 +30,15 @@ border_size = 2; }; - decoration = { - rounding = 8; - }; + decoration = { rounding = 8; }; }; }; # Hyprland utilities - home.packages = with pkgs; [ - # wofi # Launcher - # waybar # Status bar - # dunst # Notifications - ]; + home.packages = with pkgs; + [ + # wofi # Launcher + # waybar # Status bar + # dunst # Notifications + ]; } diff --git a/modules/home/rsydn/desktop/wayland/niri/default.nix b/modules/home/rsydn/desktop/wayland/niri/default.nix index e3909e9..4278399 100644 --- a/modules/home/rsydn/desktop/wayland/niri/default.nix +++ b/modules/home/rsydn/desktop/wayland/niri/default.nix @@ -1,14 +1,9 @@ -{ lib, pkgs, ... }: -{ +{ lib, pkgs, ... }: { # Niri user configuration programs.niri = { settings = { # Minimal config - expand as needed - input = { - keyboard.xkb = { - layout = "us"; - }; - }; + input = { keyboard.xkb = { layout = "us"; }; }; # Example keybinds binds = { @@ -31,9 +26,10 @@ }; # Niri utilities - home.packages = with pkgs; [ - # fuzzel # Launcher (recommended for niri) - # waybar # Status bar - # dunst # Notifications - ]; + home.packages = with pkgs; + [ + # fuzzel # Launcher (recommended for niri) + # waybar # Status bar + # dunst # Notifications + ]; } diff --git a/modules/nixos/audio.nix b/modules/nixos/audio.nix index ad9707e..f1093db 100644 --- a/modules/nixos/audio.nix +++ b/modules/nixos/audio.nix @@ -1,5 +1,4 @@ -{ lib, ... }: -{ +{ lib, ... }: { # Modern audio stack - PipeWire replaces PulseAudio + JACK + ALSA services.pipewire = { enable = lib.mkDefault true; diff --git a/modules/nixos/bluetooth.nix b/modules/nixos/bluetooth.nix index cd64072..e3040b4 100644 --- a/modules/nixos/bluetooth.nix +++ b/modules/nixos/bluetooth.nix @@ -1,5 +1,4 @@ -{ lib, ... }: -{ +{ lib, ... }: { hardware.bluetooth = { enable = lib.mkDefault false; # Enable when needed powerOnBoot = lib.mkDefault true; diff --git a/modules/nixos/desktops/base.nix b/modules/nixos/desktops/base.nix index 1caf9d6..7e078bb 100644 --- a/modules/nixos/desktops/base.nix +++ b/modules/nixos/desktops/base.nix @@ -1,5 +1,4 @@ -{ lib, pkgs, ... }: -{ +{ lib, pkgs, ... }: { # Shared desktop settings (imported by all DEs) # XDG portals for desktop integration diff --git a/modules/nixos/desktops/hyprland.nix b/modules/nixos/desktops/hyprland.nix index f725ed8..0b08980 100644 --- a/modules/nixos/desktops/hyprland.nix +++ b/modules/nixos/desktops/hyprland.nix @@ -1,5 +1,4 @@ -{ pkgs, lib, ... }: -{ +{ pkgs, lib, ... }: { imports = [ ./base.nix ]; # Hyprland - Dynamic tiling Wayland compositor diff --git a/modules/nixos/desktops/niri.nix b/modules/nixos/desktops/niri.nix index da5155b..bffcad9 100644 --- a/modules/nixos/desktops/niri.nix +++ b/modules/nixos/desktops/niri.nix @@ -1,11 +1,8 @@ -{ pkgs, lib, ... }: -{ +{ pkgs, lib, ... }: { imports = [ ./base.nix ]; # Niri - Scrollable-tiling Wayland compositor - programs.niri = { - enable = lib.mkDefault true; - }; + programs.niri = { enable = lib.mkDefault true; }; # Wayland-specific portal xdg.portal.wlr.enable = lib.mkDefault true; diff --git a/modules/nixos/desktops/plasma.nix b/modules/nixos/desktops/plasma.nix index 3c7e150..e26051c 100644 --- a/modules/nixos/desktops/plasma.nix +++ b/modules/nixos/desktops/plasma.nix @@ -1,5 +1,4 @@ -{ lib, ... }: -{ +{ lib, ... }: { imports = [ ./base.nix ]; # KDE Plasma 6 diff --git a/modules/nixos/fonts.nix b/modules/nixos/fonts.nix index 995940e..c56813b 100644 --- a/modules/nixos/fonts.nix +++ b/modules/nixos/fonts.nix @@ -1,17 +1,10 @@ -{ lib, pkgs, ... }: -{ +{ lib, pkgs, ... }: { fonts = { enableDefaultPackages = lib.mkDefault true; packages = with pkgs; [ # Nerd Fonts for terminal icons - (nerdfonts.override { - fonts = [ - "FiraCode" - "JetBrainsMono" - "Iosevka" - ]; - }) + (nerdfonts.override { fonts = [ "FiraCode" "JetBrainsMono" "Iosevka" ]; }) # Core fonts noto-fonts @@ -27,10 +20,7 @@ fontconfig = { enable = lib.mkDefault true; defaultFonts = { - monospace = [ - "JetBrains Mono" - "FiraCode Nerd Font" - ]; + monospace = [ "JetBrains Mono" "FiraCode Nerd Font" ]; sansSerif = [ "Noto Sans" ]; serif = [ "Noto Serif" ]; emoji = [ "Noto Color Emoji" ]; diff --git a/modules/nixos/graphics.nix b/modules/nixos/graphics.nix index c696961..07d18a5 100644 --- a/modules/nixos/graphics.nix +++ b/modules/nixos/graphics.nix @@ -1,5 +1,4 @@ -{ lib, pkgs, ... }: -{ +{ lib, pkgs, ... }: { # Hardware acceleration (OpenGL/Vulkan) hardware.graphics = { enable = lib.mkDefault true; diff --git a/modules/nixos/home/desktop.nix b/modules/nixos/home/desktop.nix index b3a4d23..1fbd92b 100644 --- a/modules/nixos/home/desktop.nix +++ b/modules/nixos/home/desktop.nix @@ -1,5 +1,4 @@ -{ ... }: -{ +{ ... }: { # Desktop user configuration (for Hyprland/Niri setups) imports = [ diff --git a/modules/nixos/home/gaming.nix b/modules/nixos/home/gaming.nix index 0201926..8d1cc96 100644 --- a/modules/nixos/home/gaming.nix +++ b/modules/nixos/home/gaming.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{ pkgs, ... }: { # Gaming user configuration (for KDE Plasma) imports = [ @@ -12,17 +11,18 @@ ]; # Gaming-specific user packages - home.packages = with pkgs; [ - # Communication - # discord - # teamspeak_client + home.packages = with pkgs; + [ + # Communication + # discord + # teamspeak_client - # Streaming/Recording - # obs-studio + # Streaming/Recording + # obs-studio - # Media - # spotify - ]; + # Media + # spotify + ]; # KDE-specific settings (optional) # programs.plasma = { diff --git a/modules/nixos/hosts/desktop-dev.nix b/modules/nixos/hosts/desktop-dev.nix index c612c08..e27c9f0 100644 --- a/modules/nixos/hosts/desktop-dev.nix +++ b/modules/nixos/hosts/desktop-dev.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{ pkgs, ... }: { # Example desktop development workstation configuration # Copy and modify for your actual hardware @@ -31,11 +30,12 @@ # hardware.bluetooth.enable = true; # Development-specific packages - environment.systemPackages = with pkgs; [ - # Add desktop dev tools here - # docker-compose - # k9s - ]; + environment.systemPackages = with pkgs; + [ + # Add desktop dev tools here + # docker-compose + # k9s + ]; # This value determines the NixOS release compatibility system.stateVersion = "24.05"; diff --git a/modules/nixos/hosts/gaming-rig.nix b/modules/nixos/hosts/gaming-rig.nix index 3ff8034..0ba42a1 100644 --- a/modules/nixos/hosts/gaming-rig.nix +++ b/modules/nixos/hosts/gaming-rig.nix @@ -1,5 +1,4 @@ -{ pkgs, ... }: -{ +{ pkgs, ... }: { # Example gaming desktop configuration # Copy and modify for your actual hardware From c6594bcbff544ff6b2c1c83662ca8e8fe447345b Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Fri, 24 Oct 2025 13:35:33 +0700 Subject: [PATCH 4/9] feature: gaming setup & config init --- flake.lock | 188 +++++++++++++++++++++------- flake.nix | 18 ++- modules/nixos/desktop/gaming.nix | 76 +++++++++++ modules/nixos/hosts/desktop-dev.nix | 42 ------- modules/nixos/hosts/desktop.nix | 67 ++++++++++ modules/nixos/hosts/gaming-rig.nix | 52 -------- 6 files changed, 296 insertions(+), 147 deletions(-) create mode 100644 modules/nixos/desktop/gaming.nix delete mode 100644 modules/nixos/hosts/desktop-dev.nix create mode 100644 modules/nixos/hosts/desktop.nix delete mode 100644 modules/nixos/hosts/gaming-rig.nix diff --git a/flake.lock b/flake.lock index 3a4f6f6..e35a8a7 100644 --- a/flake.lock +++ b/flake.lock @@ -22,6 +22,29 @@ "type": "github" } }, + "chaotic": { + "inputs": { + "flake-schemas": "flake-schemas", + "home-manager": "home-manager", + "jovian": "jovian", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1761265276, + "narHash": "sha256-ZngDL68RZbT1RUX/m+h8y5zfXJdnydRKjf3oZTfwam0=", + "owner": "chaotic-cx", + "repo": "nyx", + "rev": "5df2883e9401fd257e39285819996203628f3f0e", + "type": "github" + }, + "original": { + "owner": "chaotic-cx", + "ref": "nyxpkgs-unstable", + "repo": "nyx", + "type": "github" + } + }, "darwin": { "inputs": { "nixpkgs": [ @@ -58,20 +81,18 @@ "type": "github" } }, - "flake-compat_2": { - "flake": false, + "flake-schemas": { "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" + "lastModified": 1721999734, + "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=", + "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982", + "revCount": 75, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz" }, "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" + "type": "tarball", + "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz" } }, "flake-utils": { @@ -92,24 +113,6 @@ "type": "github" } }, - "flake-utils_2": { - "inputs": { - "systems": "systems_3" - }, - "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "ghostty": { "inputs": { "flake-compat": "flake-compat", @@ -137,6 +140,7 @@ "home-manager": { "inputs": { "nixpkgs": [ + "chaotic", "nixpkgs" ] }, @@ -154,6 +158,48 @@ "type": "github" } }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1761081701, + "narHash": "sha256-IwpfaKg5c/WWQiy8b5QGaVPMvoEQ2J6kpwRFdpVpBNQ=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "9b4a2a7c4fbd75b422f00794af02d6edb4d9d315", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1761045626, + "narHash": "sha256-N0OyyLp7VIYUdrtLSPt6y40q3+wAAeJWRwAtrKtHYtU=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "493f3428943605a9a34494cfcba32cd21633752f", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "type": "github" + } + }, "nix-ai-tools": { "inputs": { "blueprint": "blueprint", @@ -176,7 +222,46 @@ "type": "github" } }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "chaotic", + "jovian", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729697500, + "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=", + "owner": "zhaofengli", + "repo": "nix-github-actions", + "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "ref": "matrix-name", + "repo": "nix-github-actions", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1761114652, + "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1758360447, "narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=", @@ -189,7 +274,7 @@ "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" } }, - "nixpkgs_2": { + "nixpkgs_3": { "locked": { "lastModified": 1760878510, "narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=", @@ -207,14 +292,36 @@ }, "root": { "inputs": { + "chaotic": "chaotic", "darwin": "darwin", "ghostty": "ghostty", - "home-manager": "home-manager", + "home-manager": "home-manager_2", "nix-ai-tools": "nix-ai-tools", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "sops-nix": "sops-nix" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1761100675, + "narHash": "sha256-LX3TCDBeNpCWTDXtGyRASVcLmRPChSli34bgHnZ1DCw=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "72161c6c53f6e3f8dadaf54b2204a5094c6a16ae", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": [ @@ -265,21 +372,6 @@ "type": "github" } }, - "systems_3": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "treefmt-nix": { "inputs": { "nixpkgs": [ @@ -332,7 +424,7 @@ }, "zon2nix": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" }, "locked": { "lastModified": 1758405547, diff --git a/flake.nix b/flake.nix index 4284dd9..166a2ad 100644 --- a/flake.nix +++ b/flake.nix @@ -17,10 +17,12 @@ sops-nix.url = "github:Mic92/sops-nix"; sops-nix.inputs.nixpkgs.follows = "nixpkgs"; + + chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; }; outputs = inputs@{ self, nixpkgs, darwin, home-manager, ghostty, nix-ai-tools - , sops-nix, ... }: + , sops-nix, chaotic, ... }: let inherit (nixpkgs.lib) genAttrs; lib = nixpkgs.lib; @@ -31,7 +33,7 @@ forEachSystem = f: genAttrs systems (system: f system); - overlaysList = [ ghostty.overlays.default ]; + overlaysList = [ ghostty.overlays.default chaotic.overlays.default ]; mkPkgs = system: import nixpkgs { @@ -41,12 +43,13 @@ }; sharedDarwinModules = [ ./modules/darwin/system.nix ]; - sharedNixosModules = [ ./modules/nixos/system.nix ]; + sharedNixosModules = + [ ./modules/nixos/system.nix chaotic.nixosModules.default ]; user = "rasyidanakbar"; mkDarwin = { system ? "aarch64-darwin", extraModules ? [ ] - , homeFile ? ./modules/darwin/home/default.nix }: + , homeFile ? ./modules/darwin/home/default.nix, }: let pkgs = mkPkgs system; in darwin.lib.darwinSystem { inherit system pkgs; @@ -66,7 +69,7 @@ ]; }; mkNixos = { system ? "x86_64-linux", extraModules ? [ ] - , homeFile ? ./modules/nixos/home/default.nix }: + , homeFile ? ./modules/nixos/home/default.nix, }: let pkgs = mkPkgs system; in lib.nixosSystem { inherit system pkgs; @@ -91,6 +94,11 @@ system = "x86_64-linux"; extraModules = [ ./modules/nixos/hosts/dev-vm.nix ]; }; + desktop = mkNixos { + system = "x86_64-linux"; + extraModules = [ ./modules/nixos/hosts/desktop.nix ]; + homeFile = ./modules/nixos/home/desktop.nix; + }; }; devShells = forEachSystem (system: diff --git a/modules/nixos/desktop/gaming.nix b/modules/nixos/desktop/gaming.nix new file mode 100644 index 0000000..dc9ec24 --- /dev/null +++ b/modules/nixos/desktop/gaming.nix @@ -0,0 +1,76 @@ +{ pkgs, ... }: { + # Gaming configuration module + # Steam, Proton, Vulkan, Wine, and gaming optimizations + + # Steam with Proton support + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + + # Enable Proton compatibility layer + extraCompatPackages = with pkgs; + [ + proton-ge-bin # GloriousEggroll's Proton builds + ]; + }; + + # GameMode for performance optimization + programs.gamemode = { + enable = true; + settings = { + general = { renice = 10; }; + custom = { + start = "${pkgs.libnotify}/bin/notify-send 'GameMode started'"; + end = "${pkgs.libnotify}/bin/notify-send 'GameMode ended'"; + }; + }; + }; + + # Enable 32-bit graphics support for games + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + # Gaming-related packages + environment.systemPackages = with pkgs; [ + # Game launchers + lutris + heroic # Epic Games, GOG launcher + # bottles # Windows app manager + + # Wine for Windows games + wineWowPackages.stable # Both 32 and 64-bit Wine + winetricks + + # Performance monitoring + mangohud # FPS overlay and performance metrics + # gamescope # Gaming compositor/micro-compositor + + # Proton utilities + # protonup-qt # Manage Proton versions + protontricks # Winetricks for Proton games + + # Communication + discord + # teamspeak_client + + # Other gaming tools + # steam-run # Run non-Steam games in Steam runtime + ]; + + # Vulkan support + environment.variables = { + # Enable Vulkan validation layers for debugging (optional) + # VK_LAYER_PATH = "${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d"; + }; + + # Kernel parameters for gaming performance (optional, adjust as needed) + # boot.kernelParams = [ + # "mitigations=off" # Disable CPU mitigations for performance (less secure) + # ]; + + # Increase file watchers for game modding tools + boot.kernel.sysctl = { "fs.inotify.max_user_watches" = 524288; }; +} diff --git a/modules/nixos/hosts/desktop-dev.nix b/modules/nixos/hosts/desktop-dev.nix deleted file mode 100644 index e27c9f0..0000000 --- a/modules/nixos/hosts/desktop-dev.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ pkgs, ... }: { - # Example desktop development workstation configuration - # Copy and modify for your actual hardware - - # Boot configuration (adjust for your system) - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - # Hostname - networking.hostName = "desktop-dev"; - - # Import desktop environment (choose one) - imports = [ - ../desktops/hyprland.nix - # ../desktops/plasma.nix - # ../desktops/niri.nix - ]; - - # Hardware-specific settings (adjust for your hardware) - # boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "sd_mod" ]; - - # GPU drivers (uncomment if using NVIDIA) - # services.xserver.videoDrivers = [ "nvidia" ]; - # hardware.nvidia = { - # modesetting.enable = true; - # open = false; # Use proprietary driver - # }; - - # Optional: Enable bluetooth - # hardware.bluetooth.enable = true; - - # Development-specific packages - environment.systemPackages = with pkgs; - [ - # Add desktop dev tools here - # docker-compose - # k9s - ]; - - # This value determines the NixOS release compatibility - system.stateVersion = "24.05"; -} diff --git a/modules/nixos/hosts/desktop.nix b/modules/nixos/hosts/desktop.nix new file mode 100644 index 0000000..01d2d32 --- /dev/null +++ b/modules/nixos/hosts/desktop.nix @@ -0,0 +1,67 @@ +{ lib, pkgs, ... }: { + # Unified desktop configuration for gaming and development + # Includes both KDE Plasma and Hyprland - switch at login screen + + # Boot configuration with CachyOS LTS kernel + boot = { + loader.systemd-boot.enable = true; + loader.efi.canTouchEfiVariables = true; + kernelPackages = pkgs.linuxPackages_cachyos-lts; + # Hardware-specific settings (adjust for your hardware) + # initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "sd_mod" ]; + }; + + # Hostname + networking.hostName = "desktop"; + + # Root filesystem configuration (REQUIRED - adjust for your hardware) + # To generate proper config, run: nixos-generate-config --show-hardware-config + fileSystems."/" = lib.mkDefault { + device = "/dev/disk/by-label/nixos"; + fsType = "ext4"; + }; + + fileSystems."/boot" = lib.mkDefault { + device = "/dev/disk/by-label/boot"; + fsType = "vfat"; + }; + + # Swap configuration (optional, adjust as needed) + # swapDevices = [ { device = "/dev/disk/by-label/swap"; } ]; + + # Desktop environments - both available at login screen + imports = [ + ../desktops/plasma.nix # For gaming sessions + ../desktops/hyprland.nix # For development sessions + # ../desktops/niri.nix # Available for future use + ../bluetooth.nix + ../desktop/gaming.nix # Gaming configuration (Steam, Proton, Vulkan, etc.) + ]; + + # GPU drivers (uncomment and adjust for your hardware) + # For NVIDIA: + # services.xserver.videoDrivers = [ "nvidia" ]; + # hardware.nvidia = { + # modesetting.enable = true; + # powerManagement.enable = false; + # open = false; # Use proprietary driver + # package = config.boot.kernelPackages.nvidiaPackages.stable; + # }; + # + # For AMD: + # services.xserver.videoDrivers = [ "amdgpu" ]; + # + # For Intel: + # services.xserver.videoDrivers = [ "modesetting" ]; + + # Additional system packages + environment.systemPackages = with pkgs; + [ + # Add system-wide tools here if needed + # Gaming packages are configured in ../desktop/gaming.nix + # Development tools are better sourced via `nix develop` shells + ]; + + # This value determines the NixOS release compatibility + system.stateVersion = "24.05"; +} diff --git a/modules/nixos/hosts/gaming-rig.nix b/modules/nixos/hosts/gaming-rig.nix deleted file mode 100644 index 0ba42a1..0000000 --- a/modules/nixos/hosts/gaming-rig.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ pkgs, ... }: { - # Example gaming desktop configuration - # Copy and modify for your actual hardware - - # Boot configuration - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - # Hostname - networking.hostName = "gaming-rig"; - - # Import KDE Plasma for gaming - imports = [ ../desktops/plasma.nix ]; - - # Gaming-specific settings - programs.steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - }; - - # GameMode for performance optimization - programs.gamemode.enable = true; - - # GPU drivers (example: NVIDIA) - # services.xserver.videoDrivers = [ "nvidia" ]; - # hardware.nvidia = { - # modesetting.enable = true; - # powerManagement.enable = false; - # open = false; - # package = config.boot.kernelPackages.nvidiaPackages.stable; - # }; - - # Gaming packages - environment.systemPackages = with pkgs; [ - # Launchers - lutris - heroic - # bottles - - # Tools - mangohud # FPS overlay - # gamescope # Gaming compositor - # protonup-qt # Proton version manager - - # Communication - discord - ]; - - # This value determines the NixOS release compatibility - system.stateVersion = "24.05"; -} From 2585a86dc9acc7f8a1b94302084215c8d89aaac7 Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Fri, 24 Oct 2025 16:52:06 +0700 Subject: [PATCH 5/9] chore: fix unnecessary and not available pkgs, cleaning --- flake.nix | 5 +- modules/darwin/home/default.nix | 60 ++++++- modules/home/rsydn/base.nix | 142 ++++++--------- modules/home/rsydn/desktop/apps/browsers.nix | 19 -- modules/home/rsydn/desktop/apps/terminals.nix | 27 --- modules/home/rsydn/desktop/base.nix | 36 ---- modules/home/rsydn/desktop/themes/README.md | 21 --- .../home/rsydn/desktop/wayland/default.nix | 10 -- .../desktop/wayland/hyprland/default.nix | 44 ----- .../rsydn/desktop/wayland/niri/default.nix | 35 ---- modules/nixos/desktops/README.md | 164 ++++++++++++++++-- modules/nixos/desktops/apps/browsers.nix | 9 + modules/nixos/desktops/apps/terminals.nix | 114 ++++++++++++ .../nixos/{desktop => desktops}/gaming.nix | 0 .../nixos/desktops/hardware-configuration.nix | 78 +++++++++ modules/nixos/desktops/hyprland.nix | 30 ---- modules/nixos/desktops/hyprland/default.nix | 71 ++++++++ modules/nixos/desktops/niri.nix | 25 --- modules/nixos/desktops/plasma.nix | 35 +++- modules/nixos/desktops/themes/catppuccin.nix | 64 +++++++ modules/nixos/desktops/themes/default.nix | 33 ++++ modules/nixos/home/default.nix | 9 +- modules/nixos/home/desktop.nix | 23 --- modules/nixos/home/gaming.nix | 32 ---- modules/nixos/hosts/desktop.nix | 79 +++------ 25 files changed, 703 insertions(+), 462 deletions(-) delete mode 100644 modules/home/rsydn/desktop/apps/browsers.nix delete mode 100644 modules/home/rsydn/desktop/apps/terminals.nix delete mode 100644 modules/home/rsydn/desktop/base.nix delete mode 100644 modules/home/rsydn/desktop/themes/README.md delete mode 100644 modules/home/rsydn/desktop/wayland/default.nix delete mode 100644 modules/home/rsydn/desktop/wayland/hyprland/default.nix delete mode 100644 modules/home/rsydn/desktop/wayland/niri/default.nix create mode 100644 modules/nixos/desktops/apps/browsers.nix create mode 100644 modules/nixos/desktops/apps/terminals.nix rename modules/nixos/{desktop => desktops}/gaming.nix (100%) create mode 100644 modules/nixos/desktops/hardware-configuration.nix delete mode 100644 modules/nixos/desktops/hyprland.nix create mode 100644 modules/nixos/desktops/hyprland/default.nix delete mode 100644 modules/nixos/desktops/niri.nix create mode 100644 modules/nixos/desktops/themes/catppuccin.nix create mode 100644 modules/nixos/desktops/themes/default.nix delete mode 100644 modules/nixos/home/desktop.nix delete mode 100644 modules/nixos/home/gaming.nix diff --git a/flake.nix b/flake.nix index 166a2ad..1d185c3 100644 --- a/flake.nix +++ b/flake.nix @@ -93,11 +93,14 @@ dev-vm = mkNixos { system = "x86_64-linux"; extraModules = [ ./modules/nixos/hosts/dev-vm.nix ]; + # Uses default homeFile: ./modules/nixos/home/default.nix }; desktop = mkNixos { system = "x86_64-linux"; extraModules = [ ./modules/nixos/hosts/desktop.nix ]; - homeFile = ./modules/nixos/home/desktop.nix; + # Home Manager configs are imported directly in desktop modules + # No homeFile needed - using inline home-manager.users.${user} + homeFile = ./modules/nixos/home/default.nix; }; }; diff --git a/modules/darwin/home/default.nix b/modules/darwin/home/default.nix index d227980..363cbda 100644 --- a/modules/darwin/home/default.nix +++ b/modules/darwin/home/default.nix @@ -1,4 +1,10 @@ -{ config, pkgs, lib, ... }: { +{ + config, + pkgs, + lib, + ... +}: +{ # Import shared cross-platform home configuration imports = [ ../../home/rsydn/base.nix @@ -6,4 +12,56 @@ ./programs/aerospace ./programs/ghostty.nix ]; + + # Darwin-specific secrets configuration + rsydn.secrets = { + enable = lib.mkDefault true; + defaultSopsFile = ../../../secrets/local-ai-tokens.sops.yaml; + secrets = { + "openai-api-key" = { + format = "yaml"; + key = "OPENAI_API_KEY"; + }; + + "openrouter-api-key" = { + format = "yaml"; + key = "OPENROUTER_API_KEY"; + }; + + "zai-api-key" = { + format = "yaml"; + key = "ZAI_API_KEY"; + }; + + "moonshot-api-key" = { + format = "yaml"; + key = "MOONSHOT_API_KEY"; + }; + + "anthropic-api-key" = { + format = "yaml"; + key = "ANTHROPIC_API_KEY"; + }; + + "exa-api-key" = { + format = "yaml"; + key = "EXA_API_KEY"; + }; + + "fal-api-key" = { + format = "yaml"; + key = "FAL_API_KEY"; + }; + + "groq-api-key" = { + format = "yaml"; + key = "GROQ_API_KEY"; + }; + + "firecrawl-api-key" = { + format = "yaml"; + key = "FIRECRAWL_API_KEY"; + }; + }; + }; } diff --git a/modules/home/rsydn/base.nix b/modules/home/rsydn/base.nix index e29175f..e9f84ec 100644 --- a/modules/home/rsydn/base.nix +++ b/modules/home/rsydn/base.nix @@ -1,6 +1,5 @@ -{ pkgs, lib, ... }: { - home.stateVersion = "24.05"; - +{ pkgs, lib, ... }: +{ imports = [ ./programs/helix.nix ./programs/neovim.nix @@ -11,101 +10,62 @@ ./secrets.nix ]; - programs.git.enable = true; + config = { + home.stateVersion = "24.05"; - home.packages = with pkgs; [ docker docker-compose ]; + # XDG Base Directory specification + # Ensures ~/.config, ~/.local/share, ~/.cache are properly set up + # Note: User directories (Desktop, Downloads, etc.) are configured in desktop modules + xdg.enable = true; - rsydn.aiTools = { - enable = lib.mkDefault true; - claude.zai.enable = lib.mkDefault true; - }; + programs.git.enable = true; - rsydn.devTools = { - enable = lib.mkDefault true; - packages = with pkgs; [ - ast-grep - cloudflared - ffmpeg - fzf - htop - jetbrains-mono - jq - jujutsu - lazydocker - lazygit - lorri - nil - nixd - pandoc - ripgrep - tmux - tree - curl - vim - wget - yq + home.packages = with pkgs; [ + docker + docker-compose ]; - }; - rsydn.languages = { - enable = lib.mkDefault true; - # Disable global language tools - use nix develop shells instead - cargo.enable = false; - go.enable = false; - bun.enable = false; - # Keep uv for MCP server and node for npx/tooling - uv.enable = true; - node.enable = true; - }; + rsydn.aiTools = { + enable = lib.mkDefault true; + claude.zai.enable = lib.mkDefault true; + }; - rsydn.secrets = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin { - enable = lib.mkDefault true; - defaultSopsFile = ../../../secrets/local-ai-tokens.sops.yaml; - secrets = { - "openai-api-key" = { - format = "yaml"; - key = "OPENAI_API_KEY"; - }; + rsydn.devTools = { + enable = lib.mkDefault true; + packages = with pkgs; [ + ast-grep + cloudflared + ffmpeg + fzf + htop + jetbrains-mono + jq + jujutsu + lazydocker + lazygit + lorri + nil + nixd + pandoc + ripgrep + tmux + tree + curl + vim + wget + yq + ]; + }; - "openrouter-api-key" = { - format = "yaml"; - key = "OPENROUTER_API_KEY"; - }; - - "zai-api-key" = { - format = "yaml"; - key = "ZAI_API_KEY"; - }; - - "moonshot-api-key" = { - format = "yaml"; - key = "MOONSHOT_API_KEY"; - }; - - "anthropic-api-key" = { - format = "yaml"; - key = "ANTHROPIC_API_KEY"; - }; - - "exa-api-key" = { - format = "yaml"; - key = "EXA_API_KEY"; - }; - - "fal-api-key" = { - format = "yaml"; - key = "FAL_API_KEY"; - }; - - "groq-api-key" = { - format = "yaml"; - key = "GROQ_API_KEY"; - }; - - "firecrawl-api-key" = { - format = "yaml"; - key = "FIRECRAWL_API_KEY"; - }; + rsydn.languages = { + enable = lib.mkDefault true; + # Disable global language tools - use nix develop shells instead + cargo.enable = false; + go.enable = false; + bun.enable = false; + # Keep uv for MCP server and node for npx/tooling + uv.enable = true; + node.enable = true; }; }; } diff --git a/modules/home/rsydn/desktop/apps/browsers.nix b/modules/home/rsydn/desktop/apps/browsers.nix deleted file mode 100644 index 5d3db50..0000000 --- a/modules/home/rsydn/desktop/apps/browsers.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ pkgs, ... }: { - # Browser configurations - home.packages = with pkgs; - [ - firefox - # chromium - # brave - ]; - - # Firefox config (expand as needed) - # programs.firefox = { - # enable = true; - # profiles.default = { - # settings = { - # "browser.startup.homepage" = "about:home"; - # }; - # }; - # }; -} diff --git a/modules/home/rsydn/desktop/apps/terminals.nix b/modules/home/rsydn/desktop/apps/terminals.nix deleted file mode 100644 index eb83db9..0000000 --- a/modules/home/rsydn/desktop/apps/terminals.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ pkgs, lib, ... }: { - # Terminal emulators - - # Kitty - GPU-accelerated terminal - programs.kitty = { - enable = lib.mkDefault false; - # theme = "Dracula"; - # settings = { - # font_family = "JetBrains Mono"; - # font_size = 12; - # }; - }; - - # Alacritty - GPU-accelerated terminal - programs.alacritty = { - enable = lib.mkDefault false; - # settings = { - # font.normal.family = "JetBrains Mono"; - # font.size = 12; - # }; - }; - - # WezTerm - GPU-accelerated terminal - # programs.wezterm = { - # enable = false; - # }; -} diff --git a/modules/home/rsydn/desktop/base.nix b/modules/home/rsydn/desktop/base.nix deleted file mode 100644 index 4048746..0000000 --- a/modules/home/rsydn/desktop/base.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ lib, pkgs, config, ... }: { - # Base desktop user configuration - - # GTK theming - gtk = { - enable = lib.mkDefault true; - theme = lib.mkDefault { - name = "Adwaita-dark"; - package = pkgs.gnome-themes-extra; - }; - }; - - # Qt theming - qt = { - enable = lib.mkDefault true; - platformTheme.name = lib.mkDefault "gtk"; - style.name = lib.mkDefault "adwaita-dark"; - }; - - # XDG user directories - xdg = { - enable = true; - userDirs = { - enable = true; - createDirectories = true; - }; - }; - - # Basic GUI packages - home.packages = with pkgs; - [ - # Add common desktop apps here - # firefox - # vscodium - ]; -} diff --git a/modules/home/rsydn/desktop/themes/README.md b/modules/home/rsydn/desktop/themes/README.md deleted file mode 100644 index 6638359..0000000 --- a/modules/home/rsydn/desktop/themes/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Themes - -Add your theme configurations here. Each theme should set: -- GTK theme -- Qt theme -- Terminal colors -- Compositor colors (if applicable) -- Wallpapers - -Example structure: -```nix -# catppuccin.nix -{ pkgs, ... }: { - gtk.theme = { - name = "Catppuccin-Mocha"; - package = pkgs.catppuccin-gtk; - }; - - # ... more theme settings -} -``` diff --git a/modules/home/rsydn/desktop/wayland/default.nix b/modules/home/rsydn/desktop/wayland/default.nix deleted file mode 100644 index 76627e4..0000000 --- a/modules/home/rsydn/desktop/wayland/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ ... }: { - # Wayland compositor configurations - # Import the compositor you want to use - - imports = [ - # Uncomment the one you want: - # ./hyprland - # ./niri - ]; -} diff --git a/modules/home/rsydn/desktop/wayland/hyprland/default.nix b/modules/home/rsydn/desktop/wayland/hyprland/default.nix deleted file mode 100644 index 3fc4a75..0000000 --- a/modules/home/rsydn/desktop/wayland/hyprland/default.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ lib, pkgs, ... }: { - # Hyprland user configuration - wayland.windowManager.hyprland = { - enable = lib.mkDefault true; - xwayland.enable = lib.mkDefault true; - - settings = { - # Minimal config - expand as needed - "$mod" = "SUPER"; - - # Example keybinds - bind = [ - "$mod, Return, exec, kitty" # Terminal - "$mod, Q, killactive" - "$mod, M, exit" - "$mod, F, fullscreen" - "$mod, Space, togglefloating" - - # Move focus - "$mod, h, movefocus, l" - "$mod, l, movefocus, r" - "$mod, k, movefocus, u" - "$mod, j, movefocus, d" - ]; - - # Example settings - general = { - gaps_in = 5; - gaps_out = 10; - border_size = 2; - }; - - decoration = { rounding = 8; }; - }; - }; - - # Hyprland utilities - home.packages = with pkgs; - [ - # wofi # Launcher - # waybar # Status bar - # dunst # Notifications - ]; -} diff --git a/modules/home/rsydn/desktop/wayland/niri/default.nix b/modules/home/rsydn/desktop/wayland/niri/default.nix deleted file mode 100644 index 4278399..0000000 --- a/modules/home/rsydn/desktop/wayland/niri/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ lib, pkgs, ... }: { - # Niri user configuration - programs.niri = { - settings = { - # Minimal config - expand as needed - input = { keyboard.xkb = { layout = "us"; }; }; - - # Example keybinds - binds = { - "Mod+Return".action.spawn = [ "kitty" ]; - "Mod+Q".action.close-window = { }; - "Mod+F".action.fullscreen-window = { }; - - # Focus movement - "Mod+H".action.focus-column-left = { }; - "Mod+L".action.focus-column-right = { }; - "Mod+J".action.focus-window-down = { }; - "Mod+K".action.focus-window-up = { }; - }; - - layout = { - gaps = 8; - center-focused-column = "never"; - }; - }; - }; - - # Niri utilities - home.packages = with pkgs; - [ - # fuzzel # Launcher (recommended for niri) - # waybar # Status bar - # dunst # Notifications - ]; -} diff --git a/modules/nixos/desktops/README.md b/modules/nixos/desktops/README.md index dc7859a..b83bbc8 100644 --- a/modules/nixos/desktops/README.md +++ b/modules/nixos/desktops/README.md @@ -1,34 +1,176 @@ # Desktop Environments -This directory contains system-level desktop environment configurations. +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 -- `hyprland.nix` - Dynamic tiling Wayland compositor -- `plasma.nix` - KDE Plasma 6 desktop environment -- `niri.nix` - Scrollable-tiling Wayland compositor -- `base.nix` - Shared desktop settings (imported by all DEs) +### 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/hyprland.nix + ../desktops/plasma.nix # OR - # ../desktops/plasma.nix - # OR - # ../desktops/niri.nix + # ../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` -3. Enable the desktop environment +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 +``` diff --git a/modules/nixos/desktops/apps/browsers.nix b/modules/nixos/desktops/apps/browsers.nix new file mode 100644 index 0000000..257b08d --- /dev/null +++ b/modules/nixos/desktops/apps/browsers.nix @@ -0,0 +1,9 @@ +{ pkgs, user, ... }: +{ + # Browser configurations for desktop users + + home-manager.users.${user} = { + # User packages: Browsers + home.packages = with pkgs; [ brave ]; + }; +} diff --git a/modules/nixos/desktops/apps/terminals.nix b/modules/nixos/desktops/apps/terminals.nix new file mode 100644 index 0000000..1120694 --- /dev/null +++ b/modules/nixos/desktops/apps/terminals.nix @@ -0,0 +1,114 @@ +{ lib, pkgs, user, ... }: { + # Terminal emulator configurations for desktop users + + home-manager.users.${user} = { + # Provide JetBrains Mono font locally for Alacritty. + home.packages = with pkgs; [ jetbrains-mono ]; + + # Ensure Kitty stays disabled when desktop module is imported. + programs.kitty.enable = lib.mkForce false; + + # Configure Alacritty as the default terminal with Dracula theme. + programs.alacritty = { + enable = true; + settings = { + window.opacity = 0.85; + + font = { + normal = { + family = "JetBrains Mono"; + style = "Regular"; + }; + bold = { + family = "JetBrains Mono"; + style = "Bold"; + }; + italic = { + family = "JetBrains Mono"; + style = "Italic"; + }; + bold_italic = { + family = "JetBrains Mono"; + style = "Bold Italic"; + }; + size = 12.0; + }; + + colors = { + primary = { + background = "#282a36"; + foreground = "#f8f8f2"; + bright_foreground = "#ffffff"; + }; + + cursor = { + text = "#282a36"; + cursor = "#f8f8f2"; + }; + + vi_mode_cursor = { + text = "CellBackground"; + cursor = "CellForeground"; + }; + + selection = { + text = "CellForeground"; + background = "#44475a"; + }; + + normal = { + black = "#21222c"; + red = "#ff5555"; + green = "#50fa7b"; + yellow = "#f1fa8c"; + blue = "#bd93f9"; + magenta = "#ff79c6"; + cyan = "#8be9fd"; + white = "#f8f8f2"; + }; + + bright = { + black = "#6272a4"; + red = "#ff6e6e"; + green = "#69ff94"; + yellow = "#ffffa5"; + blue = "#d6acff"; + magenta = "#ff92df"; + cyan = "#a4ffff"; + white = "#ffffff"; + }; + + search = { + matches = { + foreground = "#44475a"; + background = "#50fa7b"; + }; + focused_match = { + foreground = "#44475a"; + background = "#ffb86c"; + }; + }; + + footer_bar = { + background = "#282a36"; + foreground = "#f8f8f2"; + }; + + hints = { + start = { + foreground = "#282a36"; + background = "#f1fa8c"; + }; + end = { + foreground = "#f1fa8c"; + background = "#282a36"; + }; + }; + }; + }; + }; + + # Keep WezTerm disabled to avoid conflicting terminal defaults. + programs.wezterm.enable = lib.mkForce false; + }; +} diff --git a/modules/nixos/desktop/gaming.nix b/modules/nixos/desktops/gaming.nix similarity index 100% rename from modules/nixos/desktop/gaming.nix rename to modules/nixos/desktops/gaming.nix diff --git a/modules/nixos/desktops/hardware-configuration.nix b/modules/nixos/desktops/hardware-configuration.nix new file mode 100644 index 0000000..1419afc --- /dev/null +++ b/modules/nixos/desktops/hardware-configuration.nix @@ -0,0 +1,78 @@ +# Hardware configuration for desktop +# Generated by running: nixos-generate-config --show-hardware-config +# This file contains hardware-specific settings that should be adjusted for your actual hardware + +{ config, lib, modulesPath, ... }: + +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + # Kernel modules needed during boot + # Adjust based on your hardware (NVMe, SATA, USB, etc.) + boot.initrd.availableKernelModules = + [ "nvme" "xhci_pci" "ahci" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; # Change to "kvm-intel" for Intel CPUs + + # Filesystem configuration + # Run `lsblk -f` or `blkid` to get your actual device UUIDs + fileSystems."/" = { + device = "/dev/disk/by-uuid/REPLACE-WITH-YOUR-ROOT-UUID"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/REPLACE-WITH-YOUR-BOOT-UUID"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + # Swap configuration (optional) + # Uncomment and adjust if you have a swap partition + # swapDevices = [ + # { device = "/dev/disk/by-uuid/REPLACE-WITH-YOUR-SWAP-UUID"; } + # ]; + + # CPU microcode updates + hardware.cpu.amd.updateMicrocode = + lib.mkDefault config.hardware.enableRedistributableFirmware; + # For Intel CPUs, use this instead: + # hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + + # GPU configuration + # Uncomment the section that matches your GPU + + # NVIDIA GPU + # services.xserver.videoDrivers = [ "nvidia" ]; + # hardware.nvidia = { + # modesetting.enable = true; + # powerManagement.enable = false; + # powerManagement.finegrained = false; + # open = false; # Use proprietary driver + # nvidiaSettings = true; + # package = config.boot.kernelPackages.nvidiaPackages.stable; + # }; + + # AMD GPU + # services.xserver.videoDrivers = [ "amdgpu" ]; + # hardware.opengl = { + # enable = true; + # driSupport = true; + # driSupport32Bit = true; # For 32-bit games + # }; + + # Intel GPU + # services.xserver.videoDrivers = [ "modesetting" ]; + # hardware.opengl = { + # enable = true; + # extraPackages = with pkgs; [ + # intel-media-driver + # vaapiIntel + # vaapiVdpau + # libvdpau-va-gl + # ]; + # }; + + # Maximum number of open files + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/modules/nixos/desktops/hyprland.nix b/modules/nixos/desktops/hyprland.nix deleted file mode 100644 index 0b08980..0000000 --- a/modules/nixos/desktops/hyprland.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ pkgs, lib, ... }: { - imports = [ ./base.nix ]; - - # Hyprland - Dynamic tiling Wayland compositor - programs.hyprland = { - enable = lib.mkDefault true; - xwayland.enable = lib.mkDefault true; - }; - - # Wayland-specific portal - xdg.portal.wlr.enable = lib.mkDefault true; - - # Essential Wayland tools (system-level) - environment.systemPackages = with pkgs; [ - # Wayland essentials - wayland - wl-clipboard - wlr-randr - - # Screenshot & screen recording - grim # Screenshot - slurp # Region selector - # wf-recorder # Screen recording (optional) - - # Add your preferred apps here - # kitty # Terminal - # wofi # Launcher - # waybar # Bar - ]; -} diff --git a/modules/nixos/desktops/hyprland/default.nix b/modules/nixos/desktops/hyprland/default.nix new file mode 100644 index 0000000..40bd0e6 --- /dev/null +++ b/modules/nixos/desktops/hyprland/default.nix @@ -0,0 +1,71 @@ +{ pkgs, lib, user, ... }: { + imports = [ ../base.nix ]; + + # System-level: Enable Hyprland + programs.hyprland = { + enable = lib.mkDefault true; + xwayland.enable = lib.mkDefault true; + }; + + # Wayland-specific portal + xdg.portal.wlr.enable = lib.mkDefault true; + + # System packages: Wayland essentials + environment.systemPackages = with pkgs; [ + # Wayland essentials + wayland + wl-clipboard + wlr-randr + + # Screenshot & screen recording + grim # Screenshot + slurp # Region selector + # wf-recorder # Screen recording (optional) + ]; + + # User-level: Hyprland configuration + home-manager.users.${user} = { + wayland.windowManager.hyprland = { + enable = lib.mkDefault true; + xwayland.enable = lib.mkDefault true; + + settings = { + # Minimal config - expand as needed + "$mod" = "SUPER"; + + # Example keybinds + bind = [ + "$mod, Return, exec, kitty" # Terminal + "$mod, Q, killactive" + "$mod, M, exit" + "$mod, F, fullscreen" + "$mod, Space, togglefloating" + + # Move focus + "$mod, h, movefocus, l" + "$mod, l, movefocus, r" + "$mod, k, movefocus, u" + "$mod, j, movefocus, d" + ]; + + # Visual settings + general = { + gaps_in = 5; + gaps_out = 10; + border_size = 2; + }; + + decoration = { rounding = 8; }; + }; + }; + + # User packages: Hyprland utilities + home.packages = with pkgs; + [ + # Uncomment as needed: + # wofi # Launcher + # waybar # Status bar + # dunst # Notifications + ]; + }; +} diff --git a/modules/nixos/desktops/niri.nix b/modules/nixos/desktops/niri.nix deleted file mode 100644 index bffcad9..0000000 --- a/modules/nixos/desktops/niri.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ pkgs, lib, ... }: { - imports = [ ./base.nix ]; - - # Niri - Scrollable-tiling Wayland compositor - programs.niri = { enable = lib.mkDefault true; }; - - # Wayland-specific portal - xdg.portal.wlr.enable = lib.mkDefault true; - - # Essential Wayland tools - environment.systemPackages = with pkgs; [ - # Wayland essentials - wayland - wl-clipboard - - # Screenshot tools - grim - slurp - - # Add your preferred apps here - # kitty # Terminal - # fuzzel # Launcher (recommended for niri) - # waybar # Bar - ]; -} diff --git a/modules/nixos/desktops/plasma.nix b/modules/nixos/desktops/plasma.nix index e26051c..4872624 100644 --- a/modules/nixos/desktops/plasma.nix +++ b/modules/nixos/desktops/plasma.nix @@ -1,7 +1,7 @@ -{ lib, ... }: { +{ lib, pkgs, user, ... }: { imports = [ ./base.nix ]; - # KDE Plasma 6 + # System-level: KDE Plasma 6 services.desktopManager.plasma6.enable = lib.mkDefault true; # SDDM display manager @@ -10,6 +10,33 @@ wayland.enable = lib.mkDefault true; }; - # KDE apps are managed by Plasma - # Add extra packages in your host config if needed + # System packages: KDE applications + environment.systemPackages = with pkgs; + [ + # KDE applications (uncomment as needed) + # kdePackages.kate # Text editor + # kdePackages.dolphin # File manager + # kdePackages.konsole # Terminal + # kdePackages.okular # Document viewer + # kdePackages.gwenview # Image viewer + # kdePackages.spectacle # Screenshot tool + ]; + + # User-level: KDE Plasma settings (optional) + home-manager.users.${user} = { + # KDE Plasma configuration via Home Manager (optional) + # programs.plasma = { + # enable = true; + # workspace = { + # theme = "breeze-dark"; + # colorScheme = "BreezeDark"; + # }; + # }; + + # User packages for KDE environment + home.packages = with pkgs; + [ + # Add user-specific apps here + ]; + }; } diff --git a/modules/nixos/desktops/themes/catppuccin.nix b/modules/nixos/desktops/themes/catppuccin.nix new file mode 100644 index 0000000..74142ff --- /dev/null +++ b/modules/nixos/desktops/themes/catppuccin.nix @@ -0,0 +1,64 @@ +{ lib, pkgs, user, ... }: { + # Catppuccin theme configuration + # Soothing pastel theme for both GTK and Qt applications + # Works with KDE Plasma, Hyprland, and other desktop environments + + # System packages: Theme engines and Catppuccin themes + environment.systemPackages = with pkgs; [ + libsForQt5.qtstyleplugin-kvantum # Kvantum Qt theme engine + qt6Packages.qtstyleplugin-kvantum # Kvantum for Qt6 + catppuccin-kvantum # Catppuccin theme for Kvantum + catppuccin-cursors # Catppuccin cursor theme + ]; + + home-manager.users.${user} = { + # GTK theming - Catppuccin Mocha variant + gtk = { + enable = true; + theme = { + name = "Catppuccin-Mocha-Standard-Blue-Dark"; + package = pkgs.catppuccin-gtk.override { + accents = [ + "blue" + ]; # Options: blue, flamingo, green, lavender, maroon, mauve, peach, pink, red, rosewater, sapphire, sky, teal, yellow + size = "standard"; # Options: standard, compact + variant = "mocha"; # Options: latte, frappe, macchiato, mocha + }; + }; + + # GTK icon theme + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + }; + + # Qt theming - Catppuccin via Kvantum + qt = { + enable = true; + platformTheme.name = "kvantum"; + style.name = "kvantum"; + }; + + # Kvantum configuration + xdg.configFile."Kvantum/kvantum.kvconfig".text = '' + [General] + theme=Catppuccin-Mocha-Blue + ''; + + # Cursor theme + home.pointerCursor = { + name = "catppuccin-mocha-blue-cursors"; + package = pkgs.catppuccin-cursors.mochaBlue; + size = 24; + gtk.enable = true; + x11.enable = true; + }; + + # XDG user directories for desktop environments + xdg.userDirs = { + enable = true; + createDirectories = true; + }; + }; +} diff --git a/modules/nixos/desktops/themes/default.nix b/modules/nixos/desktops/themes/default.nix new file mode 100644 index 0000000..649143d --- /dev/null +++ b/modules/nixos/desktops/themes/default.nix @@ -0,0 +1,33 @@ +{ lib, pkgs, user, ... }: { + # Default theme configuration for desktop + # Simple Adwaita-dark theme that works across all desktop environments + # Switch to catppuccin.nix or create your own for custom themes + + home-manager.users.${user} = { + # GTK theming - Adwaita Dark + gtk = { + enable = lib.mkDefault true; + theme = lib.mkDefault { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = lib.mkDefault { + name = "Adwaita"; + package = pkgs.adwaita-icon-theme; + }; + }; + + # Qt theming - Use GTK theme for consistency + qt = { + enable = lib.mkDefault true; + platformTheme.name = lib.mkDefault "gtk"; + style.name = lib.mkDefault "adwaita-dark"; + }; + + # XDG user directories for desktop environments + xdg.userDirs = { + enable = true; + createDirectories = true; + }; + }; +} diff --git a/modules/nixos/home/default.nix b/modules/nixos/home/default.nix index 867d3dc..244869e 100644 --- a/modules/nixos/home/default.nix +++ b/modules/nixos/home/default.nix @@ -1,3 +1,10 @@ { config, pkgs, lib, ... }: { - imports = [ ../../home/rsydn/base.nix ../../home/rsydn/shell/fish.nix ]; + # Minimal CLI-only Home Manager configuration + # Used for servers, VMs, and headless systems + # Desktop configs are handled directly in nixos/desktops/* modules + + imports = [ + ../../home/rsydn/base.nix # Base CLI tools (git, tmux, etc.) + ../../home/rsydn/shell/fish.nix # Shell configuration + ]; } diff --git a/modules/nixos/home/desktop.nix b/modules/nixos/home/desktop.nix deleted file mode 100644 index 1fbd92b..0000000 --- a/modules/nixos/home/desktop.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ ... }: { - # Desktop user configuration (for Hyprland/Niri setups) - - imports = [ - # Base CLI tools - ../../home/rsydn/base.nix - - # Desktop additions - ../../home/rsydn/desktop/base.nix - ../../home/rsydn/desktop/apps/browsers.nix - ../../home/rsydn/desktop/apps/terminals.nix - - # Choose your compositor - ../../home/rsydn/desktop/wayland - # Enable specific compositor in wayland/default.nix - - # Add theme when ready - # ../../home/rsydn/desktop/themes/catppuccin.nix - ]; - - # Override options here - # programs.kitty.enable = true; -} diff --git a/modules/nixos/home/gaming.nix b/modules/nixos/home/gaming.nix deleted file mode 100644 index 8d1cc96..0000000 --- a/modules/nixos/home/gaming.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ pkgs, ... }: { - # Gaming user configuration (for KDE Plasma) - - imports = [ - # Base CLI tools - ../../home/rsydn/base.nix - - # Desktop base - ../../home/rsydn/desktop/base.nix - ../../home/rsydn/desktop/apps/browsers.nix - ]; - - # Gaming-specific user packages - home.packages = with pkgs; - [ - # Communication - # discord - # teamspeak_client - - # Streaming/Recording - # obs-studio - - # Media - # spotify - ]; - - # KDE-specific settings (optional) - # programs.plasma = { - # enable = true; - # workspace.theme = "breeze-dark"; - # }; -} diff --git a/modules/nixos/hosts/desktop.nix b/modules/nixos/hosts/desktop.nix index 01d2d32..dcf6b43 100644 --- a/modules/nixos/hosts/desktop.nix +++ b/modules/nixos/hosts/desktop.nix @@ -1,67 +1,44 @@ -{ lib, pkgs, ... }: { +{ lib, pkgs, ... }: +let + hardwareConfigPath = builtins.toString ./. + + "/../desktops/hardware-configuration.nix"; + hardwareModule = if builtins.pathExists hardwareConfigPath then + import hardwareConfigPath + else + (_: { }); +in { # Unified desktop configuration for gaming and development # Includes both KDE Plasma and Hyprland - switch at login screen + # Import hardware and desktop configurations + imports = [ + # Hardware + hardwareModule + + # 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 # Or use themes/default.nix for Adwaita + + # Gaming & Features + ../desktops/gaming.nix + ../bluetooth.nix + ]; + # Boot configuration with CachyOS LTS kernel boot = { loader.systemd-boot.enable = true; loader.efi.canTouchEfiVariables = true; kernelPackages = pkgs.linuxPackages_cachyos-lts; - # Hardware-specific settings (adjust for your hardware) - # initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "sd_mod" ]; }; # Hostname networking.hostName = "desktop"; - # Root filesystem configuration (REQUIRED - adjust for your hardware) - # To generate proper config, run: nixos-generate-config --show-hardware-config - fileSystems."/" = lib.mkDefault { - device = "/dev/disk/by-label/nixos"; - fsType = "ext4"; - }; - - fileSystems."/boot" = lib.mkDefault { - device = "/dev/disk/by-label/boot"; - fsType = "vfat"; - }; - - # Swap configuration (optional, adjust as needed) - # swapDevices = [ { device = "/dev/disk/by-label/swap"; } ]; - - # Desktop environments - both available at login screen - imports = [ - ../desktops/plasma.nix # For gaming sessions - ../desktops/hyprland.nix # For development sessions - # ../desktops/niri.nix # Available for future use - ../bluetooth.nix - ../desktop/gaming.nix # Gaming configuration (Steam, Proton, Vulkan, etc.) - ]; - - # GPU drivers (uncomment and adjust for your hardware) - # For NVIDIA: - # services.xserver.videoDrivers = [ "nvidia" ]; - # hardware.nvidia = { - # modesetting.enable = true; - # powerManagement.enable = false; - # open = false; # Use proprietary driver - # package = config.boot.kernelPackages.nvidiaPackages.stable; - # }; - # - # For AMD: - # services.xserver.videoDrivers = [ "amdgpu" ]; - # - # For Intel: - # services.xserver.videoDrivers = [ "modesetting" ]; - - # Additional system packages - environment.systemPackages = with pkgs; - [ - # Add system-wide tools here if needed - # Gaming packages are configured in ../desktop/gaming.nix - # Development tools are better sourced via `nix develop` shells - ]; - # This value determines the NixOS release compatibility system.stateVersion = "24.05"; } From b95063009b331eb9bcc0aa5ddabc0390f612eae5 Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Fri, 24 Oct 2025 17:17:26 +0700 Subject: [PATCH 6/9] chore: flake check cleaning --- modules/darwin/home/default.nix | 8 +------- modules/home/rsydn/base.nix | 8 ++------ modules/nixos/desktops/apps/browsers.nix | 3 +-- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/modules/darwin/home/default.nix b/modules/darwin/home/default.nix index 363cbda..a8d3ab9 100644 --- a/modules/darwin/home/default.nix +++ b/modules/darwin/home/default.nix @@ -1,10 +1,4 @@ -{ - config, - pkgs, - lib, - ... -}: -{ +{ config, pkgs, lib, ... }: { # Import shared cross-platform home configuration imports = [ ../../home/rsydn/base.nix diff --git a/modules/home/rsydn/base.nix b/modules/home/rsydn/base.nix index e9f84ec..cc50465 100644 --- a/modules/home/rsydn/base.nix +++ b/modules/home/rsydn/base.nix @@ -1,5 +1,4 @@ -{ pkgs, lib, ... }: -{ +{ pkgs, lib, ... }: { imports = [ ./programs/helix.nix ./programs/neovim.nix @@ -20,10 +19,7 @@ programs.git.enable = true; - home.packages = with pkgs; [ - docker - docker-compose - ]; + home.packages = with pkgs; [ docker docker-compose ]; rsydn.aiTools = { enable = lib.mkDefault true; diff --git a/modules/nixos/desktops/apps/browsers.nix b/modules/nixos/desktops/apps/browsers.nix index 257b08d..c61d233 100644 --- a/modules/nixos/desktops/apps/browsers.nix +++ b/modules/nixos/desktops/apps/browsers.nix @@ -1,5 +1,4 @@ -{ pkgs, user, ... }: -{ +{ pkgs, user, ... }: { # Browser configurations for desktop users home-manager.users.${user} = { From 2bb49bba38b061be5d2c770a33028a649aa2edfa Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Fri, 24 Oct 2025 21:15:08 +0700 Subject: [PATCH 7/9] feat: add customized fastfetch config --- modules/home/rsydn/base.nix | 1 + modules/home/rsydn/programs/fastfetch.nix | 111 ++++++++++++++++++ .../rsydn/programs/fastfetch/oguri-logo.txt | 18 +++ 3 files changed, 130 insertions(+) create mode 100644 modules/home/rsydn/programs/fastfetch.nix create mode 100644 modules/home/rsydn/programs/fastfetch/oguri-logo.txt diff --git a/modules/home/rsydn/base.nix b/modules/home/rsydn/base.nix index cc50465..bf9c028 100644 --- a/modules/home/rsydn/base.nix +++ b/modules/home/rsydn/base.nix @@ -1,5 +1,6 @@ { pkgs, lib, ... }: { imports = [ + ./programs/fastfetch.nix ./programs/helix.nix ./programs/neovim.nix ./shell/tmux.nix diff --git a/modules/home/rsydn/programs/fastfetch.nix b/modules/home/rsydn/programs/fastfetch.nix new file mode 100644 index 0000000..949c082 --- /dev/null +++ b/modules/home/rsydn/programs/fastfetch.nix @@ -0,0 +1,111 @@ +{ config, lib, pkgs, ... }: + +{ + home.packages = [ pkgs.fastfetch ]; + + # Copy the custom logo file + xdg.configFile."fastfetch/oguri-logo.txt".source = ./fastfetch/oguri-logo.txt; + + xdg.configFile."fastfetch/config.jsonc".text = builtins.toJSON { + "$schema" = + "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json"; + + logo = { + type = "file"; + source = "~/.config/fastfetch/oguri-logo.txt"; + padding = { + top = 1; + right = 2; + }; + }; + + display = { + separator = " → "; + color = { + keys = "cyan"; + title = "blue"; + }; + }; + + modules = [ + { + type = "title"; + format = "{user-name}@{host-name}"; + } + { + type = "separator"; + string = "─"; + } + { + type = "os"; + key = "OS"; + keyColor = "cyan"; + } + { + type = "kernel"; + key = "Kernel"; + } + { + type = "uptime"; + key = "Uptime"; + } + { + type = "packages"; + key = "Packages"; + } + { + type = "shell"; + key = "Shell"; + } + { + type = "display"; + key = "Display"; + compactType = "scaled"; + } + { + type = "de"; + key = "DE"; + } + { + type = "wm"; + key = "WM"; + } + { + type = "terminal"; + key = "Terminal"; + } + { + type = "terminalfont"; + key = "Font"; + } + { + type = "cpu"; + key = "CPU"; + temp = true; + } + { + type = "gpu"; + key = "GPU"; + temp = true; + } + { + type = "memory"; + key = "Memory"; + } + { + type = "disk"; + key = "Disk (/)"; + folders = "/"; + } + { + type = "separator"; + string = "─"; + } + { + type = "colors"; + paddingLeft = 2; + symbol = "circle"; + } + ]; + }; +} diff --git a/modules/home/rsydn/programs/fastfetch/oguri-logo.txt b/modules/home/rsydn/programs/fastfetch/oguri-logo.txt new file mode 100644 index 0000000..d49bea4 --- /dev/null +++ b/modules/home/rsydn/programs/fastfetch/oguri-logo.txt @@ -0,0 +1,18 @@ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣽⣶⣿⣏⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣼⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣫ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⡿⣹⣿⡇⢸⣿⢿⣿⣿⡇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⡿⣁⣇⣿⠀⠈⡟⠘⣿⣿⡇⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣟⢀⠿⡏⣽⣴⣦⣿⠀⣹⣿⡇⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣷⣶⣿⣿⣿⣿⣧⣿⣿⣷⣀⡀⣿⡟⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⣸⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⣷⣞⣿⣿⣿⣿⣿⡿⣹⠏⠀⣿⠃⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣿⣿⣿⣯⢀⣇⣀⡸⠁⢸⠏⢿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣏⡉⠻⣿⣿⡇⢠⣿⣄⢸⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⣸⣿⣿⣿⣿⣿⣦⣭⣑⢛⠋⠁⢸⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢸⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢯⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⢿⣿⣿⣿⣿ +⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⢠⣿⣿⣿⣿⣿ +⣿⣷⣿⣿⡿⠿⠿⠟⠛⣻⣿⣿⣿⣿⣿⣿⣿⡿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⣠⣿⣿⣿⣟⣿⣿ +⣿⣏⠁⢀⣶⣶⣶⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠈⠁⠉⠛⢿⣿⣿⣿⣴⣿⣿⠿⢋⡾⢡⣿ From 7a5dab4e191e683e17dd2aebe980b4cac6ece81b Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Mon, 27 Oct 2025 09:34:52 +0700 Subject: [PATCH 8/9] chore: desktop setup --- DESKTOP-SETUP.md | 132 -------------------------------- modules/nixos/hosts/desktop.nix | 16 ++-- 2 files changed, 9 insertions(+), 139 deletions(-) delete mode 100644 DESKTOP-SETUP.md diff --git a/DESKTOP-SETUP.md b/DESKTOP-SETUP.md deleted file mode 100644 index 3c467e2..0000000 --- a/DESKTOP-SETUP.md +++ /dev/null @@ -1,132 +0,0 @@ -# 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: - -```nix -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: - -```nix -{ 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`: - -```nix -imports = [ - ./hyprland # Uncomment the compositor you want - # ./niri -]; -``` - -### 5. Build and Switch - -```bash -# 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: - -```nix -# Before -imports = [ ../desktops/hyprland.nix ]; - -# After -imports = [ ../desktops/plasma.nix ]; -``` - -Then rebuild your system. diff --git a/modules/nixos/hosts/desktop.nix b/modules/nixos/hosts/desktop.nix index dcf6b43..8197023 100644 --- a/modules/nixos/hosts/desktop.nix +++ b/modules/nixos/hosts/desktop.nix @@ -1,12 +1,10 @@ { lib, pkgs, ... }: let - hardwareConfigPath = builtins.toString ./. - + "/../desktops/hardware-configuration.nix"; - hardwareModule = if builtins.pathExists hardwareConfigPath then - import hardwareConfigPath - else - (_: { }); -in { + hardwareConfigPath = builtins.toString ./. + "/../desktops/hardware-configuration.nix"; + hardwareModule = + if builtins.pathExists hardwareConfigPath then import hardwareConfigPath else (_: { }); +in +{ # Unified desktop configuration for gaming and development # Includes both KDE Plasma and Hyprland - switch at login screen @@ -15,6 +13,10 @@ in { # Hardware hardwareModule + # Audio & Graphics + ../audio.nix + ../graphics.nix + # Desktop Environments ../desktops/plasma.nix # KDE Plasma (for gaming) ../desktops/hyprland # Hyprland (for development) From 9df9c6f07f10c5f5ec34e2051c05d9599fb0a3d4 Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Mon, 27 Oct 2025 09:40:29 +0700 Subject: [PATCH 9/9] chore: desktop setup --- modules/nixos/hosts/desktop.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/nixos/hosts/desktop.nix b/modules/nixos/hosts/desktop.nix index 8197023..7bf3144 100644 --- a/modules/nixos/hosts/desktop.nix +++ b/modules/nixos/hosts/desktop.nix @@ -1,10 +1,12 @@ { lib, pkgs, ... }: let - hardwareConfigPath = builtins.toString ./. + "/../desktops/hardware-configuration.nix"; - hardwareModule = - if builtins.pathExists hardwareConfigPath then import hardwareConfigPath else (_: { }); -in -{ + hardwareConfigPath = builtins.toString ./. + + "/../desktops/hardware-configuration.nix"; + hardwareModule = if builtins.pathExists hardwareConfigPath then + import hardwareConfigPath + else + (_: { }); +in { # Unified desktop configuration for gaming and development # Includes both KDE Plasma and Hyprland - switch at login screen