Files
nixos-configs/roles/kodi/default.nix
2024-10-21 12:53:32 -07:00

83 lines
1.9 KiB
Nix

{ 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 = "gamescope -f --hdr-enabled ${kodiPkg}/bin/kodi-standalone";
program =
let
kodiGamescope = pkgs.writeShellApplication {
name = "kodi-gamescope";
runtimeInputs = [ kodiPkg pkgs.gamescope ];
text = ''
${pkgs.gamescope}/bin/gamescope --hdr-enabled -f -- ${kodiPkg}/bin/kodi-standalone
'';
};
in
"${lib.getExe kodiGamescope}";
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 {};
};
}