diff --git a/git-auto-update.nix b/git-auto-update.nix index 5581416..44cfceb 100644 --- a/git-auto-update.nix +++ b/git-auto-update.nix @@ -1,74 +1,62 @@ { config, pkgs, ... }: -let - gitUpdateScript = pkgs.writeShellScript "nix-git-auto-update" '' - set -euo pipefail - - LOCAL_PATH="/var/lib/nixos-config" - REPO_URL="https://git.skarockoi.de/ska/nixos-production.git" - - if [ ! -d "$LOCAL_PATH/.git" ]; then - mkdir -p "$LOCAL_PATH" - chmod 700 "$LOCAL_PATH" - ${pkgs.git}/bin/git clone "$REPO_URL" "$LOCAL_PATH" - exit 0 - fi - - cd "$LOCAL_PATH" - - ${pkgs.git}/bin/git fetch origin - - LOCAL_HEAD=$(${pkgs.git}/bin/git rev-parse HEAD) - REMOTE_HEAD=$(${pkgs.git}/bin/git rev-parse origin/main) - - if [ "$LOCAL_HEAD" != "$REMOTE_HEAD" ]; then - ${pkgs.git}/bin/git reset --hard origin/main - ${pkgs.nixos-rebuild}/bin/nixos-rebuild boot \ - -I nixos-config="$LOCAL_PATH/configuration.nix" - fi - ''; -in { - ############################## - # Git Auto Update Script - ############################## + ######################################## + # NixOS Git Auto Update Script + ######################################## - environment.etc."nix-git-auto-update.sh" = { + environment.etc."nixos-git-update.sh" = { mode = "0700"; - source = gitUpdateScript; + text = '' + #!/run/current-system/sw/bin/bash + set -e + + export PATH="/run/current-system/sw/bin:/nix/var/nix/profiles/default/bin" + export NIX_PATH="nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos" + + LOCAL_PATH="/var/lib/nixos-config" + REPO_URL="https://git.skarockoi.de/ska/nixos-production.git" + + if [ ! -d "$LOCAL_PATH/.git" ]; then + mkdir -p "$LOCAL_PATH" + chmod 700 "$LOCAL_PATH" + git clone "$REPO_URL" "$LOCAL_PATH" + exit 0 + fi + + cd "$LOCAL_PATH" + + git fetch origin + LOCAL_HEAD=$(git rev-parse HEAD) + REMOTE_HEAD=$(git rev-parse origin/main) + + if [ "$LOCAL_HEAD" != "$REMOTE_HEAD" ]; then + git reset --hard origin/main + nixos-rebuild boot -I nixos-config="$LOCAL_PATH/configuration.nix" + fi + ''; }; - ############################## - # systemd service - ############################## - - systemd.services.nix-git-auto-update = { - description = "Automatically update NixOS from Git"; - - wants = [ "network-online.target" ]; - after = [ "network-online.target" ]; - + systemd.services.nixos-git-update = { + description = "Update NixOS from Git configuration"; + script = "/etc/nixos-git-update.sh"; serviceConfig = { Type = "oneshot"; - ExecStart = "/etc/nix-git-auto-update.sh"; + User = "root"; + Group = "root"; TimeoutStartSec = "10min"; Restart = "on-failure"; + StandardOutput = "journal"; + StandardError = "journal"; }; }; - ############################## - # systemd timer - ############################## - - systemd.timers.nix-git-auto-update = { - description = "Periodic NixOS Git update check"; - + systemd.timers.nixos-git-update = { + description = "Periodic NixOS Git configuration check"; wantedBy = [ "timers.target" ]; - timerConfig = { - OnBootSec = "2min"; + OnBootSec = "60s"; OnUnitActiveSec = "5min"; - Persistent = true; }; }; } \ No newline at end of file