1{ lib, ... }:
2
3let
4 db-pass = "Test2Test2";
5 app-key = "TestTestTestTestTestTestTestTest";
6in
7{
8 name = "firefly-iii";
9 meta.maintainers = [ lib.maintainers.savyajha ];
10
11 nodes.fireflySqlite =
12 { config, ... }:
13 {
14 environment.etc = {
15 "firefly-iii-appkey".text = app-key;
16 };
17 services.firefly-iii = {
18 enable = true;
19 enableNginx = true;
20 settings = {
21 APP_KEY_FILE = "/etc/firefly-iii-appkey";
22 LOG_CHANNEL = "stdout";
23 SITE_OWNER = "mail@example.com";
24 };
25 };
26 };
27
28 nodes.fireflyPostgresql =
29 { config, pkgs, ... }:
30 {
31 environment.etc = {
32 "firefly-iii-appkey".text = app-key;
33 "postgres-pass".text = db-pass;
34 };
35 services.firefly-iii = {
36 enable = true;
37 enableNginx = true;
38 settings = {
39 APP_KEY_FILE = "/etc/firefly-iii-appkey";
40 LOG_CHANNEL = "stdout";
41 SITE_OWNER = "mail@example.com";
42 DB_CONNECTION = "pgsql";
43 DB_DATABASE = "firefly";
44 DB_USERNAME = "firefly";
45 DB_PASSWORD_FILE = "/etc/postgres-pass";
46 PGSQL_SCHEMA = "firefly";
47 };
48 };
49
50 services.postgresql = {
51 enable = true;
52 package = pkgs.postgresql_16;
53 authentication = ''
54 local all postgres peer
55 local firefly firefly password
56 '';
57 initialScript = pkgs.writeText "firefly-init.sql" ''
58 CREATE USER "firefly" WITH LOGIN PASSWORD '${db-pass}';
59 CREATE DATABASE "firefly" WITH OWNER "firefly";
60 \c firefly
61 CREATE SCHEMA AUTHORIZATION firefly;
62 '';
63 };
64 };
65
66 nodes.fireflyMysql =
67 { config, pkgs, ... }:
68 {
69 environment.etc = {
70 "firefly-iii-appkey".text = app-key;
71 "mysql-pass".text = db-pass;
72 };
73 services.firefly-iii = {
74 enable = true;
75 enableNginx = true;
76 settings = {
77 APP_KEY_FILE = "/etc/firefly-iii-appkey";
78 LOG_CHANNEL = "stdout";
79 SITE_OWNER = "mail@example.com";
80 DB_CONNECTION = "mysql";
81 DB_DATABASE = "firefly";
82 DB_USERNAME = "firefly";
83 DB_PASSWORD_FILE = "/etc/mysql-pass";
84 DB_SOCKET = "/run/mysqld/mysqld.sock";
85 };
86 };
87
88 services.mysql = {
89 enable = true;
90 package = pkgs.mariadb;
91 initialScript = pkgs.writeText "firefly-init.sql" ''
92 create database firefly DEFAULT CHARACTER SET utf8mb4;
93 create user 'firefly'@'localhost' identified by '${db-pass}';
94 grant all on firefly.* to 'firefly'@'localhost';
95 '';
96 settings.mysqld.character-set-server = "utf8mb4";
97 };
98 };
99
100 testScript = ''
101 fireflySqlite.wait_for_unit("phpfpm-firefly-iii.service")
102 fireflySqlite.wait_for_unit("nginx.service")
103 fireflySqlite.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
104 fireflySqlite.succeed("curl -fvvv -Ls http://localhost/v1/js/app.js")
105 fireflySqlite.succeed("systemctl start firefly-iii-cron.service")
106 fireflyPostgresql.wait_for_unit("phpfpm-firefly-iii.service")
107 fireflyPostgresql.wait_for_unit("nginx.service")
108 fireflyPostgresql.wait_for_unit("postgresql.service")
109 fireflyPostgresql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
110 fireflyPostgresql.succeed("systemctl start firefly-iii-cron.service")
111 fireflyMysql.wait_for_unit("phpfpm-firefly-iii.service")
112 fireflyMysql.wait_for_unit("nginx.service")
113 fireflyMysql.wait_for_unit("mysql.service")
114 fireflyMysql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
115 fireflyMysql.succeed("systemctl start firefly-iii-cron.service")
116 '';
117}