Initial commit
commit
dcca5da865
|
@ -0,0 +1,7 @@
|
||||||
|
# Nix related
|
||||||
|
.direnv
|
||||||
|
result
|
||||||
|
|
||||||
|
# Elm related
|
||||||
|
elm-stuff
|
||||||
|
public/main.js
|
|
@ -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": {}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
|
@ -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";
|
||||||
|
};
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<meta name="theme-color" content="#000000">
|
||||||
|
<title>DEBUG ENABLED - Elm App using Nix Starter Template</title>
|
||||||
|
<link rel="stylesheet" href="main.css">
|
||||||
|
|
||||||
|
<script src="debug.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
You need to enable JavaScript to run this app.
|
||||||
|
</noscript>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script>var app = Elm.Main.init({ node: document.getElementById("root") });</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<meta name="theme-color" content="#000000">
|
||||||
|
<title>Elm App using Nix Starter Template</title>
|
||||||
|
<link rel="stylesheet" href="main.css">
|
||||||
|
|
||||||
|
<script src="main.min.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
You need to enable JavaScript to run this app.
|
||||||
|
</noscript>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script>var app = Elm.Main.init({ node: document.getElementById("root") });</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -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;
|
||||||
|
}
|
|
@ -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 "+" ]
|
||||||
|
]
|
Loading…
Reference in New Issue