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"; }