commit dcca5da8653648c132aa5827f7b68c8c71a34998 Author: Bill Ewanick Date: Mon Feb 20 19:32:14 2023 -0500 Initial commit 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 0000000..b58d80d Binary files /dev/null and b/nix/registry.dat differ diff --git a/public/index.debug.html b/public/index.debug.html new file mode 100644 index 0000000..1fe4823 --- /dev/null +++ b/public/index.debug.html @@ -0,0 +1,23 @@ + + + + + + + + + DEBUG ENABLED - Elm App using Nix Starter Template + + + + + + + +
+ + + + \ No newline at end of file diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..5c4e05b --- /dev/null +++ b/public/index.html @@ -0,0 +1,23 @@ + + + + + + + + + Elm App using Nix Starter Template + + + + + + + +
+ + + + \ No newline at end of file diff --git a/public/main.css b/public/main.css new file mode 100644 index 0000000..2575f99 --- /dev/null +++ b/public/main.css @@ -0,0 +1,86 @@ +html, +body { + height: 100%; +} + +body { + background-color: #fff1e5; + font-size: 20px; + color: #070707; + margin: 0px; + font-family: 'IBM Plex Sans', sans-serif; +} + +h1 { + display: block; + font-size: 2em; + font-weight: bold; + margin: 0em 0em 1em 0em; +} + +a { + color: #070707; + border-bottom: 1px dashed #070707; + padding-bottom: 0px; + text-decoration: none; + transition: padding 0.25s; +} + +a:hover { + padding-bottom: 2px; +} + +#hwaet { + padding: 2em; + max-width: 1000px; + margin-right: auto; + margin-left: auto; +} + +#controls { + display: flex +} + +.control { + margin-right: 1em; + display: flex; + flex-direction: column; + width: 10em; + font-size: 0.75em; + text-align: center; +} + + +input[type="range"] { + width: 100%; + margin-bottom: 1em; +} + +input[type=range] { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-runnable-track { + height: .35em; + background: #070707; + border: none; + border-radius: 3px; +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: 1.1em; + width: 1.1em; + border-radius: 50%; + background: #070707; + margin-top: -4px; +} + +input[type=range]:focus { + outline: none; +} + +#footer { + font-size: 0.8em; +} \ No newline at end of file diff --git a/src/Main.elm b/src/Main.elm new file mode 100644 index 0000000..a70d222 --- /dev/null +++ b/src/Main.elm @@ -0,0 +1,34 @@ +module Main exposing (Msg(..), main, update, view) + +import Browser +import Html exposing (Html, button, div, text) +import Html.Events exposing (onClick) + + +main : Program () Int Msg +main = + Browser.sandbox { init = 0, update = update, view = view } + + +type Msg + = Increment + | Decrement + + +update : Msg -> number -> number +update msg model = + case msg of + Increment -> + model + 1 + + Decrement -> + model - 1 + + +view : Int -> Html Msg +view model = + div [] + [ button [ onClick Decrement ] [ text "-" ] + , div [] [ text (String.fromInt model) ] + , button [ onClick Increment ] [ text "+" ] + ]