All checks were successful
Check Flake / check-flake (push) Successful in 6m3s
88 lines
2.7 KiB
Nix
88 lines
2.7 KiB
Nix
# Starting point:
|
|
# https://github.com/aldoborrero/mynixpkgs/commit/c501c1e32dba8f4462dcecb57eee4b9e52038e27
|
|
|
|
{ config, pkgs, lib, ... }:
|
|
|
|
let
|
|
cfg = config.services.actual-server;
|
|
stateDir = "/var/lib/${cfg.stateDirName}";
|
|
in
|
|
{
|
|
options.services.actual-server = {
|
|
enable = lib.mkEnableOption "Actual Server";
|
|
|
|
hostname = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "localhost";
|
|
description = "Hostname for the Actual Server.";
|
|
};
|
|
|
|
port = lib.mkOption {
|
|
type = lib.types.int;
|
|
default = 25448;
|
|
description = "Port on which the Actual Server should listen.";
|
|
};
|
|
|
|
stateDirName = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "actual-server";
|
|
description = "Name of the directory under /var/lib holding the server's data.";
|
|
};
|
|
|
|
upload = {
|
|
fileSizeSyncLimitMB = lib.mkOption {
|
|
type = lib.types.nullOr lib.types.int;
|
|
default = null;
|
|
description = "File size limit in MB for synchronized files.";
|
|
};
|
|
|
|
syncEncryptedFileSizeLimitMB = lib.mkOption {
|
|
type = lib.types.nullOr lib.types.int;
|
|
default = null;
|
|
description = "File size limit in MB for synchronized encrypted files.";
|
|
};
|
|
|
|
fileSizeLimitMB = lib.mkOption {
|
|
type = lib.types.nullOr lib.types.int;
|
|
default = null;
|
|
description = "File size limit in MB for file uploads.";
|
|
};
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
systemd.services.actual-server = {
|
|
description = "Actual Server";
|
|
after = [ "network.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
ExecStart = "${pkgs.actual-server}/bin/actual-server";
|
|
Restart = "always";
|
|
StateDirectory = cfg.stateDirName;
|
|
WorkingDirectory = stateDir;
|
|
DynamicUser = true;
|
|
UMask = "0007";
|
|
};
|
|
environment = {
|
|
NODE_ENV = "production";
|
|
ACTUAL_PORT = toString cfg.port;
|
|
|
|
# Actual is actually very bad at configuring it's own paths despite that information being readily available
|
|
ACTUAL_USER_FILES = "${stateDir}/user-files";
|
|
ACTUAL_SERVER_FILES = "${stateDir}/server-files";
|
|
ACTUAL_DATA_DIR = stateDir;
|
|
|
|
ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB = toString (cfg.upload.fileSizeSyncLimitMB or "");
|
|
ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SIZE_LIMIT_MB = toString (cfg.upload.syncEncryptedFileSizeLimitMB or "");
|
|
ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB = toString (cfg.upload.fileSizeLimitMB or "");
|
|
};
|
|
};
|
|
|
|
services.nginx.virtualHosts.${cfg.hostname} = {
|
|
enableACME = true;
|
|
forceSSL = true;
|
|
locations."/".proxyPass = "http://localhost:${toString cfg.port}";
|
|
};
|
|
};
|
|
}
|