From dcca5da8653648c132aa5827f7b68c8c71a34998 Mon Sep 17 00:00:00 2001 From: Bill Ewanick Date: Mon, 20 Feb 2023 19:32:14 -0500 Subject: [PATCH] Initial commit --- .envrc | 1 + .gitignore | 7 ++++ elm.json | 24 +++++++++++ flake.lock | 43 ++++++++++++++++++++ flake.nix | 76 +++++++++++++++++++++++++++++++++++ nix/elm-srcs.nix | 37 +++++++++++++++++ nix/registry.dat | Bin 0 -> 128066 bytes public/index.debug.html | 23 +++++++++++ public/index.html | 23 +++++++++++ public/main.css | 86 ++++++++++++++++++++++++++++++++++++++++ src/Main.elm | 34 ++++++++++++++++ 11 files changed, 354 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 elm.json create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nix/elm-srcs.nix create mode 100644 nix/registry.dat create mode 100644 public/index.debug.html create mode 100644 public/index.html create mode 100644 public/main.css create mode 100644 src/Main.elm diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cce44ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# Nix related +.direnv +result + +# Elm related +elm-stuff +public/main.js diff --git a/elm.json b/elm.json new file mode 100644 index 0000000..ce2a08d --- /dev/null +++ b/elm.json @@ -0,0 +1,24 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/browser": "1.0.2", + "elm/core": "1.0.5", + "elm/html": "1.0.0" + }, + "indirect": { + "elm/json": "1.1.3", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.3" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..e7546e9 --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1672580127, + "narHash": "sha256-3lW3xZslREhJogoOkjeZtlBtvFMyxHku7I/9IVehhT8=", + "owner": "NixOs", + "repo": "nixpkgs", + "rev": "0874168639713f547c05947c76124f78441ea46c", + "type": "github" + }, + "original": { + "owner": "NixOs", + "ref": "nixos-22.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "utils": { + "locked": { + "lastModified": 1676283394, + "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..8037718 --- /dev/null +++ b/flake.nix @@ -0,0 +1,76 @@ +{ + description = "Template for an Elm app defined by a Nix flake"; + + inputs = { + nixpkgs.url = "github:NixOs/nixpkgs/nixos-22.05"; + utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, utils }: + utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + debugMode = false; + in + { + packages.elm-nix-template = pkgs.stdenv.mkDerivation { + name = "elm-nix-template"; + version = "0.1.0"; + src = ./.; + + buildInputs = with pkgs.elmPackages; [ + elm + pkgs.nodePackages.uglify-js + ]; + + configurePhase = pkgs.elmPackages.fetchElmDeps { + elmVersion = "0.19.1"; + elmPackages = import ./nix/elm-srcs.nix; + registryDat = ./nix/registry.dat; + }; + + buildPhase = + if debugMode then '' + elm make src/Main.elm --debug --output=$out/debug.js + '' else '' + elm make src/Main.elm --output=$out/main.js --optimize + uglifyjs $out/main.js --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/main.min.js + rm $out/main.js + ''; + + installPhase = '' + mkdir -p $out + cp public/main.css $out + + ${if debugMode then '' + cp public/index.debug.html $out/index.html + '' + else '' + cp public/index.html $out + ''} + ''; + }; + + packages.default = self.packages.${system}.elm-nix-template; + + devShells.default = pkgs.mkShell { + buildInputs = with pkgs; + [ + elmPackages.elm + elmPackages.nodejs + elmPackages.elm-xref + elmPackages.elm-test + elmPackages.elm-live + elmPackages.elm-json + elmPackages.elm-review + elmPackages.elm-format + elmPackages.elm-upgrade + elmPackages.elm-analyse + elmPackages.elm-language-server + + elm2nix + ]; + }; + }); +} diff --git a/nix/elm-srcs.nix b/nix/elm-srcs.nix new file mode 100644 index 0000000..0d2319b --- /dev/null +++ b/nix/elm-srcs.nix @@ -0,0 +1,37 @@ +{ + + "elm/browser" = { + sha256 = "0nagb9ajacxbbg985r4k9h0jadqpp0gp84nm94kcgbr5sf8i9x13"; + version = "1.0.2"; + }; + + "elm/core" = { + sha256 = "19w0iisdd66ywjayyga4kv2p1v9rxzqjaxhckp8ni6n8i0fb2dvf"; + version = "1.0.5"; + }; + + "elm/html" = { + sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k"; + version = "1.0.0"; + }; + + "elm/json" = { + sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh"; + version = "1.1.3"; + }; + + "elm/time" = { + sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; + version = "1.0.0"; + }; + + "elm/url" = { + sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; + version = "1.0.0"; + }; + + "elm/virtual-dom" = { + sha256 = "1yvb8px2z62xd578ag2q0r5hd1vkz9y7dfkx05355iiy1d7jwq4v"; + version = "1.0.3"; + }; +} diff --git a/nix/registry.dat b/nix/registry.dat new file mode 100644 index 0000000000000000000000000000000000000000..b58d80dace2c12125a3cbb7d4ee676af7cc2e3fb GIT binary patch literal 128066 zcmbTf>60VZk>DADOx$_Y!Q!n}?~ZMo&6vTK#Y3X@%Nj-96eYEa({0n=B7w+6WC92f zM`mUH_4{-8cSQh6X*SfYDi!?Q{`_`-Stj4tf7Cy+(O*wK+gH!a#d5MMws(_tu_+dd za?!D$`R|iF>*QIUXW8lNUwroYSU|7KVmB{0os+HuJL{aBc1}(@C!Nko-Z{xS9ck3b za{6htzunfW$#yy~m&K{{s$cIk&rTUDqm7K^M;j^heX-b=C-RT_ogRRV4Xi33n3RK} zD?jb|U45x5-0XLA)_JukBb3Zx^!b;cv$og2`1(s--?UyViknhaV4v$MfxFNS%eTA9 zLp9sYb;=5>JN5apUYrXAJ=L3KvEGKICL7xQ;_h)%U%uULt|#kFy(_1?s$Mac`%Yvt zbnE-SoY&>5dOOrU=jC=AfY`OKS6{y;KWulKYIQSN$%u>U9rF+0@S9>&ufF}SYWd!- zo(S-@KYDJJ)xw$Gg^>#8VcBP!Mef_-C$vZhmoy+HD zJo;u`tcu-sepl#5EUN8pvYM5<=1wJG&vXgZ&8k>T*w;mxHK?d49@po5$_0TyFok+Lar27>p?v?@c%5 ztlCYB&1}MLsW>5-h95_eulMVMcH46GeqaPZ}sPZkQT-Gp(2FdR4A=Py{zr+}8fD>zi4zTK9E??QW2rIhdaf zvhg4r4YJ`N8w|4kAnOgX?jSoIWG92HGsyBmmVqC=tkcW#US?&xn_#o?2zGi=6g{hAh%&%P4CJLbkB9vgIWpR zCDhNiIg_>Cl&g{r;ug6Ef~&30m1O<6FE^aG+-pBcTKK+{9Bk_St_1(xcLw$|5kG;r zbUEMl7>bc{sB(eq8!>Tzok1XO7_>Q3g~6{k#dNnQciMEls9QKX`n3>^Kd>L$mwKxA za+`q@e5hB+A`(cY5Le}DI$su>JI>3^r5DaEFp+kv>2}MF+zMUst>R=8U`4U%_MY8w zo%fSnl5;Rhn>5jrf+6mz>7vX%tILM$6?8?nDUdwRAmZv%ihQ#v)-b#hs_jQVI!Qgx z-KJd4pkHARguXUt*5KFsO~L<{p2a|1b#MLd3PO*+g^}-LUy{A#%ta#7uvlXVR~Hi$tOMsMVzt~m=oNW`)Lr8u^PBtHiBnq4>oDngjD zQg;#!(rNc2^kcVUQ{M}Y_)SsaEuNfmj!n66TuKCo;;Ps}_I!h$CpD2ag%LiMrSG?h zC{W5tadjn}SG(Fq^o2y|4 zdp35WDu<{0%t`>}uZQEGE{h6Yf3(joqDBde_H?&NWc}&C+!U)>y_~G4HE*G#X z-yLWeR(k2-0*v3__MY@M