Gancio

Shared agenda for local communities that supports Activity Pub

Declared in: projects/Gancio/default.nix

Demo

Implement missing demo

Options

services.gancio
services.gancio.enable

Whether to enable Gancio, a shared agenda for local communities.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx

Extra configuration for the nginx virtual host of gancio.

Type:
submodule
Default:
{ }
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.acmeFallbackHost

Host which to proxy requests to if ACME challenge is not found. Useful if you want multiple hosts to be able to verify the same domain name.

With this option, you could request certificates for the present domain with an ACME client that is running on another host, which you would specify here.

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.acmeRoot

Directory for the ACME challenge, which is public. Don't put certs or keys in here. Set to null to inherit from config.security.acme.

Type:
null or string
Default:
"/var/lib/acme/acme-challenge"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.addSSL

Whether to enable HTTPS in addition to plain HTTP. This will set defaults for listen to listen on all interfaces on the respective default ports (80, 443).

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.basicAuth

Basic Auth protection for a vhost.

WARNING: This is implemented to store the password in plain text in the Nix store.

Type:
attribute set of string
Default:
{ }
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.basicAuthFile

Basic Auth password file for a vhost. Can be created by running {command}nix-shell --packages apacheHttpd --run 'htpasswd -B -c FILENAME USERNAME'.

Type:
null or absolute path
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.default

Makes this vhost the default.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.enableACME

Whether to ask Let's Encrypt to sign a certificate for this vhost. Alternately, you can use an existing certificate through {option}useACMEHost.

Type:
boolean
Default:
true
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.extraConfig

These lines go to the end of the vhost verbatim.

Type:
strings concatenated with "\n"
Default:
""
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.forceSSL

Whether to add a separate nginx server block that redirects (defaults to 301, configurable with redirectCode) all plain HTTP traffic to HTTPS. This will set defaults for listen to listen on all interfaces on the respective default ports (80, 443), where the non-SSL listens are used for the redirect vhosts.

Type:
boolean
Default:
true
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.globalRedirect

If set, all requests for this host are redirected (defaults to 301, configurable with redirectCode) to the given hostname.

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.http2

Whether to enable the HTTP/2 protocol. Note that (as of writing) due to nginx's implementation, to disable HTTP/2 you have to disable it on all vhosts that use a given IP address / port. If there is one server block configured to enable http2, then it is enabled for all server blocks on this IP. See https://stackoverflow.com/a/39466948/263061.

Type:
boolean
Default:
true
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.http3

Whether to enable the HTTP/3 protocol. This requires using pkgs.nginxQuic package which can be achieved by setting services.nginx.package = pkgs.nginxQuic; and activate the QUIC transport protocol services.nginx.virtualHosts.<name>.quic = true;. Note that HTTP/3 support is experimental and not yet recommended for production. Read more at https://quic.nginx.org/ HTTP/3 availability must be manually advertised, preferably in each location block.

Type:
boolean
Default:
true
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.http3_hq

Whether to enable the HTTP/0.9 protocol negotiation used in QUIC interoperability tests. This requires using pkgs.nginxQuic package which can be achieved by setting services.nginx.package = pkgs.nginxQuic; and activate the QUIC transport protocol services.nginx.virtualHosts.<name>.quic = true;. Note that special application protocol support is experimental and not yet recommended for production. Read more at https://quic.nginx.org/

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.kTLS

Whether to enable kTLS support. Implementing TLS in the kernel (kTLS) improves performance by significantly reducing the need for copying operations between user space and the kernel. Required Nginx version 1.21.4 or later.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.listen

Listen addresses and ports for this virtual host. IPv6 addresses must be enclosed in square brackets. Note: this option overrides addSSL and onlySSL.

If you only want to set the addresses manually and not the ports, take a look at listenAddresses.

Type:
list of (submodule)
Default:
[ ]
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.listen.*.addr

Listen address.

Type:
string
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.listen.*.extraParameters

Extra parameters of this listen directive.

Type:
list of string
Default:
[ ]
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.listen.*.port

Port number to listen on. If unset and the listen address is not a socket then nginx defaults to 80.

Type:
null or 16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.listen.*.proxyProtocol

Enable PROXY protocol.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.listen.*.ssl

Enable SSL.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.listenAddresses

Listen addresses for this virtual host. Compared to listen this only sets the addresses and the ports are chosen automatically.

Note: This option overrides enableIPv6

Type:
list of string
Default:
[ ]
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations

Declarative location config

Type:
attribute set of (submodule)
Default:
{ }
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..alias

Alias directory for requests.

Type:
null or absolute path
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..basicAuth

Basic Auth protection for a vhost.

WARNING: This is implemented to store the password in plain text in the Nix store.

Type:
attribute set of string
Default:
{ }
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..basicAuthFile

Basic Auth password file for a vhost. Can be created by running {command}nix-shell --packages apacheHttpd --run 'htpasswd -B -c FILENAME USERNAME'.

Type:
null or absolute path
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..extraConfig

These lines go to the end of the location verbatim.

Type:
strings concatenated with "\n"
Default:
""
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..fastcgiParams

FastCGI parameters to override. Unlike in the Nginx configuration file, overriding only some default parameters won't unset the default values for other parameters.

Type:
attribute set of (string or absolute path)
Default:
{ }
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..index

Adds index directive.

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..priority

