[Guix packaging] NetHack Fourk #454

Open
opened 2026-08-24 17:32:09 +00:00 by htayj · 2 comments
htayj commented 2026-08-24 17:32:09 +00:00 (Migrated from github.com)

Candidate

  • Project: NetHack Fourk
  • Candidate upstream/homepage: https://github.com/tsadok/nhfourk
  • Discovery evidence: Variant catalogs
  • Reported license: NetHack General Public License
  • License status: reported free license; verify exact terms and asset coverage against the pinned upstream source

Scope

Package the independently playable roguelike variant from source. The canonical repository, latest stable release, source hash, complete dependency closure, and relationship to parent games or sibling forks must be established before implementation. Do not substitute an opaque prebuilt binary.

Research checklist

  • Identify the canonical maintained source repository and immutable release/commit.
  • Verify the exact FOSS license for code and every installed font, tile, sound, map, documentation, and bundled dependency.
  • Check GNU Guix and the channel audit set for an equivalent same-upstream package.
  • Determine the offline build system and source closure, including submodules or language registries.
  • Identify updater, telemetry, runtime download, mutable-state, and network behavior that needs Guix integration.

Acceptance checks

  • guix lint -L . <package> has no package-specific findings.
  • guix build -L . --no-grafts <package> succeeds without network access or opaque binaries.
  • Upstream tests run where available, and guix build -L . --no-grafts --check <package> verifies reproducibility.
  • A fresh HOME/XDG smoke test starts a real local game, exercises meaningful gameplay or save/load behavior, and proves no store writes.
  • Installed license and third-party notices cover the shipped closure and assets.

Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-24T17:32:09Z.

## Candidate - Project: NetHack Fourk - Candidate upstream/homepage: https://github.com/tsadok/nhfourk - Discovery evidence: [Variant catalogs](https://www.roguebasin.com/index.php/NetHack#Variants) - Reported license: NetHack General Public License - License status: reported free license; verify exact terms and asset coverage against the pinned upstream source ## Scope Package the independently playable roguelike variant from source. The canonical repository, latest stable release, source hash, complete dependency closure, and relationship to parent games or sibling forks must be established before implementation. Do not substitute an opaque prebuilt binary. ## Research checklist - Identify the canonical maintained source repository and immutable release/commit. - Verify the exact FOSS license for code and every installed font, tile, sound, map, documentation, and bundled dependency. - Check GNU Guix and the channel audit set for an equivalent same-upstream package. - Determine the offline build system and source closure, including submodules or language registries. - Identify updater, telemetry, runtime download, mutable-state, and network behavior that needs Guix integration. ## Acceptance checks - `guix lint -L . <package>` has no package-specific findings. - `guix build -L . --no-grafts <package>` succeeds without network access or opaque binaries. - Upstream tests run where available, and `guix build -L . --no-grafts --check <package>` verifies reproducibility. - A fresh HOME/XDG smoke test starts a real local game, exercises meaningful gameplay or save/load behavior, and proves no store writes. - Installed license and third-party notices cover the shipped closure and assets. --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/454). Originally posted by [htayj](https://github.com/htayj) on 2026-08-24T17:32:09Z.
htayj commented 2026-09-11 11:29:48 +00:00 (Migrated from github.com)

Goocastle recorded disposition: implementation-ready.

Created implementation ticket: #708.

Package the console-only NetHack Fourk variant as Guix package nhfourk in tay/packages/nhfourk.scm. Canonical maintained upstream is https://github.com/tsadok/nhfourk; use the latest stable release tag v4.3.0.4 at immutable commit b8d1029efb9225638b6cb0041e2187a74dabf4c0, not the newer untagged master tip 479383a1d05d54b2dfda5cfaab4ca5147aefa7e5. The GitHub v4.3.0.4 source archive has SHA-256 f12109456daea57d92fb2194a1401eb109969be21c44c6accd9c5f968befa12f and contains no .gitmodules or separately fetched origin. Upstream README, COPYING, and copyright at that revision establish NGPL for the game, data, documentation, console text tiles, maps, and fonts; libuncursed and libnethack_client permit NGPL or GPL-2+; bundled libjansson is Expat; savemap.pl is Expat; aimake is GPL-3+ build-only; aimake.rules is NGPL. Optional raster assets have explicit CC-BY-3.0, CC-BY-SA-3.0, RLTiles-attribution, or geoduck terms, but exclude them by building with --without=gui; do not install SDL2/libpng GUI, server/PostgreSQL/inetd, optional raster tiles, or any runtime-downloaded content. Install the upstream libnethack/dat/license, COPYING, and copyright as license/notice files, with copyright-details covering the shipped closure. Build offline from the release archive with the upstream Perl aimake system in an out-of-source Guix phase, selecting --without=gui and --without=server and the bundled Jansson; expected native inputs are perl, bison, flex, and the C/C++ toolchain, with zlib as the library input. The checked-in testbench exists but is not wired as a default aimake test target; run any directly buildable testbench target if exposed, otherwise retain the package smoke test as the deterministic acceptance test. Install the real console binary under libexec and a Guix launcher as /bin/nhfourk. Normal launches must copy/link immutable data into ${XDG_STATE_HOME:-$HOME/.local/state}/nhfourk and invoke the real binary with -H there, so saves, scores, locks, and dumps never target the store; the --guix-smoke wrapper mode must instead use a fresh mktemp directory, a fixed TERM/size, a PTY helper, and no network. That mode should launch a real local new game with fixed -u/-p/-r selections, make a movement, save, return to the menu, load the save, assert the save artifact stayed in the isolated directory and the store is unchanged, and print the single-line marker nhfourk isolated smoke passed; capture the resulting PTY screen at .goocastle/evidence/issue-454.png. No equivalent nhfourk package or same-upstream delivery exists in the local channel; acehack, dhack, dnethack, grunthack, hack, and hackem are distinct projects. Acceptance is guix lint -L . nhfourk clean, guix build -L . --no-grafts nhfourk offline, upstream checks where available, and guix build -L . --no-grafts --check nhfourk plus the fresh-HOME/XDG wrapper smoke with no store writes.


