From 771a0df831ae32894ae6cdcd3d14bdb8cb564aa0 Mon Sep 17 00:00:00 2001 From: alexion Date: Wed, 21 Oct 2026 00:01:31 -0400 Subject: [PATCH] feat(romm): package version 5.4.0 --- configs/nixos/modules/services/romm.nix | 14 +++ docs/03 wrk/tasks/0015-romm-5-4-package.md | 4 +- src/flake/packages/default.nix | 2 + src/flake/packages/romm.nix | 124 +++++++++++++++++++++ 4 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 src/flake/packages/romm.nix diff --git a/configs/nixos/modules/services/romm.nix b/configs/nixos/modules/services/romm.nix index 0e0c134..1aff3b7 100644 --- a/configs/nixos/modules/services/romm.nix +++ b/configs/nixos/modules/services/romm.nix @@ -1,6 +1,7 @@ { config, lib, + pkgs, ... }: let @@ -31,13 +32,26 @@ in services.romm = { enable = true; + package = pkgs.alexion.romm; group = "storage"; database.createLocally = true; redis.createLocally = true; watcher.enable = true; + extraEnvironment.ROM_CONVERTO_ENABLED = "false"; inherit (cfg) environmentFile; }; + systemd.tmpfiles.settings."10-romm"."${config.services.romm.dataDir}/config/config.yml"."L+".argument = + toString ( + (pkgs.formats.yaml { }).generate "romm-config.yml" { + emulatorjs.auto_save_sync = false; + filesystem.structure = { + default = "roms/{platform}/{game}"; + firmware = "bios/{platform}"; + }; + } + ); + users.users = { romm.uid = config.registry."stable-uid".${config.networking.hostName}.romm; redis-romm.uid = config.registry."stable-uid".${config.networking.hostName}."redis-romm"; diff --git a/docs/03 wrk/tasks/0015-romm-5-4-package.md b/docs/03 wrk/tasks/0015-romm-5-4-package.md index 6ca1746..7a1bb36 100644 --- a/docs/03 wrk/tasks/0015-romm-5-4-package.md +++ b/docs/03 wrk/tasks/0015-romm-5-4-package.md @@ -3,8 +3,8 @@ aliases: - "0015" - RomM 5.4 Package date-created: 2026-10-19 19:40 -date-modified: 2026-10-19 19:40 -status: open +date-modified: 2026-10-21 00:01 +status: closed area: "[[homelab]]" blocked-by: - "[[0014-romm-guest]]" diff --git a/src/flake/packages/default.nix b/src/flake/packages/default.nix index 30078bc..c09becb 100644 --- a/src/flake/packages/default.nix +++ b/src/flake/packages/default.nix @@ -4,5 +4,7 @@ inherit root; }; + romm = pkgs.callPackage ./romm.nix { }; + waybar = pkgs.callPackage ./waybar.nix { }; } diff --git a/src/flake/packages/romm.nix b/src/flake/packages/romm.nix new file mode 100644 index 0000000..24d2668 --- /dev/null +++ b/src/flake/packages/romm.nix @@ -0,0 +1,124 @@ +{ + buildNpmPackage, + fetchFromGitHub, + lib, + python3, + romm, +}: +romm.overrideAttrs ( + finalAttrs: previousAttrs: + let + frontend = buildNpmPackage { + pname = "romm-frontend"; + inherit (finalAttrs) version; + src = "${finalAttrs.src}/frontend"; + + npmDepsHash = "sha256-f5IcpOVv7JYFzUPkZIq5nbT3dS1f/KCSllh8Vkgl1P0="; + npmFlags = [ "--ignore-scripts" ]; + makeCacheWritable = true; + + installPhase = '' + runHook preInstall + cp -r dist $out + chmod u+w $out/assets + cp -r assets/. $out/assets/ + runHook postInstall + ''; + }; + + # RomM 5.4 requires packages absent from the Nixpkgs 5.2 environment. + pythonEnv = python3.withPackages ( + ps: with ps; [ + aiohttp + alembic + anyio + apprise + asyncssh + authlib + bcrypt + colorama + croniter + cryptography + defusedxml + email-validator + fastapi + gunicorn + httpx + httpx2 + itsdangerous + jinja2 + joserfc + mariadb + mutagen + mysql-connector-python + opentelemetry-distro + opentelemetry-exporter-otlp + opentelemetry-instrumentation-aiohttp-client + opentelemetry-instrumentation-fastapi + opentelemetry-instrumentation-httpx + opentelemetry-instrumentation-redis + opentelemetry-instrumentation-sqlalchemy + passlib + pillow + psycopg + pydantic + pydash + python-dotenv + python-magic + python-multipart + python-socketio + pyyaml + redis + rq + rq-scheduler + sentry-sdk + sqlalchemy + starlette + streaming-form-data + strsimpy + ua-parser + unidecode + uvicorn + uvicorn-worker + watchfiles + yarl + zipfile-inflate64 + zstandard + ] + ); + in + { + version = "5.4.0"; + + src = fetchFromGitHub { + owner = "rommapp"; + repo = "romm"; + tag = finalAttrs.version; + hash = "sha256-oIYEdIAJgXkcqjZtWlWKD/NFiQ3gbo7gxwLhqZOCWpM="; + }; + + postPatch = previousAttrs.postPatch + '' + # Redis 8.0.1 removed this argument. + # RomM disables the related maintenance notifications. + substituteInPlace backend/handler/redis_handler.py \ + --replace-fail 'from redis.maint_notifications import MaintNotificationsConfig' "" \ + --replace-fail ' "maint_notifications_config": MaintNotificationsConfig(enabled=False),' "" + ''; + + installPhase = + lib.replaceStrings + [ + "${previousAttrs.passthru.frontend}" + "${previousAttrs.passthru.pythonEnv}" + ] + [ + "${frontend}" + "${pythonEnv}" + ] + previousAttrs.installPhase; + + passthru = previousAttrs.passthru // { + inherit frontend pythonEnv; + }; + } +)