{ config, lib, pkgs, ... }: with import ; let all_hosts = [ "icarus" "shodan" "daedalus" "skynet" "prism" "littleT" ]; remote_hosts = filter (h: h != config.networking.hostName) all_hosts; in { imports = [ { #hack for already defined systemd.services."container@blue".reloadIfChanged = mkForce false; systemd.services."container@blue".preStart = '' ${pkgs.mount}/bin/mount | ${pkgs.gnugrep}/bin/grep -q '^encfs on /var/lib/containers/blue' ''; systemd.services."container@blue".preStop = '' /run/wrappers/bin/fusermount -u /var/lib/containers/blue ''; } ]; system.activationScripts.containerPermissions = '' mkdir -p /var/lib/containers chmod 711 /var/lib/containers ''; containers.blue = { config = { ... }: { environment.systemPackages = [ pkgs.git pkgs.rxvt_unicode.terminfo ]; services.openssh.enable = true; users.users.root.openssh.authorizedKeys.keys = [ config.krebs.users.lass.pubkey ]; }; autoStart = false; enableTun = true; privateNetwork = true; hostAddress = "10.233.2.9"; localAddress = "10.233.2.10"; }; #systemd.services = builtins.listToAttrs (map (host: # let # in nameValuePair "sync-blue-${host}" { # bindsTo = [ "container@blue.service" ]; # wantedBy = [ "container@blue.service" ]; # # ssh needed for rsync # path = [ pkgs.openssh ]; # serviceConfig = { # Restart = "always"; # RestartSec = 10; # ExecStart = pkgs.writeDash "sync-blue-${host}" '' # set -efu # #make sure blue is running # /run/wrappers/bin/ping -c1 blue.r > /dev/null # #make sure the container is unlocked # ${pkgs.mount}/bin/mount | ${pkgs.gnugrep}/bin/grep -q '^encfs on /var/lib/containers/blue' # #make sure our target is reachable # ${pkgs.untilport}/bin/untilport ${host}.r 22 2>/dev/null # #start sync # ${pkgs.lsyncd}/bin/lsyncd -log scarce ${pkgs.writeText "lsyncd-config.lua" '' # settings { # nodaemon = true, # inotifyMode = "CloseWrite or Modify", # } # sync { # default.rsyncssh, # source = "/var/lib/containers/.blue", # host = "${host}.r", # targetdir = "/var/lib/containers/.blue", # rsync = { # archive = true, # owner = true, # group = true, # }; # ssh = { # binary = "${pkgs.openssh}/bin/ssh"; # identityFile = "/var/lib/containers/blue/home/lass/.ssh/id_rsa", # }, # } # ''} # ''; # }; # unitConfig.ConditionPathExists = "!/var/run/ppp0.pid"; # } #) remote_hosts); environment.systemPackages = [ (pkgs.writeDashBin "start-blue" '' set -ef if ! $(mount | ${pkgs.gnugrep}/bin/grep -qi '^encfs on /var/lib/containers/blue'); then ${pkgs.encfs}/bin/encfs --public /var/lib/containers/.blue /var/lib/containers/blue fi nixos-container start blue nixos-container run blue -- nixos-rebuild -I /var/src dry-build if ping -c1 blue.r >/dev/null; then echo 'blue is already running. bailing out' exit 23 fi nixos-container run blue -- nixos-rebuild -I /var/src switch '') ]; }