diff --git a/options/custom/default.nix b/options/custom/default.nix index c5bd7f2..b4481cb 100644 --- a/options/custom/default.nix +++ b/options/custom/default.nix @@ -35,12 +35,7 @@ in { rounding = mkOption {default = 16.0;}; ### Misc - desktop = mkOption { - default = - if config.custom.full - then "niri" - else "gnome"; - }; + desktop = mkOption {default = null;}; lockscreen = mkOption {default = "hyprlock";}; menu = mkOption {default = "rofi";}; diff --git a/options/custom/desktops/default.nix b/options/custom/desktops/default.nix index b695905..4305757 100644 --- a/options/custom/desktops/default.nix +++ b/options/custom/desktops/default.nix @@ -7,7 +7,7 @@ with lib; let cfg = config.custom.desktops; in { options.custom.desktops = { - enable = mkOption {default = config.custom.minimal;}; + enable = mkOption {default = isString config.custom.desktop;}; }; config = mkIf cfg.enable { @@ -15,6 +15,7 @@ in { gnome.enable = config.custom.desktop == "gnome"; hyprland.enable = config.custom.desktop == "hyprland"; kde.enable = config.custom.desktop == "kde"; + kodi.enable = config.custom.desktop == "kodi"; niri.enable = config.custom.desktop == "niri"; sway.enable = config.custom.desktop == "sway"; }; diff --git a/options/custom/desktops/kodi/default.nix b/options/custom/desktops/kodi/default.nix new file mode 100644 index 0000000..4746104 --- /dev/null +++ b/options/custom/desktops/kodi/default.nix @@ -0,0 +1,85 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.custom.desktops.kodi; + hm = config.home-manager.users.${config.custom.username}; +in { + options.custom.desktops.kodi = { + enable = mkOption {default = false;}; + firewall = mkOption {default = false;}; + }; + + config = mkIf cfg.enable { + # https://github.com/xbmc/xbmc + # https://kodi.wiki/view/Main_Page + # https://wiki.archlinux.org/title/Kodi + # https://wiki.nixos.org/wiki/Kodi + services = { + displayManager.autoLogin = { + enable = true; + user = "kodi"; + }; + + xserver = { + enable = true; + displayManager.lightdm.greeter.enable = false; + + desktopManager.kodi = { + enable = true; + + # https://wiki.nixos.org/wiki/Kodi#Plugins + package = pkgs.unstable.kodi-gbm.withPackages (kodiPackages: + with kodiPackages; [ + youtube # https://github.com/anxdpanic/plugin.video.youtube + ]); + }; + }; + }; + + # https://kodi.wiki/view/Smartphone/tablet_remotes#Firewall + # https://wiki.nixos.org/wiki/Kodi#Access_from_other_machines + networking.firewall = mkIf cfg.firewall { + allowedTCPPorts = [8080]; + allowedUDPPorts = [9777]; + }; + + users.users.kodi = { + isNormalUser = true; + }; + + home-manager.users.kodi = { + home = { + homeDirectory = "/home/kodi"; + stateVersion = hm.home.stateVersion; + username = "kodi"; + }; + + programs = { + home-manager.enable = true; + + kodi = { + enable = true; + package = config.services.xserver.desktopManager.kodi.package; + + # advancedsettings.xml + # https://kodi.wiki/view/Advancedsettings.xml + settings = { + # guisettings.xml + # https://kodi.wiki/view/Advancedsettings.xml#guisettings.xml_Setting_Conversion + # https://github.com/xbmc/xbmc/blob/master/system/settings/settings.xml + + # https://kodi.wiki/view/Webserver + services = { + webserver = "true"; + webserverauthentication = "false"; + }; + }; + }; + }; + }; + }; +}