{ description = "alive"; inputs = { nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, ... } @ inputs: flake-utils.lib.eachDefaultSystem ( system: with import nixpkgs {inherit system;}; let mkDeps = luaPkgs: let luarocks-build-cpp = luaPkgs.buildLuarocksPackage rec { pname = "luarocks-build-cpp"; version = "0.2.0-1"; knownRockspec = (pkgs.fetchurl { url = "mirror://luarocks/${pname}-${version}.rockspec"; hash = "sha256-AzDZV9u6V71YNJFBfj3cR1COjFFWhGmsJkGsUMErSZs="; }) .outPath; src = pkgs.fetchFromGitHub { owner = "osch"; repo = pname; rev = "v0.2.0"; hash = "sha256-PamppWdV3cQMDK+t2V09/cNRskGuRNeuyvUODmopLaQ="; }; propagatedBuildInputs = [luaPkgs.lua]; meta = { homepage = "https://github.com/osch/luarocks-build-cpp"; description = "A fork of built-in build system for C++ rocks"; license = lib.licenses.mit; }; }; luarocks-fetch-gitrec = luaPkgs.buildLuarocksPackage rec { pname = "luarocks-fetch-gitrec"; version = "0.2-2"; src = pkgs.fetchurl { url = "mirror://luarocks/${pname}-${version}.src.rock"; hash = "sha256-Dp3bKIG4swrD4+1NNtRTgyj68Di2cSUlh1r7Z2Rkzn0="; }; postUnpack = "sourceRoot=$sourceRoot/luarocks-fetch-gitrec-0.2"; propagatedBuildInputs = with pkgs; [luaPkgs.lua git]; meta = { homepage = "https://github.com/siffiejoe/luarocks-fetch-gitrec"; description = "Lua binding to FLTK, the Fast Light ToolKit"; license = lib.licenses.mit; }; }; fltk4lua = luaPkgs.buildLuarocksPackage rec { pname = "fltk4lua"; version = "0.2-1"; src = pkgs.fetchurl { url = "mirror://luarocks/${pname}-${version}.src.rock"; hash = "sha256-fD31FruqVriMecFcvSV4W7JRia38+bg7j3T5k5pFZec="; }; postUnpack = "sourceRoot=$sourceRoot/lua-fltk4lua"; buildInputs = with pkgs; [fltk libjpeg]; propagatedBuildInputs = [luaPkgs.lua luarocks-build-cpp luarocks-fetch-gitrec]; meta = { homepage = "https://github.com/siffiejoe/lua-fltk4lua"; description = "Lua binding to FLTK, the Fast Light ToolKit"; license = lib.licenses.mit; }; }; losc = luaPkgs.buildLuarocksPackage rec { pname = "losc"; version = "1.0.0-1"; src = pkgs.fetchurl { url = "mirror://luarocks/${pname}-${version}.src.rock"; hash = "sha256-MArhj51V1awF5k2zToFYEXpS2c6o8bnNDn4wLhooHos="; }; postUnpack = "sourceRoot=$sourceRoot/losc"; buildInputs = with pkgs; [stdenv.cc.cc.lib]; propagatedBuildInputs = [luaPkgs.lua]; meta = { homepage = "https://github.com/davidgranstrom/losc"; description = "Open Sound Control (OSC) for lua/luajit with no external dependencies."; license = lib.licenses.mit; }; }; ldoc = luaPkgs.buildLuarocksPackage rec { pname = "ldoc"; version = "scm-2"; knownRockspec = (pkgs.fetchurl { url = "mirror://luarocks/${pname}-${version}.rockspec"; hash = "sha256-PHQhpQPfmlPhwIXoce5WZ+eoARmSecy1ac7Bfu4zg38="; }) .outPath; src = pkgs.fetchFromGitHub { owner = "s-ol"; repo = "LDoc"; rev = "moonscript"; hash = "sha256-3jieGp9++cWtLMKccP+xqrtdCiNG/9BYZlHmH1l8XV8="; }; propagatedBuildInputs = with luaPkgs; [ lua penlight markdown ]; meta = { homepage = "https://github.com/s-ol/LDoc"; description = "A Lua Documentation Tool"; license = lib.licenses.mit; }; }; lua-rtmidi = luaPkgs.buildLuarocksPackage rec { pname = "lua-rtmidi"; version = "1.0.0-1"; # src = pkgs.fetchurl { # url = "mirror://luarocks/${pname}-${version}.src.rock"; # hash = "sha256-DmSfrQRX8oziH+vvwq3KIdvjTX7P4zeKc6NeTygoU3A="; # }; src = pkgs.fetchFromGitHub { owner = "s-ol"; repo = "lua-rtmidi"; rev = "v1.0.0"; hash = "sha256-DmSfrQRX8oziH+vvwq3KIdvjTX7P4zeKc6NeTygoU3A="; }; buildInputs = with pkgs; [stdenv.cc.cc.lib]; propagatedBuildInputs = with pkgs; [luaPkgs.lua alsa-lib libjack2]; meta = { homepage = "https://github.com/s-ol/lua-rtmidi"; description = "Lua bindings for RtMidi"; license = lib.licenses.bsd2; }; }; in with luaPkgs; [ moonscript lpeg luafilesystem luasocket luasystem fltk4lua losc busted lua-rtmidi ] ++ ( if lib.strings.versionAtLeast luaPkgs.lua.version "5.4" then [] else [bit32 ldoc] ); mkEnv = lua: stdenv.mkDerivation { name = "alive-env-${lua.name}"; src = self; propagatedBuildInputs = [(lua.withPackages mkDeps)]; shellHook = '' export LUA_PATH="?.lua;?/init.lua" ''; }; in rec { packages.alive = lua53Packages.buildLuarocksPackage rec { pname = "alive"; version = "scm-10"; src = ./.; knownRockspec = ./dist/rocks/${pname}-${version}.rockspec; propagatedBuildInputs = [(pkgs.lua5_3.withPackages mkDeps)]; meta = { homepage = "https://alv.s-ol.nu"; description = "experimental livecoding environment with persistent expressions"; license = lib.licenses.gpl3; }; }; defaultPackage = packages.alive; defaultApp = { type = "app"; program = "${defaultPackage}/bin/alv-fltk"; }; devShells.lua53 = mkEnv pkgs.lua5_3; devShells.lua54 = mkEnv pkgs.lua5_4; devShells.luajit = stdenv.mkDerivation { name = "alive-env-luajit"; src = self; propagatedBuildInputs = [(luajit.withPackages mkDeps) love_11]; shellHook = '' source <( LUA_PATH="?.lua;?/init.lua" luajit -e \ "print(string.format('export LUA_PATH=%q; export LUA_CPATH=%q', package.path, package.cpath))" ) ''; }; devShell = devShells.lua53; } ); }