68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, pkgs, lib, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
  cfg = config.services.duplicati;
 | 
						|
in
 | 
						|
{
 | 
						|
  options = {
 | 
						|
    services.duplicati = {
 | 
						|
      enable = mkEnableOption "Duplicati";
 | 
						|
 | 
						|
      port = mkOption {
 | 
						|
        default = 8200;
 | 
						|
        type = types.int;
 | 
						|
        description = ''
 | 
						|
          Port serving the web interface
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      interface = mkOption {
 | 
						|
        default = "127.0.0.1";
 | 
						|
        type = types.str;
 | 
						|
        description = ''
 | 
						|
          Listening interface for the web UI
 | 
						|
          Set it to "any" to listen on all available interfaces
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      user = mkOption {
 | 
						|
        default = "duplicati";
 | 
						|
        type = types.str;
 | 
						|
        description = ''
 | 
						|
          Duplicati runs as it's own user. It will only be able to backup world-readable files.
 | 
						|
          Run as root with special care.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = mkIf cfg.enable {
 | 
						|
    environment.systemPackages = [ pkgs.duplicati ];
 | 
						|
 | 
						|
    systemd.services.duplicati = {
 | 
						|
      description = "Duplicati backup";
 | 
						|
      after = [ "network.target" ];
 | 
						|
      wantedBy = [ "multi-user.target" ];
 | 
						|
      serviceConfig = {
 | 
						|
        User = cfg.user;
 | 
						|
        Group = "duplicati";
 | 
						|
        StateDirectory = "duplicati";
 | 
						|
        ExecStart = "${pkgs.duplicati}/bin/duplicati-server --webservice-interface=${cfg.interface} --webservice-port=${toString cfg.port} --server-datafolder=/var/lib/duplicati";
 | 
						|
        Restart = "on-failure";
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
    users.users.duplicati = lib.optionalAttrs (cfg.user == "duplicati") {
 | 
						|
      uid = config.ids.uids.duplicati;
 | 
						|
      home = "/var/lib/duplicati";
 | 
						|
      createHome = true;
 | 
						|
      group = "duplicati";
 | 
						|
    };
 | 
						|
    users.groups.duplicati.gid = config.ids.gids.duplicati;
 | 
						|
 | 
						|
  };
 | 
						|
}
 | 
						|
 |