{ config, lib, inputs, outputs, pkgs, timeZone, system, ... }: let supportedDesktops = [ "sway" "niri" ]; supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops; deskCfg = config.deskCfg; in { options.deskCfg = { de = lib.mkOption { default = "niri"; type = lib.types.str; description = "Desktop Environment"; }; userName = lib.mkOption { type = lib.types.str; description = "Main username for system"; }; hostName = lib.mkOption { type = lib.types.str; description = "Hostname for system"; }; fullName = lib.mkOption { type = lib.types.str; default = "User"; description = "Full display name for the user"; }; installGaming = lib.mkOption { type = lib.types.bool; default = true; description = "Whether to install gaming software or not"; }; }; imports = [ ../shared/modules/user/main_user.nix modules/sway/sway_conf.nix modules/niri/niri_conf.nix ../shared/modules/services/motu-m4-combined.nix ../shared/modules/system/power_manager.nix ../shared/modules/system/noctalia-system.nix ]; config = { assertions = [ { assertion = builtins.elem deskCfg.de supportedDesktops; message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}"; } ]; # Stylix theming - auto-generate color scheme from wallpaper stylix = { enable = true; image = ./wallpaper.png; polarity = "dark"; # System-wide cursor cursor = { package = pkgs.bibata-cursors; name = "Bibata-Modern-Classic"; size = 32; }; # Fonts fonts = { serif = { package = pkgs.lato; name = "Lato"; }; sansSerif = { package = pkgs.lato; name = "Lato"; }; monospace = { package = pkgs.maple-mono.NF; name = "Maple Mono NF"; }; emoji = { package = pkgs.noto-fonts-color-emoji; name = "Noto Color Emoji"; }; sizes = { applications = 12; desktop = 10; popups = 10; terminal = 11; }; }; # Icon theme for tray applets (nm-applet, etc.) iconTheme = { enable = true; package = pkgs.papirus-icon-theme; light = "Papirus-Light"; dark = "Papirus-Dark"; }; # Let plymouth use its own theme targets.plymouth.enable = false; }; nixpkgs.overlays = [ inputs.nur.overlays.default ]; # Enable flakes feature nix.settings.experimental-features = [ "nix-command" "flakes" ]; # Use the systemd-boot EFI boot loader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; networking.hostName = deskCfg.hostName; # Define your hostname. networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. time.timeZone = timeZone; main_user = { enable = true; userName = deskCfg.userName; fullName = deskCfg.fullName; isDesktopUser = true; extraGroups = [ "dialout" "docker" "scanner" "lp" ]; }; swaywm = { enable = deskCfg.de == "sway"; useNonFree = true; installGaming = deskCfg.installGaming; systemPackages = []; }; niriwm = { enable = deskCfg.de == "niri"; useNonFree = true; installGaming = deskCfg.installGaming; user = deskCfg.userName; systemPackages = []; }; services.motu-m4-combined = { enable = true; user = deskCfg.userName; latencyMs = 10; }; power_manager = { enable = true; backend = "power-profiles-daemon"; # Required for Noctalia power profile widget }; # Enable Noctalia shell system services noctaliaSystem.enable = true; system.stateVersion = "23.11"; # Did you read the comment? }; }