110 lines
3.1 KiB
Nix
110 lines
3.1 KiB
Nix
|
{
|
||
|
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";
|
||
|
};
|
||
|
})
|