chore(nix/build): rename to reduce redundancy in attr path
Change-Id: Ibefb924bb329c2a9dc0ac8e5ee1566253300b5cf Reviewed-on: https://cl.tvl.fyi/c/depot/+/12872 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: sterni <sternenseemann@systemli.org>
This commit is contained in:
parent
4dad5b2ef9
commit
317bd54038
2 changed files with 2 additions and 4 deletions
107
users/sterni/nix/build/gopherHole/default.nix
Normal file
107
users/sterni/nix/build/gopherHole/default.nix
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
{ depot, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (pkgs)
|
||||
runCommand
|
||||
writeText
|
||||
;
|
||||
|
||||
buildGopherHole = depot.users.sterni.nix.build.gopherHole;
|
||||
|
||||
fileTypes = {
|
||||
# RFC1436
|
||||
text = "0";
|
||||
menu = "1";
|
||||
cso = "2";
|
||||
error = "3";
|
||||
binhex = "4";
|
||||
dos = "5";
|
||||
uuencoded = "6";
|
||||
index-server = "7";
|
||||
telnet = "8";
|
||||
binary = "9";
|
||||
mirror = "+";
|
||||
gif = "g";
|
||||
image = "I";
|
||||
tn3270 = "T";
|
||||
# non-standard
|
||||
info = "i";
|
||||
html = "h";
|
||||
};
|
||||
|
||||
buildFile = { file, name, fileType ? fileTypes.text }:
|
||||
runCommand name
|
||||
{
|
||||
passthru = {
|
||||
# respect the file type the file derivation passes
|
||||
# through. otherwise use explicitly set type or
|
||||
# default value.
|
||||
fileType = file.fileType or fileType;
|
||||
};
|
||||
} ''
|
||||
ln -s ${file} "$out"
|
||||
'';
|
||||
|
||||
buildGopherMap = dir:
|
||||
let
|
||||
/* strings constitute an info line or an empty line
|
||||
if their length is zero. sets that contain a menu
|
||||
value have that added to the gophermap as-is.
|
||||
|
||||
all other entries should be a set which can be built using
|
||||
buildGopherHole and is linked by their name. The resulting
|
||||
derivation is expected to passthru a fileType containing the
|
||||
gopher file type char of themselves.
|
||||
*/
|
||||
gopherMapLine = e:
|
||||
if builtins.isString e
|
||||
then e
|
||||
else if e ? menu
|
||||
then e.menu
|
||||
else
|
||||
let
|
||||
drv = buildGopherHole e;
|
||||
title = e.title or e.name;
|
||||
in
|
||||
"${drv.fileType}${title}\t${drv.name}";
|
||||
in
|
||||
writeText ".gophermap" (lib.concatMapStringsSep "\n" gopherMapLine dir);
|
||||
|
||||
buildDir =
|
||||
{ dir, name, ... }:
|
||||
|
||||
let
|
||||
# filter all entries out that have to be symlinked:
|
||||
# sets with the file or dir attribute
|
||||
drvOnly = builtins.map buildGopherHole (builtins.filter
|
||||
(x: !(builtins.isString x) && (x ? dir || x ? file))
|
||||
dir);
|
||||
gopherMap = buildGopherMap dir;
|
||||
in
|
||||
runCommand name
|
||||
{
|
||||
passthru = {
|
||||
fileType = fileTypes.dir;
|
||||
};
|
||||
}
|
||||
(''
|
||||
mkdir -p "$out"
|
||||
ln -s "${gopherMap}" "$out/.gophermap"
|
||||
'' + lib.concatMapStrings
|
||||
(drv: ''
|
||||
ln -s "${drv}" "$out/${drv.name}"
|
||||
'')
|
||||
drvOnly);
|
||||
in
|
||||
|
||||
{
|
||||
# Dispatch into different file / dir handling code
|
||||
# which is mutually recursive with this function.
|
||||
__functor = _: args:
|
||||
if args ? file then buildFile args
|
||||
else if args ? dir then buildDir args
|
||||
else builtins.throw "Unrecognized gopher hole item type: "
|
||||
+ lib.generators.toPretty { } args;
|
||||
|
||||
inherit fileTypes;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue