aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorPS <p@0x53.net>2026-02-07 10:20:30 +0100
committerPS <p@0x53.net>2026-02-07 10:20:30 +0100
commit5e95d487982b9362b544139b98d1da55fa6ef78c (patch)
tree1abf6d91f9e6d0b6d0ac7b7d759663f2531eb51b /doc
parentf7df2f7bb6abbea365cccb1345dcf1a1b7a80797 (diff)
downloadgoetia-base-5e95d487982b9362b544139b98d1da55fa6ef78c.tar.gz
goetia-base-5e95d487982b9362b544139b98d1da55fa6ef78c.tar.bz2
goetia-base-5e95d487982b9362b544139b98d1da55fa6ef78c.zip
Add doc
Diffstat (limited to 'doc')
-rw-r--r--doc/bin/compile-db.html98
-rw-r--r--doc/bin/longrun-make.html141
-rw-r--r--doc/bin/oneshot-make.html101
-rw-r--r--doc/bin/prepare-svscan.html120
-rw-r--r--doc/bin/system-db.html67
-rw-r--r--doc/bin/system-ml.html96
-rw-r--r--doc/bin/system-rc.html63
-rw-r--r--doc/bin/system-run.html67
-rw-r--r--doc/bin/system-shutdown-daemon.html123
-rw-r--r--doc/bin/user-db.html82
-rw-r--r--doc/bin/user-init.html128
-rw-r--r--doc/bin/user-ml.html104
-rw-r--r--doc/bin/user-rc.html74
-rw-r--r--doc/bin/user-run.html78
-rw-r--r--doc/bin/user-shutdown.html68
-rw-r--r--doc/bin/user-tmpfs.html104
-rw-r--r--doc/index.html413
-rw-r--r--doc/service/system/goetia-runner.html44
-rw-r--r--doc/service/system/s6-svscan-log-console.html50
-rw-r--r--doc/service/system/s6-svscan-log.html37
-rw-r--r--doc/service/user/.s6-svscan.html48
-rw-r--r--doc/service/user/goetia-runner.html36
-rw-r--r--doc/service/user/goetia-shutdown.html67
-rw-r--r--doc/service/user/s6-svscan-log.html39
-rw-r--r--doc/source/system/admin/seatd.html42
-rw-r--r--doc/source/system/bundles/default.html37
-rw-r--r--doc/source/system/bundles/firewall.html29
-rw-r--r--doc/source/system/bundles/mount.html48
-rw-r--r--doc/source/system/bundles/networking.html35
-rw-r--r--doc/source/system/bundles/seat-manager.html31
-rw-r--r--doc/source/system/bundles/system-bus.html34
-rw-r--r--doc/source/system/bundles/udev.html36
-rw-r--r--doc/source/user/bundle/audio.html31
-rw-r--r--doc/source/user/bundle/compositor.html33
-rw-r--r--doc/source/user/bundle/default.html39
-rw-r--r--doc/source/user/bundle/session-bus.html34
-rw-r--r--doc/source/user/other/dbus-daemon.html44
-rw-r--r--doc/source/user/xdg/xdg-runtime-dir.html75
38 files changed, 2796 insertions, 0 deletions
diff --git a/doc/bin/compile-db.html b/doc/bin/compile-db.html
new file mode 100644
index 0000000..c0ed957
--- /dev/null
+++ b/doc/bin/compile-db.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>compile-db</title>
+ <meta name="Description" content="A helper script for compiling s6-rc databases." />
+ <meta name="Keywords" content="goetia s6-rc s6-rc-compile source directory" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The compile-db program</h1>
+ <p>
+ compile-db is a helper script for use by other software
+ that compiles a general <code><em>confdir</em></code>
+ tries to use the result to update a general
+ <code><em>livedir</em></code>.
+ </p>
+ <h2>Interface</h2>
+ <pre> compile-db <em>confdir</em> <em>livedir</em></pre>
+ <ul>
+ <li>
+ compile-db runs
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html">s6-rc-compile</a>
+ on <code><em>confdir</em>/src/*</code>.
+ </li>
+ <li>
+ This creates a new <code><em>confdir</em>/<var>@xyz@</var>_db</code>
+ file with <code><var>@xyz@</var></code> based on the current UNIX time.
+ </li>
+ <li>
+ If <code><em>livedir</em></code> exists, that is,
+ a goetia based supervision tree is running,
+ compile-db the tries to update the live state at <code><em>livedir</em></code>
+ to <code><var>@xyz@</var>_db</code> using
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-update.html">s6-rc-update</a>.
+ </li>
+ <li>
+ If it succeeds, it updates the symlink
+ <code><em>confdir</em>/compiled</code>
+ to point to
+ <code><em>confdir</em>/<var>@xyz@</var>_db</code>
+ and deletes the old database
+ <code><em>confdir</em>/<var>@abc@</var>_db</code>.
+ </li>
+ <li>
+ If it does <em>not</em> succeed,
+ it runs s6-rc-update to switch back to
+ <code><em>confdir</em>/compiled</code>
+ which points to
+ <code><em>confdir</em>/<var>@abc@</var>_db</code>.
+ Followed by deleting
+ <code><em>confdir</em>/<var>@xyz@</var>_db</code>.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 0: success
+ </li>
+ <li>
+ Since compile-db is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ compile-db mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no otions to compile-db.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/longrun-make.html b/doc/bin/longrun-make.html
new file mode 100644
index 0000000..0c5d8c4
--- /dev/null
+++ b/doc/bin/longrun-make.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>longrun-make</title>
+ <meta name="Description" content="Helper script to generate s6-rc longrun source directories from a commandline." />
+ <meta name="Keywords" content="goetia s6-rc longrun source directory" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The longrun-make program</h1>
+ <p>
+ longrun-make contains boilerplate code
+ required to create the
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directory</a>
+ of a longrun service
+ based on strings.
+ </p>
+ <h2>Interface</h2>
+ <pre> longrun-make <em>workingdir</em> <em>name</em> <em>type</em> <em>script</em> <em>dependencies</em></pre>
+ <ul>
+ <li>
+ <code><em>type</em></code> can only be one of <code>log | srv</code>.
+ </li>
+ <li>
+ <code><em>dependencies</em></code> can only be one of <code>"dependency1 dependency2 ..." | none</code>.
+ </li>
+ <li>
+ longrun-make creates the directory <code><em>workingdir</em>/<em>name</em>-<em>type</em></code>.
+ </li>
+ <li>
+ It creates the file <code><em>workingdir</em>/<em>name</em>-<em>type</em>/type</code>
+ (literal "<code>type</code>") and writes the line <code>longrun</code> to it.
+ </li>
+ <li>
+ It creates the file <code><em>workingdir</em>/<em>name</em>-<em>type</em>/notification-fd</code>
+ and writes the line <code>3</code> to it.
+ </li>
+ <li>
+ It creates the file <code><em>workingdir</em>/<em>name</em>-<em>type</em>/run</code>
+ and writes <code><em>script</em></code> to it.
+ </li>
+ <li>
+ If <code><em>type</em></code> is <code>log</code> <em>and</em> the file
+ <code><em>workingdir</em>/<em>name</em>-<em>type</em>/consumer-for</code>
+ does <em>not</em> contain the string <code><em>name</em></code>:
+ <ul>
+ <li>
+ longrun-make aquires a lock on the file
+ <code><em>workingdir</em>/<em>name</em>-<em>type</em>/consumer-for</code>
+ using
+ <a href="https://skarnet.org/software/s6/s6-setlock.html">s6-setlock</a>.
+ </li>
+ <li>
+ It appends the string <code><em>name</em>-srv</code> to the file
+ <code><em>workingdir</em>/<em>name</em>-<em>type</em>/consumer-for</code>
+ creating it if it does not exist.
+ </li>
+ <li>
+ It creates a file <code><em>workingdir</em>/<em>name</em>-<em>type</em>/pipeline-name</code>,
+ truncating it if it does exist and adds the string <code><em>name</em></code>.
+ </li>
+ </ul>
+ </li>
+ <li>
+ If <code><em>type</em></code> is <code>srv</code>:
+ <ul>
+ <li>
+ The file
+ <code><em>workingdir</em>/<em>name</em>-<em>type</em>/producer-for</code>
+ is created, truncated and the string <code><em>name</em>-log</code> is added.
+ </li>
+ </ul>
+ </li>
+ <li>
+ If <code><em>dependencies</em></code> is not <code>none</code>:
+ <ul>
+ <li>
+ The directory
+ <code><em>workingdir</em>/<em>name</em>-<em>type</em>/dependencies.d</code>
+ is created.
+ </li>
+ <li>
+ For each word <code>"dependency1 dependency2 ..."</code> in
+ <code><em>dependencies</em></code> separated by spaces,
+ a file
+ <code><em>workingdir</em>/<em>name</em>-<em>type</em>/dependencies.d/<em>dependency</em></code>
+ is created.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ longrun-make is, by means of locking and checking for duplicates,
+ specifically designed to allow parallel creation of logging
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directories</a>.
+ </p>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 0: success
+ </li>
+ <li>
+ Since longrun-make is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ longrun-make mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no otions to longrun-make.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/oneshot-make.html b/doc/bin/oneshot-make.html
new file mode 100644
index 0000000..1b285c6
--- /dev/null
+++ b/doc/bin/oneshot-make.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>oneshot-make</title>
+ <meta name="Description" content="Helper script to generate s6-rc oneshot source directories from a commandline." />
+ <meta name="Keywords" content="goetia s6-rc oneshot source directory" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The oneshot-make program</h1>
+ <p>
+ oneshot-make contains boilerplate code
+ required to create the
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directory</a>
+ of a oneshot service
+ based on strings.
+ </p>
+ <h2>Interface</h2>
+ <pre> oneshot-make <em>workingdir</em> <em>name</em> <em>upscript</em> <em>downscript</em> <em>dependencies</em></pre>
+ <ul>
+ <li>
+ <code><em>dependencies</em></code> can only be one of <code>"dependency1 dependency2 ..." | none</code>.
+ </li>
+ <li>
+ oneshot-make creates the directory <code><em>workingdir</em>/<em>name</em></code>
+ </li>
+ <li>
+ it creates the file <code><em>workingdir</em>/<em>name</em>/type</code>
+ and writes the line <code>oneshot</code> to it.
+ </li>
+ <li>
+ it creates the file <code><em>workingdir</em>/<em>name</em>/up</code>
+ and writes <code><em>upscript</em></code> to it.
+ </li>
+ <li>
+ it creates the file <code><em>workingdir</em>/<em>name</em>/down</code>
+ and writes <code><em>downscript</em></code> to it.
+ </li>
+ <li>
+ If <code><em>dependencies</em></code> is not <code>none</code>:
+ <ul>
+ <li>
+ The directory
+ <code><em>workingdir</em>/<em>name</em>/dependencies.d</code>
+ is created.
+ </li>
+ <li>
+ For each word <code>"dependency1 dependency2 ..."</code> in
+ <code><em>dependencies</em></code> separated by spaces,
+ a file
+ <code><em>workingdir</em>/<em>name</em>/dependencies.d/<em>dependency</em></code>
+ is created.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 0: success
+ </li>
+ <li>
+ Since oneshot-make is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ oneshot-make mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no otions to oneshot-make.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/prepare-svscan.html b/doc/bin/prepare-svscan.html
new file mode 100644
index 0000000..6b82bd5
--- /dev/null
+++ b/doc/bin/prepare-svscan.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>prepare-svscan</title>
+ <meta name="Description" content="Helper script to initialize a supervision tree." />
+ <meta name="Keywords" content="goetia s6 s6-rc supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The prepare-svscan program</h1>
+ <p>
+ prepare-svscan does generic preparation of the
+ <a href="//0x53.net/software/goetia/supervisiontree.html">supervision tree</a>.
+ It is also used in system-init and
+ <a href="./user-init.html">user-init</a>.
+ </p>
+ <h2>Interface</h2>
+ <pre> prepare-svscan <em>workingdir</em> <em>rundir</em> <em>bundle</em> <em>prog...</em></pre>
+ <ul>
+ <li>
+ prepare-svscan sets its standard input to <code>/dev/null</code>.
+ </li>
+ <li>
+ It sets the umask to <code>0022</code>.
+ </li>
+ <li>
+ It creates the directory <code><em>rundir</em></code>.
+ </li>
+ <li>
+ It copies all contents of <code><em>workingdir</em>/run-image/.</code>
+ to <code><em>rundir</em>/</code>.
+ </li>
+ <li>
+ It changes its standard output to <code><em>rundir</em>/service/s6-svscan-log/fifo</code>.
+ </li>
+ <li>
+ prepare-svscan then forks a background process that:
+ <ul>
+ <li>
+ waits for a reading end at <code><em>rundir</em>/service/s6-svscan-log/fifo</code>.
+ </li>
+ <li>
+ Once the above is given, if <code><em>rundir</em>/s6-rc</code> does <em>not</em> exist,
+ </li>
+ <li>
+ it initiates <a href="https://skarnet.org/software/s6-rc/">s6-rc</a> on
+ <code><em>rundir</em>/service</code> using
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-init.html">s6-rc-init</a>
+ and starts the bundle <code><em>bundle</em></code> using s6-rc.
+ </li>
+ </ul>
+ </li>
+ <li>
+ It copies stderr to stdout.
+ </li>
+ <li>
+ If available, the directory <code><em>workingdir</em>/env</code> is sourced using
+ <a href="https://skarnet.org/software/s6/s6-envdir.html">s6-env</a>.
+ </li>
+ <li>
+ prepare-svscan executest into <code><em>prog...</em></code>,
+ which is usually directly or indirectly
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>.
+ </li>
+ </ul>
+ <p>
+ Once s6-svscan is launched it will start an
+ <a href="https://skarnet.org/software/s6/s6-supervise.html">s6-supervise</a>
+ process on <code><em>rundir</em>/service/s6-svscan-log</code> which starts
+ <a href="https://skarnet.org/software/s6/s6-log.html">s6-log</a> reading
+ from <code><em>rundir</em>/service/s6-svscan-log/fifo</code>.
+ This in turn triggers the forked background process to continue with its second step.
+ </p>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ prepare-svscan usually executes into
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>
+ which exits according to its page.
+ </li>
+ <li>
+ Since prepare-svscan is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ prepare-svscan mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no otions to prepare-svscan.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/system-db.html b/doc/bin/system-db.html
new file mode 100644
index 0000000..056f5b7
--- /dev/null
+++ b/doc/bin/system-db.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system-db</title>
+ <meta name="Description" content="Script to compile the system supervision tree database." />
+ <meta name="Keywords" content="goetia compile-db s6-rc s6-rc-compile system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system-db program</h1>
+ <p>
+ system-db compiles the
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directories</a>
+ of the
+ <a href="//0x53.net/software/goetia/confdir.html#system">system configuration directory</a>
+ into the <em>compiled</em> format.
+ This format can then be used by init and
+ <a href="./system-rc.html">system-rc</a>
+ to set up and control a
+ <a href="//0x53.net/software/goetia/supervisiontree.html#system">system supervision tree</a>.
+ </p>
+ <p>
+ system-db is a wrapper around the more general
+ <a href="./compile-db.html">compile-db</a>
+ making it target the system supervision tree.
+ </p>
+ <h2>Interface</h2>
+ <pre> system-db</pre>
+ <ul>
+ <li>
+ system-db takes no arguments.
+ </li>
+ <li>
+ It runs compile-db supplementing it with the
+ <a href="//0x53.net/software/goetia/confdir.html#system">system configuration directory</a>
+ and
+ <a href="//0x53.net/software/goetia/rundir.html#system">system runtime directory</a>.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ Since system-db is a wrapper around compile-db, it
+ <a href="./compile-db.html">behaves exactly like it</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no options to system-db.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/system-ml.html b/doc/bin/system-ml.html
new file mode 100644
index 0000000..bc487a9
--- /dev/null
+++ b/doc/bin/system-ml.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system-ml</title>
+ <meta name="Description" content="Script to autogenerate loggers for the system supervision tree." />
+ <meta name="Keywords" content="goetia longrun-make s6-rc logger log system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system-ml program</h1>
+ <p>
+ system-ml automatically creates logging service
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directories</a>
+ for longrun services in the
+ <a href="//0x53.net/software/goetia/confdir.html#system">system configuration directory</a>.
+ To create the logging service source directories,
+ system-ml uses
+ <a href="./longrun-make.html">longrun-make</a> internally.
+ </p>
+ <h2>Interface</h2>
+ <pre> system-ml</pre>
+ <ul>
+ <li>
+ system-ml takes no arguments.
+ </li>
+ <li>
+ It deletes the <code>src/generated-logger</code> subdirectory of the
+ <a href="//0x53.net/software/goetia/confdir.html#system">system configuration directory</a>.
+ </li>
+ <li>
+ It scans the <code>src</code> subdirecotry of the
+ <a href="//0x53.net/software/goetia/confdir.html#system">system configuration directory</a>
+ for longrun services.
+ </li>
+ <li>
+ It checks for each longrun it detects,
+ whether its source directory contains a file <code>no-ml</code>.
+ If this file exits, this longrun is skipped in the subsequent logger generation.
+ </li>
+ <li>
+ It generates a logging service source directory at
+ <code>src/generated-logger/<var>@longrun@</var>-log</code>
+ in the <a href="//0x53.net/software/goetia/confdir.html#system">system configuration directory</a>.
+ It does so in parallel for each longrun <code><var>@longrun@</var>-srv</code> it found.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ Since system-ml is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ system-ml mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no options to system-ml.
+ </li>
+ </ul>
+ <h2>Notes</h2>
+ <p>
+ The logger services created by this script
+ will drop privileges to
+ <code><var>@loguser@</var></code>,
+ which must exist at runtime.
+ (see <a href="//0x53.net/software/goetia/logdir.html">log directory</a>).
+ </p>
+ </body>
+</html>
diff --git a/doc/bin/system-rc.html b/doc/bin/system-rc.html
new file mode 100644
index 0000000..f6e48db
--- /dev/null
+++ b/doc/bin/system-rc.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system-rc</title>
+ <meta name="Description" content="Convenience wrapper around s6-rc to control the system supervision tree." />
+ <meta name="Keywords" content="goetia s6-rc system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system-rc program</h1>
+ <p>
+ system-rc is a thin convenience wrapper around
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ doing nothing more then pointing it to the right livedir.
+ </p>
+ <p>
+ Read the page of
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ to understand what this utility does.
+ </p>
+ <h2>Interface</h2>
+ <pre> system-rc ... <a href="https://skarnet.org/software/s6-rc/s6-rc.html">see s6-rc</a> ...</pre>
+ <ul>
+ <li>
+ It runs
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ with the appropriate livedir option.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ Since system-rc is a thin wrapper around
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ it behaves almost exactly like it.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ system-rc takes exactly the same options as
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/system-run.html b/doc/bin/system-run.html
new file mode 100644
index 0000000..465cee4
--- /dev/null
+++ b/doc/bin/system-run.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system-run</title>
+ <meta name="Description" content="Run little scripts from the system supervision tree, providing reliability." />
+ <meta name="Keywords" content="goetia s6 system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system-run program</h1>
+ <p>
+ system-run allows
+ to hand over the execution of commands to the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#system">system supervision tree</a>.
+ </p>
+ <h2>Interface</h2>
+ <pre> system-run <em>prog...</em></pre>
+ <ul>
+ <li>
+ Internally, system-run invokes
+ <a href="https://skarnet.org/software/s6/s6-sudo.html">s6-sudo</a>
+ to connect to an
+ <a href="https://skarnet.org/software/s6/s6-sudod.html">s6-sudod</a>
+ instance provided by the system
+ <a href="//0x53.net/software/goetia/service/system/goetia-runner.html">goetia-runner</a>.
+ </li>
+ <li>
+ <code><em>prog...</em></code> is then transferred
+ to and executed by goetia-runner.
+ </li>
+ <li>
+ See
+ <a href="https://skarnet.org/software/s6/s6-sudo.html">s6-sudo</a>
+ and
+ <a href="https://skarnet.org/software/s6/s6-sudod.html">s6-sudod</a>
+ for configuration options and detailed information.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ system-run behaves exactly as
+ <a href="https://skarnet.org/software/s6/s6-sudo.html">s6-sudo</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ system-run takes the exact same options as
+ <a href="https://skarnet.org/software/s6/s6-sudoc.html">s6-sudoc</a>.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/system-shutdown-daemon.html b/doc/bin/system-shutdown-daemon.html
new file mode 100644
index 0000000..82493b6
--- /dev/null
+++ b/doc/bin/system-shutdown-daemon.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system-shutdown-daemon</title>
+ <meta name="Description" content="The kernel indepentent part of the goetia shutdown procedure." />
+ <meta name="Keywords" content="goetia s6 s6-rc system supervision tree shutdown" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system-shutdown-daemon program</h1>
+ <p>
+ system-shutdown-daemon contains the Kernel independent
+ part of the shutdown sequence.
+ It is invoked by the Kernel specifict goetia-shutdown service,
+ e.g.
+ <a href="//0x53.net/software/goetia/goetia-linux-init/service/system/goetia-shutdown.html">goetia-shutdown service for Linux</a>
+ or
+ <a href="//0x53.net/software/goetia/goetia-freebsd-init/service/system/goetia-shutdown.html">goetia-shutdown service for FreeBSD</a>.
+ system-shutdown-daemon is a long lived program that waits for instruction by the system-shutdown command
+ The latter is part of the Kernel specific packages, e.g.
+ <a href="//0x53.net/software/goetia/goetia-linux">goetia-linux</a>
+ or
+ <a href="//0x53.net/software/goetia/goetia-freebsd">goetia-freebsd</a>.
+ </p>
+ <h2>Interface</h2>
+ <pre> system-shutdown-daemon</pre>
+ <ul>
+ <li>
+ system-shutdown-daemon takes no arguments.
+ </li>
+ <li>
+ It tries to execute <code>./stage3b</code>,
+ which is by default not executable.
+ If it can not execute <code>./stage3b</code>,
+ and <em>only</em> in this case,
+ it continues with the following.
+ </li>
+ <li>
+ All services managed by
+ <a href="https://skarnet.org/software/s6-rc/">s6-rc</a>
+ are stopped.
+ This means, all services defined in
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directories</a>
+ at the <code>src</code> subdirectory of the
+ <a href="//0x53.net/software/goetia/confdir.html#system">system configuration directory</a>.
+ </li>
+ <li>
+ Next, all leftover services <em>except</em>
+ s6-svscan-log, goetia-shutdown and goetia-rescue, are stopped.
+ </li>
+ <li>
+ The file <code>stage3b</code>, expected to exist in the current working directory
+ is made executable.
+ This file is part of the Kernel secific service directories.
+ (see e.g. <a href="//0x53.net/software/goetia/goetia-linux-init/service/system/goetia-shutdown.html">goetia-shutdown</a>)
+ </li>
+ <li>
+ all uncaught system logs are copied from the
+ <code>log/uncaught-logs</code>
+ subdirectory of the
+ <a href="//0x53.net/software/goetia/rundir.html#system">system runtime directory</a>.
+ to the
+ <code>uncaught-logs</code>
+ subdirectory of the
+ <a href="//0x53.net/software/goetia/logdir.html#">system log directory</a>.
+ </li>
+ <li>
+ SIGTERM is sent to all processes but PID 1.
+ </li>
+ <li>
+ This also stops the system-shutdown-daemon process.
+ It is automatically restarted by the system supervision tree,
+ but this time, the file <code>./stage3b</code> is executable
+ and executed instead of what is described above.
+ What happens in <code>./stage3b</code> is Kernel specific,
+ and documented on
+ <a href="//0x53.net/software/goetia/goetia-linux-init/service/goetia-shutdown.html">goetia-shutdown service for Linux</a>,
+ <a href="//0x53.net/software/goetia/goetia-freebsd-init/service/goetia-shutdown.html">goetia-shutdown service for FreeBSD</a>,
+ etc.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ Since system-shutdown-daemon is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ system-shutdown-daemon mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no options to system-shutdown-daemon.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/user-db.html b/doc/bin/user-db.html
new file mode 100644
index 0000000..26ef310
--- /dev/null
+++ b/doc/bin/user-db.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user-db</title>
+ <meta name="Description" content="Script to compile the user supervision tree database." />
+ <meta name="Keywords" content="goetia compile-db s6-rc user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user-db program</h1>
+ <p>
+ user-db compiles the
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directories</a>
+ of the
+ <a href="//0x53.net/software/goetia/confdir.html#user">user configuration directory</a>
+ into the <em>compiled</em> format.
+ This format can then be used by init and
+ <a href="./user-rc.html">user-rc</a>
+ to set up and control a
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>.
+ </p>
+ <p>
+ user-db is a wrapper around the more general
+ <a href="./compile-db.html">compile-db</a>
+ making it target the user supervision tree.
+ </p>
+ <h2>Interface</h2>
+ <pre> user-db</pre>
+ <ul>
+ <li>
+ user-db takes no arguments.
+ </li>
+ <li>
+ It reads the <code>USER</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>USERTREE</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>HOME</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It runs compile-db supplementing it the correct
+ <a href="//0x53.net/software/goetia/confdir.html#user">user configuration directory</a>
+ and
+ <a href="//0x53.net/software/goetia/rundir.html#user">user runtime directory</a>.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 100 if a critical environment variable is missing.
+ </li>
+ <li>
+ Since user-db is a wrapper around compile-db, it
+ <a href="./compile-db.html">behaves exactly like it</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no options to user-db.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/user-init.html b/doc/bin/user-init.html
new file mode 100644
index 0000000..c96c3ae
--- /dev/null
+++ b/doc/bin/user-init.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user-init</title>
+ <meta name="Description" content="Script to initialize a user supervision tree." />
+ <meta name="Keywords" content="goetia prepare-svscan s6 s6-rc user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user-init program</h1>
+ <p>
+ user-init starts a user supervision tree for
+ the user defined in the <code>USER</code>
+ environment variable.
+ </p>
+ <h2>Interface</h2>
+ <pre> user-init</pre>
+ <ul>
+ <li>
+ user-init takes no arguments.
+ </li>
+ <li>
+ It reads the <code>USER</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>USERTREE</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>BUNDLE</code> environment variable,
+ defaulting to <code>default</code> if empty.
+ </li>
+ <li>
+ It reads the <code>PATH</code> environment variable,
+ defaulting to
+ <code>/command:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/libexec:/usr/local/libexec</code>
+ if empty.
+ </li>
+ <li>
+ if <code>${USER}/${USERTREE}</code> subdirectory of the
+ <a href="//0x53.net/software/goetia/rundir.html">runtime directory</a>
+ olready existis, it exits 100.
+ </li>
+ <li>
+ It sets the <code>HOME</code> environment variable based on the result of
+ <a href="https://skarnet.org/software/execline/homeof.html">homeof</a>.
+ </li>
+ <li>
+ It prepends <code>${HOME}/.local/bin:</code> to the <code>PATH</code>
+ environment variable.
+ </li>
+ <li>
+ It sets the <code>UID</code>, <code>GID</code> and <code>GIDLIST</code>
+ environment variables using
+ <a href="https://skarnet.org/software/s6/s6-envuidgid.html">s6-envuidgid</a>.
+ </li>
+ <li>
+ It runs
+ <code><a href="./prepare-svscan.html">prepare-svscan</a></code>
+ with the proper arguments.
+ </li>
+ <li>
+ Finally, it executes into
+ <code><a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a></code>
+ on the scandir represented by the
+ <code>${USER}/${USERTREE}/service</code>
+ subdirectory of the
+ <a href="//0x53.net/software/goetia/rundir.html#user">user runtime directory</a>.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 100 if a critical environment variable is missing.
+ </li>
+ <li>
+ user-init usually executes into
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>
+ which exits according to its documentation.
+ </li>
+ <li>
+ Since user-init is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ user-init mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective documentation.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no otions to user-init.
+ </li>
+ </ul>
+ <h2>Notes</h2>
+ <p>
+ More information about user supervision trees
+ themselves can be found on the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>
+ page.
+ </p>
+ </body>
+</html>
diff --git a/doc/bin/user-ml.html b/doc/bin/user-ml.html
new file mode 100644
index 0000000..d6d7e2e
--- /dev/null
+++ b/doc/bin/user-ml.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user-ml</title>
+ <meta name="Description" content="Script to autogenerate loggers for the user supervision tree." />
+ <meta name="Description" content="A policy for s6 and s6-rc" />
+ <meta name="Keywords" content="goetia longrun-make s6-rc logger log user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user-ml program</h1>
+ <p>
+ user-ml automatically creates logging service
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directories</a>
+ for longrun services of the
+ <a href="//0x53.net/software/goetia/confdir.html#user">user configuration directory</a>.
+ To create the logging service source directories,
+ user-ml uses
+ <a href="./longrun-make.html">longrun-make</a> internally.
+ </p>
+ <h2>Interface</h2>
+ <pre> user-ml</pre>
+ <ul>
+ <li>
+ user-ml takes no arguments.
+ </li>
+ <li>
+ It reads the <code>USER</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>USERTREE</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>HOME</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It deletes the <code>${USERTREE}/src/generated-logger</code> subdirectory
+ of the <a href="//0x53.net/software/goetia/confdir.html#user">user configuration subdirectory</a>.
+ </li>
+ <li>
+ It scans the <code>${USERTREE}/src</code> subdirectory
+ of the <a href="//0x53.net/software/goetia/confdir.html#user">user configuration subdirectory</a>
+ for longrun services.
+ </li>
+ <li>
+ It checks for each longrun it detects,
+ whether its source directory contains a file <code>no-ml</code>.
+ If this file exits, this longrun is skipped in the subsequent logger generation.
+ </li>
+ <li>
+ It generates a logging service source directory
+ <code>${USERTREE}/src/generated-logger/<var>@longrun@</var>-log</code>
+ in parallel for each longrun <code><var>@longrun@</var>-srv</code> it found
+ in the <a href="//0x53.net/software/goetia/confdir.html#user">user configuration subdirectory</a>.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 100 if a critical environment variable is missing.
+ </li>
+ <li>
+ Since user-ml is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ user-ml mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no options to user-ml.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/user-rc.html b/doc/bin/user-rc.html
new file mode 100644
index 0000000..3bad0c5
--- /dev/null
+++ b/doc/bin/user-rc.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user-rc</title>
+ <meta name="Description" content="Convenience wrapper around s6-rc to control the user supervision tree." />
+ <meta name="Keywords" content="goetia s6-rc user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user-rc program</h1>
+ <p>
+ The user-rc program is a thin convenience wrapper around
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ doing nothing more then pointing it to the right livedir.
+ </p>
+ <p>
+ Read the page of
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ to understand what this utility does.
+ </p>
+ <h2>Interface</h2>
+ <pre> user-rc ... <a href="https://skarnet.org/software/s6-rc/s6-rc.html">see s6-rc</a> ...</pre>
+ <ul>
+ <li>
+ user-rc reads the <code>USER</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>USERTREE</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It runs
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ with the appropriate livedir option.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 100 if a critical environment variable is missing.
+ </li>
+ <li>
+ Since user-rc is a thin wrapper around
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>
+ it behaves almost exactly like it.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ user-rc takes exactly the same options as
+ <a href="https://skarnet.org/software/s6-rc/s6-rc.html">s6-rc</a>.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/user-run.html b/doc/bin/user-run.html
new file mode 100644
index 0000000..924849c
--- /dev/null
+++ b/doc/bin/user-run.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user-run</title>
+ <meta name="Description" content="Run little scripts from the user supervision tree, providing reliability." />
+ <meta name="Keywords" content="goetia s6 user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user-run program</h1>
+ <p>
+ The user-run program allows
+ to hand over the execution of commands to the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>.
+ </p>
+ <h2>Interface</h2>
+ <pre> user-run <em>prog...</em></pre>
+ <ul>
+ <li>
+ user-rc reads the <code>USER</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>USERTREE</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ Internally, user-run invokes
+ <a href="https://skarnet.org/software/s6/s6-sudo.html">s6-sudo</a>
+ to connect to an
+ <a href="https://skarnet.org/software/s6/s6-sudod.html">s6-sudod</a>
+ instance provided by the user
+ <a href="//0x53.net/software/goetia/service/user/goetia-runner.html">goetia-runner</a>.
+ </li>
+ <li>
+ <code><em>prog...</em></code> is then transferred
+ to and executed by goetia-runner.
+ </li>
+ <li>
+ See
+ <a href="https://skarnet.org/software/s6/s6-sudo.html">s6-sudo</a>
+ and
+ <a href="https://skarnet.org/software/s6/s6-sudod.html">s6-sudod</a>
+ for configuration options and detailed information.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 100 if a critical environment variable is missing.
+ </li>
+ <li>
+ user-run behaves exactly as
+ <a href="https://skarnet.org/software/s6/s6-sudo.html">s6-sudo</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ user-run takes the exact same options as
+ <a href="https://skarnet.org/software/s6/s6-sudoc.html">s6-sudoc</a>.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/user-shutdown.html b/doc/bin/user-shutdown.html
new file mode 100644
index 0000000..6a52db8
--- /dev/null
+++ b/doc/bin/user-shutdown.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user-shutdown</title>
+ <meta name="Description" content="Script to tear down a user supervision tree." />
+ <meta name="Keywords" content="goetia s6 s6-rc shutdown user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user-shutdown program</h1>
+ <p>
+ The user-shutdown program is used to tear down
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision trees</a>.
+ </p>
+ <h2>Interface</h2>
+ <pre> user-shutdown</pre>
+ <ul>
+ <li>
+ user-shutdown takes no arguments.
+ </li>
+ <li>
+ It starts the user
+ <a href="//0x53.net/software/goetia/goetia-base/service/user/goetia-shutdown.html">goetia-shutdown</a>
+ service.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ Since user-shutdown is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ user-shutdown mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective pages.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no options to user-shutdown.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/bin/user-tmpfs.html b/doc/bin/user-tmpfs.html
new file mode 100644
index 0000000..3c22c57
--- /dev/null
+++ b/doc/bin/user-tmpfs.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user-tmpfs</title>
+ <meta name="Description" content="Script to prepare a user owned tmpfs to house a user supervision tree." />
+ <meta name="Keywords" content="goetia tmpfs user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user-tmpfs program</h1>
+ <p>
+ The user-tmpfs program prepares
+ a user owned tmpfs for
+ the user defined in the <code>USER</code>
+ environment variable.
+ The user owned tmpfs is created at
+ <code><var>@tmpfsdir@</var>/<var>@usrrundir@</var>/<var>${USER}</var></code>.
+ </p>
+ <h2>Interface</h2>
+ <pre> user-tmpfs</pre>
+ <ul>
+ <li>
+ user-tmpfs takes no arguments.
+ </li>
+ <li>
+ It reads the <code>USER</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>USER_TMPFSDIR_SIZE</code> environment variable,
+ defaulting to <code>64m</code> if undefined.
+ </li>
+ <li>
+ It creates the directory
+ <code><var>@tmpfsdir@</var>/<var>@usrrundir@</var>/<var>${USER}</var></code>.
+ </li>
+ <li>
+ It mounts a tmpfs
+ of size <code>USER_TMPFSDIR_SIZE</code>
+ with its root owned bi <code>USER</code>
+ and mode <code>0755</code>
+ at <code><var>@tmpfsdir@</var>/<var>@usrrundir@</var>/<var>${USER}</var></code>.
+ </li>
+ </ul>
+ <h2>Exit codes</h2>
+ <ul>
+ <li>
+ 100 if a critical environment variable is missing.
+ </li>
+ <li>
+ Since user-tmpfs is an
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ script, it exits with an approximation
+ of employed program that failed.
+ </li>
+ <li>
+ user-tmpfs mostly uses
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ and
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ software, the exit behaviour of which can be looked up on
+ their respective documentation.
+ </li>
+ <li>
+ See also:
+ <a href="https://skarnet.org/software/execline/exitcodes.html">execline exit code handling</a>.
+ </li>
+ </ul>
+ <h2>Options</h2>
+ <ul>
+ <li>
+ There are no otions to user-tmpfs.
+ </li>
+ </ul>
+ <h2>Notes</h2>
+ <p>
+ user-tmpfs is intended to be used in a boot time
+ <a href="//0x53.net/software/goetia/supervisiontree.html#system">system supervision tree</a>
+ oneshot service to prepare the
+ <a href="//0x53.net/software/goetia/rundir.html#user">user runtime directory</a>
+ of a user.
+ For each user who should have a user runtime directory,
+ there should be a distinct oneshot running user-tmpfs.
+ </p>
+ <p>
+ Alternatively, user-tmpfs could be run by a login manager
+ after login, but befor initiating the first
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>.
+ </p>
+ </body>
+</html>
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 0000000..fe07e2b
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,413 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>goetia-base</title>
+ <meta name="Description" content="goetia-base contains kernel independent basic building blocks of goetia." />
+ <meta name="Keywords" content="goetia base" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>goetia-base</h1>
+ <h2>What is it?</h2>
+ <p>
+ goetia-base contains scripts to manage
+ <a href="//0x53.net/software/goetia/supervisiontree.html#system">system</a>.
+ and
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">system supervision trees</a>.
+ Additionally, it contains kernel independant
+ <a href="https://skarnet.org/software/s6/servicedir.html">service directories</a>
+ and
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directories</a>
+ for the system and user supervision tree.
+ </p>
+ <hr>
+ <h2>Installation</h2>
+ <h3>Requirements</h3>
+ <ul>
+ <li>
+ A set of POSIX tools as described in the general
+ <a href="//0x53.net/software/requirements.html">requirements</a>
+ </li>
+ <li>
+ A POSIX-compliant implementation of make, or GNU make
+ </li>
+ <li>
+ Additional per-service dependencies,
+ e.g. the daemon itself the service corresponds to,
+ are listed on the respective page of the service.
+ </li>
+ </ul>
+ <h3>Licensing</h3>
+ <p>
+ goetia-base is free software. It is available under the
+ <a href="https://opensource.org/licenses/ISC">ISC license</a>.
+ </p>
+ <h3>Download</h3>
+ <ul>
+ <!--
+ <li>
+ The current released version of goetia-base is
+ <a href="./goetia-base-0.0.1.0.tar.gz">0.0.1.0</a>.
+ You can access its checksum
+ <a href="./goetia-base-0.0.1.0.tar.gz.sha256">here</a>.
+ </li>
+ -->
+ <li>
+ Alternatively, you can checkout a copy of the
+ <a href="https://git.0x53.net/goetia-base">goetia-base git repository</a>:
+ <pre>git clone git://git.0x53.net/goetia-base</pre>
+ </li>
+ </ul>
+ <h3>Compilation</h3>
+ <ul>
+ <li>
+ See the enclosed INSTALL file for installation details.
+ </li>
+ </ul>
+ <hr>
+ <h2>Reference</h2>
+ <section id="bin">
+ <h3>Commands</h3>
+ <p>
+ All of the following are
+ <a href="https://skarnet.org/software/execline/">execline</a>
+ scripts.
+ Most of these commands are thin wrappers
+ around tools from
+ <a href="https://skarnet.org/software/s6/">s6</a>
+ and
+ <a href="https://skarnet.org/software/s6-rc/">s6-rc</a>.
+ They do not do much more than supplement the former
+ with the right paths and default options.
+ The utility scripts, however,
+ contain their own logic that is used
+ in some of the other scripts.
+ </p>
+ <h4>Managing system supervision trees</h4>
+ <ul>
+ <li>
+ <a href="./bin/system-db.html">system-db</a>
+ </li>
+ <li>
+ <a href="./bin/system-ml.html">system-ml</a>
+ </li>
+ <li>
+ <a href="./bin/system-rc.html">system-rc</a>
+ </li>
+ <li>
+ <a href="./bin/system-run.html">system-run</a>
+ </li>
+ </ul>
+ <h4>Managing user supervision trees</h4>
+ <ul>
+ <li>
+ <a href="./bin/user-db.html">user-db</a>
+ </li>
+ <li>
+ <a href="./bin/user-ml.html">user-ml</a>
+ </li>
+ <li>
+ <a href="./bin/user-rc.html">user-rc</a>
+ </li>
+ <li>
+ <a href="./bin/user-run.html">user-run</a>
+ </li>
+ <li>
+ <a href="./bin/user-init.html">user-init</a>
+ </li>
+ <li>
+ <a href="./bin/user-shutdown.html">user-shutdown</a>
+ </li>
+ <li>
+ <a href="./bin/user-tmpfs.html">user-tmpfs</a>
+ </li>
+ </ul>
+ <h4>Utility scripts</h4>
+ <ul>
+ <li>
+ <a href="./bin/compile-db.html">compile-db</a>
+ </li>
+ <li>
+ <a href="./bin/longrun-make.html">longrun-make</a>
+ </li>
+ <li>
+ <a href="./bin/oneshot-make.html">oneshot-make</a>
+ </li>
+ <li>
+ <a href="./bin/prepare-svscan.html">prepare-svscan</a>
+ </li>
+ <li>
+ <a href="./bin/system-shutdown-daemon.html">system-shutdown-daemon</a>
+ </li>
+ </ul>
+ </section>
+ <section id="service">
+ <h3>Service directories</h3>
+ <p>
+ Service directories for early and basic services,
+ used without
+ <a href="https://skarnet.org/software/s6-rc/">s6-rc</a>.
+ Service directories in this package are used independent
+ of the kernel in use.
+ </p>
+ <h4>System service directories</h4>
+ <ul>
+ <li>
+ <a href="./service/system/goetia-runner.html">goetia-runner</a>
+ </li>
+ <li>
+ <a href="./service/system/s6-svscan-log.html">s6-svscan-log</a>
+ </li>
+ <li>
+ <a href="./service/system/s6-svscan-log-console.html">s6-svscan-log-console</a>
+ </li>
+ </ul>
+ <h4>User service directories</h4>
+ <ul>
+ <li>
+ <a href="./service/user/.s6-svscan.html">.s6-svscan</a>
+ </li>
+ <li>
+ <a href="./service/user/goetia-runner.html">goetia-runner</a>
+ </li>
+ <li>
+ <a href="./service/user/goetia-shutdown.html">goetia-shutdown</a>
+ </li>
+ <li>
+ <a href="./service/user/s6-svscan-log.html">s6-svscan-log</a>
+ </li>
+ </ul>
+ </section>
+ <section id="source">
+ <h3>Source directories</h3>
+ <p>
+ Following is a list of included
+ source directories.
+ Note that some daemons are so modular
+ and configurable, it would be nonsense
+ to provide a "stock" source directory.
+ How to set those up is explained in
+ an according
+ <a href="//0x53.net/software/goetia/tutorials/">tutorial page</a>.
+ </p>
+ <h4>System source directories</h4>
+ <h5>bundle</h5>
+ <p>
+ Some services can be provided by multiple different implementations.
+ Those are abstracted by bundles,
+ which can be filled with the desired implementation.
+ For the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#system">system supervision tree</a>
+ the bundles used and provided by default in goetia are:
+ </p>
+ <ul>
+ <li>
+ <a href="./source/system/bundles/default.html">default</a>
+ </li>
+ <li>
+ <a href="./source/system/bundles/mount.html">mount</a>
+ </li>
+ <li>
+ <a href="./source/system/bundles/udev.html">udev</a>
+ </li>
+ <li>
+ <a href="./source/system/bundles/seat-manager.html">seat-manager</a>
+ </li>
+ <li>
+ <a href="./source/system/bundles/system-bus.html">system-bus</a>
+ </li>
+ <li>
+ <a href="./source/system/bundles/networking.html">networking</a>
+ </li>
+ <li>
+ <a href="./source/system/bundles/firewall.html">firewall</a>
+ </li>
+ </ul>
+ <h5>cron</h5>
+ <ul>
+ <li>
+ dcron
+ </li>
+ </ul>
+ <h5>db</h5>
+ <ul>
+ <li>
+ mariadb
+ </li>
+ <li>
+ mysqld
+ </li>
+ </ul>
+ <h5>net</h5>
+ <ul>
+ <li>
+ dhcpcd
+ </li>
+ <li>
+ wpa_supplicant
+ </li>
+ </ul>
+ <h5>ntp</h5>
+ <ul>
+ <li>
+ chronyd
+ </li>
+ </ul>
+ <h5>web</h5>
+ <ul>
+ <li>
+ gate
+ </li>
+ <li>
+ nginx
+ </li>
+ <li>
+ radicale
+ </li>
+ </ul>
+ <h5>other</h5>
+ <ul>
+ <li>
+ cupsd
+ </li>
+ <li>
+ dbus-daemon
+ </li>
+ <li>
+ <a href="./source/system/admin/seatd.html">seatd</a>
+ </li>
+ <li>
+ sshd
+ </li>
+ </ul>
+ <h4>User source directories</h4>
+ <h5>bundle</h5>
+ <p>
+ Some services can be provided by multiple different implementations.
+ Those are abstracted by bundles,
+ which can be filled with the desired implementation.
+ For the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>
+ the bundles used and provided by default in goetia are:
+ </p>
+ <ul>
+ <li>
+ <a href="./source/user/bundle/default.html">default</a>
+ </li>
+ <li>
+ <a href="./source/user/bundle/audio.html">audio</a>
+ </li>
+ <li>
+ <a href="./source/user/bundle/compositor.html">compositor</a>
+ </li>
+ <li>
+ <a href="./source/user/bundle/session-bus.html">session-bus</a>
+ </li>
+ </ul>
+ <h5>audio-daemon</h5>
+ <ul>
+ <li>
+ pipewire
+ </li>
+ <li>
+ pipewire-pulse
+ </li>
+ <li>
+ wireplumber
+ </li>
+ </ul>
+ <h5>clipboard-manager</h5>
+ <ul>
+ <li>
+ wl-clip-persist
+ </li>
+ </ul>
+ <h5>compositor</h5>
+ <ul>
+ <li>
+ Hyprland
+ </li>
+ </ul>
+ <h5>desktop-widget</h5>
+ <ul>
+ <li>
+ waybar
+ </li>
+ <li>
+ yambar
+ </li>
+ </ul>
+ <h5>notification-daemon</h5>
+ <ul>
+ <li>
+ dunst
+ </li>
+ <li>
+ fnott
+ </li>
+ <li>
+ mako
+ </li>
+ <li>
+ swaync
+ </li>
+ </ul>
+ <h5>wallpaper-daemon</h5>
+ <ul>
+ <li>
+ hyprpaper
+ </li>
+ </ul>
+ <h5>xdg</h5>
+ <ul>
+ <li>
+ xdg-desktop-portal-hyprland
+ </li>
+ <li>
+ xdg-desktop-portal
+ </li>
+ <li>
+ xdg-document-portal
+ </li>
+ <li>
+ xdg-permission-store
+ </li>
+ <li>
+ <a href="./source/user/xdg/xdg-runtime-dir.html">xdg-runtime-dir</a>
+ </li>
+ </ul>
+ <h5>other</h5>
+ <ul>
+ <li>
+ at-spi-bus-launcher
+ </li>
+ <li>
+ at-spi2-registryd
+ </li>
+ <li>
+ <a href="./source/user/other/dbus-daemon.html">dbus-daemon</a>
+ </li>
+ <li>
+ dconf-service
+ </li>
+ <li>
+ foot
+ </li>
+ <li>
+ mpd
+ </li>
+ </ul>
+ </section>
+ </body>
+</html>
diff --git a/doc/service/system/goetia-runner.html b/doc/service/system/goetia-runner.html
new file mode 100644
index 0000000..16abb52
--- /dev/null
+++ b/doc/service/system/goetia-runner.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system goetia-runner</title>
+ <meta name="Description" content="System service for running little scripts from the system supervision tree." />
+ <meta name="Keywords" content="goetia s6 service run system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system goetia-runner service</h1>
+ <p>
+ This service allows to hand of execution of a commandline to the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#system">system supervision tree</a>.
+ It is the "server side" counterpart to
+ <a href="//0x53.net/software/goetia/goetia-base/bin/system-run.html">system-run</a>.
+ To achieve that,
+ goetia-runner makes use of
+ <a href="https://skarnet.org/software/s6/s6-ipcserver.html">s6-ipcserver</a>
+ and
+ <a href="https://skarnet.org/software/s6/s6-sudod.html">s6-sudod</a>.
+ </p>
+ <p>
+ An example would be the
+ <a href="//0x53.net/software/goetia/goetia-base/bin/system-rc.html">system-rc</a>
+ command invoking state transitions that might bring down
+ the user interface
+ (thus aborting mid-transition,
+ since the controlling terminal dies).
+ </p>
+ </body>
+</html>
diff --git a/doc/service/system/s6-svscan-log-console.html b/doc/service/system/s6-svscan-log-console.html
new file mode 100644
index 0000000..eff7b14
--- /dev/null
+++ b/doc/service/system/s6-svscan-log-console.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system s6-svscan-log-console</title>
+ <meta name="Description" content="System service for catch-all-logging that duplicates logs to /dev/console." />
+ <meta name="Keywords" content="goetia s6 log console system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system s6-svscan-log-console service</h1>
+ <p>
+ This service writes all messages
+ that arrive at the
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>
+ process, as well as the stdout
+ of s6-svscan itself to a directory of the logdir format
+ (see <a href="https://skarnet.org/software/s6/s6-log.html">s6-log</a>
+ and
+ <a href="//0x53.net/software/goetia/logdir.html">logging directory</a>).
+ It writes them to the <code>system/logs/uncaught-logs</code> subdirectory
+ of the <a href="//0x53.net/software/goetia/rundir.html">runtime directory</a>.
+ </p>
+ <p>
+ Additionally, all logs are duplicated to
+ <code>/dev/console</code>.
+ </p>
+ <section id="requirements">
+ <h2>Requirements</h2>
+ <ul>
+ <li>
+ The file <code>/dev/console</code>
+ must be tha appropriate device node.
+ </li>
+ </ul>
+ </section>
+ </body>
+</html>
diff --git a/doc/service/system/s6-svscan-log.html b/doc/service/system/s6-svscan-log.html
new file mode 100644
index 0000000..9d034dc
--- /dev/null
+++ b/doc/service/system/s6-svscan-log.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system s6-svscan-log</title>
+ <meta name="Description" content="System service for catch-all-logging the system supervision tree." />
+ <meta name="Keywords" content="goetia s6 log system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system s6-svscan-log service</h1>
+ <p>
+ This service writes all messages
+ that arrive at the
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>
+ process, as well as the stdout
+ of s6-svscan itself to a directory of the logdir format
+ (see <a href="https://skarnet.org/software/s6/s6-log.html">s6-log</a>
+ and
+ <a href="//0x53.net/software/goetia/logdir.html">logging directory</a>).
+ It writes them to the <code>system/logs/uncaught-logs</code> subdirectory
+ of the <a href="//0x53.net/software/goetia/rundir.html">runtime directory</a>.
+ </p>
+ </body>
+</html>
diff --git a/doc/service/user/.s6-svscan.html b/doc/service/user/.s6-svscan.html
new file mode 100644
index 0000000..c861e00
--- /dev/null
+++ b/doc/service/user/.s6-svscan.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user .s6-svscan</title>
+ <meta name="Description" content="Configuration directory for s6-svscan for the user supervision tree" />
+ <meta name="Keywords" content="goetia s6 s6-svscan user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user .s6-svscan directory</h1>
+ <p>
+ The .s6-svscan directory contains scripts
+ that are executed if
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>
+ receives a signal or exits.
+ In this case its main use is to properly shutdown the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>
+ using:
+ </p>
+ <ul>
+ <li>
+ <a href="//0x53.net/software/goetia/goetia-base/bin/user-shutdown.html">user-shutdown</a>
+ upon receiving SIGTERM.
+ </li>
+ <li>
+ Deleting the <a href="//0x53.net/software/goetia/rundir.html">runtime directory</a>
+ of the user supervision tree in the <code>finish</code> script.
+ </li>
+ </ul>
+ <p>
+ The .s6-svscan directory is easily overlooked,
+ do not forget to symlink/copy it!
+ </p>
+ </body>
+</html>
diff --git a/doc/service/user/goetia-runner.html b/doc/service/user/goetia-runner.html
new file mode 100644
index 0000000..1e6591c
--- /dev/null
+++ b/doc/service/user/goetia-runner.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user goetia-runner</title>
+ <meta name="Description" content="User service for running little scripts from the user supervision tree." />
+ <meta name="Keywords" content="goetia s6 service run user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user goetia-runner service</h1>
+ <p>
+ This service allows to hand of execution of a commandline to the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>.
+ It is the "server side" counterpart to
+ <a href="//0x53.net/software/goetia/goetia-base/bin/user-run.html">user-run</a>.
+ To achieve that,
+ goetia-runner makes user of
+ <a href="https://skarnet.org/software/s6/s6-ipcserver.html">s6-ipcserver</a>
+ and
+ <a href="https://skarnet.org/software/s6/s6-sudod.html">s6-sudod</a>.
+ </p>
+ </body>
+</html>
diff --git a/doc/service/user/goetia-shutdown.html b/doc/service/user/goetia-shutdown.html
new file mode 100644
index 0000000..5652923
--- /dev/null
+++ b/doc/service/user/goetia-shutdown.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user goetia-shutdown</title>
+ <meta name="Description" content="Script to tear down a user supervision tree." />
+ <meta name="Keywords" content="goetia s6 s6-rc shutdown user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user goetia-shutdown service</h1>
+ <p>
+ The user goetia-shutdown service is used to tear down
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision trees</a>.
+ Upon being started it:
+ <ul>
+ <li>
+ It reads the <code>USER</code> environment variable,
+ if it is empty it exits 100.
+ </li>
+ <li>
+ It reads the <code>USERTREE</code> environment variable,
+ If it is empty it exits 100.
+ </li>
+ <li>
+ It checks whether the subdirectory
+ <code>${USER}/${USERTREE}</code>
+ of the
+ <a href="//0x53.net/software/goetia/rundir.html#user">user runtime directory</a>
+ exists. If not, meaning no user supervision tree is running, it exits 0.
+ </li>
+ <li>
+ It makes all of its stdout and stderr go to the
+ <a href="//0x53.net/software/goetia/goetia-base/service/user/s6-svscan-log.html">s6-svscan-log</a>
+ of the user supervision tree.
+ </li>
+ <li>
+ It stops all services managed by
+ <a href="https://skarnet.org/software/s6-rc/">s6-rc</a>.
+ </li>
+ <li>
+ It sends SIGHUP to s6-svscan-log of the user supervision tree.
+ This is important, since s6-svscan will keep the fifo open,
+ waiting for s6-svscan-log to exit, which in turn waits for
+ EOF before exiting itself.
+ SIGHUP tells s6-svscan-log to immediatly exit.
+ </li>
+ <li>
+ It tells
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>
+ to stop all remaining services and exit.
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/service/user/s6-svscan-log.html b/doc/service/user/s6-svscan-log.html
new file mode 100644
index 0000000..f434517
--- /dev/null
+++ b/doc/service/user/s6-svscan-log.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>user s6-svscan-log</title>
+ <meta name="Description" content="User service for catch-all-logging a user supervision tree." />
+ <meta name="Keywords" content="goetia s6 log user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The user s6-svscan-log service</h1>
+ <p>
+ This service writes all messages
+ that arrive at the
+ <a href="https://skarnet.org/software/s6/s6-svscan.html">s6-svscan</a>
+ process, as well as the stdout
+ of s6-svscan itself to a directory of the logdir format
+ (see <a href="https://skarnet.org/software/s6/s6-log.html">s6-log</a>
+ and
+ <a href="//0x53.net/software/goetia/logdir.html">logging directory</a>).
+ This is
+ <code>${XDG_STATE_HOME}/log/uncaught-logs</code>,
+ if <code>${XDG_STATE_HOME}</code> is unset it defaults to
+ <code>${HOME}/.local/state/log/uncaught-logs</code>
+ </p>
+ </body>
+</html>
diff --git a/doc/source/system/admin/seatd.html b/doc/source/system/admin/seatd.html
new file mode 100644
index 0000000..6303835
--- /dev/null
+++ b/doc/source/system/admin/seatd.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>seatd</title>
+ <meta name="Description" content="Seatd mediates access to hardware like a GPU or input devices to compositors." />
+ <meta name="Keywords" content="goetia s6-rc seat seatd system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The seatd service</h1>
+ <p>
+ Seatd is a seat manager.
+ This means that it mediates access to
+ hardware like a GPU or input devices to the compositor.
+ </p>
+ <p>
+ This service makes the socket have
+ <code>seat</code> group permissions.
+ Thus the group <code>seat</code> must exist
+ and users intending to run a compositor need to
+ be part of that group.
+ </p>
+ <p>
+ The service does not change the socket location,
+ by default it usually resides at
+ <code>/run/seatd.sock</code>.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/system/bundles/default.html b/doc/source/system/bundles/default.html
new file mode 100644
index 0000000..80b58c0
--- /dev/null
+++ b/doc/source/system/bundles/default.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>default system bundle</title>
+ <meta name="Description" content="System bundle that is by default started during boot." />
+ <meta name="Keywords" content="goetia s6-rc bundle system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The default system bundle</h1>
+ <p>
+ This bundle is started on boot and everything that is
+ desired to be autostarted should be part of it.
+ Minimize the amount of services in this bundle.
+ <a href="https://skarnet.org/software/s6-rc">s6-rc</a>
+ will automatically start (and stop) all dependencies.
+ Add only what should be unconditionally there.
+ An example of this would be a service to mount a storage device
+ containing photos. No other service will probably depend on
+ this, since none needs the photos, but the user still needs
+ this to be mounted.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/system/bundles/firewall.html b/doc/source/system/bundles/firewall.html
new file mode 100644
index 0000000..ecfe00e
--- /dev/null
+++ b/doc/source/system/bundles/firewall.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>firewall system bundle</title>
+ <meta name="Description" content="System bundle depended upon by services that should be started after the firewall is configured." />
+ <meta name="Keywords" content="goetia s6-rc bundle system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The firewall system bundle</h1>
+ <p>
+ Some services might require a frirewall to be ready
+ when started, those shall depend on this bundle.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/system/bundles/mount.html b/doc/source/system/bundles/mount.html
new file mode 100644
index 0000000..c295d49
--- /dev/null
+++ b/doc/source/system/bundles/mount.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>mount system bundle</title>
+ <meta name="Description" content="System bundle that is by default depended upon by program that need to read/write from/to disk." />
+ <meta name="Keywords" content="goetia s6-rc bundle system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The mount system bundle</h1>
+ <p>
+ This bundle is by default a declared dependency of many
+ services provided by goetia.
+ Most importantly, it is a dependency of all autogenerated
+ loggers.
+ It should thus contain the mount services for all drives
+ that are used for
+ <a href="//0x53.net/software/goetia/logdir.html">logging</a>.
+ </p>
+ <p>
+ In most cases, the <code>remount-root</code>
+ <a href="https://skarnet.org/software/s6-rc/s6-rc-compile.html#source">source directory</a>
+ should be added to this bundle.
+ This source directory is part of the kernel specific packages,
+ like
+ <a href="//0x53.net/software/goetia/goetia-linux/">goetia-linux</a>.
+ </p>
+ <h2>See also</h2>
+ <ul>
+ <li>
+ <a href="//0x53.net/software/goetia/tutorials/base/mount.html">Mount tutorial</a>
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/source/system/bundles/networking.html b/doc/source/system/bundles/networking.html
new file mode 100644
index 0000000..0e3e18b
--- /dev/null
+++ b/doc/source/system/bundles/networking.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>networking system bundle</title>
+ <meta name="Description" content="System bundle that is depended upon by services requiring the correct network configuration to be applied." />
+ <meta name="Keywords" content="goetia s6-rc bundle system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The networking system bundle</h1>
+ <p>
+ Services requiring networking to be set up
+ will depend on this.
+ </p>
+ <h2>See also</h2>
+ <ul>
+ <li>
+ <a href="//0x53.net/software/goetia/tutorials/base/networking.html">Networking tutorial</a>
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/source/system/bundles/seat-manager.html b/doc/source/system/bundles/seat-manager.html
new file mode 100644
index 0000000..eab3d26
--- /dev/null
+++ b/doc/source/system/bundles/seat-manager.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>seat-manager system bundle</title>
+ <meta name="Description" content="System bundle that is depended upon by services requiring a seat manager to be running." />
+ <meta name="Keywords" content="goetia s6-rc bundle system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The seat-manager system bundle</h1>
+ <p>
+ Refer to the
+ <a href="//0x53.net/software/goetia/tutorials/ui/seatsession.html">seat and session management</a>
+ tutorial, to understand the purpose of seat managers.
+ This bundle abstracts over the choices one has here.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/system/bundles/system-bus.html b/doc/source/system/bundles/system-bus.html
new file mode 100644
index 0000000..4efd015
--- /dev/null
+++ b/doc/source/system/bundles/system-bus.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>system-bus system bundle</title>
+ <meta name="Description" content="System bundle depended upon by services requiring a system bus to be up." />
+ <meta name="Keywords" content="goetia s6-rc bundle bus system-bus dbus system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The system-bus system bundle</h1>
+ <p>
+ Some software requires a system-bus
+ implementing - usually the dbus interface.
+ The only currently available implementation
+ of this interface is
+ <a href="https://www.freedesktop.org/wiki/Software/dbus/">dbus-daemon</a>.
+ The source directory is part of
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/system/bundles/udev.html b/doc/source/system/bundles/udev.html
new file mode 100644
index 0000000..835f04b
--- /dev/null
+++ b/doc/source/system/bundles/udev.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>udev system bundle</title>
+ <meta name="Description" content="System bundle that is depended upon by services requiring the userspace device manager to be up." />
+ <meta name="Keywords" content="goetia s6-rc bundle system supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The udev system bundle</h1>
+ <p>
+ Some software depends on userspace device management software
+ to setup device permissions, symlinks and more.
+ The corresponding services will depend on this bundle.
+ </p>
+ <h2>See also</h2>
+ <ul>
+ <li>
+ <a href="//0x53.net/software/goetia/tutorials/base/udev.html">Udev tutorial</a>
+ </li>
+ </ul>
+ </body>
+</html>
diff --git a/doc/source/user/bundle/audio.html b/doc/source/user/bundle/audio.html
new file mode 100644
index 0000000..687926e
--- /dev/null
+++ b/doc/source/user/bundle/audio.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>audio user bundle</title>
+ <meta name="Description" content="User bundle depended upon by services that need an audio server to be up." />
+ <meta name="Keywords" content="goetia s6-rc bundle user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The audio user bundle</h1>
+ <p>
+ This bundle abstracts over the different
+ autio daemon implementations,
+ so services requiring a running audion daemon
+ can depend on this.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/user/bundle/compositor.html b/doc/source/user/bundle/compositor.html
new file mode 100644
index 0000000..9d10e89
--- /dev/null
+++ b/doc/source/user/bundle/compositor.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>compositor user bundle</title>
+ <meta name="Description" content="User bundle depended upon by services that need a wayland compositor to be up." />
+ <meta name="Keywords" content="goetia s6-rc bundle user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The compositor user bundle</h1>
+ <p>
+ This bundle shall contain the service corresponding to the
+ main compositing program, e.g. the
+ <a href="https://wayland.freedesktop.org/">Wayland</a>
+ compositor or
+ <a href="https://www.x.org/releases/X11R7.7/doc/index.html">X11</a>.
+ instance.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/user/bundle/default.html b/doc/source/user/bundle/default.html
new file mode 100644
index 0000000..2192a15
--- /dev/null
+++ b/doc/source/user/bundle/default.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>default user bundle</title>
+ <meta name="Description" content="User bundle started upon starting the user supervision tree." />
+ <meta name="Keywords" content="goetia s6-rc bundle user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The default user bundle</h1>
+ <p>
+ This bundle is started when the
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>
+ is started and everything that is
+ desired to be autostarted should be part of it.
+ Minimize the amount of services in this bundle.
+ <a href="https://skarnet.org/software/s6-rc">s6-rc</a>
+ will automatically start (and stop) all dependencies.
+ Add only what should be unconditionally there.
+ An example of this would be a service
+ starting a wallpaper daemon, no other service
+ will probably depend on this but the user
+ wants the wallpaper to be there.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/user/bundle/session-bus.html b/doc/source/user/bundle/session-bus.html
new file mode 100644
index 0000000..8984b80
--- /dev/null
+++ b/doc/source/user/bundle/session-bus.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>session-bus user bundle</title>
+ <meta name="Description" content="User bundle that is depended upon by services that need a session-bus to be up." />
+ <meta name="Keywords" content="goetia s6-rc bundle bus session-bus dbus user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The session-bus user bundle</h1>
+ <p>
+ Some software requires a session-bus
+ - usually implementing the dbus interface.
+ The only currently available implementation
+ of this interface is
+ <a href="https://www.freedesktop.org/wiki/Software/dbus/">dbus-daemon</a>.
+ The source directory is part of
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>.
+ </p>
+ </body>
+</html>
diff --git a/doc/source/user/other/dbus-daemon.html b/doc/source/user/other/dbus-daemon.html
new file mode 100644
index 0000000..f5290c8
--- /dev/null
+++ b/doc/source/user/other/dbus-daemon.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>dbus-daemon</title>
+ <meta name="Description" content="User longrun to start the dbus session-bus" />
+ <meta name="Keywords" content="goetia s6-rc bundle bus session-bus dbus user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The dbus-daemon service</h1>
+ <p>
+ This service starts a session
+ <a href="https://gitlab.freedesktop.org/dbus/dbus">dbus-daemon</a>.
+ It is important to set the environment variable
+ <code>DBUS_SESSION_BUS_ADDRESS</code>,
+ so other services depending on dbus-daemon can find it.
+ </p>
+ <p>
+ The <code>DBUS_SESSION_BUS_ADDRESS</code> environment variable
+ should be set at
+ <code>${HOME}/<var>@userconfdir@</var>/<var>@USERTREE@</var>/env/DBUS_SESSION_BUS_ADDRESS</code>,
+ by writing the address into this file
+ (see <a href="//0x53.net/software/goetia/confdir.html">configuration directory</a>).
+ It is recomended to set
+ <code>${HOME}/<var>@userconfdir@</var>/<var>@USERTREE@</var>/env/DBUS_SESSION_BUS_ADDRESS</code>,
+ to
+ <code><var>@tmpusdir@</var>/<var>@usrrundir@</var>/<var>@USER@</var>/<var>@USERTREE@</var>/session-bus</code>
+ (see <a href="//0x53.net/software/goetia/rundir.html">runtime directory</a>).
+ </p>
+ </body>
+</html>
diff --git a/doc/source/user/xdg/xdg-runtime-dir.html b/doc/source/user/xdg/xdg-runtime-dir.html
new file mode 100644
index 0000000..3b17d8b
--- /dev/null
+++ b/doc/source/user/xdg/xdg-runtime-dir.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>xdg-runtime-dir</title>
+ <meta name="Description" content="User oneshot to create and remove the XDG_RUNTIME_DIR." />
+ <meta name="Keywords" content="goetia s6-rc bundle xdg runtime directory user supervision tree" />
+ </head>
+ <header>
+ <p>
+ <a href="//0x53.net/software/goetia/goetia-base">goetia-base</a>
+ <br />
+ <a href="//0x53.net/software/goetia">goetia</a>
+ <br />
+ <a href="//0x53.net/software">Software</a>
+ <br />
+ <a href="//0x53.net">0x53.net</a>
+ </p>
+ </header>
+ <body>
+ <h1>The xdg-runtime-dir service</h1>
+ <p>
+ This service dynamically creates the directory
+ specified in the environment variable
+ <code>XDG_RUNTIME_DIR</code>.
+ </p>
+ <p>
+ Starting this service creates the directory
+ and sets the proper permissions,
+ stopping it deletes it.
+ </p>
+ <p>
+ It is recommended to set
+ <code>XDG_RUNTIME_DIR</code>
+ to the
+ <code><var>@USER@</var>/<var>@USERTREE@</var>/xdg-runtime-dir</code>
+ subdirectory of the
+ <a href="//0x53.net/software/goetia/rundir.html#user">user runtime directory</a>.
+ This allows to follow the
+ <a href="https://specifications.freedesktop.org/basedir-spec/latest/">XDG Base Directory Specification</a>.
+ </p>
+ <p>
+ If more than one
+ <a href="//0x53.net/software/goetia/supervisiontree.html#user">user supervision tree</a>
+ <em>per user</em> is used to have multiple
+ <a href="//0x53.net/software/goetia/tutorials/ui/seatsession.html">sessions</a>
+ with a distinct UI server, audio server, etc.
+ It makes sense for each session to have its own,
+ distinct <code>xdg-runtime-dir</code>,
+ since it is often used for sockets and temporary files
+ of said UI server, audio server, etc.
+ Setting
+ <code>XDG_RUNTIME_DIR</code>
+ as described above, allows for this.
+ Note, however, that this deviates from the
+ <a href="https://specifications.freedesktop.org/basedir-spec/latest/">XDG Base Directory Specification</a>.
+ </p>
+ <p>
+ All user services writing to or reading from
+ <code>XDG_RUNTIME_DIR</code>
+ should depend on this service.
+ </p>
+ <h2>See also</h2>
+ <ul>
+ <li>
+ <a href="//0x53.net/software/goetia/tutorials/ui/seatsession.html">seat and session management</a>
+ </li>
+ <li>
+ <a href="https://specifications.freedesktop.org/basedir-spec/latest/">XDG Base Directory Specification</a>.
+ </li>
+ </ul>
+ </body>
+</html>