diff --git a/pkgs/applications/misc/skytemple/default.nix b/pkgs/applications/misc/skytemple/default.nix new file mode 100644 index 000000000000..a67d79f9bf90 --- /dev/null +++ b/pkgs/applications/misc/skytemple/default.nix @@ -0,0 +1,38 @@ +{ lib, fetchFromGitHub, gobject-introspection, gtk3, gtksourceview3, wrapGAppsHook, python3Packages }: + +python3Packages.buildPythonApplication rec { + pname = "skytemple"; + version = "1.2.3"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "0l2c4qngv58j6zkp0va6m96zksx8gqn3mjc3isqybfnhjr6nd3v9"; + }; + + buildInputs = [ gobject-introspection gtk3 gtksourceview3 ]; + nativeBuildInputs = [ gobject-introspection wrapGAppsHook ]; + propagatedBuildInputs = with python3Packages; [ + natsort + packaging + pycairo + pygal + pypresence + setuptools + skytemple-dtef + skytemple-eventserver + skytemple-files + skytemple-icons + skytemple-ssb-debugger + ]; + + doCheck = false; # there are no tests + + meta = with lib; { + homepage = "https://github.com/SkyTemple/skytemple"; + description = "ROM hacking tool for Pokémon Mystery Dungeon Explorers of Sky"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/explorerscript/default.nix b/pkgs/development/python-modules/explorerscript/default.nix new file mode 100644 index 000000000000..b0f1a16fe421 --- /dev/null +++ b/pkgs/development/python-modules/explorerscript/default.nix @@ -0,0 +1,23 @@ +{ lib, buildPythonPackage, fetchFromGitHub, antlr4-python3-runtime, pygments, python-igraph }: + +buildPythonPackage rec { + pname = "explorerscript"; + version = "0.1.1"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "1vzyliiyrxx8l9sfbqcyr4xn5swd7znkxy69kn0vb5rban8hm9c1"; + }; + + propagatedBuildInputs = [ antlr4-python3-runtime python-igraph ]; + checkInputs = [ pygments ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/explorerscript"; + description = "A programming language + compiler/decompiler for creating scripts for Pokémon Mystery Dungeon Explorers of Sky"; + license = licenses.mit; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/ndspy/default.nix b/pkgs/development/python-modules/ndspy/default.nix new file mode 100644 index 000000000000..9c4d91df9d65 --- /dev/null +++ b/pkgs/development/python-modules/ndspy/default.nix @@ -0,0 +1,23 @@ +{ lib, buildPythonPackage, fetchPypi, crcmod }: + +buildPythonPackage rec { + pname = "ndspy"; + version = "3.0.0"; + + src = fetchPypi { + inherit pname version; + sha256 = "1s0i81gspas22bjwk9vhy3x5sw1svyybk7c2j1ixc77drr9ym20a"; + }; + + propagatedBuildInputs = [ crcmod ]; + + doCheck = false; # there are no tests + pythonImportsCheck = [ "ndspy" ]; + + meta = with lib; { + homepage = "https://github.com/RoadrunnerWMC/ndspy"; + description = "A Python library for many Nintendo DS file formats"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/py-desmume/default.nix b/pkgs/development/python-modules/py-desmume/default.nix new file mode 100644 index 000000000000..a249b0aede13 --- /dev/null +++ b/pkgs/development/python-modules/py-desmume/default.nix @@ -0,0 +1,44 @@ +{ lib, buildPythonPackage, fetchFromGitHub, GitPython +, libpcap, meson, ninja, pillow, pkg-config, pygobject3, SDL2 +, alsaLib, soundtouch, openal +}: + +let + desmume = fetchFromGitHub { + owner = "SkyTemple"; + repo = "desmume"; + rev = "8e7af8ada883b7e91344985236f7c7c04ee795d7"; + sha256 = "0svmv2rch9q347gbpbws4agymas8n014gh1ssaf91wx7jwn53842"; + }; +in +buildPythonPackage rec { + pname = "py-desmume"; + version = "0.0.3.post2"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "1chsg70k8kqnlasn88b04ww3yl0lay1bjxvz6lhp6s2cvsxv03x1"; + }; + + postPatch = '' + cp -R --no-preserve=mode ${desmume} __build_desmume + ''; + + buildInputs = [ GitPython libpcap SDL2 alsaLib soundtouch openal ]; + nativeBuildInputs = [ meson ninja pkg-config ]; + propagatedBuildInputs = [ pillow pygobject3 ]; + + hardeningDisable = [ "format" ]; + + doCheck = false; # there are no tests + pythonImportsCheck = [ "desmume" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/py-desmume"; + description = "Python library to interface with DeSmuME, the Nintendo DS emulator"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/pygtkspellcheck/default.nix b/pkgs/development/python-modules/pygtkspellcheck/default.nix new file mode 100644 index 000000000000..9dcb2b732ca3 --- /dev/null +++ b/pkgs/development/python-modules/pygtkspellcheck/default.nix @@ -0,0 +1,24 @@ +{ lib, buildPythonPackage, fetchPypi, gobject-introspection, gtk3, pyenchant, pygobject3 }: + +buildPythonPackage rec { + pname = "pygtkspellcheck"; + version = "4.0.6"; + + src = fetchPypi { + inherit pname version; + sha256 = "0pc3xmv1q775hn4kc1kspvpdn4gm7ix3aw6hz9iy3brfcw6ddcl4"; + }; + + nativeBuildInputs = [ gobject-introspection gtk3 ]; + propagatedBuildInputs = [ pyenchant pygobject3 ]; + + doCheck = false; # there are no tests + pythonImportsCheck = [ "gtkspellcheck" ]; + + meta = with lib; { + homepage = "https://github.com/koehlma/pygtkspellcheck"; + description = "A Python spell-checking library for GtkTextViews based on Enchant"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/pypresence/default.nix b/pkgs/development/python-modules/pypresence/default.nix new file mode 100644 index 000000000000..0fa188c0771a --- /dev/null +++ b/pkgs/development/python-modules/pypresence/default.nix @@ -0,0 +1,21 @@ +{ lib, buildPythonPackage, fetchPypi }: + +buildPythonPackage rec { + pname = "pypresence"; + version = "4.2.0"; + + src = fetchPypi { + inherit pname version; + sha256 = "1c8r7yxih5zp46qb9anq5s91pw2wr7d9d0nzcfh4l42x10c8lqal"; + }; + + doCheck = false; # tests require internet connection + pythonImportsCheck = [ "pypresence" ]; + + meta = with lib; { + homepage = "https://qwertyquerty.github.io/pypresence/html/index.html"; + description = "Discord RPC client written in Python"; + license = licenses.mit; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/skytemple-dtef/default.nix b/pkgs/development/python-modules/skytemple-dtef/default.nix new file mode 100644 index 000000000000..80bebd556968 --- /dev/null +++ b/pkgs/development/python-modules/skytemple-dtef/default.nix @@ -0,0 +1,25 @@ +{ lib, buildPythonPackage, fetchFromGitHub, skytemple-files }: + +buildPythonPackage rec { + pname = "skytemple-dtef"; + version = "1.1.2"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "177ydif01fai6z5yhgpa27pzfgabblzhl8nsczczcmw74vxqwzyc"; + }; + + propagatedBuildInputs = [ skytemple-files ]; + + doCheck = false; # there are no tests + pythonImportsCheck = [ "skytemple_dtef" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/skytemple-dtef"; + description = "A format for standardized rule-based tilesets with 256 adjacency combinations"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/skytemple-eventserver/default.nix b/pkgs/development/python-modules/skytemple-eventserver/default.nix new file mode 100644 index 000000000000..123f4ba6d853 --- /dev/null +++ b/pkgs/development/python-modules/skytemple-eventserver/default.nix @@ -0,0 +1,23 @@ +{ lib, buildPythonPackage, fetchFromGitHub }: + +buildPythonPackage rec { + pname = "skytemple-eventserver"; + version = "1.0.0"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "1xcf7ljvi5ixhwx9rkg3hnwcyv4wsgd2yb6is11jffbrdp00j2bq"; + }; + + doCheck = false; # there are no tests + pythonImportsCheck = [ "skytemple_eventserver" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/skytemple-eventserver"; + description = "Websocket server that emits SkyTemple UI events"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/skytemple-files/default.nix b/pkgs/development/python-modules/skytemple-files/default.nix new file mode 100644 index 000000000000..cb03d73b4270 --- /dev/null +++ b/pkgs/development/python-modules/skytemple-files/default.nix @@ -0,0 +1,25 @@ +{ lib, buildPythonPackage, fetchFromGitHub, appdirs, explorerscript, ndspy, pillow, setuptools, skytemple-rust, tilequant }: + +buildPythonPackage rec { + pname = "skytemple-files"; + version = "1.2.3"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "1vklg4kcj3kb9ryrzrcmywn131b2bp3vy94cd4x4y4s7hkhgwg74"; + }; + + propagatedBuildInputs = [ appdirs explorerscript ndspy pillow setuptools skytemple-rust tilequant ]; + + doCheck = false; # requires Pokémon Mystery Dungeon ROM + pythonImportsCheck = [ "skytemple_files" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/skytemple-files"; + description = "Python library to edit the ROM of Pokémon Mystery Dungeon Explorers of Sky"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/skytemple-icons/default.nix b/pkgs/development/python-modules/skytemple-icons/default.nix new file mode 100644 index 000000000000..0bf3659605c9 --- /dev/null +++ b/pkgs/development/python-modules/skytemple-icons/default.nix @@ -0,0 +1,23 @@ +{ lib, buildPythonPackage, fetchFromGitHub }: + +buildPythonPackage rec { + pname = "skytemple-icons"; + version = "1.2.0"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "036bxy0n3p0ivcdaymj11z0nw555xjxxj15ja0rpjsvq1mqamd80"; + }; + + doCheck = false; # there are no tests + pythonImportsCheck = [ "skytemple_icons" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/skytemple-icons"; + description = "Icons for SkyTemple"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/skytemple-rust/default.nix b/pkgs/development/python-modules/skytemple-rust/default.nix new file mode 100644 index 000000000000..d22d61099587 --- /dev/null +++ b/pkgs/development/python-modules/skytemple-rust/default.nix @@ -0,0 +1,31 @@ +{ lib, buildPythonPackage, fetchFromGitHub, rustPlatform, setuptools-rust }: + +buildPythonPackage rec { + pname = "skytemple-rust"; + version = "unstable-2021-05-30"; # Contains build bug fixes, but is otherwise identical to 0.0.1.post0 + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = "cff8b2930af6d25d41331fab8c04f56a4fd75e95"; + sha256 = "18y6wwvzyw062zlv3gcirr1hgld9d97ffyrvy0jvw8nr3b9h9x0i"; + }; + + cargoDeps = rustPlatform.fetchCargoTarball { + inherit src; + name = "${pname}-${version}"; + sha256 = "1ypcsf9gbq1bz29kfn7g4kg8741mxg1lfcbb14a0vfhjq4d6pnx9"; + }; + + nativeBuildInputs = [ setuptools-rust ] ++ (with rustPlatform; [ cargoSetupHook rust.cargo rust.rustc ]); + + doCheck = false; # there are no tests + pythonImportsCheck = [ "skytemple_rust" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/skytemple-rust"; + description = "Binary Rust extensions for SkyTemple"; + license = licenses.mit; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/skytemple-ssb-debugger/default.nix b/pkgs/development/python-modules/skytemple-ssb-debugger/default.nix new file mode 100644 index 000000000000..88ae80f7242a --- /dev/null +++ b/pkgs/development/python-modules/skytemple-ssb-debugger/default.nix @@ -0,0 +1,38 @@ +{ lib, buildPythonPackage, fetchFromGitHub, gobject-introspection, gtk3, gtksourceview3 +, wrapGAppsHook, nest-asyncio, pycairo, py-desmume, pygtkspellcheck, setuptools +, skytemple-files, skytemple-icons +}: + +buildPythonPackage rec { + pname = "skytemple-ssb-debugger"; + version = "1.2.4"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "0jmsli3wg386y0lxwddpwp1xqxsn2bsy4d1f7dyh0jjz8lqiz03i"; + }; + + buildInputs = [ gobject-introspection gtk3 gtksourceview3 ]; + nativeBuildInputs = [ gobject-introspection wrapGAppsHook ]; + propagatedBuildInputs = [ + nest-asyncio + pycairo + py-desmume + pygtkspellcheck + setuptools + skytemple-files + skytemple-icons + ]; + + doCheck = false; # requires Pokémon Mystery Dungeon ROM + pythonImportsCheck = [ "skytemple_ssb_debugger" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/skytemple-ssb-debugger"; + description = "Script Engine Debugger for Pokémon Mystery Dungeon Explorers of Sky"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/development/python-modules/tilequant/default.nix b/pkgs/development/python-modules/tilequant/default.nix new file mode 100644 index 000000000000..90caab8ebef8 --- /dev/null +++ b/pkgs/development/python-modules/tilequant/default.nix @@ -0,0 +1,38 @@ +{ lib, buildPythonPackage, fetchFromGitHub, GitPython, click, ordered-set, pillow, sortedcollections }: + +let + aikku93-tilequant = fetchFromGitHub { + owner = "SkyTemple"; + repo = "aikku93-tilequant"; + rev = "6604e0906edff384b6c8d4cde03e6601731f66fd"; + sha256 = "0w19h3n2i0xriqsy0b0rifjgbv4hqd7gl78fw0cappkrdykij5r1"; + }; +in +buildPythonPackage rec { + pname = "tilequant"; + version = "0.4.0.post0"; + + src = fetchFromGitHub { + owner = "SkyTemple"; + repo = pname; + rev = version; + sha256 = "189af203iay3inj1bbgm3hh1fshn879bcm28ypbvfp27fy7j5b25"; + }; + + postPatch = '' + cp -R --no-preserve=mode ${aikku93-tilequant} __aikku93_tilequant + ''; + + buildInputs = [ GitPython ]; + propagatedBuildInputs = [ click ordered-set pillow sortedcollections ]; + + doCheck = false; # there are no tests + pythonImportsCheck = [ "skytemple_tilequant" ]; + + meta = with lib; { + homepage = "https://github.com/SkyTemple/tilequant"; + description = "Tool for quantizing image colors using tile-based palette restrictions"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ xfix ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 14a509016497..ef19e1305f43 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8606,6 +8606,8 @@ in tex = texlive.combined.scheme-small; }; + skytemple = callPackage ../applications/misc/skytemple {}; + sleuthkit = callPackage ../tools/system/sleuthkit {}; # Not updated upstream since 2018, doesn't support qt newer than 5.12 diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5be41683de84..b92607502d92 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2297,6 +2297,8 @@ in { expiringdict = callPackage ../development/python-modules/expiringdict { }; + explorerscript = callPackage ../development/python-modules/explorerscript { }; + exrex = callPackage ../development/python-modules/exrex { }; extractcode = callPackage ../development/python-modules/extractcode { }; @@ -4527,6 +4529,8 @@ in { ndjson = callPackage ../development/python-modules/ndjson { }; + ndspy = callPackage ../development/python-modules/ndspy { }; + ndtypes = callPackage ../development/python-modules/ndtypes { }; neo = callPackage ../development/python-modules/neo { }; @@ -5603,6 +5607,8 @@ in { pydenticon = callPackage ../development/python-modules/pydenticon { }; + py-desmume = callPackage ../development/python-modules/py-desmume { }; + pydexcom = callPackage ../development/python-modules/pydexcom { }; pydicom = callPackage ../development/python-modules/pydicom { }; @@ -5767,6 +5773,8 @@ in { pygtail = callPackage ../development/python-modules/pygtail { }; + pygtkspellcheck = callPackage ../development/python-modules/pygtkspellcheck { }; + pygtrie = callPackage ../development/python-modules/pygtrie { }; pyhamcrest = callPackage ../development/python-modules/pyhamcrest { }; @@ -6100,6 +6108,8 @@ in { pyppeteer = callPackage ../development/python-modules/pyppeteer { }; + pypresence = callPackage ../development/python-modules/pypresence { }; + pyprind = callPackage ../development/python-modules/pyprind { }; pyprof2calltree = callPackage ../development/python-modules/pyprof2calltree { }; @@ -7687,6 +7697,18 @@ in { skybellpy = callPackage ../development/python-modules/skybellpy { }; + skytemple-dtef = callPackage ../development/python-modules/skytemple-dtef { }; + + skytemple-eventserver = callPackage ../development/python-modules/skytemple-eventserver { }; + + skytemple-files = callPackage ../development/python-modules/skytemple-files { }; + + skytemple-icons = callPackage ../development/python-modules/skytemple-icons { }; + + skytemple-rust = callPackage ../development/python-modules/skytemple-rust { }; + + skytemple-ssb-debugger = callPackage ../development/python-modules/skytemple-ssb-debugger { }; + slack-sdk = callPackage ../development/python-modules/slack-sdk { }; slackclient = callPackage ../development/python-modules/slackclient { }; @@ -8280,6 +8302,8 @@ in { inherit (pkgs) tiledb; }; + tilequant = callPackage ../development/python-modules/tilequant { }; + tilestache = callPackage ../development/python-modules/tilestache { }; timeago = callPackage ../development/python-modules/timeago { };