[Guix packaging] lockie/lispy-rogue #141

Closed
opened 2026-08-14 13:17:52 +00:00 by htayj · 2 comments
htayj commented 2026-08-14 13:17:52 +00:00 (Migrated from github.com)

Candidate

  • Upstream canonical URL: https://github.com/lockie/lispy-rogue
  • Source pinned commit/release when known: default-branch HEAD b2249bf7fe05e4ae53468d0f8855fcf4f4057337 (checked 2026-08-14)
  • Target concrete installed deliverable: the lispy-rogue Common Lisp roguelike
  • Primary category: game
  • Tags: common-lisp, roguelike
  • Primary language normalized: Common Lisp
  • Build system: asdf-build-system/sbcl
  • SPDX expression: MIT
  • License status: confirmed-free
  • License evidence: Inspected the upstream license text at this pinned commit; GitHub identifies it as MIT (MIT License). No GPL only-or-later term is inferred beyond the upstream evidence.
  • Difficulty: moderate — The ASDF dependency closure and terminal gameplay smoke need confirmation.
  • Workflow state: research
  • Existing Guix coverage: Checked 2026-08-14: GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix 'R Us, and RDE; no equivalent package with the same upstream origin was found.

Scope and blockers

Package the local terminal game and its data assets.

Acceptance checks

  • guix lint -L . lispy-rogue
  • guix build -L . lispy-rogue
  • load the system and start then exit a local game noninteractively.

Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-14T13:17:52Z.

## Candidate - Upstream canonical URL: https://github.com/lockie/lispy-rogue - Source pinned commit/release when known: default-branch HEAD `b2249bf7fe05e4ae53468d0f8855fcf4f4057337` (checked 2026-08-14) - Target concrete installed deliverable: the lispy-rogue Common Lisp roguelike - Primary category: game - Tags: common-lisp, roguelike - Primary language normalized: Common Lisp - Build system: asdf-build-system/sbcl - SPDX expression: MIT - License status: confirmed-free - License evidence: Inspected the upstream license text at this pinned commit; GitHub identifies it as `MIT` (MIT License). No GPL only-or-later term is inferred beyond the upstream evidence. - Difficulty: moderate — The ASDF dependency closure and terminal gameplay smoke need confirmation. - Workflow state: research - Existing Guix coverage: Checked 2026-08-14: GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix 'R Us, and RDE; no equivalent package with the same upstream origin was found. ## Scope and blockers Package the local terminal game and its data assets. ## Acceptance checks - `guix lint -L . lispy-rogue` - `guix build -L . lispy-rogue` - load the system and start then exit a local game noninteractively. --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/141). Originally posted by [htayj](https://github.com/htayj) on 2026-08-14T13:17:52Z.
htayj commented 2026-08-29 10:49:36 +00:00 (Migrated from github.com)

Goocastle recorded disposition: implementation-ready.

Created implementation ticket: #644.

Canonical target and fixed source: https://github.com/lockie/lispy-rogue at commit b2249bf7fe05e4ae53468d0f8855fcf4f4057337, ASDF version 0.0.2. The local immutable source ledger already provides lockie-lispy-rogue-source for that codeload snapshot with Guix base32 hash 1f0n7smll05hgn2syqvzqnyybcvcfbjdq7227vkq8zb4g11lmb4x; reuse it rather than creating a second target origin. The pinned tree has no .gitmodules and git submodule status --recursive is empty. The target LICENSE at that revision is the complete MIT grant (Andrew Kravchuk, 2024), and the ASDF system is a source-buildable Common Lisp application with deploy-op and entry point lispy-rogue:main. Existing Guix coverage search found no equivalent package for this upstream origin; the local channel only has the source snapshot.

