{ config, lib, pkgs, util, ... }: # RetroArch with the selected PlayStation and Sega Saturn cores. let cfg = config.modules.desktop.emulation.retroarch; user = config.user.name; in { options.modules.desktop.emulation.retroarch = { enable = lib.mkEnableOption "RetroArch with PlayStation and Sega Saturn cores"; browserDirectory = lib.mkOption { type = lib.types.str; default = ""; description = "Directory where RetroArch starts its content browser."; }; }; config = lib.mkIf cfg.enable { home-manager.users.${user} = { home.packages = [ (pkgs.wrapRetroArch { cores = with pkgs.libretro; [ beetle-psx-hw beetle-saturn ]; settings = { savefiles_in_content_dir = "false"; savestates_in_content_dir = "false"; system_directory = "/home/${user}/.config/retroarch/system"; video_fullscreen = "true"; sort_savefiles_enable = "true"; sort_savestates_enable = "true"; cloud_sync_enable = "true"; cloud_sync_driver = "webdav"; webdav_url = "https://games.alexion.dev/api/sync/retroarch/"; cloud_sync_sync_saves = "true"; cloud_sync_sync_configs = "true"; cloud_sync_sync_thumbs = "false"; cloud_sync_sync_system = "false"; cloud_sync_sync_mode = "0"; cloud_sync_destructive = "false"; } // lib.optionalAttrs (cfg.browserDirectory != "") { rgui_browser_directory = cfg.browserDirectory; }; }) ]; }; registry.window-icon.${config.networking.hostName}.retroarch = { class = "com.libretro.RetroArch"; icon = util.glyph "f11b"; }; }; }