diff options
Diffstat (limited to 'pkgs/by-name/am/amiberry/package.nix')
-rw-r--r-- | pkgs/by-name/am/amiberry/package.nix | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/pkgs/by-name/am/amiberry/package.nix b/pkgs/by-name/am/amiberry/package.nix new file mode 100644 index 000000000000..82c9c2a8aac6 --- /dev/null +++ b/pkgs/by-name/am/amiberry/package.nix @@ -0,0 +1,109 @@ +{ + lib, + stdenv, + fetchFromGitHub, + cmake, + copyDesktopItems, + makeWrapper, + flac, + libmpeg2, + libmpg123, + libpng, + libserialport, + portmidi, + SDL2, + SDL2_image, + SDL2_ttf, + makeDesktopItem, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "amiberry"; + version = "5.7.4"; + + src = fetchFromGitHub { + owner = "BlitterStudio"; + repo = "amiberry"; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-EOoVJYefX2pQ2Zz9bLD1RS47u/+7ZWTMwZYha0juF64="; + }; + + nativeBuildInputs = [ + cmake + copyDesktopItems + makeWrapper + ]; + + buildInputs = [ + flac + libmpeg2 + libmpg123 + libpng + libserialport + portmidi + SDL2 + SDL2_image + SDL2_ttf + ]; + + enableParallelBuilding = true; + + # Amiberry has traditionally behaved as a "Portable" app, meaning that it was designed to expect everything + # under the same directory. This is not compatible with Nix package conventions. + # The Amiberry behavior has changed since versions 5.7.4 and 6.3.4 (see + # https://github.com/BlitterStudio/amiberry/wiki/FAQ#q-where-does-amiberry-look-for-its-files-can-i-change-that + # for more information), however this is still not compatible with Nix packaging. The AMIBERRY_DATA_DIR can go + # in the nix store but the Amiberry configuration files must be stored in a user writable location. + # Fortunately Amiberry provides environment variables for specifying these locations which we can supply with the + # wrapper script below. + # One more caveat: Amiberry expects the configuration files path (AMIBERRY_HOME_DIR) to exist, otherwise it will + # fall back to behaving like a "Portable" app. The wrapper below ensures that the AMIBERRY_HOME_DIR path exists, + # preventing that fallback. + installPhase = '' + runHook preInstall + mkdir -p $out/bin + cp amiberry $out/bin/ + cp -r abr data $out/ + install -Dm444 data/amiberry.png $out/share/icons/hicolor/256x256/apps/amiberry.png + wrapProgram $out/bin/amiberry \ + --set-default AMIBERRY_DATA_DIR $out \ + --run 'AMIBERRY_HOME_DIR="$HOME/.amiberry"' \ + --run 'mkdir -p \ + $AMIBERRY_HOME_DIR/kickstarts \ + $AMIBERRY_HOME_DIR/conf \ + $AMIBERRY_HOME_DIR/nvram \ + $AMIBERRY_HOME_DIR/plugins \ + $AMIBERRY_HOME_DIR/screenshots \ + $AMIBERRY_HOME_DIR/savestates \ + $AMIBERRY_HOME_DIR/controllers \ + $AMIBERRY_HOME_DIR/whdboot \ + $AMIBERRY_HOME_DIR/lha \ + $AMIBERRY_HOME_DIR/floppies \ + $AMIBERRY_HOME_DIR/cdroms \ + $AMIBERRY_HOME_DIR/harddrives' + runHook postInstall + ''; + + desktopItems = [ + (makeDesktopItem { + name = "amiberry"; + desktopName = "Amiberry"; + exec = "amiberry"; + comment = "Amiga emulator"; + icon = "amiberry"; + categories = [ + "System" + "Emulator" + ]; + }) + ]; + + meta = with lib; { + homepage = "https://github.com/BlitterStudio/amiberry"; + description = "Optimized Amiga emulator for Linux/macOS"; + license = licenses.gpl3; + platforms = platforms.linux; + maintainers = with maintainers; [ michaelshmitty ]; + mainProgram = "amiberry"; + }; +}) |