git.s-ol.nu alive / main flake.nix
main

Tree @main (Download .tar.gz)

flake.nix @mainraw · history · blame

{
  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;
        }
    );
}