2 description = "PureScript Protobuf";
4 # for mkSpagoDerivation
5 nixConfig.sandbox = "relaxed";
8 nixpkgs.url = github:NixOS/nixpkgs/nixos-24.05;
10 url = "github:numtide/flake-utils";
12 purescript-overlay = {
13 url = "github:thomashoneyman/purescript-overlay";
14 inputs.nixpkgs.follows = "nixpkgs";
17 url = "github:jeslie0/mkSpagoDerivation";
18 inputs.nixpkgs.follows = "nixpkgs";
22 outputs = { self, nixpkgs, ... }@inputs:
24 supportedSystems = ["x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"];
26 forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
28 library-src = ./library/src;
30 nixpkgsFor = forAllSystems (system: import nixpkgs {
33 overlays = builtins.attrValues self.overlays ++ [
34 inputs.purescript-overlay.overlays.default
35 inputs.mkSpagoDerivation.overlays.default
36 (prev: final: import ./nix/protobuf.nix final)
38 purescript-protobuf-library = prev.mkSpagoDerivation {
39 name = "purescript-protobuf-library";
41 nativeBuildInputs = with prev; [ purs spago-unstable ];
42 buildPhase = "spago build";
43 installPhase = "mkdir $out; cp -r output/* $out/";
47 purescript-protobuf-plugin = prev.mkSpagoDerivation {
48 name = "purescript-protobuf-plugin";
50 nativeBuildInputs = with prev; [ purs spago-unstable purs-backend-es esbuild];
52 spago build --purs-args '${prev.purescript-protobuf-library.src}/src/**/*.purs'
54 # The bundled minified output is CommonJS, so we need to change the run script to run node with CommonJS?
55 # spago build --purs-args '${prev.purescript-protobuf-library.src}/**/*.purs'
56 # purs-backend-es bundle-app --no-build --platform node --minify --output-dir output --main ProtocPlugin.Main
57 # spago bundle --offline --pure --platform node --bundle-type app --minify --module ProtocPlugin.Main --purs-args '${prev.purescript-protobuf-library.src}/**/*.purs'
58 installPhase = "mkdir $out; cp -r output/* $out/";
62 purescript-protobuf-conformance = prev.mkSpagoDerivation {
63 name = "purescript-protobuf-conformance";
65 nativeBuildInputs = with prev; [ purs spago-unstable purs-backend-es esbuild];
67 spago build --purs-args '${prev.purescript-protobuf-library.src}/src/**/*.purs'
69 installPhase = "mkdir $out; cp -r output/* $out/";
73 protoc-gen-purescript = prev.writeScriptBin "protoc-gen-purescript" ''
74 ${prev.nodejs}/bin/node --input-type=module -e "import {main} from '${final.purescript-protobuf-plugin}/ProtocPlugin.Main/index.js'; main();"
76 conformance-purescript = prev.writeScriptBin "conformance-purescript" ''
78 ${prev.nodejs}/bin/node --abort-on-uncaught-exception --trace-sigint --trace-uncaught --input-type=module -e "import {main} from '${final.purescript-protobuf-conformance}/Main/index.js'; main();"
89 packages = forAllSystems (system:
90 let pkgs = nixpkgsFor.${system}; in {
91 protoc-gen-purescript = pkgs.protoc-gen-purescript;
92 conformance-purescript = pkgs.conformance-purescript;
93 protobuf_v28_2 = pkgs.protobuf_v28_2;
94 protobuf = pkgs.protobuf_v28_2;
97 devShells = forAllSystems (system:
98 let pkgs = nixpkgsFor.${system}; in {
99 default = pkgs.mkShell {
100 name = "purescript-protobuf-devshell";
101 inputsFrom = builtins.attrValues self.packages.${system};
102 buildInputs = with pkgs; [
105 purs-tidy-bin.purs-tidy-0_10_0
107 purescript-language-server
111 protoc-gen-purescript
114 # spago sources not working, TODO
116 source <(spago --bash-completion-script `which spago`)
117 source <(node --completion-bash)
118 export PURS_IDE_SOURCES=$(spago sources --package protobuf)
119 echo "PureScript Protobuf development environment"
128 echo "To build the protoc compiler plugin, run:"
130 echo " cd plugin; spago build"
132 echo "To compile PureScript .purs files from .proto files, run for example:"
134 echo " protoc --purescript_out=. google/protobuf/timestamp.proto"
140 apps = forAllSystems (system:
141 let pkgs = nixpkgsFor.${system}; in {
144 program = "${pkgs.protobuf}/bin/protoc";
146 protoc-gen-purescript = {
148 program = "${pkgs.protoc-gen-purescript}/bin/protoc-gen-purescript";
150 conformance_test_runner = {
152 program = "${pkgs.protobuf}/bin/conformance_test_runner";
154 conformance-purescript = {
156 program = "${pkgs.conformance-purescript}/bin/conformance-purescript";
160 conformance-run = pkgs.writeScriptBin "conformance" ''
163 ${pkgs.protobuf}/bin/conformance_test_runner --enforce_recommended ${pkgs.conformance-purescript}/bin/conformance-purescript
168 program = "${conformance-run}/bin/conformance";
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list