From 38968c3247945ba99718d7564163f8bf685756c5 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sat, 27 Dec 2025 19:02:13 +0000 Subject: [PATCH] Get Scylla building with nix using elm2nix https://github.com/cachix/elm2nix Signed-off-by: Danila Fedorin --- elm-dependencies.nix | 77 +++++++++++++++++++++++++++++++++++++++++++ elm.json | 4 +-- elm.nix | 56 +++++++++++++++++++++++++++++++ flake.lock | 61 ++++++++++++++++++++++++++++++++++ flake.nix | 23 +++++++++++++ registry.dat | Bin 0 -> 370 bytes src/Main.elm | 1 + 7 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 elm-dependencies.nix create mode 100644 elm.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 registry.dat diff --git a/elm-dependencies.nix b/elm-dependencies.nix new file mode 100644 index 0000000..849ea9a --- /dev/null +++ b/elm-dependencies.nix @@ -0,0 +1,77 @@ +{ + + "NoRedInk/elm-json-decode-pipeline" = { + sha256 = "0y25xn0yx1q2xlg1yx1i0hg4xq1yxx6yfa99g272z8162si75hnl"; + version = "1.0.0"; + }; + + "elm/browser" = { + sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; + version = "1.0.1"; + }; + + "elm/core" = { + sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; + version = "1.0.2"; + }; + + "elm/file" = { + sha256 = "15vw1ilbg0msimq2k9magwigp8lwqrgvz3vk6qia6b3ldahvw8jr"; + version = "1.0.1"; + }; + + "elm/html" = { + sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k"; + version = "1.0.0"; + }; + + "elm/http" = { + sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; + version = "2.0.0"; + }; + + "elm/json" = { + sha256 = "1a107nmm905dih4w4mjjkkpdcjbgaf5qjvr7fl30kkpkckfjjnrw"; + version = "1.1.2"; + }; + + "elm/svg" = { + sha256 = "1cwcj73p61q45wqwgqvrvz3aypjyy3fw732xyxdyj6s256hwkn0k"; + version = "1.0.1"; + }; + + "elm/time" = { + sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; + version = "1.0.0"; + }; + + "elm/url" = { + sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; + version = "1.0.0"; + }; + + "hecrj/html-parser" = { + sha256 = "0pla6hswsl9piwrj3yl4pc4nfs5adc4g4c93644j4xila7bqqg8a"; + version = "2.0.0"; + }; + + "elm/bytes" = { + sha256 = "040d7irrawcbnq9jxhzx8p9qacdlw5bncy6lgndd6inm53rvvwbp"; + version = "1.0.7"; + }; + + "elm/parser" = { + sha256 = "0a3cxrvbm7mwg9ykynhp7vjid58zsw03r63qxipxp3z09qks7512"; + version = "1.1.0"; + }; + + "elm/virtual-dom" = { + sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg"; + version = "1.0.2"; + }; + + "rtfeldman/elm-hex" = { + sha256 = "1y0aa16asvwdqmgbskh5iba6psp43lkcjjw9mgzj3gsrg33lp00d"; + version = "1.0.0"; + }; +} diff --git a/elm.json b/elm.json index 4a3eb06..19c4236 100644 --- a/elm.json +++ b/elm.json @@ -3,7 +3,7 @@ "source-directories": [ "src" ], - "elm-version": "0.19.0", + "elm-version": "0.19.1", "dependencies": { "direct": { "NoRedInk/elm-json-decode-pipeline": "1.0.0", @@ -29,4 +29,4 @@ "direct": {}, "indirect": {} } -} \ No newline at end of file +} diff --git a/elm.nix b/elm.nix new file mode 100644 index 0000000..8f3ce1d --- /dev/null +++ b/elm.nix @@ -0,0 +1,56 @@ +{ lib, stdenv, elm, fetchElmDeps, uglify-js, sass }: + +let + mkDerivation = + { srcs ? ./elm-dependencies.nix + , src + , name + , srcdir ? "./src" + , targets ? [] + , registryDat ? ./registry.dat + , outputJavaScript ? false + }: + stdenv.mkDerivation { + inherit name src; + + buildInputs = [ elm sass ] + ++ lib.optional outputJavaScript uglify-js; + + buildPhase = fetchElmDeps { + elmPackages = import srcs; + elmVersion = "0.19.1"; + inherit registryDat; + }; + + installPhase = let + elmfile = module: "${srcdir}/${builtins.replaceStrings ["."] ["/"] module}.elm"; + extension = if outputJavaScript then "js" else "html"; + in '' + ${lib.concatStrings (map (module: '' + echo "compiling ${elmfile module}" + elm make ${elmfile module} --optimize --output $out/${module}.${extension} + ${lib.optionalString outputJavaScript '' + echo "minifying ${elmfile module}" + uglifyjs $out/${module}.${extension} --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' \ + | uglifyjs --mangle --output $out/${module}.min.${extension} + ''} + '') targets)} + + # Custom logic for Scylla in particular + mkdir $out/static $out/static/js $out/static/css $out/static/svg + cp $src/index.html $out/index.html + cp $out/Main.min.js $out/static/js/elm.js + cp $src/static/js/*.js $out/static/js + cp $src/static/svg/*.svg $out/static/svg + sass $src/static/scss/style.scss $out/static/css/style.css + ''; + }; +in mkDerivation { + name = "Scylla-0.1.0"; + srcs = ./elm-dependencies.nix; + src = ./.; + targets = ["Main"]; + srcdir = "./src"; + outputJavaScript = true; +} + diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..7556854 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1766736597, + "narHash": "sha256-BASnpCLodmgiVn0M1MU2Pqyoz0aHwar/0qLkp7CjvSQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f560ccec6b1116b22e6ed15f4c510997d99d5852", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..73d9a3c --- /dev/null +++ b/flake.nix @@ -0,0 +1,23 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; + flake-utils.url = "github:numtide/flake-utils"; + }; + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = import nixpkgs { inherit system; }; + Scylla = import ./elm.nix { + inherit (pkgs) lib stdenv sass; + inherit (pkgs.elmPackages) fetchElmDeps elm; + inherit (pkgs.nodePackages) uglify-js; + }; + in + { + packages = { inherit Scylla; }; + defaultPackage = Scylla; + } + ); +} + diff --git a/registry.dat b/registry.dat new file mode 100644 index 0000000000000000000000000000000000000000..67c5aa84413b9b02dfecf37aef087d021535eebc GIT binary patch literal 370 zcmZR80DcI?z|Y~AAC#KnnU^h*nv<)WRh*xvo06KGpOUIukXewLlbM&w2vy3!z`&fE zlgpk|lwV$)TExfzmjDT~CRLWC7Be!i!&HL=S(5XMQW+VTP{h(Qb5hYXvt*Ry=D>}E z*u#=hQc?id2^9mmkC72B3bKQ(Ah8JK9E5g|D06XHI=Uq#nYrkmVJ