Required ASDF origins and exact license evidence: cl-astar 0.0.4 at https://gitlab.com/lockie/cl-astar commit 00d37d04187ce42211b2029402ee46a6813a5bce has LICENSE with an MIT grant; cl-liballegro-nuklear 0.0.12 at https://github.com/lockie/cl-liballegro-nuklear commit eb45ded76be495c59c82bc743850db275119cb2a has LICENSE.md with an MIT grant, while its bundled nuklear.h at that same fixed revision explicitly declares Nuklear public domain and its embedded stb components state public-domain/MIT alternatives; cl-tiled 0.2.2 at https://github.com/Zulu-Inuoe/cl-tiled commit 80332bfbf18734f342c9c2c7b6228560f64a3d54 has LICENSE.md with the complete zlib/libpng grant. There are no submodule origins. The Guix-provided direct closure is usable at the inspected fixed revisions: alexandria 49e82add16cb9f1ffa72c77cd687271247181ff3 (LICENCE: public domain with 0-clause-MIT fallback), cl-fast-ecs 491a16b21c1efe45a5f793d39ccf4aa30de6ff41 (LICENSE: MIT), cl-liballegro 49f632ce97fc4f835bf5d450588793234b980a64 (ASDF and README identify zlib), cl-ppcre 1ca0cd9ca0d161acd49c463d6cb5fff897596e2f (source headers contain the BSD redistribution grant), livesupport 71e6e412df9f3759ad8378fabb203913d82e228a (LICENSE: BSD 2-Clause), deploy c9b869d943d39fcddd8c4aa380995645bd2e3c0b (LICENSE: zlib), and allegro 5.2.7.0 (existing Guix package metadata: Modified BSD). The transitive systems named by the three new ASDF libraries—let-plus, float-features, trivial-adjust-simple-array, CFFI/cffi-libffi, trivial-features, chipz, cl-base64, cl-json, nibbles, parse-float, split-sequence, uiop, and xmls—are already available as Guix SBCL inputs.

The runtime assets are fixed bytes in the target commit: dungeon.ogg SHA256 18da6d6c4492d744f5ebde5bb128a636770df4197d2d4a0b5e8d65df6e27f57b and the OpenGameArt Dungeon Ambience page identifies that asset as CC0; urizen-tileset.png SHA256 b8093319d17fe5032f3d5a9a206a365b8a64c1fa95f5fe3e215c4b12e3dbf9bf and the author page identifies Urizen 1Bit Tileset as CC0 v1.0; fantasque-sans-mono.ttf SHA256 88f574f228dde6889146e5b0574ddfac5f84aaa2bd475578346214eb4a2defac and the upstream Fantasque repository identifies it as SIL OFL 1.1; inconsolata.ttf SHA256 ccd0bf1697854e35cae9fec9ba20be3b145a194657f9bfa8507c67dcde3a8962 and the upstream Google Fonts repository identifies it as SIL OFL 1.1. The TSX file is target metadata. The README also credits CC-BY-3.0 cover art and Tango icons, but those are not loaded by the game; omit package/icon.png and all package-only artwork from the installed deliverable unless its exact source revision and notice are separately documented. Preserve the target LICENSE and an asset notice containing the two OFL licenses and attribution/links.

Delivery brief: add a package module such as tay/packages/lispy-rogue.scm defining exactly lispy-rogue (the acceptance name), importing tay/packages/starred-i-m and using (package-source lockie-lispy-rogue-source), version 0.0.2, asdf-build-system/sbcl, and ASDF system lispy-rogue. Add private/public SBCL recipes for the three absent systems at the revisions above, then use inputs sbcl-alexandria, sbcl-cl-astar, sbcl-cl-fast-ecs, sbcl-cl-liballegro, sbcl-cl-liballegro-nuklear, sbcl-cl-ppcre, sbcl-cl-tiled, sbcl-livesupport, sbcl-deploy plus their Guix closure. cl-liballegro-nuklear's ASDF build runs make, pkg-config, swig -cffi, and a C compiler against Allegro's allegro-5, allegro_dialog-5, allegro_font-5, allegro_image-5, allegro_primitives-5, and allegro_ttf-5 pc files, so provide make, gcc-toolchain, pkg-config, and swig as native inputs and allegro as a native/runtime input as appropriate. Do not run upstream package/build.lisp: it calls ql:update-all-dists and is network-dependent. Invoke the pinned system through Guix's offline ASDF configuration and its declared deploy-op (or an equivalent post-create-asdf-configuration build phase), install the generated executable as $out/bin/lispy-rogue, ensure the generated liballegro_nuklear.so and Allegro foreign-library search paths are available at runtime, and copy Resources to $out/Resources. This layout is required because the boot hook computes Resources relative to the parent of deploy:runtime-directory and main chdirs there before loading dungeon.ogg, the two fonts, and urizen-tileset.tsx; the wrapper must work from any current directory, use the real executable argv[0], set LD_LIBRARY_PATH/CFFI search paths for generated and Guix Allegro libraries, and never write to the immutable output. Limit the package to x86_64-linux because the inspected Guix Allegro/SBCL bindings are available there.

