-
-
Notifications
You must be signed in to change notification settings - Fork 14.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fmt sound suggestions 1 license update add support for windbot escape string xdg directory with a fallback of $HOME add update script and new deps file finished update script format deps file remove testing logic
- Loading branch information
Showing
3 changed files
with
370 additions
and
0 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,268 @@ | ||
{ | ||
lib, | ||
stdenv, | ||
fetchFromGitHub, | ||
fetchzip, | ||
premake5, | ||
writeShellScriptBin, | ||
runCommandLocal, | ||
symlinkJoin, | ||
imagemagick, | ||
bzip2, | ||
curl, | ||
flac, | ||
fmt_9, | ||
freetype, | ||
libevent, | ||
libgit2, | ||
libGL, | ||
libGLU, | ||
libjpeg, | ||
libpng, | ||
libvorbis, | ||
libX11, | ||
libxkbcommon, | ||
libXxf86vm, | ||
lua5_3, | ||
mono, | ||
nlohmann_json, | ||
openal, | ||
SDL2, | ||
sqlite, | ||
wayland, | ||
egl-wayland, | ||
covers_url ? "https://pics.projectignis.org:2096/pics/cover/{}.jpg", | ||
fields_url ? "https://pics.projectignis.org:2096/pics/field/{}.png", | ||
# While ygoprodeck has higher quality images, "spamming" of their api results in a ban. | ||
# Thats why this link can change since it's compiled into the program, However it will | ||
# download assets when needed so it is unlikely to get banned. Unless you search the | ||
# card list with no filters of any kind. When testing use ProjectIgnis' website instead. | ||
pics_url ? "https://images.ygoprodeck.com/images/cards/{}.jpg", | ||
}: | ||
let | ||
deps = import ./deps.nix; | ||
in | ||
let | ||
assets = { | ||
pname = "assets"; | ||
version = deps.edopro-version; | ||
|
||
src = fetchzip { | ||
url = "https://github.com/ProjectIgnis/edopro-assets/releases/download/${deps.edopro-version}/ProjectIgnis-EDOPro-${deps.edopro-version}-linux.tar.gz"; | ||
sha256 = deps.assets-hash; | ||
}; | ||
}; | ||
|
||
irrlicht-edopro = stdenv.mkDerivation { | ||
pname = "irrlicht-edopro"; | ||
version = "1.9-custom"; | ||
|
||
src = fetchFromGitHub { | ||
owner = "edo9300"; | ||
repo = "irrlicht1-8-4"; | ||
rev = deps.irrlicht-rev; | ||
hash = deps.irrlicht-hash; | ||
}; | ||
|
||
buildInputs = [ | ||
libGLU | ||
libX11 | ||
libxkbcommon | ||
libXxf86vm | ||
wayland | ||
]; | ||
|
||
enableParallelBuilding = true; | ||
buildFlags = "NDEBUG=1"; | ||
makeFlags = "-C source/Irrlicht"; | ||
|
||
installPhase = '' | ||
mkdir -p $out/{bin,include} | ||
cp lib/Linux/libIrrlicht.a $out/bin | ||
cp -r include/* $out/include | ||
''; | ||
}; | ||
|
||
ocgcore = stdenv.mkDerivation rec { | ||
pname = "ygopro-core"; | ||
version = deps.ocgcore-rev; | ||
|
||
src = fetchFromGitHub { | ||
owner = "edo9300"; | ||
repo = pname; | ||
rev = version; | ||
hash = deps.ocgcore-hash; | ||
fetchSubmodules = true; | ||
}; | ||
|
||
nativeBuildInputs = [ premake5 ]; | ||
|
||
buildInputs = [ lua5_3 ]; | ||
|
||
preBuild = '' | ||
premake5 gmake2 | ||
''; | ||
|
||
enableParallelBuilding = true; | ||
buildFlags = "verbose=true config=release ocgcore"; | ||
makeFlags = "-C build"; | ||
|
||
installPhase = '' | ||
mkdir -p $out/bin | ||
cp bin/release/libocgcore.a $out/bin | ||
''; | ||
}; | ||
|
||
edopro = stdenv.mkDerivation rec { | ||
pname = "edopro"; | ||
version = deps.edopro-version; | ||
|
||
src = fetchFromGitHub { | ||
owner = "edo9300"; | ||
repo = pname; | ||
rev = deps.edopro-rev; | ||
hash = deps.edopro-hash; | ||
fetchSubmodules = true; | ||
}; | ||
|
||
nativeBuildInputs = [ premake5 ]; | ||
|
||
buildInputs = [ | ||
bzip2 | ||
curl | ||
flac | ||
fmt_9 | ||
freetype | ||
irrlicht-edopro | ||
libevent | ||
libgit2 | ||
libjpeg | ||
libpng | ||
libvorbis | ||
nlohmann_json | ||
openal | ||
SDL2 | ||
sqlite | ||
]; | ||
|
||
# nixpkgs' gcc stack currently appears to not support LTO | ||
postPatch = '' | ||
sed -i '/LinkTimeOptimization/d' ./premake5.lua | ||
''; | ||
|
||
preBuild = '' | ||
premake5 gmake2 \ | ||
--covers=\"${covers_url}\" \ | ||
--fields=\"${fields_url}\" \ | ||
--no-core \ | ||
--pics=\"${pics_url}\" \ | ||
--prebuilt-core="${ocgcore}/bin" \ | ||
--sound=sfml | ||
''; | ||
|
||
enableParallelBuilding = true; | ||
CXXFLAGS = "-include cstdint"; | ||
LDFLAGS = "-I ${irrlicht-edopro}/include -L ${irrlicht-edopro}/bin"; | ||
buildFlags = "verbose=true config=release_x64 ygoprodll"; | ||
makeFlags = "-C build"; | ||
|
||
installPhase = '' | ||
mkdir -p $out/bin | ||
cp bin/x64/release/ygoprodll $out/bin | ||
''; | ||
}; | ||
|
||
edopro-script = | ||
let | ||
assetsToCopy = lib.concatStringsSep "," [ | ||
# Needed if we download files from ProjectIgnis' website or any https only website. | ||
"cacert.pem" | ||
"config" | ||
"deck" | ||
"COPYING.txt" | ||
"expansions" | ||
"lflists" | ||
"notices" | ||
"puzzles" | ||
"fonts" | ||
"script" | ||
"skin" | ||
"sound" | ||
"textures" | ||
"WindBot" | ||
]; | ||
in | ||
writeShellScriptBin "EDOPro" '' | ||
set -eu | ||
EDOPRO_DIR="''${XDG_DATA_HOME:-$HOME/.local/share}/edopro" | ||
if [ ! -d $EDOPRO_DIR ]; then | ||
mkdir -p $EDOPRO_DIR | ||
cp -r ${assets.src}/{${assetsToCopy}} $EDOPRO_DIR | ||
find $EDOPRO_DIR -type d -exec chmod u=rwx,go-rwx {} + | ||
find $EDOPRO_DIR -type f -exec chmod u=rw,go-rwx {} + | ||
rm $EDOPRO_DIR/config/io.github.edo9300.EDOPro.desktop.in | ||
fi | ||
export PATH=PATH:'${lib.makeBinPath [ mono ]}'; | ||
export LD_LIBRARY_PATH='${ | ||
lib.makeLibraryPath [ | ||
libGL | ||
libX11 | ||
libxkbcommon | ||
libXxf86vm | ||
sqlite | ||
wayland | ||
egl-wayland | ||
] | ||
}'; | ||
exec ${edopro}/bin/ygoprodll -C $EDOPRO_DIR $@ | ||
''; | ||
|
||
edopro-desktop = runCommandLocal "io.github.edo9300.EDOPro.desktop" { } '' | ||
cp ${assets.src}/config/io.github.edo9300.EDOPro.desktop.in desktop-template | ||
sed '/Path=/d' -i desktop-template | ||
sed 's/Exec=.*/Exec=EDOPro/' -i desktop-template | ||
sed 's/Icon=.*/Icon=EDOPro/' -i desktop-template | ||
install -D desktop-template $out/share/applications/io.github.edo9300.EDOPro.desktop | ||
''; | ||
in | ||
symlinkJoin { | ||
name = "edopro-application-${deps.edopro-version}"; | ||
version = deps.edopro-version; | ||
paths = [ | ||
edopro | ||
edopro-script | ||
edopro-desktop | ||
]; | ||
|
||
postBuild = '' | ||
mkdir -p $out/share/icons/hicolor/256x256/apps/ | ||
${imagemagick}/bin/magick \ | ||
${assets.src}/textures/AppIcon.png \ | ||
-resize 256x256 \ | ||
$out/share/icons/hicolor/256x256/apps/EDOPro.png | ||
''; | ||
|
||
passthru.updateScript = ./update.py; | ||
|
||
meta = with lib; { | ||
description = "The bleeding-edge automatic duel simulator, a fork of the YGOPro client."; | ||
homepage = "https://projectignis.github.io"; | ||
changelog = "https://github.com/edo9300/edopro/releases"; | ||
license = licenses.agpl3Plus; | ||
maintainers = with maintainers; [ | ||
redhawk | ||
tlater | ||
]; | ||
mainprogram = "edopro"; | ||
# This is likely a very easy app to port if you're interested. | ||
# We just have no way to test on other platforms. | ||
platforms = [ "x86_64-linux" ]; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#!/usr/bin/env nix-shell | ||
#! nix-shell -i python -p nix-prefetch-github python3Packages.githubkit | ||
import json | ||
import subprocess | ||
|
||
from githubkit import GitHub, UnauthAuthStrategy | ||
from githubkit.versions.latest.models import ( | ||
Commit, | ||
ContentSubmodule, | ||
Tag, | ||
) | ||
|
||
DEPS_PATH: str = "./pkgs/by-name/ed/edopro/deps.nix" | ||
|
||
with GitHub(UnauthAuthStrategy()) as github: | ||
edopro: Tag = github.rest.repos.list_tags("edo9300", "edopro").parsed_data[0] | ||
|
||
ocgcore: ContentSubmodule = github.rest.repos.get_content( | ||
"edo9300", "edopro", "ocgcore" | ||
).parsed_data | ||
|
||
# This dep is not versioned in anyway and is why we check below to see if this is a new version. | ||
irrlicht: Commit = github.rest.repos.list_commits( | ||
"edo9300", "irrlicht1-8-4" | ||
).parsed_data[0] | ||
|
||
edopro_working_version: str = "" | ||
try: | ||
with open(DEPS_PATH, "r") as file: | ||
for line in file.readlines(): | ||
if "edopro-version" in line: | ||
edopro_working_version = line.split('"')[1] | ||
except FileNotFoundError: | ||
print("Error: Dep file not found.") | ||
exit(2) | ||
|
||
if edopro_working_version == "": | ||
print("Working version is unbound") | ||
exit(5) | ||
|
||
if edopro_working_version == edopro.name: | ||
print("Version is updated") | ||
exit(0) | ||
|
||
|
||
def get_hash(owner: str, repo: str, rev: str, submodule: bool = False) -> str: | ||
args: list[str] = ["nix-prefetch-github", owner, repo, "--rev", rev] | ||
|
||
if submodule: | ||
args.append("--fetch-submodules") | ||
|
||
out: subprocess.CompletedProcess = subprocess.run(args, capture_output=True) | ||
out_json = json.loads(out.stdout.decode()) | ||
|
||
return out_json["hash"] | ||
|
||
|
||
edopro_hash = get_hash("edo9300", "edopro", edopro.commit.sha, submodule=True) | ||
ocgcore_hash = get_hash("edo9300", "ygopro-core", ocgcore.sha) | ||
irrlicht_hash = get_hash("edo9300", "irrlicht1-8-4", irrlicht.sha) | ||
|
||
asset_hash: str = ( | ||
subprocess.run( | ||
[ | ||
"nix-prefetch-url", | ||
f"https://github.com/ProjectIgnis/edopro-assets/releases/download/{edopro.name}/ProjectIgnis-EDOPro-{edopro.name}-linux.tar.gz", | ||
"--unpack", | ||
], | ||
capture_output=True, | ||
) | ||
.stdout.decode() | ||
.strip() | ||
) | ||
|
||
with open(DEPS_PATH, "w") as file: | ||
contents = f"""# This is automatically generated by the update script. | ||
# DO NOT MANUALLY EDIT. | ||
{{ | ||
assets-hash = "{asset_hash}"; | ||
edopro-version = "{edopro.name}"; | ||
edopro-rev = "{edopro.commit.sha}"; | ||
edopro-hash = "{edopro_hash}"; | ||
irrlicht-rev = "{irrlicht.sha}"; | ||
irrlicht-hash = "{irrlicht_hash}"; | ||
ocgcore-rev = "{ocgcore.sha}"; | ||
ocgcore-hash = "{ocgcore_hash}"; | ||
}} | ||
""" | ||
|
||
file.write(contents) |