style: format entire depot with nixpkgs-fmt
This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
parent
2d10d60fac
commit
aa122cbae7
310 changed files with 7278 additions and 5490 deletions
|
@ -90,7 +90,7 @@ let
|
|||
|
||||
# Feed generation functions:
|
||||
|
||||
renderEpoch = epoch: removeSuffix "\n" (readFile (runCommandNoCC "date-${toString epoch}" {} ''
|
||||
renderEpoch = epoch: removeSuffix "\n" (readFile (runCommandNoCC "date-${toString epoch}" { } ''
|
||||
date --date='@${toString epoch}' --utc --iso-8601='seconds' > $out
|
||||
''));
|
||||
|
||||
|
@ -147,6 +147,7 @@ let
|
|||
${concatStrings (map renderEntry (sortEntries f.entries))}
|
||||
</feed>
|
||||
'');
|
||||
in {
|
||||
in
|
||||
{
|
||||
inherit entry feed renderFeed renderEpoch;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ let
|
|||
fragments = import ./fragments.nix args;
|
||||
|
||||
# Functions for generating feeds for these blogs using //web/atom-feed.
|
||||
toFeedEntry = { baseUrl, ...}: defun [ post atom-feed.entry ] (post: rec {
|
||||
toFeedEntry = { baseUrl, ... }: defun [ post atom-feed.entry ] (post: rec {
|
||||
id = "${baseUrl}/${post.key}";
|
||||
title = post.title;
|
||||
content = readFile (renderMarkdown post.content);
|
||||
|
@ -52,7 +52,8 @@ let
|
|||
href = id;
|
||||
};
|
||||
});
|
||||
in {
|
||||
in
|
||||
{
|
||||
inherit post toFeedEntry;
|
||||
inherit (fragments) renderPost;
|
||||
|
||||
|
|
|
@ -20,29 +20,29 @@ let
|
|||
escape = replaceStrings [ "<" ">" "&" "'" ] [ "<" ">" "&" "'" ];
|
||||
|
||||
header = name: title: ''
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="${escape name}">
|
||||
<link rel="stylesheet" type="text/css" href="${staticUrl}/tvl.css" media="all">
|
||||
<link rel="icon" type="image/webp" href="/static/favicon.webp">
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom Feed" href="https://tvl.fyi/feed.atom">
|
||||
<title>${escape name}: ${escape title}</title>
|
||||
</head>
|
||||
<body class="light">
|
||||
<header>
|
||||
<h1><a class="blog-title" href="/">${escape name}</a> </h1>
|
||||
<hr>
|
||||
</header>
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="${escape name}">
|
||||
<link rel="stylesheet" type="text/css" href="${staticUrl}/tvl.css" media="all">
|
||||
<link rel="icon" type="image/webp" href="/static/favicon.webp">
|
||||
<link rel="alternate" type="application/atom+xml" title="Atom Feed" href="https://tvl.fyi/feed.atom">
|
||||
<title>${escape name}: ${escape title}</title>
|
||||
</head>
|
||||
<body class="light">
|
||||
<header>
|
||||
<h1><a class="blog-title" href="/">${escape name}</a> </h1>
|
||||
<hr>
|
||||
</header>
|
||||
'';
|
||||
|
||||
fullFooter = content: ''
|
||||
<hr>
|
||||
<footer>
|
||||
${content}
|
||||
</footer>
|
||||
</body>
|
||||
<hr>
|
||||
<footer>
|
||||
${content}
|
||||
</footer>
|
||||
</body>
|
||||
'';
|
||||
|
||||
draftWarning = writeText "draft.html" ''
|
||||
|
@ -61,7 +61,7 @@ let
|
|||
<hr>
|
||||
'';
|
||||
|
||||
renderPost = { name, footer, ... }: post: runCommandNoCC "${post.key}.html" {} ''
|
||||
renderPost = { name, footer, ... }: post: runCommandNoCC "${post.key}.html" { } ''
|
||||
cat ${writeText "header.html" (header name post.title)} > $out
|
||||
|
||||
# Write the post title & date
|
||||
|
@ -90,6 +90,7 @@ let
|
|||
|
||||
cat ${writeText "footer.html" (fullFooter footer)} >> $out
|
||||
'';
|
||||
in {
|
||||
in
|
||||
{
|
||||
inherit isDraft isUnlisted renderPost;
|
||||
}
|
||||
|
|
|
@ -134,20 +134,23 @@ let
|
|||
code = statusCodes."${statusArg}" or null;
|
||||
line = statusArg;
|
||||
} else {
|
||||
code = null; line = null;
|
||||
code = null;
|
||||
line = null;
|
||||
};
|
||||
renderedHeaders = lib.concatStrings
|
||||
(lib.mapAttrsToList (n: v: "${n}: ${toString v}\r\n") headers);
|
||||
internalError = msg: respond 500 {
|
||||
Content-type = "text/plain";
|
||||
} "bubblegum error: ${msg}";
|
||||
internalError = msg: respond 500
|
||||
{
|
||||
Content-type = "text/plain";
|
||||
} "bubblegum error: ${msg}";
|
||||
body = builtins.tryEval bodyArg;
|
||||
in
|
||||
if status.code == null || status.line == null
|
||||
then internalError "Invalid status ${lib.generators.toPretty {} statusArg}."
|
||||
else if !body.success
|
||||
then internalError "Unknown evaluation error in user code"
|
||||
else lib.concatStrings [
|
||||
if status.code == null || status.line == null
|
||||
then internalError "Invalid status ${lib.generators.toPretty {} statusArg}."
|
||||
else if !body.success
|
||||
then internalError "Unknown evaluation error in user code"
|
||||
else
|
||||
lib.concatStrings [
|
||||
"Status: ${toString status.code} ${status.line}\r\n"
|
||||
renderedHeaders
|
||||
"\r\n"
|
||||
|
@ -169,9 +172,9 @@ let
|
|||
let
|
||||
p = builtins.getEnv "PATH_INFO";
|
||||
in
|
||||
if builtins.stringLength p == 0
|
||||
then "/"
|
||||
else p;
|
||||
if builtins.stringLength p == 0
|
||||
then "/"
|
||||
else p;
|
||||
|
||||
/* Helper function which converts a path from the
|
||||
root of the CGI script (i. e. something which
|
||||
|
@ -187,12 +190,13 @@ let
|
|||
else "${scriptName}/${path}";
|
||||
|
||||
bins = getBins pkgs.coreutils [ "env" "tee" "cat" "printf" "chmod" ]
|
||||
// getBins nint [ "nint" ];
|
||||
// getBins nint [ "nint" ];
|
||||
|
||||
/* Type: args -> either path derivation string -> derivation
|
||||
*/
|
||||
writeCGI =
|
||||
{ # if given sets the `PATH` to search for `nix-instantiate`
|
||||
{
|
||||
# if given sets the `PATH` to search for `nix-instantiate`
|
||||
# Useful when using for example thttpd which unsets `PATH`
|
||||
# in the CGI environment.
|
||||
binPath ? ""
|
||||
|
@ -202,7 +206,8 @@ let
|
|||
, name ? null
|
||||
, ...
|
||||
}@args:
|
||||
input: let
|
||||
input:
|
||||
let
|
||||
drvName =
|
||||
if builtins.isString input || args ? name
|
||||
then args.name
|
||||
|
@ -227,20 +232,31 @@ let
|
|||
# always pass depot so scripts can use this library
|
||||
"--arg depot '(import ${minimalDepot} {})'"
|
||||
]);
|
||||
in runExecline.local drvName {} [
|
||||
"importas" "out" "out"
|
||||
"pipeline" [
|
||||
"foreground" [
|
||||
"if" [ bins.printf "%s\n" shebang ]
|
||||
in
|
||||
runExecline.local drvName { } [
|
||||
"importas"
|
||||
"out"
|
||||
"out"
|
||||
"pipeline"
|
||||
[
|
||||
"foreground"
|
||||
[
|
||||
"if"
|
||||
[ bins.printf "%s\n" shebang ]
|
||||
]
|
||||
"if" [ bins.cat script ]
|
||||
"if"
|
||||
[ bins.cat script ]
|
||||
]
|
||||
"if" [ bins.tee "$out" ]
|
||||
"if" [ bins.chmod "+x" "$out" ]
|
||||
"exit" "0"
|
||||
"if"
|
||||
[ bins.tee "$out" ]
|
||||
"if"
|
||||
[ bins.chmod "+x" "$out" ]
|
||||
"exit"
|
||||
"0"
|
||||
];
|
||||
|
||||
in {
|
||||
in
|
||||
{
|
||||
inherit
|
||||
respond
|
||||
pathInfo
|
||||
|
|
|
@ -26,17 +26,17 @@ let
|
|||
let
|
||||
matched = builtins.match "/?([0-9]+)-([0-9]+)-([0-9]+)-.+" post;
|
||||
in
|
||||
if matched == null
|
||||
then [ 0 0 0 ]
|
||||
else builtins.map builtins.fromJSON matched;
|
||||
if matched == null
|
||||
then [ 0 0 0 ]
|
||||
else builtins.map builtins.fromJSON matched;
|
||||
|
||||
parseTitle = post:
|
||||
let
|
||||
matched = builtins.match "/?[0-9]+-[0-9]+-[0-9]+-(.+).html" post;
|
||||
in
|
||||
if matched == null
|
||||
then "no title"
|
||||
else builtins.head matched;
|
||||
if matched == null
|
||||
then "no title"
|
||||
else builtins.head matched;
|
||||
|
||||
dateAtLeast = a: b:
|
||||
builtins.all fun.id
|
||||
|
@ -68,11 +68,13 @@ let
|
|||
<main>
|
||||
<h1>blog posts</h1>
|
||||
<ul>
|
||||
'' + lib.concatMapStrings (post: ''
|
||||
'' + lib.concatMapStrings
|
||||
(post: ''
|
||||
<li>
|
||||
<a href="${absolutePath (url.encode {} post)}">${parseTitle post}</a>
|
||||
</li>
|
||||
'') posts + ''
|
||||
'')
|
||||
posts + ''
|
||||
</ul>
|
||||
</main>
|
||||
'';
|
||||
|
@ -80,10 +82,14 @@ let
|
|||
formatDate =
|
||||
let
|
||||
# Assume we never deal with years < 1000
|
||||
formatDigit = d: string.fit {
|
||||
char = "0"; width = 2;
|
||||
} (toString d);
|
||||
in lib.concatMapStringsSep "-" formatDigit;
|
||||
formatDigit = d: string.fit
|
||||
{
|
||||
char = "0";
|
||||
width = 2;
|
||||
}
|
||||
(toString d);
|
||||
in
|
||||
lib.concatMapStringsSep "-" formatDigit;
|
||||
|
||||
post = title: post: ''
|
||||
<main>
|
||||
|
@ -101,8 +107,9 @@ let
|
|||
validatePathInfo = pathInfo:
|
||||
let
|
||||
chars = string.toChars pathInfo;
|
||||
in builtins.length chars > 1
|
||||
&& !(builtins.elem "/" (builtins.tail chars));
|
||||
in
|
||||
builtins.length chars > 1
|
||||
&& !(builtins.elem "/" (builtins.tail chars));
|
||||
|
||||
response =
|
||||
if pathInfo == "/"
|
||||
|
@ -129,6 +136,8 @@ let
|
|||
inner = "<h1>404 — not found</h1>";
|
||||
};
|
||||
in
|
||||
respond response.status {
|
||||
"Content-type" = "text/html";
|
||||
} (generic response)
|
||||
respond response.status
|
||||
{
|
||||
"Content-type" = "text/html";
|
||||
}
|
||||
(generic response)
|
||||
|
|
|
@ -29,33 +29,54 @@ let
|
|||
;
|
||||
|
||||
bins = (getBins pkgs.thttpd [ "thttpd" ])
|
||||
// (getBins pkgs.coreutils [ "printf" "cp" "mkdir" ]);
|
||||
// (getBins pkgs.coreutils [ "printf" "cp" "mkdir" ]);
|
||||
|
||||
webRoot =
|
||||
let
|
||||
copyScripts = lib.concatMap
|
||||
(path: let
|
||||
cgi = writeCGI {
|
||||
# assume we are on NixOS since thttpd doesn't set PATH.
|
||||
# using third_party.nix is tricky because not everyone
|
||||
# has a tvix daemon running.
|
||||
binPath = "/run/current-system/sw/bin";
|
||||
} path;
|
||||
in [
|
||||
"if" [ bins.cp cgi "\${out}/${cgi.name}" ]
|
||||
]) scripts;
|
||||
in runExecline.local "webroot" {} ([
|
||||
"importas" "out" "out"
|
||||
"if" [ bins.mkdir "-p" "$out" ]
|
||||
(path:
|
||||
let
|
||||
cgi = writeCGI
|
||||
{
|
||||
# assume we are on NixOS since thttpd doesn't set PATH.
|
||||
# using third_party.nix is tricky because not everyone
|
||||
# has a tvix daemon running.
|
||||
binPath = "/run/current-system/sw/bin";
|
||||
}
|
||||
path;
|
||||
in
|
||||
[
|
||||
"if"
|
||||
[ bins.cp cgi "\${out}/${cgi.name}" ]
|
||||
])
|
||||
scripts;
|
||||
in
|
||||
runExecline.local "webroot" { } ([
|
||||
"importas"
|
||||
"out"
|
||||
"out"
|
||||
"if"
|
||||
[ bins.mkdir "-p" "$out" ]
|
||||
] ++ copyScripts);
|
||||
|
||||
port = 9000;
|
||||
|
||||
in
|
||||
writeExecline "serve-examples" {} [
|
||||
"foreground" [
|
||||
bins.printf "%s\n" "Running on http://localhost:${toString port}"
|
||||
]
|
||||
"${bins.thttpd}" "-D" "-p" (toString port) "-l" "/dev/stderr"
|
||||
"-c" "*.nix" "-d" webRoot
|
||||
writeExecline "serve-examples" { } [
|
||||
"foreground"
|
||||
[
|
||||
bins.printf
|
||||
"%s\n"
|
||||
"Running on http://localhost:${toString port}"
|
||||
]
|
||||
"${bins.thttpd}"
|
||||
"-D"
|
||||
"-p"
|
||||
(toString port)
|
||||
"-l"
|
||||
"/dev/stderr"
|
||||
"-c"
|
||||
"*.nix"
|
||||
"-d"
|
||||
webRoot
|
||||
]
|
||||
|
|
|
@ -6,6 +6,8 @@ let
|
|||
respond
|
||||
;
|
||||
in
|
||||
respond "OK" {
|
||||
Content-type = "image/svg+xml";
|
||||
} (builtins.readFile "${depot.tvix.docs.svg}/component-flow.svg")
|
||||
respond "OK"
|
||||
{
|
||||
Content-type = "image/svg+xml";
|
||||
}
|
||||
(builtins.readFile "${depot.tvix.docs.svg}/component-flow.svg")
|
||||
|
|
|
@ -87,6 +87,8 @@ let
|
|||
response = routes."${pathInfo}" or notFound;
|
||||
|
||||
in
|
||||
respond response.status {
|
||||
"Content-type" = "text/html";
|
||||
} (template response)
|
||||
respond response.status
|
||||
{
|
||||
"Content-type" = "text/html";
|
||||
}
|
||||
(template response)
|
||||
|
|
|
@ -63,12 +63,13 @@ let
|
|||
envp[envn++] = build_env( "PATH=%s", CGI_PATH );
|
||||
#ifdef CGI_LD_LIBRARY_PATH
|
||||
'';
|
||||
thttpdCgit = thttpd.overrideAttrs(old: {
|
||||
thttpdCgit = thttpd.overrideAttrs (old: {
|
||||
patches = [
|
||||
./thttpd_cgi_idx.patch
|
||||
thttpdConfigPatch
|
||||
];
|
||||
});
|
||||
in writeShellScriptBin "cgit-launch" ''
|
||||
in
|
||||
writeShellScriptBin "cgit-launch" ''
|
||||
exec ${thttpdCgit}/bin/thttpd -D -C ${thttpdConfig}
|
||||
''
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ depot ? import ../.. {} }:
|
||||
{ depot ? import ../.. { } }:
|
||||
|
||||
with depot.third_party;
|
||||
|
||||
|
|
|
@ -5,7 +5,9 @@
|
|||
let
|
||||
storeDirLength = with builtins; (stringLength storeDir) + 1;
|
||||
logo = depot.web.tvl.logo;
|
||||
in lib.fix(self: pkgs.runCommand "tvl-static" {
|
||||
in
|
||||
lib.fix (self: pkgs.runCommand "tvl-static"
|
||||
{
|
||||
passthru = {
|
||||
# Preserving the string context here makes little sense: While we are
|
||||
# referencing this derivation, we are not doing so via the nix store,
|
||||
|
|
|
@ -39,7 +39,7 @@ let
|
|||
user = string;
|
||||
};
|
||||
|
||||
allTodos = fromJSON (readFile (runCommandNoCC "depot-todos.json" {} ''
|
||||
allTodos = fromJSON (readFile (runCommandNoCC "depot-todos.json" { } ''
|
||||
${ripgrep}/bin/rg --json 'TODO\(\w+\):.*$' ${depot.path} | \
|
||||
${jq}/bin/jq -s -f ${./extract-todos.jq} > $out
|
||||
''));
|
||||
|
@ -58,22 +58,23 @@ let
|
|||
'');
|
||||
|
||||
userParagraph = todos:
|
||||
let user = (head todos).user;
|
||||
in ''
|
||||
<p>
|
||||
<h3>
|
||||
<a style="color:inherit; text-decoration: none;"
|
||||
name="${user}"
|
||||
href="#${user}">${user}</a>
|
||||
</h3>
|
||||
${concatStringsSep "\n" (map todoElement todos)}
|
||||
</p>
|
||||
<hr>
|
||||
'';
|
||||
let user = (head todos).user;
|
||||
in ''
|
||||
<p>
|
||||
<h3>
|
||||
<a style="color:inherit; text-decoration: none;"
|
||||
name="${user}"
|
||||
href="#${user}">${user}</a>
|
||||
</h3>
|
||||
${concatStringsSep "\n" (map todoElement todos)}
|
||||
</p>
|
||||
<hr>
|
||||
'';
|
||||
|
||||
staticUrl = "https://static.tvl.fyi/${depot.web.static.drvHash}";
|
||||
|
||||
in writeTextFile {
|
||||
in
|
||||
writeTextFile {
|
||||
name = "tvl-todos";
|
||||
destination = "/index.html";
|
||||
text = ''
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{
|
||||
config = {
|
||||
name = "TVL's blog";
|
||||
footer = depot.web.tvl.footer {};
|
||||
footer = depot.web.tvl.footer { };
|
||||
baseUrl = "https://tvl.fyi/blog";
|
||||
};
|
||||
|
||||
|
|
|
@ -16,9 +16,10 @@ let
|
|||
(map (p: "cp ${blog.renderPost tvl.blog.config p} $out/blog/${p.key}.html") posts)
|
||||
);
|
||||
|
||||
tvlGraph = runCommandNoCC "tvl.svg" {
|
||||
nativeBuildInputs = with pkgs; [ fontconfig freetype cairo jetbrains-mono ];
|
||||
} ''
|
||||
tvlGraph = runCommandNoCC "tvl.svg"
|
||||
{
|
||||
nativeBuildInputs = with pkgs; [ fontconfig freetype cairo jetbrains-mono ];
|
||||
} ''
|
||||
${graphviz}/bin/neato -Tsvg ${./tvl.dot} > $out
|
||||
'';
|
||||
|
||||
|
@ -121,7 +122,8 @@ let
|
|||
</style>
|
||||
'';
|
||||
};
|
||||
in runCommandNoCC "website" {} ''
|
||||
in
|
||||
runCommandNoCC "website" { } ''
|
||||
mkdir -p $out/blog
|
||||
cp ${homepage} $out/index.html
|
||||
${postRenderingCommands tvl.blog.posts}
|
||||
|
|
|
@ -15,7 +15,7 @@ args: ''
|
|||
<a class="uncoloured-link" href="https://todo.tvl.fyi/">todos</a>
|
||||
|
|
||||
<a class="uncoloured-link" href="https://atward.tvl.fyi/">search</a>
|
||||
'' + lib.optionalString (args ? extraFooter) args.extraFooter + ''
|
||||
'' + lib.optionalString (args ? extraFooter) args.extraFooter + ''
|
||||
</p>
|
||||
<p class="lod">ಠ_ಠ</p>
|
||||
''
|
||||
|
|
|
@ -21,20 +21,22 @@ let
|
|||
|
||||
# Create an animated CSS that equally spreads out the colours over
|
||||
# the animation duration (1min).
|
||||
animatedCss = colours: let
|
||||
# Calculate at which percentage offset each colour should appear.
|
||||
stepSize = 100 / ((builtins.length colours) - 1);
|
||||
frames = lib.imap0 (idx: colour: { inherit colour; at = idx * stepSize; }) colours;
|
||||
frameCss = frame: "${toString frame.at}% { fill: ${frame.colour}; }";
|
||||
in ''
|
||||
#armchair-background {
|
||||
animation: 30s infinite alternate armchairPalette;
|
||||
}
|
||||
animatedCss = colours:
|
||||
let
|
||||
# Calculate at which percentage offset each colour should appear.
|
||||
stepSize = 100 / ((builtins.length colours) - 1);
|
||||
frames = lib.imap0 (idx: colour: { inherit colour; at = idx * stepSize; }) colours;
|
||||
frameCss = frame: "${toString frame.at}% { fill: ${frame.colour}; }";
|
||||
in
|
||||
''
|
||||
#armchair-background {
|
||||
animation: 30s infinite alternate armchairPalette;
|
||||
}
|
||||
|
||||
@keyframes armchairPalette {
|
||||
${lib.concatStringsSep "\n" (map frameCss frames)}
|
||||
}
|
||||
'';
|
||||
@keyframes armchairPalette {
|
||||
${lib.concatStringsSep "\n" (map frameCss frames)}
|
||||
}
|
||||
'';
|
||||
|
||||
# Dark version of the logo, suitable for light backgrounds.
|
||||
darkCss = armchairCss: ''
|
||||
|
@ -67,7 +69,8 @@ let
|
|||
</svg>
|
||||
'';
|
||||
|
||||
in depot.nix.readTree.drvTargets(lib.fix (self: {
|
||||
in
|
||||
depot.nix.readTree.drvTargets (lib.fix (self: {
|
||||
# Expose the logo construction functions.
|
||||
inherit palette darkCss lightCss animatedCss staticCss;
|
||||
|
||||
|
@ -75,7 +78,7 @@ in depot.nix.readTree.drvTargets(lib.fix (self: {
|
|||
logoSvg = style: pkgs.writeText "logo.svg" (logoSvg style);
|
||||
|
||||
# Create a PNG of the TVL logo with the specified style and DPI.
|
||||
logoPng = style: dpi: pkgs.runCommandNoCC "logo.png" {} ''
|
||||
logoPng = style: dpi: pkgs.runCommandNoCC "logo.png" { } ''
|
||||
${pkgs.inkscape}/bin/inkscape \
|
||||
--export-area-drawing \
|
||||
--export-background-opacity 0 \
|
||||
|
@ -87,7 +90,8 @@ in depot.nix.readTree.drvTargets(lib.fix (self: {
|
|||
pastelRainbow = self.logoSvg (darkCss (animatedCss (lib.attrValues palette)));
|
||||
}
|
||||
|
||||
# Add individual outputs for static dark logos of each colour.
|
||||
// (lib.mapAttrs'
|
||||
(k: v: lib.nameValuePair "${k}Png"
|
||||
(self.logoPng (darkCss (staticCss v)) 96)) palette)))
|
||||
# Add individual outputs for static dark logos of each colour.
|
||||
// (lib.mapAttrs'
|
||||
(k: v: lib.nameValuePair "${k}Png"
|
||||
(self.logoPng (darkCss (staticCss v)) 96))
|
||||
palette)))
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ depot, pkgs, lib, ... }:
|
||||
|
||||
{ # content of the <title> tag
|
||||
{
|
||||
# content of the <title> tag
|
||||
title
|
||||
# main part of the page, usually wrapped with <main>
|
||||
, content
|
||||
|
@ -17,7 +18,8 @@ let
|
|||
inherit (depot.tools) cheddar;
|
||||
in
|
||||
|
||||
runCommandNoCC "${lib.strings.sanitizeDerivationName title}-index.html" {
|
||||
runCommandNoCC "${lib.strings.sanitizeDerivationName title}-index.html"
|
||||
{
|
||||
headerPart = ''
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
|
@ -36,11 +38,11 @@ runCommandNoCC "${lib.strings.sanitizeDerivationName title}-index.html" {
|
|||
inherit content;
|
||||
|
||||
footerPart = ''
|
||||
<hr>
|
||||
<footer>
|
||||
${depot.web.tvl.footer args}
|
||||
</footer>
|
||||
</body>
|
||||
<hr>
|
||||
<footer>
|
||||
${depot.web.tvl.footer args}
|
||||
</footer>
|
||||
</body>
|
||||
'';
|
||||
|
||||
passAsFile = [ "headerPart" "content" "footerPart" ];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue