[Guix packaging] Hack'EM #387

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

Candidate

  • Project: Hack'EM
  • Candidate upstream/homepage: https://github.com/elunna/hackem
  • 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:30:32Z.

## Candidate - Project: Hack'EM - Candidate upstream/homepage: https://github.com/elunna/hackem - 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/387). Originally posted by [htayj](https://github.com/htayj) on 2026-08-24T17:30:32Z.
htayj commented 2026-09-06 13:00:54 +00:00 (Migrated from github.com)

Goocastle recorded disposition: implementation-ready.

Created implementation ticket: #693.

Delivery is technically and legally viable as the distinct Hack'EM variant (not the official Guix nethack package or this channel's related grunthack package). Canonical maintained source: https://github.com/elunna/hackem; fixed stable release v1.2.2, commit 6e99cffbeecd2cbf71b3d27b9285be345aca298b; commit archive SHA-256 53cee6b27997eceab653401b20face1f64f6e7360ec6ad448f5b2256c76dddb. The local channel has no hackem definition/history; official GNU Guix games.scm has nethack, but its upstream is NetHack/NetHack and it is not an equivalent Hack'EM package. Upstream README describes Hack'EM as an independently playable EvilHack-based successor/variant incorporating Slash'EM, SpliceHack, UnNetHack, SlashTHEM, xNetHack, FIQHack, SporkHack, slashem-up and SLASHEM9. The pinned source is one complete archive with no .gitmodules, language registry, updater or runtime-download dependency; the Windows CI's separate PDCurses clone is not part of the Linux package. LICENSE is the NETHACK GENERAL PUBLIC LICENSE: copying/modification/redistribution is granted with intact notices, source availability and identical terms for derivatives. Core source, maps and docs carry the corresponding NetHack freely-redistributable notices; preserve them and install LICENSE plus selected README/Guidebook/man documentation. The sound README only says Roland S-750 samples “should be no copyright” and is not a clear redistribution grant, so do not install any sys/share/sounds files. Build only the Linux tty/curses port, which the linux hints select with in-tree tty/curses sources, ncurses/tinfo, generated makedefs/dungeon/level data, and no X11/Qt/bitmap/font assets; optional unlinked GIF reader/random.c material is not in the runtime closure. Use gnu-build-system, disable parallel make, run sys/unix/setup.sh with a fixed Linux hints file, then make all offline. Expected native inputs are gcc-toolchain, gnu-make, flex, bison and the documentation formatter (groff-minimal, with col if required); runtime/build inputs are ncurses/tinfo and wrapper utilities bash-minimal, coreutils/findutils/util-linux. Expect GNU89/fcommon compatibility flags and a fixed SOURCE_DATE_EPOCH for generated files. Do not run upstream make install: its Makefile deletes HACKDIR and creates writable files there. Install the real binary as libexec/hackem-real and the generated data archive/license/docs under share/hackem; patch the compiled VAR_PLAYGROUND path to a launcher-provided environment value, keep HACKDIR/NETHACKDIR read-only store data, and wrap normal play so saves, scores, bones, locks, logs and config live below XDG_STATE_HOME/XDG_DATA_HOME (with fresh HOME fallback), with no network/server/updater behavior. The wrapper must provide exactly one safe contract, --guix-smoke: create an isolated fresh HOME/XDG/TMP tree, launch the real tty game through a PTY with deterministic locale/seed/config, select a character, make a real move, save and restore (or cleanly quit after the meaningful save/load), capture terminal output, assert all mutable files remain in the isolated tree and the store is untouched, then print the single stdout line hackem guix smoke passed. Delivery must run upstream build checks where available, guix lint/build --no-grafts --check, and this bounded smoke; research could not run Guix because the host provides no daemon and therefore claims no package proof.


Imported from GitHub comment. Originally posted by htayj on 2026-09-06T13:00:54Z.

<!-- goocastle-disposition:sequential-reviewer:387:1:implementation-ready --> Goocastle recorded disposition: implementation-ready. Created implementation ticket: #693. Delivery is technically and legally viable as the distinct Hack'EM variant (not the official Guix nethack package or this channel's related grunthack package). Canonical maintained source: https://github.com/elunna/hackem; fixed stable release v1.2.2, commit 6e99cffbeecd2cbf71b3d27b9285be345aca298b; commit archive SHA-256 53cee6b27997eceab653401b20face1f64f6e7360ec6ad448f5b2256c76dddb. The local channel has no hackem definition/history; official GNU Guix games.scm has nethack, but its upstream is NetHack/NetHack and it is not an equivalent Hack'EM package. Upstream README describes Hack'EM as an independently playable EvilHack-based successor/variant incorporating Slash'EM, SpliceHack, UnNetHack, SlashTHEM, xNetHack, FIQHack, SporkHack, slashem-up and SLASHEM9. The pinned source is one complete archive with no .gitmodules, language registry, updater or runtime-download dependency; the Windows CI's separate PDCurses clone is not part of the Linux package. LICENSE is the NETHACK GENERAL PUBLIC LICENSE: copying/modification/redistribution is granted with intact notices, source availability and identical terms for derivatives. Core source, maps and docs carry the corresponding NetHack freely-redistributable notices; preserve them and install LICENSE plus selected README/Guidebook/man documentation. The sound README only says Roland S-750 samples “should be no copyright” and is not a clear redistribution grant, so do not install any sys/share/sounds files. Build only the Linux tty/curses port, which the linux hints select with in-tree tty/curses sources, ncurses/tinfo, generated makedefs/dungeon/level data, and no X11/Qt/bitmap/font assets; optional unlinked GIF reader/random.c material is not in the runtime closure. Use gnu-build-system, disable parallel make, run sys/unix/setup.sh with a fixed Linux hints file, then make all offline. Expected native inputs are gcc-toolchain, gnu-make, flex, bison and the documentation formatter (groff-minimal, with col if required); runtime/build inputs are ncurses/tinfo and wrapper utilities bash-minimal, coreutils/findutils/util-linux. Expect GNU89/fcommon compatibility flags and a fixed SOURCE_DATE_EPOCH for generated files. Do not run upstream make install: its Makefile deletes HACKDIR and creates writable files there. Install the real binary as libexec/hackem-real and the generated data archive/license/docs under share/hackem; patch the compiled VAR_PLAYGROUND path to a launcher-provided environment value, keep HACKDIR/NETHACKDIR read-only store data, and wrap normal play so saves, scores, bones, locks, logs and config live below XDG_STATE_HOME/XDG_DATA_HOME (with fresh HOME fallback), with no network/server/updater behavior. The wrapper must provide exactly one safe contract, --guix-smoke: create an isolated fresh HOME/XDG/TMP tree, launch the real tty game through a PTY with deterministic locale/seed/config, select a character, make a real move, save and restore (or cleanly quit after the meaningful save/load), capture terminal output, assert all mutable files remain in the isolated tree and the store is untouched, then print the single stdout line hackem guix smoke passed. Delivery must run upstream build checks where available, guix lint/build --no-grafts --check, and this bounded smoke; research could not run Guix because the host provides no daemon and therefore claims no package proof. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/387#issuecomment-5559384205). Originally posted by [htayj](https://github.com/htayj) on 2026-09-06T13:00:54Z.
Owner

Implemented and published in signed, Guix-authenticated commit 62f09e33feb2119a835d7b346606d7811d9d3500.

Hack’EM: original TTY movement in three independent sessions, two exact native compressed-save restores, full map/HUD/inventory continuity and unchanged read-only NAR. Final output g3wll2gzr03r6fg89zm5g3kzm9x5wsrf.

Source build, final reproducibility --check, offline lint without package-specific findings, standalone and integrated Make acceptance passed. README records exact commands and limits; unrelated Fourk/flex/legacy Cargo diagnostics are not claimed clean. No deployed system changed; no OKF deployment update applies.

Implemented and published in signed, Guix-authenticated commit `62f09e33feb2119a835d7b346606d7811d9d3500`. Hack’EM: original TTY movement in three independent sessions, two exact native compressed-save restores, full map/HUD/inventory continuity and unchanged read-only NAR. Final output g3wll2gzr03r6fg89zm5g3kzm9x5wsrf. Source build, final reproducibility `--check`, offline lint without package-specific findings, standalone and integrated Make acceptance passed. README records exact commands and limits; unrelated Fourk/flex/legacy Cargo diagnostics are not claimed clean. No deployed system changed; no OKF deployment update applies.
tay closed this issue 2026-10-03 10:08:35 +00:00
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#387
No description provided.