Self-host your own digital island
1# nixos-mailserver: a simple mail server 2# Copyright (C) 2016-2018 Robin Raymond 3# 4# This program is free software: you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation, either version 3 of the License, or 7# (at your option) any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <http://www.gnu.org/licenses/> 16 17{ config, pkgs, lib, ... }: 18 19with lib; 20 21let 22 cfg = config.mailserver; 23 24 preexecDefined = cfg.backup.cmdPreexec != null; 25 preexecWrapped = pkgs.writeScript "rsnapshot-preexec.sh" '' 26 #!${pkgs.stdenv.shell} 27 set -e 28 29 ${cfg.backup.cmdPreexec} 30 ''; 31 preexecString = optionalString preexecDefined "cmd_preexec ${preexecWrapped}"; 32 33 postexecDefined = cfg.backup.cmdPostexec != null; 34 postexecWrapped = pkgs.writeScript "rsnapshot-postexec.sh" '' 35 #!${pkgs.stdenv.shell} 36 set -e 37 38 ${cfg.backup.cmdPostexec} 39 ''; 40 postexecString = optionalString postexecDefined "cmd_postexec ${postexecWrapped}"; 41in { 42 config = mkIf (cfg.enable && cfg.backup.enable) { 43 services.rsnapshot = { 44 enable = true; 45 cronIntervals = cfg.backup.cronIntervals; 46 # rsnapshot expects intervals shortest first, e.g. hourly first, then daily. 47 # tabs must separate all elements 48 extraConfig = '' 49 ${preexecString} 50 ${postexecString} 51 snapshot_root ${cfg.backup.snapshotRoot}/ 52 retain hourly ${toString cfg.backup.retain.hourly} 53 retain daily ${toString cfg.backup.retain.daily} 54 retain weekly ${toString cfg.backup.retain.weekly} 55 backup ${cfg.mailDirectory}/ localhost/ 56 ''; 57 }; 58 }; 59}