98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
let
 | 
						|
  cfg = config.services.miniflux;
 | 
						|
 | 
						|
  dbUser = "miniflux";
 | 
						|
  dbPassword = "miniflux";
 | 
						|
  dbHost = "localhost";
 | 
						|
  dbName = "miniflux";
 | 
						|
 | 
						|
  defaultCredentials = pkgs.writeText "miniflux-admin-credentials" ''
 | 
						|
    ADMIN_USERNAME=admin
 | 
						|
    ADMIN_PASSWORD=password
 | 
						|
  '';
 | 
						|
 | 
						|
  pgsu = "${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser}";
 | 
						|
  pgbin = "${config.services.postgresql.package}/bin";
 | 
						|
  preStart = pkgs.writeScript "miniflux-pre-start" ''
 | 
						|
    #!${pkgs.runtimeShell}
 | 
						|
    db_exists() {
 | 
						|
      [ "$(${pgsu} ${pgbin}/psql -Atc "select 1 from pg_database where datname='$1'")" == "1" ]
 | 
						|
    }
 | 
						|
    if ! db_exists "${dbName}"; then
 | 
						|
      ${pgsu} ${pgbin}/psql postgres -c "CREATE ROLE ${dbUser} WITH LOGIN NOCREATEDB NOCREATEROLE ENCRYPTED PASSWORD '${dbPassword}'"
 | 
						|
      ${pgsu} ${pgbin}/createdb --owner "${dbUser}" "${dbName}"
 | 
						|
      ${pgsu} ${pgbin}/psql "${dbName}" -c "CREATE EXTENSION IF NOT EXISTS hstore"
 | 
						|
    fi
 | 
						|
  '';
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
  options = {
 | 
						|
    services.miniflux = {
 | 
						|
      enable = mkEnableOption "miniflux";
 | 
						|
 | 
						|
      config = mkOption {
 | 
						|
        type = types.attrsOf types.str;
 | 
						|
        example = literalExample ''
 | 
						|
          {
 | 
						|
            CLEANUP_FREQUENCY = "48";
 | 
						|
            LISTEN_ADDR = "localhost:8080";
 | 
						|
          }
 | 
						|
        '';
 | 
						|
        description = ''
 | 
						|
          Configuration for Miniflux, refer to
 | 
						|
          <link xlink:href="http://docs.miniflux.app/en/latest/configuration.html"/>
 | 
						|
          for documentation on the supported values.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      adminCredentialsFile = mkOption  {
 | 
						|
        type = types.nullOr types.path;
 | 
						|
        default = null;
 | 
						|
        description = ''
 | 
						|
          File containing the ADMIN_USERNAME, default is "admin", and
 | 
						|
          ADMIN_PASSWORD (length >= 6), default is "password"; in the format of
 | 
						|
          an EnvironmentFile=, as described by systemd.exec(5).
 | 
						|
        '';
 | 
						|
        example = "/etc/nixos/miniflux-admin-credentials";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = mkIf cfg.enable {
 | 
						|
 | 
						|
    services.miniflux.config =  {
 | 
						|
      LISTEN_ADDR = mkDefault "localhost:8080";
 | 
						|
      DATABASE_URL = "postgresql://${dbUser}:${dbPassword}@${dbHost}/${dbName}?sslmode=disable";
 | 
						|
      RUN_MIGRATIONS = "1";
 | 
						|
      CREATE_ADMIN = "1";
 | 
						|
    };
 | 
						|
 | 
						|
    services.postgresql.enable = true;
 | 
						|
 | 
						|
    systemd.services.miniflux = {
 | 
						|
      description = "Miniflux service";
 | 
						|
      wantedBy = [ "multi-user.target" ];
 | 
						|
      requires = [ "postgresql.service" ];
 | 
						|
      after = [ "network.target" "postgresql.service" ];
 | 
						|
 | 
						|
      serviceConfig = {
 | 
						|
        ExecStart = "${pkgs.miniflux}/bin/miniflux";
 | 
						|
        ExecStartPre = "+${preStart}";
 | 
						|
        DynamicUser = true;
 | 
						|
        RuntimeDirectory = "miniflux";
 | 
						|
        RuntimeDirectoryMode = "0700";
 | 
						|
        EnvironmentFile = if cfg.adminCredentialsFile == null
 | 
						|
        then defaultCredentials
 | 
						|
        else cfg.adminCredentialsFile;
 | 
						|
      };
 | 
						|
 | 
						|
      environment = cfg.config;
 | 
						|
    };
 | 
						|
    environment.systemPackages = [ pkgs.miniflux ];
 | 
						|
  };
 | 
						|
}
 |