Order of this location block in relation to the others in the vhost. The semantics are the same as with lib.mkOrder. Smaller values have a greater priority.

Type:
signed integer
Default:
1000
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..proxyPass

Adds proxy_pass directive and sets recommended proxy headers if recommendedProxySettings is enabled.

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..proxyWebsockets

Whether to support proxying websocket connections with HTTP/1.1.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..recommendedProxySettings

Enable recommended proxy settings.

Type:
boolean
Default:
config.services.nginx.recommendedProxySettings
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..recommendedUwsgiSettings

Enable recommended uwsgi settings.

Type:
boolean
Default:
config.services.nginx.recommendedUwsgiSettings
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..return

Adds a return directive, for e.g. redirections.

Type:
null or string or signed integer
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..root

Root directory for requests.

Type:
null or absolute path
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..tryFiles

Adds try_files directive.

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.locations..uwsgiPass

Adds uwsgi_pass directive and sets recommended proxy headers if recommendedUwsgiSettings is enabled.

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.onlySSL

Whether to enable HTTPS and reject plain HTTP connections. This will set defaults for listen to listen on all interfaces on port 443.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.quic

Whether to enable the QUIC transport protocol. This requires using pkgs.nginxQuic package which can be achieved by setting services.nginx.package = pkgs.nginxQuic;. Note that QUIC support is experimental and not yet recommended for production. Read more at https://quic.nginx.org/

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.redirectCode

HTTP status used by globalRedirect and forceSSL. Possible usecases include temporary (302, 307) redirects, keeping the request method and body (307, 308), or explicitly resetting the method to GET (303). See https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections.

Type:
integer between 300 and 399 (both inclusive)
Default:
301
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.rejectSSL

Whether to listen for and reject all HTTPS connections to this vhost. Useful in default server blocks to avoid serving the certificate for another vhost. Uses the ssl_reject_handshake directive available in nginx versions 1.19.4 and above.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.reuseport

Create an individual listening socket . It is required to specify only once on one of the hosts.

Type:
boolean
Default:
false
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.root

The path of the web root directory.

Type:
null or absolute path
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.serverAliases

Additional names of virtual hosts served by this virtual host configuration.

Type:
list of string
Default:
[ ]
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.serverName

Name of this virtual host. Defaults to attribute name in virtualHosts.

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.sslCertificate

Path to server SSL certificate.

Type:
absolute path
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.sslCertificateKey

Path to server SSL certificate key.

Type:
absolute path
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.sslTrustedCertificate

Path to root SSL certificate for stapling and client certificates.

Type:
null or absolute path
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.nginx.useACMEHost

A host of an existing Let's Encrypt certificate to use. This is useful if you have many subdomains and want to avoid hitting the rate limit. Alternately, you can generate a certificate through {option}enableACME. Note that this option does not create any certificates, nor it does add subdomains to existing ones – you will need to create them manually using .

Type:
null or string
Default:
null
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.package

The gancio package to use.

Type:
package
Default:
pkgs.gancio
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.plugins

Paths of gancio plugins to activate (linked under $WorkingDirectory/plugins/).

Type:
list of package
Default:
[ ]
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings

Configuration for Gancio, see https://gancio.org/install/config for supported values.

Type:
open submodule of (JSON value)
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.baseurl

The full URL under which the server is reachable.

Type:
string
Default:
"https://${config.services.gancio.settings.hostname}"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.db.database
Read-only

Name of the PostgreSQL database

Type:
null or string
Default:
"if config.services.gancio.settings.db.dialect == \"postgres\" then cfg.user else null"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.db.dialect

The database dialect to use

Type:
one of "sqlite", "postgres"
Default:
"sqlite"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.db.host
Read-only

Connection string for the PostgreSQL database

Type:
null or string
Default:
"if config.services.gancio.settings.db.dialect == \"postgres\" then \"/run/postgresql\" else null"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.db.storage
Read-only

Location for the SQLite database.

Type:
null or string
Default:
"if config.services.gancio.settings.db.dialect == \"sqlite\" then \"/var/lib/gancio/db.sqlite\" else null"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.hostname

The domain name under which the server is reachable.

Type:
string
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.log_level

Gancio log level.

Type:
one of "debug", "info", "warning", "error"
Default:
"info"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.log_path
Read-only

Directory Gancio logs into

Type:
string
Default:
"/var/log/gancio"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.settings.server.socket
Read-only

The unix socket for the gancio server to listen on.

Type:
absolute path
Default:
"/run/gancio/socket"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.user

The user (and PostgreSQL database name) used to run the gancio server

Type:
string
Default:
"gancio"
Declared in:
nixos/modules/services/web-apps/gancio.nix
services.gancio.userLocale

Override default locales within gancio. See default languages and locales.

Type:
attribute set of attribute set of attribute set of string
Default:
{ }
Declared in:
nixos/modules/services/web-apps/gancio.nix

Examples

Enable Gancio
{
  pkgs,
  ...
}:
{
  services.gancio = {
    enable = true;
    plugins = [ pkgs.gancioPlugins.telegram-bridge ];
    settings = {
      hostname = "agenda.example.org";
      # postgress is available as well
      db.dialect = "sqlite";
    };
    nginx = {
      enableACME = false;
      forceSSL = false;
    };
  };
}

Declared in: projects/Gancio/example.nix

This project is funded by NLnet through these subgrants:

Core
Gancio