{
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;
};
};
discount = luaPkgs.buildLuarocksPackage {
pname = "discount";
version = "0.4-1";
knownRockspec =
(pkgs.fetchurl {
url = mirror://luarocks/discount-0.4-1.rockspec;
hash = "sha256-7bIW6KKFNPGNiVB3m1DasIPI8znq7ZC2iBS5fCevglU=";
})
.outPath;
src = pkgs.fetchurl {
url = https://craigbarnes.gitlab.io/dist/lua-discount/lua-discount-0.4.tar.gz;
hash = "sha256-NTHu3d5KidW3pKubNZp/AaiKyF3U+sYVVOsZkWXP3q0=";
};
buildInputs = [pkgs.discount];
propagatedBuildInputs = [luaPkgs.lua];
meta = {
homepage = "https://github.com/craigbarnes/lua-discount";
description = "Lua bindings for the Discount Markdown library";
license = lib.licenses.isc;
};
};
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
discount
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;
}
);
}