···
+
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="module-services-taskserver">
+
<title>Taskserver</title>
+
Taskserver is the server component of
+
<link xlink:href="https://taskwarrior.org/">Taskwarrior</link>, a
+
free and open source todo list application.
+
<emphasis>Upstream documentation:</emphasis>
+
<link xlink:href="https://taskwarrior.org/docs/#taskd" role="uri">https://taskwarrior.org/docs/#taskd</link>
+
<section xml:id="module-services-taskserver-configuration">
+
<title>Configuration</title>
+
Taskserver does all of its authentication via TLS using client
+
certificates, so you either need to roll your own CA or purchase a
+
certificate from a known CA, which allows creation of client
+
certificates. These certificates are usually advertised as
+
"server certificates".
+
So in order to make it easier to handle your own CA, there is a
+
helper tool called <command>nixos-taskserver</command> which
+
manages the custom CA along with Taskserver organisations, users
+
While the client certificates in Taskserver only authenticate
+
whether a user is allowed to connect, every user has its own UUID
+
which identifies it as an entity.
+
With <command>nixos-taskserver</command> the client certificate is
+
created along with the UUID of the user, so it handles all of the
+
credentials needed in order to setup the Taskwarrior client to
+
work with a Taskserver.
+
<section xml:id="module-services-taskserver-nixos-taskserver-tool">
+
<title>The nixos-taskserver tool</title>
+
Because Taskserver by default only provides scripts to setup users
+
imperatively, the <command>nixos-taskserver</command> tool is used
+
for addition and deletion of organisations along with users and
+
<xref linkend="opt-services.taskserver.organisations"></xref> and
+
as well for imperative set up.
+
The tool is designed to not interfere if the command is used to
+
manually set up some organisations, users or groups.
+
For example if you add a new organisation using
+
<command>nixos-taskserver org add foo</command>, the organisation
+
is not modified and deleted no matter what you define in
+
<option>services.taskserver.organisations</option>, even if you're
+
adding the same organisation in that option.
+
The tool is modelled to imitate the official
+
<command>taskd</command> command, documentation for each
+
subcommand can be shown by using the <option>--help</option>
+
<section xml:id="module-services-taskserver-declarative-ca-management">
+
<title>Declarative/automatic CA management</title>
+
Everything is done according to what you specify in the module
+
options, however in order to set up a Taskwarrior client for
+
synchronisation with a Taskserver instance, you have to transfer
+
the keys and certificates to the client machine.
+
<command>nixos-taskserver user export $orgname $username</command>
+
which is printing a shell script fragment to stdout which can
+
either be used verbatim or adjusted to import the user on the
+
For example, let's say you have the following configuration:
services.taskserver.enable = true;
+
services.taskserver.fqdn = "server";
+
services.taskserver.listenHost = "::";
+
services.taskserver.organisations.my-company.users = [ "alice" ];
+
This creates an organisation called <literal>my-company</literal>
+
with the user <literal>alice</literal>.
+
Now in order to import the <literal>alice</literal> user to
+
another machine <literal>alicebox</literal>, all we need to do is
+
$ ssh server nixos-taskserver user export my-company alice | sh
+
Of course, if no SSH daemon is available on the server you can
+
also copy & paste it directly into a shell.
+
After this step the user should be set up and you can start
+
synchronising your tasks for the first time with
+
<command>task sync init</command> on <literal>alicebox</literal>.
+
Subsequent synchronisation requests merely require the command
+
<command>task sync</command> after that stage.
+
<section xml:id="module-services-taskserver-manual-ca-management">
+
<title>Manual CA management</title>
+
If you set any options within
+
<link linkend="opt-services.taskserver.pki.manual.ca.cert">service.taskserver.pki.manual</link>.*,
+
<command>nixos-taskserver</command> won't issue certificates, but
+
you can still use it for adding or removing user accounts.