Acceptance proof after implementation: run the exact gates guix lint -L . lispy-rogue and guix build -L . lispy-rogue; assert the output executable, all four runtime assets, LICENSE, and asset notices exist. Then in a fresh temporary HOME/XDG tree start the installed executable under an isolated Xvfb display such as :99 with -nolisten tcp and software rendering, wait for the window titled Lispy Rogue using xwininfo/xdotool, send the window-close/WM_DELETE_WINDOW event (Escape only cancels help and is not an exit), and require clean exit status 0. Assert the pre/post output digest is unchanged and no files are created outside the temporary HOME/XDG tree. This proves system load, native library resolution, resource loading, display startup, and the source close-event cleanup path without claiming that research itself passed the future package gates. On this host, guix download could not run because /var/guix/daemon-socket/socket is absent and sbcl, swig, gcc, and Xvfb are not installed, so no package/build proof is claimed here; those are environment limitations, not source blockers.


Imported from GitHub comment. Originally posted by htayj on 2026-08-29T10:49:36Z.

<!-- goocastle-disposition:sequential-reviewer:141:1:implementation-ready --> Goocastle recorded disposition: implementation-ready. Created implementation ticket: #644. Canonical target and fixed source: https://github.com/lockie/lispy-rogue at commit b2249bf7fe05e4ae53468d0f8855fcf4f4057337, ASDF version 0.0.2. The local immutable source ledger already provides lockie-lispy-rogue-source for that codeload snapshot with Guix base32 hash 1f0n7smll05hgn2syqvzqnyybcvcfbjdq7227vkq8zb4g11lmb4x; reuse it rather than creating a second target origin. The pinned tree has no .gitmodules and git submodule status --recursive is empty. The target LICENSE at that revision is the complete MIT grant (Andrew Kravchuk, 2024), and the ASDF system is a source-buildable Common Lisp application with deploy-op and entry point lispy-rogue:main. Existing Guix coverage search found no equivalent package for this upstream origin; the local channel only has the source snapshot. Required ASDF origins and exact license evidence: cl-astar 0.0.4 at https://gitlab.com/lockie/cl-astar commit 00d37d04187ce42211b2029402ee46a6813a5bce has LICENSE with an MIT grant; cl-liballegro-nuklear 0.0.12 at https://github.com/lockie/cl-liballegro-nuklear commit eb45ded76be495c59c82bc743850db275119cb2a has LICENSE.md with an MIT grant, while its bundled nuklear.h at that same fixed revision explicitly declares Nuklear public domain and its embedded stb components state public-domain/MIT alternatives; cl-tiled 0.2.2 at https://github.com/Zulu-Inuoe/cl-tiled commit 80332bfbf18734f342c9c2c7b6228560f64a3d54 has LICENSE.md with the complete zlib/libpng grant. There are no submodule origins. The Guix-provided direct closure is usable at the inspected fixed revisions: alexandria 49e82add16cb9f1ffa72c77cd687271247181ff3 (LICENCE: public domain with 0-clause-MIT fallback), cl-fast-ecs 491a16b21c1efe45a5f793d39ccf4aa30de6ff41 (LICENSE: MIT), cl-liballegro 49f632ce97fc4f835bf5d450588793234b980a64 (ASDF and README identify zlib), cl-ppcre 1ca0cd9ca0d161acd49c463d6cb5fff897596e2f (source headers contain the BSD redistribution grant), livesupport 71e6e412df9f3759ad8378fabb203913d82e228a (LICENSE: BSD 2-Clause), deploy c9b869d943d39fcddd8c4aa380995645bd2e3c0b (LICENSE: zlib), and allegro 5.2.7.0 (existing Guix package metadata: Modified BSD). The transitive systems named by the three new ASDF libraries—let-plus, float-features, trivial-adjust-simple-array, CFFI/cffi-libffi, trivial-features, chipz, cl-base64, cl-json, nibbles, parse-float, split-sequence, uiop, and xmls—are already available as Guix SBCL inputs. The runtime assets are fixed bytes in the target commit: dungeon.ogg SHA256 18da6d6c4492d744f5ebde5bb128a636770df4197d2d4a0b5e8d65df6e27f57b and the OpenGameArt Dungeon Ambience page identifies that asset as CC0; urizen-tileset.png SHA256 b8093319d17fe5032f3d5a9a206a365b8a64c1fa95f5fe3e215c4b12e3dbf9bf and the author page identifies Urizen 1Bit Tileset as CC0 v1.0; fantasque-sans-mono.ttf SHA256 88f574f228dde6889146e5b0574ddfac5f84aaa2bd475578346214eb4a2defac and the upstream Fantasque repository identifies it as SIL OFL 1.1; inconsolata.ttf SHA256 ccd0bf1697854e35cae9fec9ba20be3b145a194657f9bfa8507c67dcde3a8962 and the upstream Google Fonts repository identifies it as SIL OFL 1.1. The TSX file is target metadata. The README also credits CC-BY-3.0 cover art and Tango icons, but those are not loaded by the game; omit package/icon.png and all package-only artwork from the installed deliverable unless its exact source revision and notice are separately documented. Preserve the target LICENSE and an asset notice containing the two OFL licenses and attribution/links. Delivery brief: add a package module such as tay/packages/lispy-rogue.scm defining exactly lispy-rogue (the acceptance name), importing tay/packages/starred-i-m and using (package-source lockie-lispy-rogue-source), version 0.0.2, asdf-build-system/sbcl, and ASDF system lispy-rogue. Add private/public SBCL recipes for the three absent systems at the revisions above, then use inputs sbcl-alexandria, sbcl-cl-astar, sbcl-cl-fast-ecs, sbcl-cl-liballegro, sbcl-cl-liballegro-nuklear, sbcl-cl-ppcre, sbcl-cl-tiled, sbcl-livesupport, sbcl-deploy plus their Guix closure. cl-liballegro-nuklear's ASDF build runs make, pkg-config, swig -cffi, and a C compiler against Allegro's allegro-5, allegro_dialog-5, allegro_font-5, allegro_image-5, allegro_primitives-5, and allegro_ttf-5 pc files, so provide make, gcc-toolchain, pkg-config, and swig as native inputs and allegro as a native/runtime input as appropriate. Do not run upstream package/build.lisp: it calls ql:update-all-dists and is network-dependent. Invoke the pinned system through Guix's offline ASDF configuration and its declared deploy-op (or an equivalent post-create-asdf-configuration build phase), install the generated executable as $out/bin/lispy-rogue, ensure the generated liballegro_nuklear.so and Allegro foreign-library search paths are available at runtime, and copy Resources to $out/Resources. This layout is required because the boot hook computes Resources relative to the parent of deploy:runtime-directory and main chdirs there before loading dungeon.ogg, the two fonts, and urizen-tileset.tsx; the wrapper must work from any current directory, use the real executable argv[0], set LD_LIBRARY_PATH/CFFI search paths for generated and Guix Allegro libraries, and never write to the immutable output. Limit the package to x86_64-linux because the inspected Guix Allegro/SBCL bindings are available there. Acceptance proof after implementation: run the exact gates guix lint -L . lispy-rogue and guix build -L . lispy-rogue; assert the output executable, all four runtime assets, LICENSE, and asset notices exist. Then in a fresh temporary HOME/XDG tree start the installed executable under an isolated Xvfb display such as :99 with -nolisten tcp and software rendering, wait for the window titled Lispy Rogue using xwininfo/xdotool, send the window-close/WM_DELETE_WINDOW event (Escape only cancels help and is not an exit), and require clean exit status 0. Assert the pre/post output digest is unchanged and no files are created outside the temporary HOME/XDG tree. This proves system load, native library resolution, resource loading, display startup, and the source close-event cleanup path without claiming that research itself passed the future package gates. On this host, guix download could not run because /var/guix/daemon-socket/socket is absent and sbcl, swig, gcc, and Xvfb are not installed, so no package/build proof is claimed here; those are environment limitations, not source blockers. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/141#issuecomment-5461897856). Originally posted by [htayj](https://github.com/htayj) on 2026-08-29T10:49:36Z.
Owner

