feat(sterni/acme): add initial plumbing rules
Rules for the Plan 9 plumber (see https://9p.io/sys/doc/plumb.pdf) allowing quick navigation through depot (and related services) in acme. - man, urls: some rules that I like taken from /plumb/basic and split across individual files. - tvl: incomplete support for TVL short links and targets: - //… - cl/… - b/… As mentioned, these are incomplete and I want to implement the remaining short links and things like git support. I want to continue experimenting with the plumber, but what I've got so far is already pretty cool. Eventually, I'll want to implement something equivalent for Emacs (maybe via Hyperbole) which is probably going to be of general interest to depot users. Change-Id: I678f000369db4c7ce30b2aedbc2dbccf3ddef0a9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/13026 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: sterni <sternenseemann@systemli.org>
This commit is contained in:
parent
edf4bf6165
commit
47cda5e89f
5 changed files with 133 additions and 0 deletions
39
users/sterni/acme/plumb/default.nix
Normal file
39
users/sterni/acme/plumb/default.nix
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{ pkgs, lib, ... }:
|
||||
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
name = "sterni-plumb";
|
||||
|
||||
src = builtins.path {
|
||||
path = ./.;
|
||||
filter = path: _: !(lib.hasSuffix "default.nix" path);
|
||||
};
|
||||
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
|
||||
# The write will fail if there's something wrong with the rules,
|
||||
# though it only detects some problems.
|
||||
checkPhase = ''
|
||||
runHook preInstall
|
||||
export NAMESPACE="$(mktemp -d)"
|
||||
9 plumber -f &
|
||||
pid="$!"
|
||||
until [[ -e "$NAMESPACE/plumb" ]]; do
|
||||
sleep 0.1
|
||||
done
|
||||
9 9p write plumb/rules < sterni.plumbing
|
||||
kill "$pid"
|
||||
runHook postInstall
|
||||
'';
|
||||
doCheck = true;
|
||||
checkInputs = [
|
||||
pkgs.plan9port
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p "$out"
|
||||
mv * "$out/"
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
4
users/sterni/acme/plumb/man
Normal file
4
users/sterni/acme/plumb/man
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# Man pages (taken from /plumb/basic), e.g. man(1)
|
||||
type is text
|
||||
data matches '([a-zA-Z¡-0-9_\-./]+)\(([1-8])\)'
|
||||
plumb start rc -c 'man '$2' '$1' >[2=1] | nobs | plumb -i -d edit -a ''action=showdata filename=/man/'$1'('$2')'''
|
||||
12
users/sterni/acme/plumb/sterni.plumbing
Normal file
12
users/sterni/acme/plumb/sterni.plumbing
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# TODO(sterni): are rules for :linenumber etc. needed or acme default?
|
||||
# TODO(sterni): file: urls
|
||||
# TODO(sterni): xdg-open for mail addresses, images, pdfs etc.
|
||||
# TODO(sterni): git
|
||||
|
||||
editor = acme
|
||||
include man
|
||||
|
||||
depot = /home/lukas/src/depot
|
||||
include tvl
|
||||
|
||||
include urls
|
||||
71
users/sterni/acme/plumb/tvl
Normal file
71
users/sterni/acme/plumb/tvl
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# TODO(sterni): document TVL short links,
|
||||
# for now see //tools/cheddar, //web/atward, //tools/magrathea
|
||||
# and //ops/modules/monorepo-gerrit.
|
||||
# TODO(sterni): r/([0-9]+)
|
||||
|
||||
# TVL short links that go to the browser, e.g. cl/8413, b/187
|
||||
|
||||
type is text
|
||||
data matches 'cl/([0-9]+)'
|
||||
data set https://cl.tvl.fyi/c/depot/+/$1
|
||||
plumb to web
|
||||
plumb start web $data
|
||||
|
||||
type is text
|
||||
data matches 'b/([0-9]+)'
|
||||
data set https://b.tvl.fyi/issues/$1
|
||||
plumb to web
|
||||
plumb start web $data
|
||||
|
||||
# TVL target short links
|
||||
|
||||
# TODO(sterni): implement subtargets
|
||||
# TODO(sterni): can we add an acme address to target paths somehow?
|
||||
|
||||
# TODO(sterni): look at //tools/magrathea's parsing.
|
||||
depotpathchar = '[^:.,!"'' ]'
|
||||
depotpath = '//('$depotpathchar'+)'
|
||||
|
||||
# TVL short links to files in depot, open in local editor, e.g.
|
||||
#
|
||||
# - //users/sterni/acme/plumb/tvl,
|
||||
# - //default.nix,
|
||||
# - //nix/readTree/README.md,
|
||||
# - //tools/magrathea/mg.scm
|
||||
#
|
||||
# We impose the same restrictions for the initial path,
|
||||
# but are liberal in the file name
|
||||
|
||||
type is text
|
||||
data matches '//('$depotchar'+/)?([^ ]*'$depotpathchar')'
|
||||
arg isfile $depot/$1$2
|
||||
data set $file
|
||||
plumb to edit
|
||||
plumb client $editor
|
||||
|
||||
# TVL short links to directories in depot, mapped to default.nix, e.g. //nix/readTree
|
||||
|
||||
type is text
|
||||
data matches $depotpath
|
||||
arg isfile $depot/$1/default.nix
|
||||
data set $file
|
||||
plumb to edit
|
||||
plumb client $editor
|
||||
|
||||
# TVL short links to targets that aren't expressed by default.nix, e.g. //third_party/lisp/alexandria
|
||||
|
||||
type is text
|
||||
data matches $depotpath
|
||||
arg isfile $depot/$1.nix
|
||||
data set $file
|
||||
plumb to edit
|
||||
plumb client $editor
|
||||
|
||||
# TVL short links to directories in depot (without default.nix), e.g. //ops/machines
|
||||
|
||||
type is text
|
||||
data matches $depotpath
|
||||
arg isdir $depot/$1
|
||||
data set $dir
|
||||
plumb to edit
|
||||
plumb client $editor
|
||||
7
users/sterni/acme/plumb/urls
Normal file
7
users/sterni/acme/plumb/urls
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# URLs, e.g. https://tvl.fyi
|
||||
# Based on /plumb/basic, but with most protocols removed
|
||||
# TODO(sterni): add default case to xdg-open
|
||||
type is text
|
||||
data matches '(https?)://[a-zA-Z0-9_@\-]+([.:][a-zA-Z0-9_@\-]+)*/?[a-zA-Z0-9_?,%#~&/\-+=]+([:.][a-zA-Z0-9_?,%#~&/\-+=]+)*'
|
||||
plumb to web
|
||||
plumb start web $0
|
||||
Loading…
Add table
Add a link
Reference in a new issue