nixos-config/pkgs/tic-80/default.nix
Gabriel Arazas 6f659999d1
pkgs/tic-80-unstable: init at unstable-2025-03-27
Also updated it since there's another package of the same name with the
latest stable release.
2025-04-03 11:49:34 +08:00

108 lines
2.9 KiB
Nix

# Build the TIC-80 virtual computer console with the PRO version. The
# developers are kind enough to make it easy to compile it if you know
# how.
{ stdenv, lib, giflib, SDL2, SDL2_sound, sdl2-compat, alsa-lib, argparse, curl
, cmake, fetchFromGitHub, freeglut, git, gtk3, dbus, libGLU, libX11, libglvnd
, libsamplerate, mesa, pkg-config, sndio, zlib, lua54Packages
, pulseaudioSupport ? stdenv.isLinux, libpulseaudio
, jsSupport ? true, quickjs
, waylandSupport ? true, wayland, wayland-scanner, libxkbcommon, libdecor
, esoundSupport ? true, espeak
, jackSupport ? true, jack2
# As of 2025-03-26, it is basically required to have a very specific version of
# mruby so no...
, rubySupport ? false, mruby
, pythonSupport ? true
, janetSupport ? true, janet
# This doesn't have the appropriate system library as of nixpkgs 2025-03-26, btw.
, wasmSupport ? true, wasm
, withPro ? true }:
# TODO: Fix the timestamp in the help section.
stdenv.mkDerivation rec {
pname = "tic-80";
version = "unstable-2025-03-27";
src = fetchFromGitHub {
owner = "nesbox";
repo = "TIC-80";
rev = "5aa6c536607a5512ce1913acf3be7be8784fd8db";
hash = "sha256-oPubH/dPGDK/ZPY6NjycytAYY4PD2H9MbJg7jGBz3aI=";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [
argparse
alsa-lib
curl
freeglut
gtk3
giflib
libsamplerate
libGLU
libglvnd
lua54Packages.lua
mesa
git
sdl2-compat
SDL2
SDL2_sound
zlib
sndio
] ++ lib.optionals pulseaudioSupport [ libpulseaudio ]
++ lib.optionals jackSupport [ jack2 ]
++ lib.optionals jsSupport [ quickjs ]
++ lib.optionals esoundSupport [ espeak ]
++ lib.optionals rubySupport [ mruby ]
++ lib.optionals janetSupport [ janet ]
++ lib.optionals wasmSupport [ wasm ]
++ lib.optionals (stdenv.isLinux && waylandSupport) [
wayland
wayland-scanner
libxkbcommon
libdecor
];
cmakeFlags =
# Just leave the tinier libraries alone for this.
[
"-DPREFER_SYSTEM_LIBRARIES=ON"
"-DBUILD_WITH_FENNEL=ON"
"-DBUILD_WITH_MOON=ON"
"-DBUILD_WITH_SCHEME=ON"
] ++ lib.optionals withPro [ "-DBUILD_PRO=ON" ]
++ lib.optionals jsSupport [ "-DBUILD_WITH_JS=ON" ]
++ lib.optionals rubySupport [ "-DBUILD_WITH_RUBY=ON" ]
++ lib.optionals pythonSupport [ "-DBUILD_WITH_PYTHON=ON" ]
++ lib.optionals wasmSupport [ "-DBUILD_WITH_WASM=ON" ]
++ lib.optionals janetSupport [ "-DBUILD_WITH_JANET=ON" ];
# Export all of the TIC-80-related utilities.
outputs = [ "out" "dev" ];
postInstall = ''
install -Dm755 bin/* -t $dev/bin
install -Dm644 lib/* -t $dev/lib
install -Dm644 ../include/* -t $dev/include
mkdir -p $out/share/tic80
cp -r ../demos $out/share/tic80/
'';
meta = with lib; {
description = "A fantasy computer with built-in game dev tools.";
homepage = "https://tic80.com/";
license = licenses.mit;
};
}