feat: add vikunja

This commit is contained in:
Katharina Heidenreich 2026-04-04 17:13:46 +02:00
commit e38ffbedf4
8 changed files with 145 additions and 89 deletions

View file

@ -1,91 +1,7 @@
let let
net = import ./network.nix; local = import ./endpoints/local.nix;
services = import ./services.nix; web = import ./endpoints/web.nix;
web = import ../intermediate/web.nix; matrix = import ./endpoints/matrix.nix;
vikunja = import ./endpoints/vikunja.nix;
in in
[ local ++ web ++ matrix ++ vikunja ++ []
{
type = "web";
domain = net.devices.remote_proxy.domain;
endpoint = "/";
force_ssl = true;
port = 443;
content = web.storePayloads.home;
}
{
type = "proxy";
domain = net.devices.remote_proxy.domain;
endpoint = "/_matrix/";
force_ssl = true;
port = 443;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.continuwuity.port;
proxyWebsockets = true;
};
}
{
type = "proxy";
domain = net.devices.remote_proxy.domain;
endpoint = "/_matrix/";
force_ssl = true;
port = 8448;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.continuwuity.port;
proxyWebsockets = true;
};
}
{
type = "inline";
domain = net.devices.remote_proxy.domain;
endpoint = "/.well-known/matrix/server";
force_ssl = true;
port = 443;
content = {
contentType = "application/json";
status = 200;
body = ''{"m.server":"${net.devices.remote_proxy.domain}:443"}'';
};
}
{
type = "inline";
domain = net.devices.remote_proxy.domain;
endpoint = "/.well-known/matrix/client";
force_ssl = true;
port = 443;
content = {
contentType = "application/json";
status = 200;
body = ''{"m.homeserver":{"base_url":"https://${net.devices.remote_proxy.domain}"}}'';
};
}
{
type = "proxy";
domain = "torrent.${net.local_domain}";
endpoint = "/";
force_ssl = false;
port = 80;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.qbittorrent.port;
proxyWebsockets = false;
};
}
{
type = "proxy";
domain = "wiki.${net.local_domain}";
endpoint = "/";
force_ssl = false;
port = 80;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.kiwix.port;
proxyWebsockets = true;
};
}
]

View file

@ -0,0 +1,32 @@
let
net = import ../network.nix;
services = import ../services.nix;
in
[
{
type = "proxy";
domain = "torrent.${net.local_domain}";
endpoint = "/";
force_ssl = false;
port = 80;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.qbittorrent.port;
proxyWebsockets = false;
};
}
{
type = "proxy";
domain = "wiki.${net.local_domain}";
endpoint = "/";
force_ssl = false;
port = 80;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.kiwix.port;
proxyWebsockets = true;
};
}
]

View file

@ -0,0 +1,56 @@
let
net = import ../network.nix;
services = import ../services.nix;
in
[
{
type = "proxy";
domain = net.devices.remote_proxy.domain;
endpoint = "/_matrix/";
force_ssl = true;
port = 443;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.continuwuity.port;
proxyWebsockets = true;
};
}
{
type = "proxy";
domain = net.devices.remote_proxy.domain;
endpoint = "/_matrix/";
force_ssl = true;
port = 8448;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.continuwuity.port;
proxyWebsockets = true;
};
}
{
type = "inline";
domain = net.devices.remote_proxy.domain;
endpoint = "/.well-known/matrix/server";
force_ssl = true;
port = 443;
content = {
contentType = "application/json";
status = 200;
body = ''{"m.server":"${net.devices.remote_proxy.domain}:443"}'';
};
}
{
type = "inline";
domain = net.devices.remote_proxy.domain;
endpoint = "/.well-known/matrix/client";
force_ssl = true;
port = 443;
content = {
contentType = "application/json";
status = 200;
body = ''{"m.homeserver":{"base_url":"https://${net.devices.remote_proxy.domain}"}}'';
};
}
]

View file

@ -0,0 +1,19 @@
let
net = import ../network.nix;
services = import ../services.nix;
in
[
{
type = "proxy";
domain = "vikunja.${net.devices.remote_proxy.domain}";
endpoint = "/";
force_ssl = true;
port = 443;
content = {
type = "service";
ip = net.devices.pi.ip;
port = services.vikunja.port;
proxyWebsockets = true;
};
}
]

14
config/endpoints/web.nix Normal file
View file

@ -0,0 +1,14 @@
let
net = import ../network.nix;
web = import ../../intermediate/web.nix;
in
[
{
type = "web";
domain = net.devices.remote_proxy.domain;
endpoint = "/";
force_ssl = true;
port = 443;
content = web.storePayloads.home;
}
]

View file

@ -29,4 +29,8 @@ rec {
trusted_servers = [ "matrix.org" ]; trusted_servers = [ "matrix.org" ];
}; };
vikunja = {
port = 8081;
};
} }

View file

@ -9,5 +9,6 @@
./unbound.nix ./unbound.nix
./autossh.nix ./autossh.nix
./continuwuity.nix ./continuwuity.nix
./vikunja.nix
]; ];
} }

14
services/vikunja.nix Normal file
View file

@ -0,0 +1,14 @@
{ config, pkgs, ... }:
let
net = import ../config/network.nix;
services = import ../config/services.nix;
in
{
services.vikunja = {
enable = true;
frontendHostname = "vikunja.${net.local_domain}";
frontendScheme = "http";
port = services.vikunja.port;
};
}