diff --git a/build.nix b/build.nix new file mode 100644 index 0000000..522f47b --- /dev/null +++ b/build.nix @@ -0,0 +1,78 @@ +{ system +, lib +, src +, stdenv +, slimlock +, purix +, purs +, spago +, nodejs +, esbuild +, python3 +, git +, installShellFiles +}: +let + spagoDependencies = purix.buildSpagoDependencies { + inherit src purs spago; + packages = [ "spago-bin" ]; + }; + + npmDependencies = (slimlock.buildPackageLock { inherit src; }).overrideAttrs (x: { + nativeBuildInputs = (x.nativeBuildInputs or [ ]) ++ [ python3 ]; + }); +in +stdenv.mkDerivation { + name = "spago-dev"; + + version = "0.93.24"; + + meta = { + mainProgram = "spago"; + }; + + nativeBuildInputs = [ + purs + spago + python3 + nodejs + git + installShellFiles + esbuild + ]; + + inherit src; + + configurePhase = '' + cp -r ${spagoDependencies}/{*,.*} . + chmod +w -R output + + ln -s ${npmDependencies}/js/node_modules . + ''; + + buildPhase = '' + spago bundle --offline -p spago-bin + ''; + + installPhase = '' + PACKAGE=$out/node_modules/spago-bin + mkdir -p $PACKAGE + cp bin/bundle.js package.json README.md LICENSE $PACKAGE + + ln -s ${npmDependencies}/js/node_modules/{*,.*} $out/node_modules + + BIN=$PACKAGE/bundle.js + chmod +x $BIN + patchShebangs $BIN + + SPAGO=$out/bin/spago + + mkdir -p $out/bin + ln -s $BIN $SPAGO + + BASH_COMPLETIONS=$out/share/bash-completion/completions/ + mkdir -p $BASH_COMPLETIONS + $SPAGO --bash-completion-script $SPAGO > $BASH_COMPLETIONS/spago + ''; +} + diff --git a/flake.lock b/flake.lock index b1ea5f3..a83e99f 100644 --- a/flake.lock +++ b/flake.lock @@ -18,11 +18,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705886116, - "narHash": "sha256-xFSqFs9H5p2tNN2WWa6oFV4JQJHGqX2n9P+18XLeKDw=", + "lastModified": 1705946224, + "narHash": "sha256-Zq738rVNvThvWKq6rpqO54u3ALkSDhJ1mhsIBrrr++o=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ad0bacf627106fe08900ef0e8e28c0685f2d8ac1", + "rev": "a68e369deabd4da76320af93966a6308535a68f3", "type": "github" }, "original": { @@ -36,7 +36,8 @@ "inputs": { "flake-compat": "flake-compat", "nixpkgs": "nixpkgs", - "slimlock": "slimlock" + "slimlock": "slimlock", + "spago": "spago" } }, "slimlock": { @@ -58,6 +59,23 @@ "repo": "slimlock", "type": "github" } + }, + "spago": { + "flake": false, + "locked": { + "lastModified": 1705775511, + "narHash": "sha256-enNuaG6Qif1JKU/oG3kCmiH/GQcM3NnXLGJoRcJO62Y=", + "owner": "deemp", + "repo": "spago", + "rev": "c38d76e2677b28c4ab3bbbf55d1820acb0d3bb9f", + "type": "github" + }, + "original": { + "owner": "deemp", + "ref": "add-flake-bk", + "repo": "spago", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index cbf25bd..3030362 100644 --- a/flake.nix +++ b/flake.nix @@ -9,13 +9,19 @@ flake-compat.url = "github:edolstra/flake-compat"; flake-compat.flake = false; + + spago = { + url = "github:deemp/spago/add-flake-bk"; + flake = false; + }; }; - outputs = { + outputs = inputs@{ self, nixpkgs, slimlock, flake-compat, + spago }: let supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; @@ -68,6 +74,7 @@ in { inherit purs purs-unstable spago spago-unstable purs-tidy purs-tidy-unstable purs-backend-es purs-backend-es-unstable purescript-language-server purescript-language-server-unstable; + spago-dev = pkgs.callPackage ./build.nix { src = inputs.spago.outPath; }; } // purs-bin // spago-bin @@ -160,7 +167,7 @@ default = pkgs.mkShell { name = "purescript-overlay"; buildInputs = [ - self.packages.${system}.spago-0_93_19 + self.packages.${system}.spago-dev self.packages.${system}.purs-unstable self.packages.${system}.purs-tidy-unstable self.packages.${system}.purs-backend-es-unstable