feat: mk site path, actual website example with serve script
This commit is contained in:
parent
13d7fc0759
commit
2a1df3a476
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/result*
|
20
examples/serve.nix
Normal file
20
examples/serve.nix
Normal file
@ -0,0 +1,20 @@
|
||||
{ tags, pkgsLib, pkgs ? import <nixpkgs> { overlays = [ pkgsLib ]; } }:
|
||||
with pkgs.htmlNix;
|
||||
let
|
||||
index = with tags;
|
||||
html [
|
||||
(body [
|
||||
(p "Hello world!")
|
||||
(link "./ex.html" "say bye")
|
||||
])
|
||||
];
|
||||
|
||||
ex = with tags;
|
||||
html [
|
||||
(body [
|
||||
(p "Bye world!")
|
||||
(link "./index.html" "go back")
|
||||
])
|
||||
];
|
||||
in
|
||||
mkServePathScript (mkSitePath { "index.html" = index; "ex.html" = ex; })
|
32
flake.nix
32
flake.nix
@ -5,8 +5,31 @@
|
||||
|
||||
outputs = { self, nixpkgsLib }:
|
||||
let
|
||||
lib = nixpkgsLib.lib;
|
||||
tags = import ./tags.nix { format = true; inherit lib; };
|
||||
lib = nixpkgsLib.lib // {
|
||||
recursiveAttrPaths = set:
|
||||
let
|
||||
flattenIfHasList = x:
|
||||
if (lib.isList x) && (lib.any lib.isList x)
|
||||
then lib.concatMap flattenIfHasList x
|
||||
else [ x ];
|
||||
|
||||
recurse = path: set:
|
||||
let
|
||||
g =
|
||||
name: value:
|
||||
if lib.isAttrs value
|
||||
then recurse (path ++ [ name ]) value
|
||||
else path ++ [ name ];
|
||||
in
|
||||
lib.mapAttrsToList g set;
|
||||
in
|
||||
flattenIfHasList (recurse [ ] set);
|
||||
};
|
||||
|
||||
tags = import ./tags.nix { format = false; inherit lib; };
|
||||
pkgsLib = (final: prev: {
|
||||
htmlNix = import ./pkgs-lib.nix { inherit lib; pkgs = prev; };
|
||||
});
|
||||
in
|
||||
{
|
||||
lib = {
|
||||
@ -14,13 +37,12 @@
|
||||
};
|
||||
|
||||
overlays = {
|
||||
pkgsLib = (final: prev: {
|
||||
htmlNix = import ./pkgs-lib.nix { inherit lib; pkgs = prev; };
|
||||
});
|
||||
inherit pkgsLib;
|
||||
};
|
||||
|
||||
examples = {
|
||||
tags = import ./examples/tags.nix tags;
|
||||
serve = import ./examples/serve.nix { inherit tags pkgsLib; }; # needs --impure
|
||||
};
|
||||
};
|
||||
}
|
||||
|
16
pkgs-lib.nix
16
pkgs-lib.nix
@ -1,8 +1,20 @@
|
||||
{ lib, pkgs }:
|
||||
let pkgBin = name: "${pkgs.${name}}/bin/${name}"; in
|
||||
{
|
||||
mkServePathScript = path: pkgs.writeScriptBin "serve" { } ''
|
||||
#!${pkgBin "bash"}
|
||||
mkServePathScript = path: pkgs.writeScriptBin "serve" ''
|
||||
#!${pkgs.stdenv.shell}
|
||||
${pkgBin "miniserve"} --index index.html ${path}
|
||||
'';
|
||||
|
||||
mkSitePath = site:
|
||||
let
|
||||
fileAttrPaths = lib.recursiveAttrPaths site;
|
||||
texts = lib.mapAttrsRecursive (path: value: pkgs.writeText (lib.concatStringsSep "-" path) value) site;
|
||||
mkCreateFileCmd = path: value: let p = lib.concatStringsSep "/" (lib.init path); in "mkdir -p $out/${p} && ln -s ${value} $out/${p}/${lib.last path}";
|
||||
createFileCmds = map (path: mkCreateFileCmd path (lib.getAttrFromPath path texts)) fileAttrPaths;
|
||||
in
|
||||
pkgs.runCommand "site-path" { } ''
|
||||
mkdir -p $out
|
||||
${lib.concatStringsSep "\n" createFileCmds}
|
||||
'';
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user