summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorLeo Maroni <git@em0lar.de>2021-06-11 19:54:13 +0200
committerYuka <yuka@yuka.dev>2021-07-08 22:17:57 +0200
commitc0bd900632d2d896830897de888a9387b92df3b8 (patch)
tree3b0a4661648cf1fc5116b5ea1396766952ffaa1f /nixos
parent0bef1bb91fee138649b26e46cb2c55da2ad47bf3 (diff)
nixos/vikunja: init
nixos/vikunka: Use RFC 0042 settings proposal (thanks to @aanderse)
Diffstat (limited to 'nixos')
-rw-r--r--nixos/doc/manual/from_md/release-notes/rl-2111.section.xml7
-rw-r--r--nixos/doc/manual/release-notes/rl-2111.section.md2
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/web-apps/vikunja.nix145
4 files changed, 155 insertions, 0 deletions
diff --git a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
index 7d046d39de75..b14ca9e3e72f 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
@@ -65,6 +65,13 @@
be able to access programmers supported by flashrom.
</para>
</listitem>
+ <listitem>
+ <para>
+ <link xlink:href="https://vikunja.io">vikunja</link>, a to-do
+ list app. Available as
+ <link linkend="opt-services.vikunja.enable">services.vikunja</link>.
+ </para>
+ </listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-21.11-incompatibilities">
diff --git a/nixos/doc/manual/release-notes/rl-2111.section.md b/nixos/doc/manual/release-notes/rl-2111.section.md
index 96854ffdd745..8648f89dbd38 100644
--- a/nixos/doc/manual/release-notes/rl-2111.section.md
+++ b/nixos/doc/manual/release-notes/rl-2111.section.md
@@ -20,6 +20,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- Users of flashrom should migrate to [programs.flashrom.enable](options.html#opt-programs.flashrom.enable) and add themselves to the `flashrom` group to be able to access programmers supported by flashrom.
+- [vikunja](https://vikunja.io), a to-do list app. Available as [services.vikunja](#opt-services.vikunja.enable).
+
## Backward Incompatibilities {#sec-release-21.11-incompatibilities}
- The `staticjinja` package has been upgraded from 1.0.4 to 3.0.1
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 980e7027c98c..be640f53eb66 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -968,6 +968,7 @@
./services/web-apps/trilium.nix
./services/web-apps/selfoss.nix
./services/web-apps/shiori.nix
+ ./services/web-apps/vikunja.nix
./services/web-apps/virtlyst.nix
./services/web-apps/wiki-js.nix
./services/web-apps/whitebophir.nix
diff --git a/nixos/modules/services/web-apps/vikunja.nix b/nixos/modules/services/web-apps/vikunja.nix
new file mode 100644
index 000000000000..b0b6eb6df17e
--- /dev/null
+++ b/nixos/modules/services/web-apps/vikunja.nix
@@ -0,0 +1,145 @@
+{ pkgs, lib, config, ... }:
+
+with lib;
+
+let
+ cfg = config.services.vikunja;
+ format = pkgs.formats.yaml {};
+ configFile = format.generate "config.yaml" cfg.settings;
+ useMysql = cfg.database.type == "mysql";
+ usePostgresql = cfg.database.type == "postgres";
+in {
+ options.services.vikunja = with lib; {
+ enable = mkEnableOption "vikunja service";
+ package-api = mkOption {
+ default = pkgs.vikunja-api;
+ type = types.package;
+ defaultText = "pkgs.vikunja-api";
+ description = "vikunja-api derivation to use.";
+ };
+ package-frontend = mkOption {
+ default = pkgs.vikunja-frontend;
+ type = types.package;
+ defaultText = "pkgs.vikunja-frontend";
+ description = "vikunja-frontend derivation to use.";
+ };
+ environmentFiles = mkOption {
+ type = types.listOf types.path;
+ default = [ ];
+ description = ''
+ List of environment files set in the vikunja systemd service.
+ For example passwords should be set in one of these files.
+ '';
+ };
+ setupNginx = mkOption {
+ type = types.bool;
+ default = config.services.nginx.enable;
+ defaultText = "config.services.nginx.enable";
+ description = ''
+ Whether to setup NGINX.
+ Further nginx configuration can be done by changing
+ <option>services.nginx.virtualHosts.&lt;frontendHostname&gt;</option>.
+ This does not enable TLS or ACME by default. To enable this, set the
+ <option>services.nginx.virtualHosts.&lt;frontendHostname&gt;.enableACME</option> to
+ <literal>true</literal> and if appropriate do the same for
+ <option>services.nginx.virtualHosts.&lt;frontendHostname&gt;.forceSSL</option>.
+ '';
+ };
+ frontendScheme = mkOption {
+ type = types.enum [ "http" "https" ];
+ description = ''
+ Whether the site is available via http or https.
+ This does not configure https or ACME in nginx!
+ '';
+ };
+ frontendHostname = mkOption {
+ type = types.str;
+ description = "The Hostname under which the frontend is running.";
+ };
+
+ settings = mkOption {
+ type = format.type;
+ default = {};
+ description = ''
+ Vikunja configuration. Refer to
+ <link xlink:href="https://vikunja.io/docs/config-options/"/>
+ for details on supported values.
+ '';
+ };
+ database = {
+ type = mkOption {
+ type = types.enum [ "sqlite" "mysql" "postgres" ];
+ example = "postgres";
+ default = "sqlite";
+ description = "Database engine to use.";
+ };
+ host = mkOption {
+ type = types.str;
+ default = "localhost";
+ description = "Database host address. Can also be a socket.";
+ };
+ user = mkOption {
+ type = types.str;
+ default = "vikunja";
+ description = "Database user.";
+ };
+ database = mkOption {
+ type = types.str;
+ default = "vikunja";
+ description = "Database name.";
+ };
+ path = mkOption {
+ type = types.str;
+ default = "/var/lib/vikunja/vikunja.db";
+ description = "Path to the sqlite3 database file.";
+ };
+ };
+ };
+ config = lib.mkIf cfg.enable {
+ services.vikunja.settings = {
+ database = {
+ inherit (cfg.database) type host user database path;
+ };
+ service = {
+ frontendurl = "${cfg.frontendScheme}://${cfg.frontendHostname}/";
+ };
+ files = {
+ basepath = "/var/lib/vikunja/files";
+ };
+ };
+
+ systemd.services.vikunja-api = {
+ description = "vikunja-api";
+ after = [ "network.target" ] ++ lib.optional usePostgresql "postgresql.service" ++ lib.optional useMysql "mysql.service";
+ wantedBy = [ "multi-user.target" ];
+ path = [ cfg.package-api ];
+ restartTriggers = [ configFile ];
+
+ serviceConfig = {
+ Type = "simple";
+ DynamicUser = true;
+ StateDirectory = "vikunja";
+ ExecStart = "${cfg.package-api}/bin/vikunja";
+ Restart = "always";
+ EnvironmentFile = cfg.environmentFiles;
+ };
+ };
+
+ services.nginx.virtualHosts."${cfg.frontendHostname}" = mkIf cfg.setupNginx {
+ locations = {
+ "/" = {
+ root = cfg.package-frontend;
+ tryFiles = "try_files $uri $uri/ /";
+ };
+ "~* ^/(api|dav|\\.well-known)/" = {
+ proxyPass = "http://localhost:3456";
+ extraConfig = ''
+ client_max_body_size 20M;
+ '';
+ };
+ };
+ };
+
+ environment.etc."vikunja/config.yaml".source = configFile;
+ };
+}