{ config, lib, pkgs, ... }: with lib; let cfg = config.roles.kodi; in { options.roles.kodi = { enable = mkEnableOption "Enable Kodi"; autologin = mkOption { default = false; }; wayland = mkOption { default = true; }; }; config = let kodiBasePkg = if cfg.wayland then pkgs.kodi-wayland else pkgs.kodi; kodiPkg = kodiBasePkg.withPackages (pkgs: with pkgs; [ jellyfin steam-launcher steam-library youtube ]); in mkIf cfg.enable { users.extraUsers.kodi.isNormalUser = true; networking.firewall = { allowedTCPPorts = [ 8080 ]; allowedUDPPorts = [ 8080 ]; }; services = if cfg.autologin then mkMerge [ mkIf cfg.wayland { cage = mkIf cfg.wayland { user = "kodi"; program = "${kodiPkg}/bin/kodi-standalone"; enable = true; }; xserver = { enable = false; autorun = false; }; } mkIf (!cfg.wayland) { xserver = { enable = true; desktopManager.kodi = { enable = true; package = kodiPkg; }; displayManager.lightdm = { enable = true; greeter.enable = false; }; }; displayManager = { autoLogin.enable = true; autoLogin.user = "kodi"; defaultSession = "kodi"; sessionData.autologinSession = "kodi"; }; } ] else {}; }; }