name: Update flake inputs

on:
  schedule:
    - cron: '0 4 * * *'  # Daily at 4am UTC
  workflow_dispatch:       # Allow manual trigger from the Actions tab

jobs:
  update:
    runs-on: fred-nix
    permissions:
      contents: write

    steps:
      - name: Checkout repo
        uses: actions/checkout@v6

      - name: Install Nix
        run: |
          set -euxo pipefail
          # The Nix install script refuses to run cleanly as root unless the
          # nixbld group + users exist, even with --no-daemon. The runner's
          # catthehacker image runs jobs as root, so create them first.
          groupadd -r nixbld || true
          for i in $(seq 1 10); do
            useradd -r -g nixbld -G nixbld -d /var/empty -s /sbin/nologin \
              -c "Nix build user $i" "nixbld$i" || true
          done
          curl --proto '=https' --tlsv1.2 -sSfL https://nixos.org/nix/install | sh -s -- --no-daemon
          echo "$HOME/.nix-profile/bin" >> "$GITHUB_PATH"
          mkdir -p ~/.config/nix
          echo 'experimental-features = nix-command flakes' >> ~/.config/nix/nix.conf

      - name: Update flake inputs
        run: nix flake update

      - name: Commit and push
        run: |
          set -euxo pipefail
          git config user.name 'forgejo-actions[bot]'
          git config user.email 'actions@forg.gregersen.it'
          git add flake.lock
          git commit --allow-empty -m 'Update flake inputs'
          git push
