config

NixOS config
Log | Files | Refs | README | LICENSE

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 }