default.nix (1846B) - Raw
1 { 2 lib, 3 config, 4 pkgs, 5 ... 6 }: 7 { 8 options.mj.services.wifibackup = with lib.types; { 9 enable = lib.mkEnableOption "enable wifi code backups to M-Active"; 10 fromPath = lib.mkOption { 11 type = path; 12 default = "/etc/NetworkManager/system-connections"; 13 }; 14 toPath = lib.mkOption { 15 type = path; 16 example = "/home/motiejus/M-Active/wifi"; 17 }; 18 toUser = lib.mkOption { 19 type = str; 20 example = "motiejus"; 21 }; 22 }; 23 24 config = 25 with config.mj.services.wifibackup; 26 lib.mkIf enable { 27 mj.base.unitstatus.units = [ "wifibackup" ]; 28 29 systemd.timers.wifibackup = { 30 description = "wifibackup to M-Active"; 31 wantedBy = [ "timers.target" ]; 32 timerConfig.OnCalendar = "*-*-* 22:00:00 UTC"; 33 }; 34 systemd.services.wifibackup = { 35 description = "backup ${fromPath} to ${toPath}"; 36 serviceConfig = { 37 Type = "oneshot"; 38 User = "root"; 39 SuccessExitStatus = [ 40 0 41 1 42 ]; 43 }; 44 script = 45 let 46 knownHostsCmd = pkgs.writeShellScript "known-hosts-localhost" '' 47 echo -n "localhost " 48 exec ${pkgs.coreutils}/bin/cat /etc/ssh/ssh_host_ed25519_key.pub 49 ''; 50 in 51 '' 52 sed -i -E '/^(uuid|interface-name)=/d' ${fromPath}/*.nmconnection 53 54 exec ${pkgs.unison}/bin/unison \ 55 -sshcmd ${pkgs.openssh}/bin/ssh \ 56 -sshargs "-i /etc/ssh/ssh_host_ed25519_key -o KnownHostsCommand=${knownHostsCmd} -o UserKnownHostsFile=none -o GlobalKnownHostsFile=/dev/null" \ 57 -batch \ 58 -backuploc local \ 59 -backup "Name *" \ 60 ${fromPath} \ 61 ssh://${toUser}@localhost/${toPath}/ 62 ''; 63 }; 64 }; 65 }