Delivered signed/authenticated 66dec362f5, pushed to Forgejo. Lispy Rogue0.0.2 output72znkzks8a1jy34zxqx08rdkvhkx1fl0: deterministic compiled FASL native launcher with explicit store ASDF registry. Exact source-font RGB match proves startup/help/dungeon/wait/inventory transitions, real audio stream and clean WM close. No save/combat completeness claim. Final source build, bit-identical --check, package lint and real native/integrated consumers passed. Offline sameUID/read-only store/unchanged NAR. Genuine screenshots .goocastle/evidence/, full scoped receipts ACCOUNTING.md, readable categorized README.md.

Delivered signed/authenticated 66dec362f58f306e2404b5f8a13ab0fb2d403460, pushed to Forgejo. Lispy Rogue0.0.2 output72znkzks8a1jy34zxqx08rdkvhkx1fl0: deterministic compiled FASL native launcher with explicit store ASDF registry. Exact source-font RGB match proves startup/help/dungeon/wait/inventory transitions, real audio stream and clean WM close. No save/combat completeness claim. Final source build, bit-identical --check, package lint and real native/integrated consumers passed. Offline sameUID/read-only store/unchanged NAR. Genuine screenshots .goocastle/evidence/, full scoped receipts ACCOUNTING.md, readable categorized README.md.
tay closed this issue 2026-10-04 07:30:25 +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#141
No description provided.