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:
Vincent Ambo 2022-01-30 19:06:58 +03:00 committed by tazjin
parent 2d10d60fac
commit aa122cbae7
310 changed files with 7278 additions and 5490 deletions

View file

@ -2,13 +2,14 @@
let
netencode = {
rust = depot.nix.writers.rustSimpleLib {
name = "arglib-netencode";
dependencies = [
depot.users.Profpatsch.execline.exec-helpers
depot.users.Profpatsch.netencode.netencode-rs
];
} ''
rust = depot.nix.writers.rustSimpleLib
{
name = "arglib-netencode";
dependencies = [
depot.users.Profpatsch.execline.exec-helpers
depot.users.Profpatsch.netencode.netencode-rs
];
} ''
extern crate netencode;
extern crate exec_helpers;
@ -37,4 +38,5 @@ let
'';
};
in depot.nix.readTree.drvTargets netencode
in
depot.nix.readTree.drvTargets netencode

View file

@ -25,4 +25,5 @@ let
mv "$tmp/out" "$to"
'';
in atomically-write
in
atomically-write

View file

@ -2,11 +2,11 @@
let
bins = depot.nix.getBins pkgs.lowdown [ "lowdown" ]
// depot.nix.getBins pkgs.cdb [ "cdbget" "cdbmake" "cdbdump" ]
// depot.nix.getBins pkgs.coreutils [ "mv" "cat" "printf" "test" ]
// depot.nix.getBins pkgs.s6-networking [ "s6-tcpserver" ]
// depot.nix.getBins pkgs.time [ "time" ]
;
// depot.nix.getBins pkgs.cdb [ "cdbget" "cdbmake" "cdbdump" ]
// depot.nix.getBins pkgs.coreutils [ "mv" "cat" "printf" "test" ]
// depot.nix.getBins pkgs.s6-networking [ "s6-tcpserver" ]
// depot.nix.getBins pkgs.time [ "time" ]
;
# /
# TODO: use
@ -14,7 +14,7 @@ let
{
route = [ "notes" ];
name = "Notes";
page = {cssFile}: router cssFile;
page = { cssFile }: router cssFile;
}
{
route = [ "projects" ];
@ -28,7 +28,7 @@ let
{
route = [ "notes" "preventing-oom" ];
name = "Preventing out-of-memory (OOM) errors on Linux";
page = {cssFile}: markdownToHtml {
page = { cssFile }: markdownToHtml {
name = "preventing-oom";
markdown = ./notes/preventing-oom.md;
inherit cssFile;
@ -37,7 +37,7 @@ let
{
route = [ "notes" "rust-string-conversions" ];
name = "Converting between different String types in Rust";
page = {cssFile}: markdownToHtml {
page = { cssFile }: markdownToHtml {
name = "rust-string-conversions";
markdown = ./notes/rust-string-conversions.md;
inherit cssFile;
@ -69,48 +69,52 @@ let
title = "Ligature Emulation in Emacs";
subtitle = "Its not pretty, but the results are";
description = "How to set up ligatures using <code>prettify-symbols-mode</code> and the Hasklig/FiraCode fonts.";
page = {cssFile}: markdownToHtml {
page = { cssFile }: markdownToHtml {
name = "2017-05-04-ligature-emluation-in-emacs";
markdown = ./posts/2017-05-04-ligature-emulation-in-emacs.md;
inherit cssFile;
};
route = [ "posts" "2017-05-04-ligature-emluation-in-emacs" ];
tags = ["emacs"];
tags = [ "emacs" ];
}
];
# convert a markdown file to html via lowdown
markdownToHtml = {
name,
# the file to convert
markdown,
# css file to add to the final result, as { route }
cssFile
}:
depot.nix.runExecline "${name}.html" {} ([
"importas" "out" "out"
markdownToHtml =
{ name
, # the file to convert
markdown
, # css file to add to the final result, as { route }
cssFile
}:
depot.nix.runExecline "${name}.html" { } ([
"importas"
"out"
"out"
(depot.users.Profpatsch.lib.debugExec "")
bins.lowdown
"-s" "-Thtml"
] ++
(lib.optional (cssFile != null) (["-M" "css=${mkRoute cssFile.route}"]))
++ [
"-o" "$out"
markdown
"-s"
"-Thtml"
] ++
(lib.optional (cssFile != null) ([ "-M" "css=${mkRoute cssFile.route}" ]))
++ [
"-o"
"$out"
markdown
]);
# takes a { route … } attrset and converts the route lists to an absolute path
fullRoute = attrs: lib.pipe attrs [
(map (x@{route, ...}: x // { route = mkRoute route; }))
(map (x@{ route, ... }: x // { route = mkRoute route; }))
];
# a cdb from route to a netencoded version of data for each route
router = cssFile: lib.pipe (notes ++ posts) [
(map (r: with depot.users.Profpatsch.lens;
lib.pipe r [
(over (field "route") mkRoute)
(over (field "page") (_ { inherit cssFile; }))
]))
lib.pipe r [
(over (field "route") mkRoute)
(over (field "page") (_ { inherit cssFile; }))
]))
(map (x: {
name = x.route;
value = depot.users.Profpatsch.netencode.gen.dwim x;
@ -121,11 +125,12 @@ let
# Create a link to the given source file/directory, given the relative path in the depot repo.
# Checks that the file exists at evaluation time.
depotCgitLink = {
# relative path from the depot root (without leading /).
relativePath
}:
assert
depotCgitLink =
{
# relative path from the depot root (without leading /).
relativePath
}:
assert
(lib.assertMsg
(builtins.pathExists (depot.path.origSrc + "/${relativePath}"))
"depotCgitLink: path /${relativePath} does not exist in depot, and depot.path was ${toString depot.path}");
@ -133,12 +138,20 @@ let
# look up a route by path ($1)
router-lookup = cssFile: depot.nix.writeExecline "router-lookup" { readNArgs = 1; } [
cdbLookup (router cssFile) "$1"
cdbLookup
(router cssFile)
"$1"
];
runExeclineStdout = name: args: cmd: depot.nix.runExecline name args ([
"importas" "-ui" "out" "out"
"redirfd" "-w" "1" "$out"
"importas"
"-ui"
"out"
"out"
"redirfd"
"-w"
"1"
"$out"
] ++ cmd);
notes-index-html =
@ -170,106 +183,167 @@ let
html = s: s;
projects-index-html =
let o = projects;
in ''
<dl>
${scope o (o: ''
<dt><a href="${str o.link}">${esc o.name}</a></dt>
<dd>${html o.description}</dd>
'')}
</dl>
'';
let o = projects;
in ''
<dl>
${scope o (o: ''
<dt><a href="${str o.link}">${esc o.name}</a></dt>
<dd>${html o.description}</dd>
'')}
</dl>
'';
projects-index = pkgs.writeText "projects-index.html" projects-index-html;
posts-index-html =
let o = fullRoute posts;
in ''
<dl>
${scope o (o: ''
<dt>${str o.date} <a href="${str o.route}">${esc o.title}</a></dt>
<dd>${html o.description}</dd>
'')}
</dl>
'';
let o = fullRoute posts;
in ''
<dl>
${scope o (o: ''
<dt>${str o.date} <a href="${str o.route}">${esc o.title}</a></dt>
<dd>${html o.description}</dd>
'')}
</dl>
'';
posts-index = pkgs.writeText "projects-index.html" posts-index-html;
arglibNetencode = val: depot.nix.writeExecline "arglib-netencode" { } [
"export" "ARGLIB_NETENCODE" (depot.users.Profpatsch.netencode.gen.dwim val)
"export"
"ARGLIB_NETENCODE"
(depot.users.Profpatsch.netencode.gen.dwim val)
"$@"
];
# A simple http server that serves the site. Yes, its horrible.
site-server = { cssFile, port }: depot.nix.writeExecline "blog-server" {} [
site-server = { cssFile, port }: depot.nix.writeExecline "blog-server" { } [
(depot.users.Profpatsch.lib.runInEmptyEnv [ "PATH" ])
bins.s6-tcpserver "127.0.0.1" port
bins.time "--format=time: %es" "--"
runOr return400
"pipeline" [
bins.s6-tcpserver
"127.0.0.1"
port
bins.time
"--format=time: %es"
"--"
runOr
return400
"pipeline"
[
(arglibNetencode {
what = "request";
})
depot.users.Profpatsch.read-http
]
depot.users.Profpatsch.netencode.record-splice-env
runOr return500
"importas" "-i" "path" "path"
"if" [ depot.tools.eprintf "GET \${path}\n" ]
runOr return404
"backtick" "-ni" "TEMPLATE_DATA" [
runOr
return500
"importas"
"-i"
"path"
"path"
"if"
[ depot.tools.eprintf "GET \${path}\n" ]
runOr
return404
"backtick"
"-ni"
"TEMPLATE_DATA"
[
# TODO: factor this out of here, this is routing not serving
"ifelse" [ bins.test "$path" "=" "/notes" ]
[ "export" "content-type" "text/html"
"export" "serve-file" notes-index
depot.users.Profpatsch.netencode.env-splice-record
]
"ifelse" [ bins.test "$path" "=" "/projects" ]
[ "export" "content-type" "text/html"
"export" "serve-file" projects-index
depot.users.Profpatsch.netencode.env-splice-record
]
"ifelse" [ bins.test "$path" "=" "/posts" ]
[ "export" "content-type" "text/html"
"export" "serve-file" posts-index
depot.users.Profpatsch.netencode.env-splice-record
]
"ifelse"
[ bins.test "$path" "=" "/notes" ]
[
"export"
"content-type"
"text/html"
"export"
"serve-file"
notes-index
depot.users.Profpatsch.netencode.env-splice-record
]
"ifelse"
[ bins.test "$path" "=" "/projects" ]
[
"export"
"content-type"
"text/html"
"export"
"serve-file"
projects-index
depot.users.Profpatsch.netencode.env-splice-record
]
"ifelse"
[ bins.test "$path" "=" "/posts" ]
[
"export"
"content-type"
"text/html"
"export"
"serve-file"
posts-index
depot.users.Profpatsch.netencode.env-splice-record
]
# TODO: ignore potential query arguments. See 404 message
"pipeline" [ (router-lookup cssFile) "$path" ]
"pipeline"
[ (router-lookup cssFile) "$path" ]
depot.users.Profpatsch.netencode.record-splice-env
"importas" "-ui" "page" "page"
"export" "content-type" "text/html"
"export" "serve-file" "$page"
"importas"
"-ui"
"page"
"page"
"export"
"content-type"
"text/html"
"export"
"serve-file"
"$page"
depot.users.Profpatsch.netencode.env-splice-record
]
runOr return500
"if" [
"pipeline" [ bins.printf ''
HTTP/1.1 200 OK
Content-Type: {{{content-type}}}; charset=UTF-8
Connection: close
runOr
return500
"if"
[
"pipeline"
[
bins.printf
''
HTTP/1.1 200 OK
Content-Type: {{{content-type}}}; charset=UTF-8
Connection: close
'' ]
''
]
depot.users.Profpatsch.netencode.netencode-mustache
]
"pipeline" [ "importas" "t" "TEMPLATE_DATA" bins.printf "%s" "$t" ]
"pipeline"
[ "importas" "t" "TEMPLATE_DATA" bins.printf "%s" "$t" ]
depot.users.Profpatsch.netencode.record-splice-env
"importas" "-ui" "serve-file" "serve-file"
bins.cat "$serve-file"
"importas"
"-ui"
"serve-file"
"serve-file"
bins.cat
"$serve-file"
];
# run argv or $1 if argv returns a failure status code.
runOr = depot.nix.writeExecline "run-or" { readNArgs = 1; } [
"foreground" [ "$@" ]
"importas" "?" "?"
"ifelse" [ bins.test "$?" "-eq" "0" ]
[]
"if" [ depot.tools.eprintf "runOr: exited \${?}, running \${1}\n" ]
"foreground"
[ "$@" ]
"importas"
"?"
"?"
"ifelse"
[ bins.test "$?" "-eq" "0" ]
[ ]
"if"
[ depot.tools.eprintf "runOr: exited \${?}, running \${1}\n" ]
"$1"
];
return400 = depot.nix.writeExecline "return400" {} [
bins.printf "%s" ''
return400 = depot.nix.writeExecline "return400" { } [
bins.printf
"%s"
''
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=UTF-8
Connection: close
@ -277,8 +351,10 @@ let
''
];
return404 = depot.nix.writeExecline "return404" {} [
bins.printf "%s" ''
return404 = depot.nix.writeExecline "return404" { } [
bins.printf
"%s"
''
HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=UTF-8
Connection: close
@ -287,8 +363,10 @@ let
''
];
return500 = depot.nix.writeExecline "return500" {} [
bins.printf "%s" ''
return500 = depot.nix.writeExecline "return500" { } [
bins.printf
"%s"
''
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain; charset=UTF-8
Connection: close
@ -297,10 +375,11 @@ let
''
];
capture-stdin = depot.nix.writers.rustSimple {
name = "capture-stdin";
dependencies = [ depot.users.Profpatsch.execline.exec-helpers ];
} ''
capture-stdin = depot.nix.writers.rustSimple
{
name = "capture-stdin";
dependencies = [ depot.users.Profpatsch.execline.exec-helpers ];
} ''
extern crate exec_helpers;
use std::io::Read;
fn main() {
@ -337,29 +416,40 @@ let
cdbRecords =
with depot.nix.yants;
defun [ (attrs (either drv string)) string ]
(attrs:
(lib.concatStrings (lib.mapAttrsToList cdbRecord attrs)) + "\n");
(attrs:
(lib.concatStrings (lib.mapAttrsToList cdbRecord attrs)) + "\n");
# run cdbmake on a list of key/value pairs (strings
cdbMake = name: attrs: depot.nix.runExecline "${name}.cdb" {
stdin = cdbRecords attrs;
} [
"importas" "out" "out"
cdbMake = name: attrs: depot.nix.runExecline "${name}.cdb"
{
stdin = cdbRecords attrs;
} [
"importas"
"out"
"out"
depot.users.Profpatsch.lib.eprint-stdin
"if" [ bins.cdbmake "db" "tmp" ]
bins.mv "db" "$out"
"if"
[ bins.cdbmake "db" "tmp" ]
bins.mv
"db"
"$out"
];
# look up a key ($2) in the given cdb ($1)
cdbLookup = depot.nix.writeExecline "cdb-lookup" { readNArgs = 2; } [
# cdb ($1) on stdin
"redirfd" "-r" "0" "$1"
"redirfd"
"-r"
"0"
"$1"
# key ($2) lookup
bins.cdbget "$2"
bins.cdbget
"$2"
];
in depot.nix.readTree.drvTargets {
inherit
in
depot.nix.readTree.drvTargets {
inherit
router
depotCgitLink
site-server

View file

@ -1,14 +1,15 @@
{ depot, pkgs, ... }:
let
cdbListToNetencode = depot.nix.writers.rustSimple {
name = "cdb-list-to-netencode";
dependencies = [
depot.third_party.rust-crates.nom
depot.users.Profpatsch.execline.exec-helpers
depot.users.Profpatsch.netencode.netencode-rs
];
} ''
cdbListToNetencode = depot.nix.writers.rustSimple
{
name = "cdb-list-to-netencode";
dependencies = [
depot.third_party.rust-crates.nom
depot.users.Profpatsch.execline.exec-helpers
depot.users.Profpatsch.netencode.netencode-rs
];
} ''
extern crate nom;
extern crate exec_helpers;
extern crate netencode;
@ -84,7 +85,8 @@ let
'';
in {
in
{
inherit
cdbListToNetencode
;

View file

@ -1,3 +1,3 @@
# nothing yet (TODO: expose shell & tool)
{...}:
{}
{ ... }:
{ }

View file

@ -1,14 +1,15 @@
{ pkgs ? import ../../../third_party {}, ... }:
{ pkgs ? import ../../../third_party { }, ... }:
let
inherit (pkgs) lib;
treeSitterGrammars = pkgs.runCommandLocal "grammars" {} ''
treeSitterGrammars = pkgs.runCommandLocal "grammars" { } ''
mkdir -p $out/bin
${lib.concatStringsSep "\n"
(lib.mapAttrsToList (name: src: "ln -s ${src}/parser $out/bin/${name}.so") pkgs.tree-sitter.builtGrammars)};
'';
in pkgs.mkShell {
in
pkgs.mkShell {
buildInputs = [
pkgs.tree-sitter.builtGrammars.python
];

View file

@ -1,16 +1,19 @@
{ depot, pkgs, lib, ... }:
let
exec-helpers = depot.nix.writers.rustSimpleLib {
name = "exec-helpers";
} (builtins.readFile ./exec_helpers.rs);
exec-helpers = depot.nix.writers.rustSimpleLib
{
name = "exec-helpers";
}
(builtins.readFile ./exec_helpers.rs);
print-one-env = depot.nix.writers.rustSimple {
name = "print-one-env";
dependencies = [
depot.users.Profpatsch.execline.exec-helpers
];
} ''
print-one-env = depot.nix.writers.rustSimple
{
name = "print-one-env";
dependencies = [
depot.users.Profpatsch.execline.exec-helpers
];
} ''
extern crate exec_helpers;
use std::os::unix::ffi::OsStrExt;
use std::io::Write;
@ -25,7 +28,8 @@ let
}
'';
in depot.nix.readTree.drvTargets {
in
depot.nix.readTree.drvTargets {
inherit
exec-helpers
print-one-env

View file

@ -1,8 +1,10 @@
{ depot, pkgs, lib, ... }:
depot.nix.writers.rustSimple {
depot.nix.writers.rustSimple
{
name = "git-db";
dependencies = [
depot.third_party.rust-crates.git2
];
} (builtins.readFile ./git-db.rs)
}
(builtins.readFile ./git-db.rs)

View file

@ -1,14 +1,17 @@
{ depot, pkgs, lib, ... }:
let
imap-idle = depot.nix.writers.rustSimple {
name = "imap-idle";
dependencies = [
depot.users.Profpatsch.arglib.netencode.rust
depot.third_party.rust-crates.imap
depot.third_party.rust-crates.epoll
depot.users.Profpatsch.execline.exec-helpers
];
} (builtins.readFile ./imap-idle.rs);
imap-idle = depot.nix.writers.rustSimple
{
name = "imap-idle";
dependencies = [
depot.users.Profpatsch.arglib.netencode.rust
depot.third_party.rust-crates.imap
depot.third_party.rust-crates.epoll
depot.users.Profpatsch.execline.exec-helpers
];
}
(builtins.readFile ./imap-idle.rs);
in imap-idle
in
imap-idle

View file

@ -32,7 +32,7 @@ let
inherit fst snd;
};
swap = {fst, snd}: {
swap = { fst, snd }: {
fst = snd;
snd = fst;
};
@ -71,7 +71,7 @@ let
lensP = strong: to: pab:
strong.dimap
to
({fst,snd}: snd fst)
({ fst, snd }: snd fst)
(strong.firstP pab);
# first element of a tuple
@ -112,7 +112,8 @@ let
(map (accessor: accessor profunctorSubclass) accessors);
in {
in
{
inherit
id
_

View file

@ -1,34 +1,49 @@
{ depot, pkgs, ... }:
let
bins = depot.nix.getBins pkgs.coreutils [ "printf" "echo" "cat" "printenv" "tee" ]
// depot.nix.getBins pkgs.bash [ "bash" ]
// depot.nix.getBins pkgs.fdtools [ "multitee" ]
;
// depot.nix.getBins pkgs.bash [ "bash" ]
// depot.nix.getBins pkgs.fdtools [ "multitee" ]
;
# Print `msg` and and argv to stderr, then execute into argv
debugExec = msg: depot.nix.writeExecline "debug-exec" {} [
"if" [
"fdmove" "-c" "1" "2"
"if" [ bins.printf "%s: " msg ]
"if" [ bins.echo "$@" ]
debugExec = msg: depot.nix.writeExecline "debug-exec" { } [
"if"
[
"fdmove"
"-c"
"1"
"2"
"if"
[ bins.printf "%s: " msg ]
"if"
[ bins.echo "$@" ]
]
"$@"
];
# Print stdin to stderr and stdout
eprint-stdin = depot.nix.writeExecline "eprint-stdin" {} [
"pipeline" [ bins.multitee "0-1,2" ] "$@"
eprint-stdin = depot.nix.writeExecline "eprint-stdin" { } [
"pipeline"
[ bins.multitee "0-1,2" ]
"$@"
];
# Assume the input on stdin is netencode, pretty print it to stderr and forward it to stdout
eprint-stdin-netencode = depot.nix.writeExecline "eprint-stdin-netencode" {} [
"pipeline" [
eprint-stdin-netencode = depot.nix.writeExecline "eprint-stdin-netencode" { } [
"pipeline"
[
# move stdout to 3
"fdmove" "3" "1"
"fdmove"
"3"
"1"
# the multitee copies stdin to 1 (the other pipeline end) and 3 (the stdout of the outer pipeline block)
"pipeline" [ bins.multitee "0-1,3" ]
"pipeline"
[ bins.multitee "0-1,3" ]
# make stderr the stdout of pretty, merging with the stderr of pretty
"fdmove" "-c" "1" "2"
"fdmove"
"-c"
"1"
"2"
depot.users.Profpatsch.netencode.pretty
]
"$@"
@ -36,9 +51,11 @@ let
# print the given environment variable in $1 to stderr, then execute into the rest of argv
eprintenv = depot.nix.writeExecline "eprintenv" { readNArgs = 1; } [
"ifelse" [ "fdmove" "-c" "1" "2" bins.printenv "$1" ]
"ifelse"
[ "fdmove" "-c" "1" "2" bins.printenv "$1" ]
[ "$@" ]
"if" [ depot.tools.eprintf "eprintenv: could not find \"\${1}\" in the environment\n" ]
"if"
[ depot.tools.eprintf "eprintenv: could not find \"\${1}\" in the environment\n" ]
"$@"
];
@ -52,24 +69,34 @@ let
# stdout: foo\n
# stderr: foo\nbar\n
split-stdin = depot.nix.writeExecline "split-stdin" { argMode = "env"; } [
"pipeline" [
"pipeline"
[
# this is horrible yes but the quickest way I knew how to implement it
"runblock" "1" bins.bash "-c" ''${bins.tee} >("$@")'' "bash-split-stdin"
"runblock"
"1"
bins.bash
"-c"
''${bins.tee} >("$@")''
"bash-split-stdin"
]
"runblock" "-r" "1"
"runblock"
"-r"
"1"
];
# remove everything but a few selected environment variables
runInEmptyEnv = keepVars:
let
importas = pkgs.lib.concatMap (var: [ "importas" "-i" var var ]) keepVars;
# we have to explicitely call export here, because PATH is probably empty
export = pkgs.lib.concatMap (var: [ "${pkgs.execline}/bin/export" var ''''${${var}}'' ]) keepVars;
in depot.nix.writeExecline "empty-env" {}
(importas ++ [ "emptyenv" ] ++ export ++ [ "${pkgs.execline}/bin/exec" "$@" ]);
importas = pkgs.lib.concatMap (var: [ "importas" "-i" var var ]) keepVars;
# we have to explicitely call export here, because PATH is probably empty
export = pkgs.lib.concatMap (var: [ "${pkgs.execline}/bin/export" var ''''${${var}}'' ]) keepVars;
in
depot.nix.writeExecline "empty-env" { }
(importas ++ [ "emptyenv" ] ++ export ++ [ "${pkgs.execline}/bin/exec" "$@" ]);
in {
in
{
inherit
debugExec
eprint-stdin

View file

@ -1,31 +1,36 @@
{ depot, pkgs, lib, ... }:
let
netencode-rs = depot.nix.writers.rustSimpleLib {
netencode-rs = depot.nix.writers.rustSimpleLib
{
name = "netencode";
dependencies = [
depot.third_party.rust-crates.nom
depot.users.Profpatsch.execline.exec-helpers
];
} (builtins.readFile ./netencode.rs);
}
(builtins.readFile ./netencode.rs);
gen = import ./gen.nix { inherit lib; };
pretty-rs = depot.nix.writers.rustSimpleLib {
name = "netencode-pretty";
dependencies = [
netencode-rs
];
} (builtins.readFile ./pretty.rs);
pretty-rs = depot.nix.writers.rustSimpleLib
{
name = "netencode-pretty";
dependencies = [
netencode-rs
];
}
(builtins.readFile ./pretty.rs);
pretty = depot.nix.writers.rustSimple {
name = "netencode-pretty";
dependencies = [
netencode-rs
pretty-rs
depot.users.Profpatsch.execline.exec-helpers
];
} ''
pretty = depot.nix.writers.rustSimple
{
name = "netencode-pretty";
dependencies = [
netencode-rs
pretty-rs
depot.users.Profpatsch.execline.exec-helpers
];
} ''
extern crate netencode;
extern crate netencode_pretty;
extern crate exec_helpers;
@ -41,24 +46,27 @@ let
}
'';
netencode-mustache = depot.nix.writers.rustSimple {
name = "netencode_mustache";
dependencies = [
depot.users.Profpatsch.arglib.netencode.rust
netencode-rs
depot.third_party.rust-crates.mustache
];
} (builtins.readFile ./netencode-mustache.rs);
netencode-mustache = depot.nix.writers.rustSimple
{
name = "netencode_mustache";
dependencies = [
depot.users.Profpatsch.arglib.netencode.rust
netencode-rs
depot.third_party.rust-crates.mustache
];
}
(builtins.readFile ./netencode-mustache.rs);
record-get = depot.nix.writers.rustSimple {
name = "record-get";
dependencies = [
netencode-rs
depot.users.Profpatsch.execline.exec-helpers
depot.users.Profpatsch.arglib.netencode.rust
];
} ''
record-get = depot.nix.writers.rustSimple
{
name = "record-get";
dependencies = [
netencode-rs
depot.users.Profpatsch.execline.exec-helpers
depot.users.Profpatsch.arglib.netencode.rust
];
} ''
extern crate netencode;
extern crate arglib_netencode;
extern crate exec_helpers;
@ -80,13 +88,14 @@ let
}
'';
record-splice-env = depot.nix.writers.rustSimple {
name = "record-splice-env";
dependencies = [
netencode-rs
depot.users.Profpatsch.execline.exec-helpers
];
} ''
record-splice-env = depot.nix.writers.rustSimple
{
name = "record-splice-env";
dependencies = [
netencode-rs
depot.users.Profpatsch.execline.exec-helpers
];
} ''
extern crate netencode;
extern crate exec_helpers;
use netencode::dec::{Record, Try, ScalarAsBytes, Decoder, DecodeError};
@ -109,13 +118,14 @@ let
}
'';
env-splice-record = depot.nix.writers.rustSimple {
name = "env-splice-record";
dependencies = [
netencode-rs
depot.users.Profpatsch.execline.exec-helpers
];
} ''
env-splice-record = depot.nix.writers.rustSimple
{
name = "env-splice-record";
dependencies = [
netencode-rs
depot.users.Profpatsch.execline.exec-helpers
];
} ''
extern crate netencode;
extern crate exec_helpers;
use netencode::{T};
@ -135,7 +145,8 @@ let
}
'';
in depot.nix.readTree.drvTargets {
in
depot.nix.readTree.drvTargets {
inherit
netencode-rs
pretty-rs

View file

@ -27,29 +27,33 @@ let
concatStrings = builtins.concatStringsSep "";
record = lokv: netstring "{" "}"
(concatStrings (map ({key, val}: tag key val) lokv));
(concatStrings (map ({ key, val }: tag key val) lokv));
list = l: netstring "[" "]" (concatStrings l);
dwim = val:
let match = {
"bool" = n1;
"int" = i6;
"string" = text;
"set" = attrs:
# it could be a derivation, then just return the path
if attrs.type or "" == "derivation" then text "${attrs}"
else
record (lib.mapAttrsToList
(k: v: {
key = k;
val = dwim v;
}) attrs);
"list" = l: list (map dwim l);
};
in match.${builtins.typeOf val} val;
let
match = {
"bool" = n1;
"int" = i6;
"string" = text;
"set" = attrs:
# it could be a derivation, then just return the path
if attrs.type or "" == "derivation" then text "${attrs}"
else
record (lib.mapAttrsToList
(k: v: {
key = k;
val = dwim v;
})
attrs);
"list" = l: list (map dwim l);
};
in
match.${builtins.typeOf val} val;
in {
in
{
inherit
unit
n1

View file

@ -12,9 +12,10 @@ let
(k: v: toNetstring (toNetstring k + toNetstring v))
attrs);
python-netstring = depot.users.Profpatsch.writers.python3Lib {
name = "netstring";
} ''
python-netstring = depot.users.Profpatsch.writers.python3Lib
{
name = "netstring";
} ''
def read_netstring(bytes):
(int_length, rest) = bytes.split(sep=b':', maxsplit=1)
val = rest[:int(int_length)]
@ -39,9 +40,10 @@ let
return res
'';
rust-netstring = depot.nix.writers.rustSimpleLib {
name = "netstring";
} ''
rust-netstring = depot.nix.writers.rustSimpleLib
{
name = "netstring";
} ''
pub fn to_netstring(s: &[u8]) -> Vec<u8> {
let len = s.len();
// length of the integer as ascii
@ -55,12 +57,13 @@ let
}
'';
in depot.nix.readTree.drvTargets {
in
depot.nix.readTree.drvTargets {
inherit
toNetstring
toNetstringList
toNetstringKeyVal
python-netstring
rust-netstring
;
;
}

View file

@ -2,12 +2,13 @@
let
python-netstring-test = depot.users.Profpatsch.writers.python3 {
name = "python-netstring-test";
libraries = p: [
depot.users.Profpatsch.netstring.python-netstring
];
} ''
python-netstring-test = depot.users.Profpatsch.writers.python3
{
name = "python-netstring-test";
libraries = p: [
depot.users.Profpatsch.netstring.python-netstring
];
} ''
import netstring
def assEq(left, right):
@ -33,12 +34,13 @@ let
)
'';
rust-netstring-test = depot.nix.writers.rustSimple {
name = "rust-netstring-test";
dependencies = [
depot.users.Profpatsch.netstring.rust-netstring
];
} ''
rust-netstring-test = depot.nix.writers.rustSimple
{
name = "rust-netstring-test";
dependencies = [
depot.users.Profpatsch.netstring.rust-netstring
];
} ''
extern crate netstring;
fn main() {
@ -53,7 +55,8 @@ let
}
'';
in depot.nix.readTree.drvTargets {
in
depot.nix.readTree.drvTargets {
inherit
python-netstring-test
rust-netstring-test

View file

@ -2,97 +2,145 @@
let
bins = depot.nix.getBins pkgs.stow [ "stow" ]
// depot.nix.getBins pkgs.coreutils [ "mkdir" "ln" "printenv" "rm" ]
// depot.nix.getBins pkgs.xe [ "xe" ]
// depot.nix.getBins pkgs.lr [ "lr" ]
// depot.nix.getBins pkgs.nix [ "nix-store" ]
;
// depot.nix.getBins pkgs.coreutils [ "mkdir" "ln" "printenv" "rm" ]
// depot.nix.getBins pkgs.xe [ "xe" ]
// depot.nix.getBins pkgs.lr [ "lr" ]
// depot.nix.getBins pkgs.nix [ "nix-store" ]
;
# run stow to populate the target directory with the given stow package, read from stowDir.
# Bear in mind that `stowDirOriginPath` should always be semantically bound to the given `stowDir`, otherwise stow might become rather confused.
runStow = {
# “stow package” to stow (see manpage)
stowPackage,
# “target directory” to stow in (see manpage)
targetDir,
# The “stow directory” (see manpage), containing “stow packages” (see manpage)
stowDir,
# representative directory for the stowDir in the file system, against which stow will create relative links.
# ATTN: this is always overwritten with the contents of `stowDir`! You shouldnt re-use the same `stowDirOriginPath` for different `stowDir`s, otherwise there might be surprises.
stowDirOriginPath,
}: depot.nix.writeExecline "stow-${stowPackage}" {} [
# first, create a temporary stow directory to use as source
# (stow will use it to determine the origin of files)
"if" [ bins.mkdir "-p" stowDirOriginPath ]
# remove old symlinks
"if" [
"pipeline" [
bins.lr "-0" "-t" "depth == 1 && type == l" stowDirOriginPath
runStow =
{
# “stow package” to stow (see manpage)
stowPackage
, # “target directory” to stow in (see manpage)
targetDir
, # The “stow directory” (see manpage), containing “stow packages” (see manpage)
stowDir
, # representative directory for the stowDir in the file system, against which stow will create relative links.
# ATTN: this is always overwritten with the contents of `stowDir`! You shouldnt re-use the same `stowDirOriginPath` for different `stowDir`s, otherwise there might be surprises.
stowDirOriginPath
,
}: depot.nix.writeExecline "stow-${stowPackage}" { } [
# first, create a temporary stow directory to use as source
# (stow will use it to determine the origin of files)
"if"
[ bins.mkdir "-p" stowDirOriginPath ]
# remove old symlinks
"if"
[
"pipeline"
[
bins.lr
"-0"
"-t"
"depth == 1 && type == l"
stowDirOriginPath
]
bins.xe
"-0"
bins.rm
]
bins.xe "-0" bins.rm
]
# create an indirect gc root so our config is not cleaned under our asses by a garbage collect
"if" [
bins.nix-store
# create an indirect gc root so our config is not cleaned under our asses by a garbage collect
"if"
[
bins.nix-store
"--realise"
"--indirect"
"--add-root" "${stowDirOriginPath}/.nix-stowdir-gc-root"
"--add-root"
"${stowDirOriginPath}/.nix-stowdir-gc-root"
stowDir
]
# populate with new stow targets
"if" [
"elglob" "-w0" "stowPackages" "${stowDir}/*"
bins.ln "--force" "-st" stowDirOriginPath "$stowPackages"
]
# stow always looks for $HOME/.stowrc to read more arguments
"export" "HOME" "/homeless-shelter"
bins.stow
]
# populate with new stow targets
"if"
[
"elglob"
"-w0"
"stowPackages"
"${stowDir}/*"
bins.ln
"--force"
"-st"
stowDirOriginPath
"$stowPackages"
]
# stow always looks for $HOME/.stowrc to read more arguments
"export"
"HOME"
"/homeless-shelter"
bins.stow
# always run restow for now; this does more stat but will remove stale links
"--restow"
"--dir" stowDirOriginPath
"--target" targetDir
"--dir"
stowDirOriginPath
"--target"
targetDir
stowPackage
];
];
# create a stow dir from a list of drv paths and a stow package name.
makeStowDir =
(with depot.nix.yants;
defun
[ (list (struct {
defun
[
(list (struct {
originalDir = drv;
stowPackage = string;
}))
drv
] )
(dirs:
depot.nix.runExecline "make-stow-dir" {
stdin = lib.pipe dirs [
(map depot.users.Profpatsch.netencode.gen.dwim)
depot.users.Profpatsch.netstring.toNetstringList
];
} [
"importas" "out" "out"
"if" [ bins.mkdir "-p" "$out" ]
"forstdin" "-d" "" "-o" "0" "line"
"pipeline" [
depot.users.Profpatsch.execline.print-one-env "line"
]
depot.users.Profpatsch.netencode.record-splice-env
"importas" "-ui" "originalDir" "originalDir"
"importas" "-ui" "stowPackage" "stowPackage"
bins.ln "-sT" "$originalDir" "\${out}/\${stowPackage}"
]);
])
(dirs:
depot.nix.runExecline "make-stow-dir"
{
stdin = lib.pipe dirs [
(map depot.users.Profpatsch.netencode.gen.dwim)
depot.users.Profpatsch.netstring.toNetstringList
];
} [
"importas"
"out"
"out"
"if"
[ bins.mkdir "-p" "$out" ]
"forstdin"
"-d"
""
"-o"
"0"
"line"
"pipeline"
[
depot.users.Profpatsch.execline.print-one-env
"line"
]
depot.users.Profpatsch.netencode.record-splice-env
"importas"
"-ui"
"originalDir"
"originalDir"
"importas"
"-ui"
"stowPackage"
"stowPackage"
bins.ln
"-sT"
"$originalDir"
"\${out}/\${stowPackage}"
]);
in
# TODO: temp setup
lib.pipe {} [
lib.pipe { } [
(_: makeStowDir [{
stowPackage = "scripts";
originalDir = pkgs.linkFarm "scripts-farm" [
{ name = "scripts/ytextr";
path = depot.users.Profpatsch.ytextr; }
];
{
name = "scripts/ytextr";
path = depot.users.Profpatsch.ytextr;
}
];
}])
(d: runStow {
stowDir = d;

View file

@ -8,12 +8,12 @@ let
;
bins = depot.nix.getBins pkgs.coreutils [ "head" "shuf" ]
// depot.nix.getBins pkgs.jq [ "jq" ]
// depot.nix.getBins pkgs.findutils [ "xargs" ]
// depot.nix.getBins pkgs.gnused [ "sed" ]
;
// depot.nix.getBins pkgs.jq [ "jq" ]
// depot.nix.getBins pkgs.findutils [ "xargs" ]
// depot.nix.getBins pkgs.gnused [ "sed" ]
;
export-json-object = pkgs.writers.writePython3 "export-json-object" {} ''
export-json-object = pkgs.writers.writePython3 "export-json-object" { } ''
import json
import sys
import os
@ -29,34 +29,50 @@ let
os.execvp(sys.argv[1], sys.argv[1:])
'';
meta-stdenv-lib = pkgs.writers.writeHaskell "meta-stdenv-lib" {
libraries = [
pkgs.haskellPackages.hnix
pkgs.haskellPackages.aeson
];
} ./MetaStdenvLib.hs;
meta-stdenv-lib = pkgs.writers.writeHaskell "meta-stdenv-lib"
{
libraries = [
pkgs.haskellPackages.hnix
pkgs.haskellPackages.aeson
];
} ./MetaStdenvLib.hs;
replace-between-lines = writeExecline "replace-between-lines" { readNArgs = 1; } [
"importas" "-ui" "file" "fileName"
"importas" "-ui" "from" "fromLine"
"importas" "-ui" "to" "toLine"
"if" [ depot.tools.eprintf "%s-%s\n" "$from" "$to" ]
"importas"
"-ui"
"file"
"fileName"
"importas"
"-ui"
"from"
"fromLine"
"importas"
"-ui"
"to"
"toLine"
"if"
[ depot.tools.eprintf "%s-%s\n" "$from" "$to" ]
(debugExec "adding lib")
bins.sed
"-e" "\${from},\${to} \${1}"
"-i" "$file"
"-e"
"\${from},\${to} \${1}"
"-i"
"$file"
];
add-lib-if-necessary = writeExecline "add-lib-if-necessary" { readNArgs = 1; } [
"pipeline" [ meta-stdenv-lib "$1" ]
export-json-object
# first replace any stdenv.lib mentions in the arg header
# if this is not done, the replace below kills these.
# Since we want it anyway ultimately, lets do it here.
"if" [ replace-between-lines "s/stdenv\.lib/lib/" ]
# then add the lib argument
# (has to be before stdenv, otherwise default arguments might be in the way)
replace-between-lines "s/stdenv/lib, stdenv/"
"pipeline"
[ meta-stdenv-lib "$1" ]
export-json-object
# first replace any stdenv.lib mentions in the arg header
# if this is not done, the replace below kills these.
# Since we want it anyway ultimately, lets do it here.
"if"
[ replace-between-lines "s/stdenv\.lib/lib/" ]
# then add the lib argument
# (has to be before stdenv, otherwise default arguments might be in the way)
replace-between-lines
"s/stdenv/lib, stdenv/"
];
metaString = ''meta = with stdenv.lib; {'';
@ -80,33 +96,53 @@ let
'';
instantiate-nixpkgs-randomly = writeExecline "instantiate-nixpkgs-randomly" { readNArgs = 1; } [
"export" "NIXPKGS_ALLOW_BROKEN" "1"
"export" "NIXPKGS_ALLOW_UNFREE" "1"
"export" "NIXPKGS_ALLOW_INSECURE" "1"
"export" "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" "1"
"pipeline" [
"export"
"NIXPKGS_ALLOW_BROKEN"
"1"
"export"
"NIXPKGS_ALLOW_UNFREE"
"1"
"export"
"NIXPKGS_ALLOW_INSECURE"
"1"
"export"
"NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM"
"1"
"pipeline"
[
"nix"
"eval"
"--raw"
''(
"eval"
"--raw"
''(
let pkgs = import ''${1} {};
in builtins.toJSON (builtins.attrNames pkgs)
)''
]
"pipeline" [ bins.jq "-r" ".[]" ]
"pipeline" [ bins.shuf ]
"pipeline" [ bins.head "-n" "1000" ]
bins.xargs "-I" "{}" "-n1"
"if" [ depot.tools.eprintf "instantiating %s\n" "{}" ]
"nix-instantiate" "$1" "-A" "{}"
"pipeline"
[ bins.jq "-r" ".[]" ]
"pipeline"
[ bins.shuf ]
"pipeline"
[ bins.head "-n" "1000" ]
bins.xargs
"-I"
"{}"
"-n1"
"if"
[ depot.tools.eprintf "instantiating %s\n" "{}" ]
"nix-instantiate"
"$1"
"-A"
"{}"
];
in depot.nix.readTree.drvTargets {
in
depot.nix.readTree.drvTargets {
inherit
instantiate-nixpkgs-randomly
# requires hnix, which we dont want in tvl for now
# uncomment manually if you want to use it.
# meta-stdenv-lib
# replace-stdenv-lib
instantiate-nixpkgs-randomly
# requires hnix, which we dont want in tvl for now
# uncomment manually if you want to use it.
# meta-stdenv-lib
# replace-stdenv-lib
;
}

View file

@ -2,15 +2,18 @@
let
read-http = depot.nix.writers.rustSimple {
name = "read-http";
dependencies = [
depot.third_party.rust-crates.ascii
depot.third_party.rust-crates.httparse
depot.users.Profpatsch.netencode.netencode-rs
depot.users.Profpatsch.arglib.netencode.rust
depot.users.Profpatsch.execline.exec-helpers
];
} (builtins.readFile ./read-http.rs);
read-http = depot.nix.writers.rustSimple
{
name = "read-http";
dependencies = [
depot.third_party.rust-crates.ascii
depot.third_party.rust-crates.httparse
depot.users.Profpatsch.netencode.netencode-rs
depot.users.Profpatsch.arglib.netencode.rust
depot.users.Profpatsch.execline.exec-helpers
];
}
(builtins.readFile ./read-http.rs);
in read-http
in
read-http

View file

@ -5,22 +5,27 @@
let
rev = depot.nix.writeExecline "reverse-haskell-deps" {} [
"pipeline" [
"${pkgs.curl}/bin/curl" "-L" "https://packdeps.haskellers.com/reverse"
rev = depot.nix.writeExecline "reverse-haskell-deps" { } [
"pipeline"
[
"${pkgs.curl}/bin/curl"
"-L"
"https://packdeps.haskellers.com/reverse"
]
rev-hs
];
rev-hs = pkgs.writers.writeHaskell "revers-haskell-deps-hs" {
libraries = [
pkgs.haskellPackages.nicify-lib
pkgs.haskellPackages.tagsoup
];
rev-hs = pkgs.writers.writeHaskell "revers-haskell-deps-hs"
{
libraries = [
pkgs.haskellPackages.nicify-lib
pkgs.haskellPackages.tagsoup
];
}
}
./reverse-haskell-deps.hs;
in rev
in
rev

View file

@ -1,13 +1,13 @@
{ depot, ... }:
depot.nix.buildGo.program {
name = "struct-edit";
srcs = [
./main.go
];
deps = [
depot.third_party.gopkgs."github.com".charmbracelet.bubbletea
depot.third_party.gopkgs."github.com".charmbracelet.lipgloss
depot.third_party.gopkgs."github.com".muesli.termenv
depot.third_party.gopkgs."github.com".mattn.go-isatty
];
name = "struct-edit";
srcs = [
./main.go
];
deps = [
depot.third_party.gopkgs."github.com".charmbracelet.bubbletea
depot.third_party.gopkgs."github.com".charmbracelet.lipgloss
depot.third_party.gopkgs."github.com".muesli.termenv
depot.third_party.gopkgs."github.com".mattn.go-isatty
];
}

View file

@ -2,17 +2,18 @@
let
bins = depot.nix.getBins pkgs.coreutils [ "head" "printf" "cat" ]
// depot.nix.getBins pkgs.ncurses [ "tput" ]
// depot.nix.getBins pkgs.bc [ "bc" ]
// depot.nix.getBins pkgs.ocamlPackages.sexp [ "sexp" ];
// depot.nix.getBins pkgs.ncurses [ "tput" ]
// depot.nix.getBins pkgs.bc [ "bc" ]
// depot.nix.getBins pkgs.ocamlPackages.sexp [ "sexp" ];
print-ast = depot.nix.writers.rustSimple {
name = "print-ast";
dependencies = with depot.third_party.rust-crates; [
libloading
tree-sitter
];
} ''
print-ast = depot.nix.writers.rustSimple
{
name = "print-ast";
dependencies = with depot.third_party.rust-crates; [
libloading
tree-sitter
];
} ''
extern crate libloading;
extern crate tree_sitter;
use std::mem;
@ -58,13 +59,14 @@ let
};
};
watch-file-modified = depot.nix.writers.rustSimple {
name = "watch-file-modified";
dependencies = [
depot.third_party.rust-crates.inotify
depot.users.Profpatsch.netstring.rust-netstring
];
} ''
watch-file-modified = depot.nix.writers.rustSimple
{
name = "watch-file-modified";
dependencies = [
depot.third_party.rust-crates.inotify
depot.users.Profpatsch.netstring.rust-netstring
];
} ''
extern crate inotify;
extern crate netstring;
use inotify::{EventMask, WatchMask, Inotify};
@ -101,75 +103,103 @@ let
'';
# clear screen and set LINES and COLUMNS to terminal height & width
clear-screen = depot.nix.writeExecline "clear-screen" {} [
"if" [ bins.tput "clear" ]
"backtick" "-in" "LINES" [ bins.tput "lines" ]
"backtick" "-in" "COLUMNS" [ bins.tput "cols" ]
clear-screen = depot.nix.writeExecline "clear-screen" { } [
"if"
[ bins.tput "clear" ]
"backtick"
"-in"
"LINES"
[ bins.tput "lines" ]
"backtick"
"-in"
"COLUMNS"
[ bins.tput "cols" ]
"$@"
];
print-nix-file = depot.nix.writeExecline "print-nix-file" { readNArgs = 1; } [
"pipeline" [ print-ast "${tree-sitter-nix}/parser" "tree_sitter_nix" "$1" ]
"pipeline" [ bins.sexp "print" ]
"pipeline"
[ print-ast "${tree-sitter-nix}/parser" "tree_sitter_nix" "$1" ]
"pipeline"
[ bins.sexp "print" ]
clear-screen
"importas" "-ui" "lines" "LINES"
"backtick" "-in" "ls" [
"importas"
"-ui"
"lines"
"LINES"
"backtick"
"-in"
"ls"
[
"pipeline"
# when you pull out bc to decrement an integer its time to switch to python lol
[ bins.printf "x=%s; --x\n" "$lines" ]
bins.bc
# when you pull out bc to decrement an integer its time to switch to python lol
[ bins.printf "x=%s; --x\n" "$lines" ]
bins.bc
]
"importas" "-ui" "l" "ls"
bins.head "-n\${l}"
"importas"
"-ui"
"l"
"ls"
bins.head
"-n\${l}"
];
print-nix-file-on-update = depot.nix.writeExecline "print-nix-file-on-update" { readNArgs = 1; } [
"if" [ print-nix-file "$1" ]
"pipeline" [ watch-file-modified "$1" ]
"forstdin" "-d" "" "file"
"importas" "file" "file"
print-nix-file "$file"
"if"
[ print-nix-file "$1" ]
"pipeline"
[ watch-file-modified "$1" ]
"forstdin"
"-d"
""
"file"
"importas"
"file"
"file"
print-nix-file
"$file"
];
# copied from nixpkgs
buildTreeSitterGrammar =
{
# language name
language
# source for the language grammar
, source
}:
{
# language name
language
# source for the language grammar
, source
}:
pkgs.stdenv.mkDerivation {
pkgs.stdenv.mkDerivation {
pname = "${language}-grammar";
inherit (pkgs.tree-sitter) version;
pname = "${language}-grammar";
inherit (pkgs.tree-sitter) version;
src = source;
src = source;
buildInputs = [ pkgs.tree-sitter ];
buildInputs = [ pkgs.tree-sitter ];
dontUnpack = true;
configurePhase= ":";
buildPhase = ''
runHook preBuild
scanner_cc="$src/src/scanner.cc"
if [ ! -f "$scanner_cc" ]; then
scanner_cc=""
fi
$CXX -I$src/src/ -c $scanner_cc
$CC -I$src/src/ -shared -o parser -Os scanner.o $src/src/parser.c -lstdc++
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir $out
mv parser $out/
runHook postInstall
'';
};
dontUnpack = true;
configurePhase = ":";
buildPhase = ''
runHook preBuild
scanner_cc="$src/src/scanner.cc"
if [ ! -f "$scanner_cc" ]; then
scanner_cc=""
fi
$CXX -I$src/src/ -c $scanner_cc
$CC -I$src/src/ -shared -o parser -Os scanner.o $src/src/parser.c -lstdc++
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir $out
mv parser $out/
runHook postInstall
'';
};
in depot.nix.readTree.drvTargets {
in
depot.nix.readTree.drvTargets {
inherit
print-ast
tree-sitter-nix

View file

@ -1,7 +1,7 @@
{ depot, pkgs, lib, ... }:
let
bins = depot.nix.getBins pkgs.s6-portable-utils ["s6-mkdir" "s6-cat" "s6-ln" "s6-ls" "s6-touch" ]
// depot.nix.getBins pkgs.coreutils ["printf" ];
bins = depot.nix.getBins pkgs.s6-portable-utils [ "s6-mkdir" "s6-cat" "s6-ln" "s6-ls" "s6-touch" ]
// depot.nix.getBins pkgs.coreutils [ "printf" ];
inherit (depot.nix.yants) defun struct restrict attrs list string drv any;
@ -11,56 +11,76 @@ let
restrict
"flake error"
(s: lib.any (prefix: (builtins.substring 0 1 s) == prefix)
[ "E" "W" ])
[ "E" "W" ])
string;
Libraries = defun [ (attrs any) (list drv) ];
python3 = {
name,
libraries ? (_: []),
flakeIgnore ? []
}: pkgs.writers.writePython3 name {
libraries = Libraries libraries pkgs.python3Packages;
flakeIgnore =
let ignoreTheseErrors = [
# whitespace after {
"E201"
# whitespace before }
"E202"
# fuck 4-space indentation
"E121" "E111"
# who cares about blank lines …
# … at end of files
"W391"
# … between functions
"E302" "E305"
];
in list FlakeError (ignoreTheseErrors ++ flakeIgnore);
};
python3 =
{ name
, libraries ? (_: [ ])
, flakeIgnore ? [ ]
}: pkgs.writers.writePython3 name {
libraries = Libraries libraries pkgs.python3Packages;
flakeIgnore =
let
ignoreTheseErrors = [
# whitespace after {
"E201"
# whitespace before }
"E202"
# fuck 4-space indentation
"E121"
"E111"
# who cares about blank lines …
# … at end of files
"W391"
# … between functions
"E302"
"E305"
];
in
list FlakeError (ignoreTheseErrors ++ flakeIgnore);
};
# TODO: add the same flake check as the pyhon3 writer
python3Lib = { name, libraries ? (_: []) }: moduleString:
let srcTree = depot.nix.runExecline.local name { stdin = moduleString; } [
"importas" "out" "out"
"if" [ bins.s6-mkdir "-p" "\${out}/${name}" ]
"if" [
"redirfd" "-w" "1" "\${out}/setup.py"
bins.printf ''
from distutils.core import setup
python3Lib = { name, libraries ? (_: [ ]) }: moduleString:
let
srcTree = depot.nix.runExecline.local name { stdin = moduleString; } [
"importas"
"out"
"out"
"if"
[ bins.s6-mkdir "-p" "\${out}/${name}" ]
"if"
[
"redirfd"
"-w"
"1"
"\${out}/setup.py"
bins.printf
''
from distutils.core import setup
setup(
name='%s',
packages=['%s']
)
'' name name
]
"if" [
# redirect stdin to the init py
"redirfd" "-w" "1" "\${out}/${name}/__init__.py"
bins.s6-cat
]
];
in pkgs.python3Packages.buildPythonPackage {
setup(
name='%s',
packages=['%s']
)
''
name
name
]
"if"
[
# redirect stdin to the init py
"redirfd"
"-w"
"1"
"\${out}/${name}/__init__.py"
bins.s6-cat
]
];
in
pkgs.python3Packages.buildPythonPackage {
inherit name;
src = srcTree;
propagatedBuildInputs = libraries pkgs.python3Packages;
@ -68,7 +88,8 @@ let
};
in {
in
{
inherit
python3
python3Lib

View file

@ -10,38 +10,46 @@ let
coreutils
;
run = drv: depot.nix.runExecline.local "run-${drv.name}" {} [
"if" [ drv ]
"importas" "out" "out"
"${coreutils}/bin/touch" "$out"
run = drv: depot.nix.runExecline.local "run-${drv.name}" { } [
"if"
[ drv ]
"importas"
"out"
"out"
"${coreutils}/bin/touch"
"$out"
];
pythonTransitiveLib = python3Lib {
name = "transitive";
} ''
pythonTransitiveLib = python3Lib
{
name = "transitive";
} ''
def transitive(s):
return s + " 1 2 3"
'';
pythonTestLib = python3Lib {
name = "test_lib";
libraries = _: [ pythonTransitiveLib ];
} ''
pythonTestLib = python3Lib
{
name = "test_lib";
libraries = _: [ pythonTransitiveLib ];
} ''
import transitive
def test():
return transitive.transitive("test")
'';
pythonWithLib = run (python3 {
name = "python-with-lib";
libraries = _: [ pythonTestLib ];
} ''
pythonWithLib = run (python3
{
name = "python-with-lib";
libraries = _: [ pythonTestLib ];
} ''
import test_lib
assert(test_lib.test() == "test 1 2 3")
'');
in depot.nix.readTree.drvTargets {
in
depot.nix.readTree.drvTargets {
inherit
pythonWithLib
;

View file

@ -1,9 +1,10 @@
{
# list of package attribute names to get at run time
packageNamesAtRuntimeJsonPath,
packageNamesAtRuntimeJsonPath
,
}:
let
pkgs = import <nixpkgs> {};
pkgs = import <nixpkgs> { };
getPkg = pkgName: pkgs.${pkgName};
@ -12,7 +13,7 @@ let
runtime = map getPkg packageNamesAtRuntime;
in
pkgs.symlinkJoin {
name = "symlink-farm";
paths = runtime;
}
pkgs.symlinkJoin {
name = "symlink-farm";
paths = runtime;
}

View file

@ -12,48 +12,71 @@
let
bins = depot.nix.getBins pkgs.nix [ "nix-build" ]
// depot.nix.getBins pkgs.bubblewrap [ "bwrap" ];
// depot.nix.getBins pkgs.bubblewrap [ "bwrap" ];
# Run a command, with the given packages in scope, and `packageNamesAtRuntime` being fetched at the start in the given nix `channel`.
nix-run-with-channel = {
# The channel to get `packageNamesAtRuntime` from
channel,
# executable to run with `packageNamesAtRuntime` in PATH
# and the argv
executable,
# A list of nixpkgs package attribute names that should be put into PATH when running `command`.
packageNamesAtRuntime,
}: depot.nix.writeExecline "nix-run-with-channel-${channel}" {} [
# TODO: prevent race condition by writing a temporary gc root
"backtick" "-iE" "storepath" [
bins.nix-build
"-I" "nixpkgs=channel:${channel}"
nix-run-with-channel =
{
# The channel to get `packageNamesAtRuntime` from
channel
, # executable to run with `packageNamesAtRuntime` in PATH
# and the argv
executable
, # A list of nixpkgs package attribute names that should be put into PATH when running `command`.
packageNamesAtRuntime
,
}: depot.nix.writeExecline "nix-run-with-channel-${channel}" { } [
# TODO: prevent race condition by writing a temporary gc root
"backtick"
"-iE"
"storepath"
[
bins.nix-build
"-I"
"nixpkgs=channel:${channel}"
"--arg"
"packageNamesAtRuntimeJsonPath"
(pkgs.writeText "packageNamesAtRuntime.json" (builtins.toJSON packageNamesAtRuntime))
"packageNamesAtRuntimeJsonPath"
(pkgs.writeText "packageNamesAtRuntime.json" (builtins.toJSON packageNamesAtRuntime))
./create-symlink-farm.nix
]
"importas" "-ui" "PATH" "PATH"
"export" "PATH" "\${storepath}/bin:\${PATH}"
executable "$@"
];
]
"importas"
"-ui"
"PATH"
"PATH"
"export"
"PATH"
"\${storepath}/bin:\${PATH}"
executable
"$@"
];
in nix-run-with-channel {
in
nix-run-with-channel {
channel = "nixos-unstable";
packageNamesAtRuntime = [ "yt-dlp" ];
executable = depot.nix.writeExecline "ytextr" { readNArgs = 1; } [
"getcwd" "-E" "cwd"
"getcwd"
"-E"
"cwd"
bins.bwrap
"--ro-bind" "/nix/store" "/nix/store"
"--ro-bind" "/etc" "/etc"
"--bind" "$cwd" "$cwd"
"yt-dlp"
"--no-playlist"
"--write-sub"
"--all-subs"
"--embed-subs"
"--merge-output-format" "mkv"
"-f" "bestvideo[height<=?1080]+bestaudio/best"
"$1"
"--ro-bind"
"/nix/store"
"/nix/store"
"--ro-bind"
"/etc"
"/etc"
"--bind"
"$cwd"
"$cwd"
"yt-dlp"
"--no-playlist"
"--write-sub"
"--all-subs"
"--embed-subs"
"--merge-output-format"
"mkv"
"-f"
"bestvideo[height<=?1080]+bestaudio/best"
"$1"
];
}