[Guix packaging] Hack'EM #387
Labels
No labels
accessibility
bug
category:ai-tool
category:browser
category:command-line-tool
category:compiler-toolchain
category:desktop-application
category:developer-tool
category:editor-extension
category:emulator
category:font
category:game
category:input-accessibility
category:library-framework
category:mud-client
category:multimedia
category:networking-client
category:programming-language
category:roguelike
category:storage-media-tool
category:system-tool
category:terminal-application
complexity:high
complexity:low
complexity:medium
difficulty:blocked
difficulty:easy
difficulty:hard
difficulty:moderate
documentation
duplicate
enhancement
good first issue
gooflow:guix-package-high
gooflow:guix-package-moderate
gooflow:guix-package-quality-gates
gooflow:guix-research-disposition
gooflow:guix-runtime-evidence-refresh
help wanted
invalid
kind:disposition
kind:packaging
needs:license-investigation
priority:quick
question
ready-for-agent
state:available-elsewhere
state:blocked
state:deferred
state:out-of-scope
state:ready
state:research
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
tay/guix-channel#387
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Candidate
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
Acceptance checks
guix lint -L . <package>has no package-specific findings.guix build -L . --no-grafts <package>succeeds without network access or opaque binaries.guix build -L . --no-grafts --check <package>verifies reproducibility.Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-24T17:30:32Z.
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.
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.