The godot base derivation was implemented by passing a recursive attrset to mkDerivation. This is problematic because recursive references to attributes that are later overridden don't notice the override. Switched to the approach of giving mkDerivation a lambda that receives a self argument, which allows recursive references to the final value after overrides are applied. The related derivations (for export templates, headless, and server builds of godot) duplicated content from the base derivation. This refactor eliminated that by using overridable attributes to parameterize the scripts. The main motivation for this refactor was to help me add derivations for mono builds of godot. Renamed to godot3 to distinguish from version 4, which is a complete rewrite and effectively a different tool altogether.
135 lines
2.8 KiB
Nix
135 lines
2.8 KiB
Nix
{ lib
|
|
, autoPatchelfHook
|
|
, copyDesktopItems
|
|
, fetchFromGitHub
|
|
, makeDesktopItem
|
|
, stdenv
|
|
, alsa-lib
|
|
, gcc-unwrapped
|
|
, git
|
|
, godot3-export-templates
|
|
, godot3-headless
|
|
, libGLU
|
|
, libX11
|
|
, libXcursor
|
|
, libXext
|
|
, libXfixes
|
|
, libXi
|
|
, libXinerama
|
|
, libXrandr
|
|
, libXrender
|
|
, libglvnd
|
|
, libpulseaudio
|
|
, perl
|
|
, zlib
|
|
, udev # for libudev
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "oh-my-git";
|
|
version = "0.6.5";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "git-learning-game";
|
|
repo = "oh-my-git";
|
|
rev = version;
|
|
sha256 = "sha256-XqxliMVU55D5JSt7Yo5btvZnnTlagSukyhXv6Akgklo=";
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
autoPatchelfHook
|
|
copyDesktopItems
|
|
godot3-headless
|
|
];
|
|
|
|
buildInputs = [
|
|
alsa-lib
|
|
gcc-unwrapped.lib
|
|
git
|
|
libGLU
|
|
libX11
|
|
libXcursor
|
|
libXext
|
|
libXfixes
|
|
libXi
|
|
libXinerama
|
|
libXrandr
|
|
libXrender
|
|
libglvnd
|
|
libpulseaudio
|
|
perl
|
|
zlib
|
|
udev
|
|
];
|
|
|
|
desktopItems = [
|
|
(makeDesktopItem {
|
|
name = "oh-my-git";
|
|
exec = "oh-my-git";
|
|
icon = "oh-my-git";
|
|
desktopName = "oh-my-git";
|
|
comment = "An interactive Git learning game!";
|
|
genericName = "An interactive Git learning game!";
|
|
categories = [ "Game" ];
|
|
})
|
|
];
|
|
|
|
# patch shebangs so that e.g. the fake-editor script works:
|
|
# error: /usr/bin/env 'perl': No such file or directory
|
|
# error: There was a problem with the editor
|
|
postPatch = ''
|
|
patchShebangs scripts
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
# Cannot create file '/homeless-shelter/.config/godot/projects/...'
|
|
export HOME=$TMPDIR
|
|
|
|
# Link the export-templates to the expected location. The --export commands
|
|
# expects the template-file at .../templates/3.2.3.stable/linux_x11_64_release
|
|
# with 3.2.3 being the version of godot.
|
|
mkdir -p $HOME/.local/share/godot
|
|
ln -s ${godot3-export-templates}/share/godot/templates $HOME/.local/share/godot
|
|
|
|
mkdir -p $out/share/oh-my-git
|
|
godot3-headless --export "Linux" $out/share/oh-my-git/oh-my-git
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/bin
|
|
ln -s $out/share/oh-my-git/oh-my-git $out/bin
|
|
|
|
# Patch binaries.
|
|
interpreter=$(cat $NIX_CC/nix-support/dynamic-linker)
|
|
patchelf \
|
|
--set-interpreter $interpreter \
|
|
--set-rpath ${lib.makeLibraryPath buildInputs} \
|
|
$out/share/oh-my-git/oh-my-git
|
|
|
|
mkdir -p $out/share/pixmaps
|
|
cp images/oh-my-git.png $out/share/pixmaps/oh-my-git.png
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
runtimeDependencies = map lib.getLib [
|
|
alsa-lib
|
|
libpulseaudio
|
|
udev
|
|
];
|
|
|
|
meta = with lib; {
|
|
homepage = "https://ohmygit.org/";
|
|
description = "An interactive Git learning game";
|
|
license = with licenses; [ blueOak100 ];
|
|
platforms = [ "x86_64-linux" ];
|
|
maintainers = with maintainers; [ jojosch ];
|
|
};
|
|
}
|