nixos/nate/desktop-configuration.nix

161 lines
4.1 KiB
Nix

{ 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?
};
}