forked from Fediversity/fediversity.eu
uncle bob
This commit is contained in:
parent
1a8b04f21a
commit
b2fac26a69
17
default.nix
17
default.nix
|
@ -10,23 +10,10 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
lib' = pkgs.callPackage ./lib.nix { };
|
lib' = pkgs.callPackage ./lib.nix { };
|
||||||
join = lib.concatStringsSep;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
site = pkgs.stdenv.mkDerivation {
|
site = lib'.site "fediversity.eu" ./content;
|
||||||
name = "fediversity.eu";
|
|
||||||
src = ./content;
|
|
||||||
buildPhase = ''
|
|
||||||
true
|
|
||||||
'';
|
|
||||||
installPhase = ''
|
|
||||||
mkdir $out
|
|
||||||
'' + join "\n" (lib.mapAttrsToList
|
|
||||||
(name: value: ''
|
|
||||||
cp ${value} $out/${name}
|
|
||||||
'')
|
|
||||||
(lib'.files ./content));
|
|
||||||
};
|
|
||||||
shell = pkgs.mkShellNoCC {
|
shell = pkgs.mkShellNoCC {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
cmark
|
cmark
|
||||||
|
|
67
lib.nix
67
lib.nix
|
@ -1,5 +1,51 @@
|
||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
join = lib.concatStringsSep;
|
||||||
|
in
|
||||||
rec {
|
rec {
|
||||||
|
/**
|
||||||
|
Build the web site
|
||||||
|
*/
|
||||||
|
site = name: dir:
|
||||||
|
let
|
||||||
|
script = ''
|
||||||
|
mkdir $out
|
||||||
|
'' + join "\n" copy;
|
||||||
|
copy = lib.mapAttrsToList
|
||||||
|
(
|
||||||
|
path: document: ''
|
||||||
|
mkdir -p $out/$(dirname ${path})
|
||||||
|
cp ${document} $out/${path}
|
||||||
|
''
|
||||||
|
)
|
||||||
|
(files (sources dir));
|
||||||
|
in
|
||||||
|
pkgs.runCommand name { } script;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get source files from a flat directory
|
||||||
|
*/
|
||||||
|
sources = dir: lib.mapAttrs'
|
||||||
|
(
|
||||||
|
attrname: value: {
|
||||||
|
name = lib.removeSuffix ".nix" attrname;
|
||||||
|
value = import (dir + "/${attrname}");
|
||||||
|
}
|
||||||
|
)
|
||||||
|
(builtins.readDir dir);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create a mapping from output file path to document contents
|
||||||
|
*/
|
||||||
|
files = documents: lib.mapAttrs'
|
||||||
|
(
|
||||||
|
name: document: {
|
||||||
|
name = document.outPath;
|
||||||
|
value = html document "${name}.html";
|
||||||
|
}
|
||||||
|
)
|
||||||
|
documents;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Convert a Nix document to HTML
|
Convert a Nix document to HTML
|
||||||
*/
|
*/
|
||||||
|
@ -22,25 +68,4 @@ rec {
|
||||||
pkgs.runCommand "${name}.html" { buildInputs = [ pkgs.cmark ]; } ''
|
pkgs.runCommand "${name}.html" { buildInputs = [ pkgs.cmark ]; } ''
|
||||||
cmark ${builtins.toFile "${name}.md" markdown} > $out
|
cmark ${builtins.toFile "${name}.md" markdown} > $out
|
||||||
'';
|
'';
|
||||||
|
|
||||||
/**
|
|
||||||
Get documents from a flat directory of files
|
|
||||||
*/
|
|
||||||
documents = dir: lib.mapAttrs'
|
|
||||||
(
|
|
||||||
attrname: value: {
|
|
||||||
name = lib.removeSuffix ".nix" attrname;
|
|
||||||
value = import (dir + "/${attrname}");
|
|
||||||
}
|
|
||||||
)
|
|
||||||
(builtins.readDir dir);
|
|
||||||
|
|
||||||
files = dir: lib.mapAttrs'
|
|
||||||
(
|
|
||||||
name: document: {
|
|
||||||
name = document.outPath;
|
|
||||||
value = html document "${name}.html";
|
|
||||||
}
|
|
||||||
)
|
|
||||||
(documents dir);
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue