feat(desktop): move desktop services config to nixos modules

This commit is contained in:
Mohammad Rafiq 2025-06-14 17:53:42 +08:00
parent 3040105f9c
commit 527a166a86
No known key found for this signature in database
6 changed files with 98 additions and 114 deletions

View file

@ -1,36 +0,0 @@
{
config,
lib,
osConfig,
pkgs,
...
}:
let
cfg = config.desktop;
upstreamCfg = osConfig.desktop;
inherit (lib) mkMerge mkIf mkEnableOption;
in
{
config = mkIf upstreamCfg.enable (mkMerge [
(lib.mkIf (osConfig.hardware.gpu == "nvidia") {
})
(lib.mkIf osConfig.desktop.enableSpotifyd {
services.spotifyd.enable = true;
services.spotifyd.settings.global = {
device_name = "${osConfig.system.hostname}";
device_type = "computer";
zeroconf_port = 5353;
};
})
(lib.mkIf osConfig.desktop.enableSteam {
home.persistence."/persist/home/${config.snowfallorg.user.name}".directories = [
".local/share/Steam"
];
})
(lib.mkIf osConfig.desktop.enableSunshine {
home.persistence."/persist/home/${config.snowfallorg.user.name}".directories = [
".config/sunshine"
];
})
]);
}

View file

@ -5,9 +5,14 @@
...
}:
let
inherit (lib) mkEnableOption mkIf singleton;
inherit (lib)
mkEnableOption
mkIf
singleton
optional
;
inherit (lib.pantheon) mkStrOption;
inherit (pkgs) wl-clipboard-rs;
inherit (pkgs) font-awesome wl-clipboard-rs;
cfg = config.desktop;
in
{
@ -16,49 +21,16 @@ in
enableWaylandUtilities = mkEnableOption "";
mainMonitor = {
id = mkStrOption;
scale = lib.pantheon.mkStrOption;
resolution = lib.pantheon.mkStrOption;
refresh-rate = lib.pantheon.mkStrOption;
scale = mkStrOption;
resolution = mkStrOption;
refresh-rate = mkStrOption;
};
enableSpotifyd = lib.mkEnableOption "";
enableSteam = lib.mkEnableOption "";
enableVR = lib.mkEnableOption "";
enableSunshine = lib.mkEnableOption "";
};
config = lib.mkMerge [
{
fonts.packages = with pkgs; [
font-awesome
];
}
(mkIf cfg.enableWaylandUtilities {
home-manager.sharedModules = singleton { home.packages = [ wl-clipboard-rs ]; };
})
(lib.mkIf config.desktop.enableSteam {
programs.steam = {
enable = true;
gamescopeSession.enable = true;
};
})
(lib.mkIf config.desktop.enableVR {
programs.alvr = {
enable = true;
openFirewall = true;
};
environment.systemPackages = [ pkgs.android-tools ];
})
(lib.mkIf config.desktop.enableSunshine {
services.sunshine = {
enable = true;
capSysAdmin = true;
openFirewall = true;
settings = {
sunshine_name = config.system.hostname;
origin_web_ui_allowed = "wan";
};
applications = { };
};
})
];
config = mkIf cfg.enable {
fonts.packages = singleton font-awesome;
home-manager.sharedModules = optional cfg.enableWaylandUtilities {
home.packages = [ wl-clipboard-rs ];
};
};
}

View file

@ -0,0 +1,52 @@
{ config, lib, ... }:
let
inherit (lib)
mkMerge
singleton
mkEnableOption
mkIf
;
cfg = config.desktop.services;
in
{
options.desktop.services = {
spotifyd.enable = mkEnableOption "";
sunshine.enable = mkEnableOption "";
steam.enable = mkEnableOption "";
};
config = mkMerge [
(mkIf cfg.sunshine.enable {
services.sunshine = {
enable = true;
capSysAdmin = true;
openFirewall = true;
settings = {
sunshine_name = config.system.hostname;
origin_web_ui_allowed = "wan";
};
applications = { };
};
home-manager.sharedModules = singleton { persistDirs = singleton ".config/sunshine"; };
})
(mkIf cfg.spotifyd.enable {
networking.firewall.allowedTCPPorts = [ 5353 ];
networking.firewall.allowedUDPPorts = [ 5353 ];
home-manager.sharedModules = singleton {
services.spotifyd.enable = true;
services.spotifyd.settings.global = {
device_name = "${config.system.hostname}";
device_type = "computer";
zeroconf_port = 5353;
};
};
})
(mkIf cfg.steam.enable {
programs.steam = {
enable = true;
gamescopeSession.enable = true;
};
home-manager.sharedModules = singleton { persistDirs = singleton ".local/share/Steam"; };
})
];
}

View file

@ -1,30 +1,24 @@
{ config, lib, ... }:
{
config = lib.mkMerge [
{
networking = {
enableIPv6 = false;
useDHCP = lib.mkDefault true;
hostName = config.system.hostname;
networkmanager.enable = true;
};
config = {
networking = {
enableIPv6 = false;
useDHCP = lib.mkDefault true;
hostName = config.system.hostname;
networkmanager.enable = true;
};
services.openssh = {
enable = true;
settings = {
PrintMotd = true;
};
services.openssh = {
enable = true;
settings = {
PrintMotd = true;
};
};
services.tailscale = {
enable = true;
authKeyFile = config.sops.secrets."keys/tailscale".path;
};
environment.persistence."/persist".directories = [ "/var/lib/tailscale" ];
}
(lib.mkIf config.desktop.enableSpotifyd {
networking.firewall.allowedTCPPorts = [ 5353 ];
networking.firewall.allowedUDPPorts = [ 5353 ];
})
];
services.tailscale = {
enable = true;
authKeyFile = config.sops.secrets."keys/tailscale".path;
};
environment.persistence."/persist".directories = [ "/var/lib/tailscale" ];
};
}

View file

@ -9,9 +9,5 @@
status-bar.waybar.enable = true;
terminal.ghostty.enable = true;
window-manager.hyprland.enable = true;
enableSpotifyd = true;
enableSteam = true;
enableVR = true;
enableSunshine = true;
};
}

View file

@ -1,4 +1,3 @@
{ pkgs, ... }:
{
imports = [
../common.nix
@ -21,11 +20,18 @@
usb.automount = true;
};
desktop.mainMonitor = {
id = "desc:OOO AN-270W04K";
scale = "2";
resolution = "3840x2160";
refresh-rate = "60";
desktop = {
services = {
steam.enable = true;
sunshine.enable = true;
spotifyd.enable = true;
};
mainMonitor = {
id = "desc:OOO AN-270W04K";
scale = "2";
resolution = "3840x2160";
refresh-rate = "60";
};
};
services = {