diff --git a/pkgs/belenios/COPYING b/pkgs/belenios/COPYING deleted file mode 100644 index c62df0b..0000000 --- a/pkgs/belenios/COPYING +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2003-2026 Eelco Dolstra and the Nixpkgs/NixOS contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pkgs/belenios/default.nix b/pkgs/belenios/default.nix index 8371222..5ac0995 100644 --- a/pkgs/belenios/default.nix +++ b/pkgs/belenios/default.nix @@ -1,110 +1,28 @@ { - buildNpmPackage, fetchFromGitLab, - importNpmLock, - lib, - libsodium, - makeWrapper, - nodePackages, - ocaml-ng, + ocamlPackages, + belenios-server, + belenios-tool }: -let - ocamlPackages = ocaml-ng.ocamlPackages_4_14; -in - ocamlPackages.buildDunePackage rec { pname = "belenios"; version = "3.0"; - # solves warnings 'patchelf: wrong ELF type' - dontFixup = true; - src = fetchFromGitLab { domain = "gitlab.inria.fr"; - owner = "belenios"; - repo = "belenios"; + owner = pname; + repo = pname; rev = version; hash = "sha256-paTkzWB2QiBfFnGfiMkTIHdKeg37PTGbMu25JLJc38U="; }; + + nativeBuildInputs = with ocamlPackages; [ + odoc + ]; - nativeBuildInputs = - [ - libsodium - nodePackages.nodejs - ] - ++ (with ocamlPackages; [ - atdgen - js_of_ocaml - menhir - ocaml_gettext - ]); - - buildInputs = - [ makeWrapper ] - ++ (with ocamlPackages; [ - atdgen - calendar - cmdliner - csv - cohttp-lwt-unix - cryptokit - eliom - gettext-camomile - hex - js_of_ocaml - js_of_ocaml-lwt - js_of_ocaml-ppx - js_of_ocaml-tyxml - ocamlnet - ocsipersist-sqlite-config - sodium - xml-light - yojson - ]); - - frontend = buildNpmPackage { - pname = "belenios-frontend"; - inherit version; - src = "${src}/frontend"; - npmFlags = [ "--include=dev" ]; - npmDeps = importNpmLock { - npmRoot = "${src}/frontend"; - packageLock = lib.importJSON ./package-lock.json; - }; - inherit (importNpmLock) npmConfigHook; - dontBuild = true; - }; - - buildPhase = '' - dune build --release - pushd frontend - ln -s ${frontend}/lib/node_modules/belenios-responsive-booth/node_modules . - (cd booth && npx webpack --config webpack.config.js --mode production) - export NODE_PATH="$PWD/node_modules" - node ./bundle-css.js ../src/web/static/responsive_site.css > site.bundle.css - node ./bundle-css.js booth/app.css > booth/app.bundle.css - popd - ''; - - installPhase = '' - dune install --prefix $out - pushd frontend - DEST=$out/share/belenios-server - mkdir -p $DEST/static/frontend/{booth,translations} - cp *.bundle.css "$DEST/static" - cp -r booth/dist/bundle.js booth/app.bundle.css "$DEST/static/frontend/booth/" - cp -r booth/vote.html "$DEST/apps/" - cp -r translations/* "$DEST/static/frontend/translations/" - popd - ''; - - meta = { - description = "Verifiable online voting system"; - homepage = "https://www.belenios.org/"; - changelog = "https://gitlab.inria.fr/belenios/belenios/-/blob/${src.rev}/CHANGES.md"; - license = lib.licenses.agpl3Plus; - # maintainers = with lib.maintainers; [ kiara ]; - mainProgram = "belenios"; - }; + buildInputs = [ + belenios-server + belenios-tool + ]; } diff --git a/pkgs/belenios/lib.nix b/pkgs/belenios/lib.nix new file mode 100644 index 0000000..21856d1 --- /dev/null +++ b/pkgs/belenios/lib.nix @@ -0,0 +1,29 @@ +{ + belenios, + belenios-platform, + ocamlPackages, +}: + +ocamlPackages.buildDunePackage { + pname = "belenios-lib"; + inherit (belenios) version src; + + nativeBuildInputs = with ocamlPackages; [ + atdgen + ]; + + propagatedBuildInputs = + [ + belenios-platform + ] + ++ (with ocamlPackages; [ + atdgen + base64 + hex + ocaml_gettext + re + uri + yojson + ]); +} + diff --git a/pkgs/belenios/platform-js.nix b/pkgs/belenios/platform-js.nix new file mode 100644 index 0000000..b9da72c --- /dev/null +++ b/pkgs/belenios/platform-js.nix @@ -0,0 +1,23 @@ +{ + belenios, + belenios-platform, + ocamlPackages, +}: + +ocamlPackages.buildDunePackage { + pname = "belenios-platform-js"; + inherit (belenios) version src; + + nativeBuildInputs = with ocamlPackages; [ + odoc + ]; + + propagatedBuildInputs = + [ + belenios-platform + ] + ++ (with ocamlPackages; [ + js_of_ocaml + js_of_ocaml-ppx + ]); +} diff --git a/pkgs/belenios/platform-native.nix b/pkgs/belenios/platform-native.nix new file mode 100644 index 0000000..cf3e213 --- /dev/null +++ b/pkgs/belenios/platform-native.nix @@ -0,0 +1,24 @@ +{ + belenios, + belenios-platform, + ocamlPackages, + libsodium +}: + +ocamlPackages.buildDunePackage { + pname = "belenios-platform-native"; + inherit (belenios) version src; + + nativeBuildInputs = with ocamlPackages; [ + odoc + ]; + + propagatedBuildInputs = + [ + belenios-platform + libsodium + ] + ++ (with ocamlPackages; [ + cryptokit + ]); +} diff --git a/pkgs/belenios/platform.nix b/pkgs/belenios/platform.nix new file mode 100644 index 0000000..260cfd0 --- /dev/null +++ b/pkgs/belenios/platform.nix @@ -0,0 +1,13 @@ +{ + belenios, + ocamlPackages, +}: + +ocamlPackages.buildDunePackage { + pname = "belenios-platform"; + inherit (belenios) version src; + + nativeBuildInputs = with ocamlPackages; [ + odoc + ]; +} diff --git a/pkgs/belenios/server.nix b/pkgs/belenios/server.nix new file mode 100644 index 0000000..17634be --- /dev/null +++ b/pkgs/belenios/server.nix @@ -0,0 +1,37 @@ +{ + belenios, + belenios-lib, + belenios-platform-native, + belenios-platform-js, + ocsipersist-sqlite-config, + ocamlPackages, +}: + +ocamlPackages.buildDunePackage { + pname = "belenios-server"; + inherit (belenios) version src; + + nativeBuildInputs = with ocamlPackages; [ + atdgen + js_of_ocaml-compiler + menhir + ocaml_gettext + ]; + + propagatedBuildInputs = + [ + belenios-lib + belenios-platform-native + belenios-platform-js + ocsipersist-sqlite-config + ] + ++ (with ocamlPackages; [ + calendar + csv + (eliom.override {ocsipersist = ocsipersist ;}) + gettext-camomile + lwt + ocamlnet + ]); +} + diff --git a/pkgs/belenios/services.nix b/pkgs/belenios/services.nix index e306b83..7d8f356 100644 --- a/pkgs/belenios/services.nix +++ b/pkgs/belenios/services.nix @@ -3,7 +3,7 @@ let cfg = config.services.belenios; - configFile = lib.writeText "beleniosserver.conf" cfg.config; + configFile = pkgs.writeText "beleniosserver.conf" cfg.config; inherit (lib) mkEnableOption mkPackageOption mkOption mkIf; in @@ -11,10 +11,10 @@ in options.services.belenios = { enable = mkEnableOption "Whether to enable the Belenios Web server."; - package = mkPackageOption pkgs "belenios"; + package = mkPackageOption pkgs "belenios" {}; config = mkOption { - types = lib.types.str; + type = lib.types.str; description = '' The Belenios Web server configuration. See @@ -124,7 +124,6 @@ in ''; - # }; }; diff --git a/pkgs/belenios/tool.nix b/pkgs/belenios/tool.nix new file mode 100644 index 0000000..eecd060 --- /dev/null +++ b/pkgs/belenios/tool.nix @@ -0,0 +1,23 @@ +{ + belenios, + belenios-lib, + belenios-platform, + belenios-platform-native, + ocamlPackages +}: + +ocamlPackages.buildDunePackage { + pname = "belenios-tool"; + inherit (belenios) version src; + + propagatedBuildInputs = + [ + belenios-lib + belenios-platform + belenios-platform-native + ] + ++ (with ocamlPackages; [ + cmdliner + cohttp-lwt-unix + ]); +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 09a675c..97a42e4 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -9,7 +9,7 @@ # Import local packages nixpkgs.overlays = [ (final: prev: { - local = import ./pkgs.nix { pkgs = final; }; + local = import ./packages.nix { pkgs = final; }; }) ]; } diff --git a/pkgs/packages.nix b/pkgs/packages.nix index 9549e53..661e1c4 100644 --- a/pkgs/packages.nix +++ b/pkgs/packages.nix @@ -1,5 +1,14 @@ { pkgs ? import { } }: -{ - belenios = pkgs.callPackage ./belenios {}; +let + ocamlPackages = pkgs.ocaml-ng.ocamlPackages_4_14; +in +rec { + belenios = pkgs.callPackage ./belenios { inherit ocamlPackages belenios-server belenios-tool; }; + belenios-lib = pkgs.callPackage ./belenios/belenios-lib.nix { inherit belenios ocamlPackages belenios-platform; }; + belenios-tool = pkgs.callPackage ./belenios/belenios-tool.nix { inherit belenios ocamlPackages belenios-lib belenios-platform belenios-platform-native; }; + belenios-server = pkgs.callPackage ./belenios/belenios-server.nix { inherit belenios ocamlPackages belenios-lib belenios-platform-native belenios-platform-js; }; + belenios-platform = pkgs.callPackage ./belenios/belenios-platform.nix { inherit belenios ocamlPackages; }; + belenios-platform-native = pkgs.callPackage ./belenios/belenios-platform-native.nix { inherit belenios ocamlPackages belenios-platform; }; + belenios-platform-js = pkgs.callPackage ./belenios/belenios-platform-js.nix { inherit belenios ocamlPackages belenios-platform; }; }