117 lines
3.4 KiB
Nix
117 lines
3.4 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
cmake,
|
|
pkg-config,
|
|
python3,
|
|
rake,
|
|
curl,
|
|
fetchFromGitHub,
|
|
libGL,
|
|
libGLU,
|
|
libX11,
|
|
janet,
|
|
lua5_3,
|
|
quickjs,
|
|
SDL2,
|
|
# Whether to build TIC-80's "Pro" version, which is an incentive to support the project financially,
|
|
# that enables some additional features. It is, however, fully open source.
|
|
withPro ? false,
|
|
}:
|
|
let
|
|
# git rev-list HEAD --count
|
|
revision = "3016";
|
|
year = "2025";
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
pname = "tic-80";
|
|
# use an untagged version until upstream tags a new version. We want
|
|
# 'PREFER_SYSTEM_LIBRARIES', and without it tic-80 won't build
|
|
version = "1.1-unstable-2025-05-26";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "nesbox";
|
|
repo = "TIC-80";
|
|
rev = "663d43924abf6fd7620de6bf25c009ce5b30ab83";
|
|
hash = "sha256-UjBnXxYZ5gfk58sI1qek5fkKpJ7LzOVmrxdjVgONcXc=";
|
|
# TIC-80 vendors its dependencies as submodules. For the following dependencies,
|
|
# there are no (or no compatible) packages in nixpkgs yet, so we use the vendored
|
|
# ones as a fill-in: kubazip, wasm, squirrel, pocketpy, argparse, naett,
|
|
# sdlgpu, mruby.
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
# TIC-80 tries to determine the revision part of the version using its Git history.
|
|
# Because using leaveDotGit tends be non-reproducible with submodules, we just
|
|
# hardcode it.
|
|
# To avoid the awkward copyright range of "2017-1980", which would be caused by the
|
|
# sandbox environment, hardcode the year of the release.
|
|
postPatch = ''
|
|
substituteInPlace cmake/version.cmake \
|
|
--replace-fail 'set(VERSION_REVISION 0)' 'set(VERSION_REVISION ${revision})' \
|
|
--replace-fail 'string(TIMESTAMP VERSION_YEAR "%Y")' 'set(VERSION_YEAR "${year}")'
|
|
'';
|
|
|
|
# Taken from pkgs/development/compilers/mruby; necessary so it uses `gcc` instead of `ld` for linking.
|
|
# https://github.com/mruby/mruby/blob/e502fd88b988b0a8d9f31b928eb322eae269c45a/tasks/toolchains/gcc.rake#L30
|
|
preBuild = ''
|
|
unset LD
|
|
'';
|
|
|
|
cmakeFlags =
|
|
let
|
|
enableCmakeBool = (lib.flip lib.cmakeBool) true;
|
|
in
|
|
[
|
|
(lib.cmakeBool "BUILD_PRO" withPro)
|
|
]
|
|
++ (map enableCmakeBool [
|
|
"BUILD_STATIC"
|
|
"PREFER_SYSTEM_LIBRARIES"
|
|
"BUILD_SDLGPU"
|
|
"BUILD_WITH_ALL"
|
|
]);
|
|
|
|
nativeBuildInputs = [
|
|
cmake
|
|
curl
|
|
pkg-config
|
|
python3
|
|
rake
|
|
];
|
|
buildInputs = [
|
|
libGL
|
|
libGLU
|
|
libX11
|
|
janet
|
|
(lua5_3.withPackages (ps: [ ps.fennel ]))
|
|
quickjs
|
|
SDL2
|
|
];
|
|
|
|
meta = with lib; {
|
|
description = "Free and open source fantasy computer for making, playing and sharing tiny games";
|
|
longDescription = ''
|
|
TIC-80 is a free and open source fantasy computer for making, playing and
|
|
sharing tiny games.
|
|
|
|
There are built-in tools for development: code, sprites, maps, sound
|
|
editors and the command line, which is enough to create a mini retro
|
|
game. At the exit you will get a cartridge file, which can be stored and
|
|
played on the website.
|
|
|
|
Also, the game can be packed into a player that works on all popular
|
|
platforms and distribute as you wish. To make a retro styled game the
|
|
whole process of creation takes place under some technical limitations:
|
|
240x136 pixels display, 16 color palette, 256 8x8 color sprites, 4
|
|
channel sound and etc.
|
|
'';
|
|
homepage = "https://github.com/nesbox/TIC-80";
|
|
license = licenses.mit;
|
|
platforms = platforms.linux;
|
|
mainProgram = "tic80";
|
|
maintainers = with maintainers; [ blinry ];
|
|
};
|
|
}
|