# Maintainer: Duncan Tourolle <duncan@tourolle.paris>
#
# Builds from the local checkout rather than a release tarball, which is what
# makes `makepkg -si` in this directory install what you are actually working
# on. Swap `source` for a tagged tarball when there is something to release.
pkgname=darkroom
pkgver=0.8.0
# 2: the package gained the face models (docs/faces.md §2.2a). Same version,
# different contents, so makepkg must not reuse the 0.7.0-1 archive.
pkgrel=1
pkgdesc="Non-destructive RAW photo library and editor"
arch=('x86_64')
url="https://gitea.tourolle.paris/dtourolle/DarkRoom"
license=('GPL-3.0-or-later')
# Runtime: Vulkan for wgpu, and a Secret Service implementation for the
# Nextcloud credentials (FR-NC-2) — gnome-keyring or kwallet both provide it.
depends=('vulkan-icd-loader' 'fontconfig' 'libxkbcommon')
makedepends=('cargo' 'git')
optdepends=('gnome-keyring: store Nextcloud credentials'
            'kwallet: store Nextcloud credentials')
options=('!lto')  # the workspace sets its own LTO in Cargo.toml

_repo="$(cd "${startdir}/.." && pwd)"

build() {
    cd "${_repo}"
    export RUSTUP_TOOLCHAIN=stable
    export CARGO_TARGET_DIR="${_repo}/target"
    cargo build --release --locked -p darkroom-desktop
}

package() {
    cd "${_repo}"
    install -Dm755 "target/release/darkroom-desktop" \
        "${pkgdir}/usr/bin/darkroom-desktop"

    install -Dm644 "packaging/paris.tourolle.darkroom.desktop" \
        "${pkgdir}/usr/share/applications/paris.tourolle.darkroom.desktop"

    # The icon's *name* is the contract, not its path: the desktop entry says
    # `Icon=paris.tourolle.darkroom` and the compositor resolves that through
    # the hicolor theme. Installed under 256x256 because that is the source's
    # actual size — lying about it makes scaled-down icons look wrong.
    install -Dm644 "ui/dr-ui/ui/app-icon.png" \
        "${pkgdir}/usr/share/icons/hicolor/256x256/apps/paris.tourolle.darkroom.png"

    install -Dm644 "README.md" "${pkgdir}/usr/share/doc/${pkgname}/README.md"

    # The face models, into the last directory the app searches. A pair the
    # user placed in their own data directory outranks these, so installing
    # them cannot override a deliberate choice of weights.
    #
    # These live in LFS; a checkout without `git lfs pull` has ~130-byte
    # pointers here. Installing one produces a package whose face indexing
    # fails inside the graph loader on the user's machine, so refuse instead.
    for _m in scrfd_500m_640.onnx arcface_mbf_b1.onnx; do
        _src="models/face/${_m}"
        if [[ "$(stat -c%s "${_src}")" -lt 100000 ]]; then
            echo "error: ${_m} is an LFS pointer, not a model — run: git lfs pull" >&2
            return 1
        fi
        install -Dm644 "${_src}" "${pkgdir}/usr/share/darkroom/models/${_m}"
    done
}
