diff --git a/hosts/nuos/configuration.nix b/hosts/nuos/configuration.nix index 27c756b..e8e98a8 100644 --- a/hosts/nuos/configuration.nix +++ b/hosts/nuos/configuration.nix @@ -117,11 +117,56 @@ in systemd.services = { "archipelago" = let + ap = + { + lib, + appimageTools, + fetchurl, + nix-update-script, + extraPackages ? [ ], + }: + let + pname = "archipelago"; + version = "0.6.2"; + src = fetchurl { + url = "https://github.com/ArchipelagoMW/Archipelago/releases/download/${version}-rc3/Archipelago_${version}_linux-x86_64.AppImage"; + hash = "sha256-5uoHIKaBPgZEg5rPx1yv/uqb2iBQs6uYLRPO9Z1N2Wg="; + }; + + appimageContents = appimageTools.extractType2 { inherit pname version src; }; + in + appimageTools.wrapType2 { + inherit pname version src; + extraPkgs = + pkgs: + [ + pkgs.xsel + pkgs.xclip + pkgs.mtdev + ] + ++ extraPackages; + extraInstallCommands = '' + install -Dm444 ${appimageContents}/archipelago.desktop -t $out/share/applications + substituteInPlace $out/share/applications/archipelago.desktop \ + --replace-fail 'opt/Archipelago/ArchipelagoLauncher' "archipelago" + cp -r ${appimageContents}/usr/share/icons $out/share + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Multi-Game Randomizer and Server"; + homepage = "https://archipelago.gg"; + changelog = "https://github.com/ArchipelagoMW/Archipelago/releases/tag/${version}"; + license = lib.licenses.mit; + mainProgram = "archipelago"; + maintainers = with lib.maintainers; [ pyrox0 ]; + platforms = lib.platforms.linux; + }; + }; + archipelago = pkgs.callPackage ap { }; script = pkgs.writeShellScript "archipelago-server" '' - cd /home/noa/Archipelago - ${pkgs.python312Full}/bin/python -m venv . - source bin/activate - python MultiServer.py output/AP_43890937735956963351.zip + ${archipelago}/bin/archipelago MultiServer -- /home/noa/Archipelago/output/AP_43890937735956963351.zip ''; in { @@ -142,6 +187,7 @@ in after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; restartIfChanged = true; };