at 21.11-pre 3.2 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4let 5 cfg = config.services.miniflux; 6 7 dbUser = "miniflux"; 8 dbPassword = "miniflux"; 9 dbHost = "localhost"; 10 dbName = "miniflux"; 11 12 defaultCredentials = pkgs.writeText "miniflux-admin-credentials" '' 13 ADMIN_USERNAME=admin 14 ADMIN_PASSWORD=password 15 ''; 16 17 pgbin = "${config.services.postgresql.package}/bin"; 18 preStart = pkgs.writeScript "miniflux-pre-start" '' 19 #!${pkgs.runtimeShell} 20 db_exists() { 21 [ "$(${pgbin}/psql -Atc "select 1 from pg_database where datname='$1'")" == "1" ] 22 } 23 if ! db_exists "${dbName}"; then 24 ${pgbin}/psql postgres -c "CREATE ROLE ${dbUser} WITH LOGIN NOCREATEDB NOCREATEROLE ENCRYPTED PASSWORD '${dbPassword}'" 25 ${pgbin}/createdb --owner "${dbUser}" "${dbName}" 26 ${pgbin}/psql "${dbName}" -c "CREATE EXTENSION IF NOT EXISTS hstore" 27 fi 28 ''; 29in 30 31{ 32 options = { 33 services.miniflux = { 34 enable = mkEnableOption "miniflux"; 35 36 config = mkOption { 37 type = types.attrsOf types.str; 38 example = literalExample '' 39 { 40 CLEANUP_FREQUENCY = "48"; 41 LISTEN_ADDR = "localhost:8080"; 42 } 43 ''; 44 description = '' 45 Configuration for Miniflux, refer to 46 <link xlink:href="https://miniflux.app/docs/configuration.html"/> 47 for documentation on the supported values. 48 ''; 49 }; 50 51 adminCredentialsFile = mkOption { 52 type = types.nullOr types.path; 53 default = null; 54 description = '' 55 File containing the ADMIN_USERNAME, default is "admin", and 56 ADMIN_PASSWORD (length >= 6), default is "password"; in the format of 57 an EnvironmentFile=, as described by systemd.exec(5). 58 ''; 59 example = "/etc/nixos/miniflux-admin-credentials"; 60 }; 61 }; 62 }; 63 64 config = mkIf cfg.enable { 65 66 services.miniflux.config = { 67 LISTEN_ADDR = mkDefault "localhost:8080"; 68 DATABASE_URL = "postgresql://${dbUser}:${dbPassword}@${dbHost}/${dbName}?sslmode=disable"; 69 RUN_MIGRATIONS = "1"; 70 CREATE_ADMIN = "1"; 71 }; 72 73 services.postgresql.enable = true; 74 75 systemd.services.miniflux-dbsetup = { 76 description = "Miniflux database setup"; 77 wantedBy = [ "multi-user.target" ]; 78 requires = [ "postgresql.service" ]; 79 after = [ "network.target" "postgresql.service" ]; 80 serviceConfig = { 81 Type = "oneshot"; 82 User = config.services.postgresql.superUser; 83 ExecStart = preStart; 84 }; 85 }; 86 87 systemd.services.miniflux = { 88 description = "Miniflux service"; 89 wantedBy = [ "multi-user.target" ]; 90 requires = [ "postgresql.service" ]; 91 after = [ "network.target" "postgresql.service" "miniflux-dbsetup.service" ]; 92 93 serviceConfig = { 94 ExecStart = "${pkgs.miniflux}/bin/miniflux"; 95 DynamicUser = true; 96 RuntimeDirectory = "miniflux"; 97 RuntimeDirectoryMode = "0700"; 98 EnvironmentFile = if cfg.adminCredentialsFile == null 99 then defaultCredentials 100 else cfg.adminCredentialsFile; 101 }; 102 103 environment = cfg.config; 104 }; 105 environment.systemPackages = [ pkgs.miniflux ]; 106 }; 107}