{ config, pkgs, lib, secrets, ... }: { systemd.timers = { "auto-redeploy" = { wantedBy = [ "timers.target" ]; after = [ "network.target" ]; timerConfig = { #every 30 seconds since boot OnBootSec = "10s"; OnUnitActiveSec = "30s"; Unit = "auto-redeploy.service"; }; }; }; #Emma - Auto-redeploy service systemd.services = { "auto-redeploy" = { #wantedBy = [ "multi-user.target" ]; #after = [ "network.target" ]; path = with pkgs; [ git curl nix nixos-install-tools nixos-rebuild ]; serviceConfig = { ExecStart = pkgs.writeShellScript "auto-redeploy" '' cd /Spacebar-Open-Architecture #store current commit hash echo "Current commit: $(git rev-parse HEAD)" currentCommit=$(git rev-parse HEAD) git fetch --all #check if there are any new commits echo "Checking for new commits..." echo "Local: $(git rev-parse HEAD)" echo "Remote: $(git rev-parse @{u})" if [ $(git rev-parse HEAD) = $(git rev-parse @{u}) ]; then echo "Already up-to-date" exit 0 fi curl -S -H "Content-Type: application/json" -d '{"username": "${config.networking.hostName} - redeploy", "content": "System started redeploy."}' ${secrets.webhooks.discord.deploy} #pull new commits git pull #send commit log to discord #curl -S -F "file=@<(git log --pretty=format:'%h - %s (%an, %ar)' $currentCommit..HEAD)" -F "filename=commit.log" -F "content=Adding commits" -H "Content-Type: multipart/form-data" ${secrets.webhooks.discord.deploy} #call ./update.sh and store output (including stderr) in a file ( nix flake update nixos-generate-config --show-hardware-config > hardware-configuration.nix git add -f hardware-configuration.nix nixos-rebuild switch --flake ".#${config.networking.hostName}" -j`nproc` --upgrade-all git rm --cached hardware-configuration.nix ) 2>&1 | tee /tmp/update.log #send the output to discord as a file curl -S -F "file=@/tmp/update.log" -F "filename=update.log" -F "content=System finished redeploy. Make sure to check for errors, otherwise no future deployments will happen.\n***This requires manual intervention.***" -H "Content-Type: multipart/form-data" ${secrets.webhooks.discord.deploy} #store current commit in file echo $(git rev-parse HEAD) > currentCommit ''; #Restart = "always"; #RestartSec = 60; User = "root"; }; }; }; }