Imported from GitHub comment. Originally posted by htayj on 2026-09-11T11:29:48Z.

<!-- goocastle-disposition:sequential-reviewer:454:1:implementation-ready --> Goocastle recorded disposition: implementation-ready. Created implementation ticket: #708. Package the console-only NetHack Fourk variant as Guix package nhfourk in tay/packages/nhfourk.scm. Canonical maintained upstream is https://github.com/tsadok/nhfourk; use the latest stable release tag v4.3.0.4 at immutable commit b8d1029efb9225638b6cb0041e2187a74dabf4c0, not the newer untagged master tip 479383a1d05d54b2dfda5cfaab4ca5147aefa7e5. The GitHub v4.3.0.4 source archive has SHA-256 f12109456daea57d92fb2194a1401eb109969be21c44c6accd9c5f968befa12f and contains no .gitmodules or separately fetched origin. Upstream README, COPYING, and copyright at that revision establish NGPL for the game, data, documentation, console text tiles, maps, and fonts; libuncursed and libnethack_client permit NGPL or GPL-2+; bundled libjansson is Expat; savemap.pl is Expat; aimake is GPL-3+ build-only; aimake.rules is NGPL. Optional raster assets have explicit CC-BY-3.0, CC-BY-SA-3.0, RLTiles-attribution, or geoduck terms, but exclude them by building with --without=gui; do not install SDL2/libpng GUI, server/PostgreSQL/inetd, optional raster tiles, or any runtime-downloaded content. Install the upstream libnethack/dat/license, COPYING, and copyright as license/notice files, with copyright-details covering the shipped closure. Build offline from the release archive with the upstream Perl aimake system in an out-of-source Guix phase, selecting --without=gui and --without=server and the bundled Jansson; expected native inputs are perl, bison, flex, and the C/C++ toolchain, with zlib as the library input. The checked-in testbench exists but is not wired as a default aimake test target; run any directly buildable testbench target if exposed, otherwise retain the package smoke test as the deterministic acceptance test. Install the real console binary under libexec and a Guix launcher as /bin/nhfourk. Normal launches must copy/link immutable data into ${XDG_STATE_HOME:-$HOME/.local/state}/nhfourk and invoke the real binary with -H there, so saves, scores, locks, and dumps never target the store; the --guix-smoke wrapper mode must instead use a fresh mktemp directory, a fixed TERM/size, a PTY helper, and no network. That mode should launch a real local new game with fixed -u/-p/-r selections, make a movement, save, return to the menu, load the save, assert the save artifact stayed in the isolated directory and the store is unchanged, and print the single-line marker nhfourk isolated smoke passed; capture the resulting PTY screen at .goocastle/evidence/issue-454.png. No equivalent nhfourk package or same-upstream delivery exists in the local channel; acehack, dhack, dnethack, grunthack, hack, and hackem are distinct projects. Acceptance is guix lint -L . nhfourk clean, guix build -L . --no-grafts nhfourk offline, upstream checks where available, and guix build -L . --no-grafts --check nhfourk plus the fresh-HOME/XDG wrapper smoke with no store writes. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/454#issuecomment-5633761621). Originally posted by [htayj](https://github.com/htayj) on 2026-09-11T11:29:48Z.
Owner

Blocked by explicit user decision: keep full-original Fourk packaging open pending a clear free-software grant for default Geoduck assets. Pinned source geoduck.map permits unmodified redistribution and personal Jonadab modifications, not general modification rights. Canonical http://www.geoduckthings.net/nhack/nhack.html (updated2026-04-13, retrieved2026-10-01) likewise grants credited redistribution only. No asset silently removed/replaced, no FSDG compatibility claimed. Dedicated recipe/helpers remain unpublished and unverified; no build/runtime or closure. Resume requires broader primary-source licensing permission or a new user-approved asset disposition.

Blocked by explicit user decision: keep full-original Fourk packaging open pending a clear free-software grant for default Geoduck assets. Pinned source geoduck.map permits unmodified redistribution and personal Jonadab modifications, not general modification rights. Canonical http://www.geoduckthings.net/nhack/nhack.html (updated2026-04-13, retrieved2026-10-01) likewise grants credited redistribution only. No asset silently removed/replaced, no FSDG compatibility claimed. Dedicated recipe/helpers remain unpublished and unverified; no build/runtime or closure. Resume requires broader primary-source licensing permission or a new user-approved asset disposition.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tay/guix-channel#454
No description provided.