name: Build

on: [push, pull_request, workflow_dispatch]
jobs:
  nix:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Install Nix
      uses: nixbuild/nix-quick-install-action@v31
      with:
        nix_conf: |
          keep-env-derivations = true
          keep-outputs = true

    - name: Restore and save Nix store
      uses: nix-community/cache-nix-action@v6
      with:
        # restore and save a cache using this key
        primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}
        # if there's no cache hit, restore a cache by this prefix
        restore-prefixes-first-match: nix-${{ runner.os }}-
        # collect garbage until the Nix store size (in bytes) is at most this number
        # before trying to save a new cache
        # 1G = 1073741824
        gc-max-store-size-linux: 1G
        # do purge caches
        purge: true
        # purge all versions of the cache
        purge-prefixes: nix-${{ runner.os }}-
        # created more than this number of seconds ago
        purge-created: 0
        # or, last accessed more than this number of seconds ago
        # relative to the start of the `Post Restore and save Nix store` phase
        purge-last-accessed: 0
        # except any version with the key that is the same as the `primary-key`
        purge-primary-key: never

    # not needed (yet)
    # - uses: cachix/cachix-action@v12
    #   with:
    #     name: hyprland
    #     authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

    - name: Build
      run: nix flake check --print-build-logs --keep-going

