Skip to content

Commit

Permalink
nixos/fider: init
Browse files Browse the repository at this point in the history
Co-authored-by: Niklas Korz <[email protected]>
  • Loading branch information
drupol and niklaskorz committed Nov 3, 2024
1 parent 2ac3b27 commit c1fc831
Show file tree
Hide file tree
Showing 5 changed files with 150 additions and 0 deletions.
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1416,6 +1416,7 @@
./services/web-apps/eintopf.nix
./services/web-apps/engelsystem.nix
./services/web-apps/ethercalc.nix
./services/web-apps/fider.nix
./services/web-apps/filesender.nix
./services/web-apps/firefly-iii.nix
./services/web-apps/firefly-iii-data-importer.nix
Expand Down
110 changes: 110 additions & 0 deletions nixos/modules/services/web-apps/fider.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.fider;
fiderCmd = lib.getExe cfg.package;
in
{
options = {

services.fider = {
enable = lib.mkEnableOption "the Fider server";
package = lib.mkPackageOption pkgs "fider" { };

dataDir = lib.mkOption {
type = lib.types.str;
default = "/var/lib/fider";
description = "Default data folder for Fider.";
example = "/mnt/fider";
};

database = {
url = lib.mkOption {
type = lib.types.str;
default = "local";
description = ''
URI to use for the main PostgreSQL database. If this needs to include
credentials that shouldn't be world-readable in the Nix store, set an
environment file on the systemd service and override the
`DATABASE_URL` entry. Pass the string
`local` to setup a database on the local server.
'';
};
};

environment = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = { };
description = ''
Environment variables to set for the service. Secrets should be
specified using {option}`environmentFiles`.
'';
};

environmentFiles = lib.mkOption {
type = lib.types.listOf lib.types.path;
default = [ ];
description = ''
Files to load environment variables from. Loaded variables override
values set in {option}`environment`.
'';
};
};
};

config = lib.mkIf cfg.enable {
services.postgresql = lib.mkIf (cfg.database.url == "local") {
enable = true;
ensureUsers = [
{
name = "fider";
ensureDBOwnership = true;
}
];
ensureDatabases = [ "fider" ];
};

systemd.services.fider = {
description = "Fider server";
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
] ++ lib.optionals (cfg.database.url == "local") [ "postgresql.service" ];
requires = lib.optionals (cfg.database.url == "local") [ "postgresql.service" ];
environment =
let
localPostgresqlUrl = "postgres:///fider?host=/run/postgresql";
in
{
DATABASE_URL = if (cfg.database.url == "local") then localPostgresqlUrl else cfg.database.url;
BLOB_STORAGE_FS_PATH = "${cfg.dataDir}";
}
// cfg.environment;
serviceConfig = {
ExecStartPre = "${fiderCmd} migrate";
ExecStart = fiderCmd;
StateDirectory = "fider";
DynamicUser = true;
PrivateTmp = "yes";
Restart = "on-failure";
RuntimeDirectory = "fider";
RuntimeDirectoryPreserve = true;
CacheDirectory = "fider";
WorkingDirectory = "${cfg.package}";
EnvironmentFile = cfg.environmentFiles;
};
};
};

meta = {
maintainers = with lib.maintainers; [
drupol
niklaskorz
];
# doc = ./fider.md;
};
}
1 change: 1 addition & 0 deletions nixos/tests/all-tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ in {
fenics = handleTest ./fenics.nix {};
ferm = handleTest ./ferm.nix {};
ferretdb = handleTest ./ferretdb.nix {};
fider = runTest ./fider.nix;
filesender = handleTest ./filesender.nix {};
filesystems-overlayfs = runTest ./filesystems-overlayfs.nix;
firefly-iii = handleTest ./firefly-iii.nix {};
Expand Down
33 changes: 33 additions & 0 deletions nixos/tests/fider.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{ lib, ... }:

{
name = "fider-server";

nodes = {
machine =
{ pkgs, ... }:
{
services.fider = {
enable = true;
environment = {
JWT_SECRET = "not_so_secret";
BASE_URL = "/";
EMAIL_NOREPLY = "[email protected]";
EMAIL_SMTP_HOST = "mailhog";
EMAIL_SMTP_PORT = "1025";
};
};
};
};

testScript = ''
machine.start()
machine.wait_for_unit("fider.service")
machine.wait_for_open_port(3000)
'';

meta.maintainers = with lib.maintainers; [
drupol
niklaskorz
];
}
5 changes: 5 additions & 0 deletions pkgs/by-name/fi/fider/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
stdenvNoCC,
fetchFromGitHub,
callPackage,
nixosTests,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "fider";
Expand Down Expand Up @@ -37,6 +38,10 @@ stdenvNoCC.mkDerivation (finalAttrs: {
runHook postInstall
'';

passthru.tests = {
inherit (nixosTests) fider;
};

meta = {
description = "Open platform to collect and prioritize feedback";
homepage = "https://github.com/getfider/fider";
Expand Down

0 comments on commit c1fc831

Please sign in to comment.