working game, needs some touch up

This commit is contained in:
2026-04-29 17:01:34 -04:00
commit 4117551198
5 changed files with 1075 additions and 0 deletions

89
package.nix Normal file
View File

@@ -0,0 +1,89 @@
{
lib,
python3Packages,
gtk4,
gobject-introspection,
wrapGAppsHook4,
}:
python3Packages.buildPythonApplication rec {
pname = "shikaku";
version = "0.1.0";
pyproject = false;
src = ./.;
nativeBuildInputs = [
gobject-introspection
wrapGAppsHook4
];
buildInputs = [
gtk4
];
dependencies = with python3Packages; [
pygobject3
];
# Pure Python — nothing to compile
dontBuild = true;
installPhase = ''
runHook preInstall
install -Dm755 shikaku.py $out/share/shikaku/shikaku.py
# Wrapper script so wrapGAppsHook4 can inject GDK/GI env vars
mkdir -p $out/bin
cat > $out/bin/shikaku << EOF
#!${python3Packages.python.interpreter}
import sys
sys.path.insert(0, "$out/share/shikaku")
import shikaku
shikaku.main()
EOF
chmod +x $out/bin/shikaku
# Desktop entry for app launchers (GNOME, KDE, etc.)
install -Dm644 /dev/stdin $out/share/applications/shikaku.desktop << EOF
[Desktop Entry]
Version=1.0
Type=Application
Name=Shikaku
Comment=Rectangle partition logic puzzle
Exec=shikaku
Icon=applications-games
Terminal=false
Categories=Game;LogicGame;BoardGame;
Keywords=puzzle;shikaku;logic;grid;rectangle;
EOF
runHook postInstall
'';
# wrapGAppsHook4 handles GDK_PIXBUF_MODULE_FILE, XDG_DATA_DIRS, GI_TYPELIB_PATH, etc.
# but it expects to wrap a binary. Point it at our wrapper script.
dontWrapGApps = false;
passthru.tests.shikaku-starts = python3Packages.pytestCheckHook;
meta = {
description = "Rectangle partition logic puzzle (Shikaku)";
longDescription = ''
Shikaku is a logic puzzle where you partition a grid into non-overlapping
rectangles. Each rectangle must contain exactly one number, and that number
equals the area of the rectangle in cells. Puzzles are procedurally generated
and guaranteed to be solvable. Supports 5×5 and 7×7 grids, with larger sizes
planned. Built with Python and GTK4; plays fully offline.
'';
homepage = "https://github.com/your-github-username/shikaku"; # TODO
# changelog = "https://github.com/your-github-username/shikaku/blob/v${version}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
# your-nixpkgs-handle # TODO: add yourself to maintainers/maintainer-list.nix first
];
platforms = lib.platforms.linux;
mainProgram = "shikaku";
};
}