diff --git a/README.md b/README.md index 59e80ba..13a0c98 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ sudo apt install ./proton-drive-linux_*.deb # Fedora sudo dnf install ./proton-drive-linux-*.rpm -# Arch Linux -cd packaging && makepkg -fi +# Arch Linux (AUR) +paru -S proton-drive-for-linux # or -git / -bin ``` Packages for each release are attached to the [latest @@ -431,8 +431,24 @@ Install the debian package via `dpkg` or `apt`: sudo apt install ./proton-drive-linux_*.deb ``` -### 2. Arch Linux -A local `PKGBUILD` is available under the `packaging/` directory. You can build and install it using: +### 2. Arch Linux (AUR) +Three AUR packages cover the usual choices; they conflict with each other, so +install one: + +| Package | Contents | +| --- | --- | +| [`proton-drive-for-linux`](https://aur.archlinux.org/packages/proton-drive-for-linux) | builds the latest tagged release from source | +| [`proton-drive-for-linux-git`](https://aur.archlinux.org/packages/proton-drive-for-linux-git) | builds `main` from git | +| [`proton-drive-for-linux-bin`](https://aur.archlinux.org/packages/proton-drive-for-linux-bin) | installs the release binaries, no compile | + +```bash +paru -S proton-drive-for-linux # or any AUR helper +``` + +The package sources live in `packaging/aur/`; see +[`packaging/aur/README.md`](packaging/aur/README.md) for how they are updated and +published. A local `PKGBUILD` that compiles the working tree in place is still +available for development builds: ```bash cd packaging && makepkg -fi ``` diff --git a/packaging/aur/README.md b/packaging/aur/README.md new file mode 100644 index 0000000..1c9f08a --- /dev/null +++ b/packaging/aur/README.md @@ -0,0 +1,48 @@ +# AUR packages + +Source of truth for the three AUR packages of this project. Each subdirectory is +the full content of one AUR git repository (`pkgbase` = directory name): + +| Directory | What it does | AUR repository | +| --- | --- | --- | +| `proton-drive-for-linux` | Builds the latest tagged release from source | `ssh://aur@aur.archlinux.org/proton-drive-for-linux.git` | +| `proton-drive-for-linux-git` | Builds `main` from git | `ssh://aur@aur.archlinux.org/proton-drive-for-linux-git.git` | +| `proton-drive-for-linux-bin` | Installs the binaries from the GitHub release | `ssh://aur@aur.archlinux.org/proton-drive-for-linux-bin.git` | + +The three packages conflict with each other and with the in-tree +`packaging/PKGBUILD` package (`proton-drive-linux`), and every one of them +`provides` `proton-drive-for-linux`, `proton-drive-linux`, and `pdfs`. + +Each directory tracks only `PKGBUILD`, `.SRCINFO`, `.gitignore`, and `LICENSE` +(the 0BSD license of the packaging sources, per +[RFC40](https://rfc.archlinux.page/0040-license-package-sources/)); the +`.gitignore` ignores everything else so downloaded sources, `src/`, `pkg/`, and +built packages never reach the AUR. + +## Releasing a new version + +1. Tag and publish the upstream release, so the source tarball and the + `proton-drive-linux--x86_64.tar.gz` release asset exist. +2. Run `./update.sh ` — it rewrites `pkgver`, resets `pkgrel=1`, + refreshes the checksums of the release-based packages, and regenerates every + `.SRCINFO`. +3. Build and inspect the packages in a clean chroot: + `cd proton-drive-for-linux && pkgctl build --clean` (needs `devtools`). +4. Commit here, then publish with `./push.sh` (or `./push.sh proton-drive-for-linux-bin` + for a single package). + +`proton-drive-for-linux-git` carries a `pkgver()` function, so its `pkgver` is +computed at build time; do not push a commit that only bumps it. + +## Requirements for pushing + +An SSH key registered with the AUR account and an entry in `~/.ssh/config`: + +``` +Host aur.archlinux.org + IdentityFile ~/.ssh/aur + User aur +``` + +`push.sh` creates a scratch clone of the AUR repository, copies the tracked +files over it, commits, and pushes to `master`. diff --git a/packaging/aur/proton-drive-for-linux-bin/.SRCINFO b/packaging/aur/proton-drive-for-linux-bin/.SRCINFO new file mode 100644 index 0000000..3f8a6ba --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-bin/.SRCINFO @@ -0,0 +1,43 @@ +pkgbase = proton-drive-for-linux-bin + pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries) + pkgver = 1.11.1 + pkgrel = 1 + url = https://github.com/narrrl/proton-drive-linux + arch = x86_64 + license = MIT + depends = fuse3 + depends = gtk4 + depends = libadwaita + depends = webkitgtk-6.0 + depends = dbus + depends = gcc-libs + depends = glibc + depends = hicolor-icon-theme + optdepends = perl-image-exiftool: thumbnails for camera RAW files + optdepends = gnome-keyring: credential storage over the Secret Service API + optdepends = kwallet: credential storage over the Secret Service API + optdepends = xdg-utils: "Open folder" action in the tray menu + optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf) + optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding + provides = proton-drive-for-linux=1.11.1 + provides = proton-drive-linux=1.11.1 + provides = pdfs + conflicts = proton-drive-linux + conflicts = proton-drive-for-linux + conflicts = proton-drive-for-linux-git + options = !strip + options = !debug + source = proton-drive-linux-1.11.1-x86_64.tar.gz::https://github.com/narrrl/proton-drive-linux/releases/download/v1.11.1/proton-drive-linux-1.11.1-x86_64.tar.gz + source = io.narl.proton-drive-linux.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v1.11.1/packaging/io.narl.proton-drive-linux.desktop + source = io.narl.proton-drive-linux-tray.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v1.11.1/packaging/io.narl.proton-drive-linux-tray.desktop + source = io.narl.proton-drive-linux.svg::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v1.11.1/packaging/io.narl.proton-drive-linux.svg + source = proton-drive.service::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v1.11.1/packaging/proton-drive.service + source = LICENSE-1.11.1::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v1.11.1/LICENSE + sha256sums = 5fa20a17c0068ad1d74c51eb081b7e36c24b6bf18c4cb0e0b90d2e1c1d40c56f + sha256sums = 034083fd2f77b0b69ae638fdaba2bd772209ca325a78ca17d050f221cab9650b + sha256sums = 5c369d689926cbbd64803b55a9a6010ad59aded6c7bcfb3e8bd005c95ac10cc8 + sha256sums = 2bfdef503b4ac02f047adb022e02e81099970589f9d776c821b7751f1be6c12a + sha256sums = 25fa3bd9ba52df534be9d8bc66f77d7502fe1423177237d0d14b673dedeb1b60 + sha256sums = 02c419e7f9af08dda720e4f852f3e57cf5a69e192605440f750e9d244fa2817c + +pkgname = proton-drive-for-linux-bin diff --git a/packaging/aur/proton-drive-for-linux-bin/.gitignore b/packaging/aur/proton-drive-for-linux-bin/.gitignore new file mode 100644 index 0000000..68dbfe4 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-bin/.gitignore @@ -0,0 +1,7 @@ +# Keep the AUR repository to the sources only: ignore everything, then +# force-add the tracked files with `git add -f`. +* +!.gitignore +!.SRCINFO +!LICENSE +!PKGBUILD diff --git a/packaging/aur/proton-drive-for-linux-bin/LICENSE b/packaging/aur/proton-drive-for-linux-bin/LICENSE new file mode 100644 index 0000000..5491f92 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-bin/LICENSE @@ -0,0 +1,12 @@ +Copyright (C) 2026 Nils Pukropp + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/packaging/aur/proton-drive-for-linux-bin/PKGBUILD b/packaging/aur/proton-drive-for-linux-bin/PKGBUILD new file mode 100644 index 0000000..d4a7e39 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-bin/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Nils Pukropp + +pkgname=proton-drive-for-linux-bin +pkgver=1.11.1 +pkgrel=1 +pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)" +arch=('x86_64') +url="https://github.com/narrrl/proton-drive-linux" +license=('MIT') +depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc' + 'hicolor-icon-theme') +optdepends=('perl-image-exiftool: thumbnails for camera RAW files' + 'gnome-keyring: credential storage over the Secret Service API' + 'kwallet: credential storage over the Secret Service API' + 'xdg-utils: "Open folder" action in the tray menu' + 'fzf: search-as-you-type launcher (pdfs-prompt --fzf)' + 'foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding') +provides=("${pkgname%-bin}=$pkgver" "proton-drive-linux=$pkgver" 'pdfs') +conflicts=('proton-drive-linux' 'proton-drive-for-linux' 'proton-drive-for-linux-git') +# Upstream ships the binaries already built on Ubuntu 24.04; do not rewrite them. +options=('!strip' '!debug') +_tag="v$pkgver" +_raw="https://raw.githubusercontent.com/narrrl/proton-drive-linux/$_tag" +# The release tarball holds the four binaries only, so the desktop integration +# files come straight from the tagged tree. +source=("proton-drive-linux-$pkgver-x86_64.tar.gz::$url/releases/download/$_tag/proton-drive-linux-$pkgver-x86_64.tar.gz" + "io.narl.proton-drive-linux.desktop::$_raw/packaging/io.narl.proton-drive-linux.desktop" + "io.narl.proton-drive-linux-tray.desktop::$_raw/packaging/io.narl.proton-drive-linux-tray.desktop" + "io.narl.proton-drive-linux.svg::$_raw/packaging/io.narl.proton-drive-linux.svg" + "proton-drive.service::$_raw/packaging/proton-drive.service" + "LICENSE-$pkgver::$_raw/LICENSE") +sha256sums=('5fa20a17c0068ad1d74c51eb081b7e36c24b6bf18c4cb0e0b90d2e1c1d40c56f' + '034083fd2f77b0b69ae638fdaba2bd772209ca325a78ca17d050f221cab9650b' + '5c369d689926cbbd64803b55a9a6010ad59aded6c7bcfb3e8bd005c95ac10cc8' + '2bfdef503b4ac02f047adb022e02e81099970589f9d776c821b7751f1be6c12a' + '25fa3bd9ba52df534be9d8bc66f77d7502fe1423177237d0d14b673dedeb1b60' + '02c419e7f9af08dda720e4f852f3e57cf5a69e192605440f750e9d244fa2817c') + +package() { + install -Dm755 "$srcdir/pdfs" "$pkgdir/usr/bin/pdfs" + install -Dm755 "$srcdir/pdfs-tray" "$pkgdir/usr/bin/pdfs-tray" + install -Dm755 "$srcdir/pdfs-app" "$pkgdir/usr/bin/pdfs-app" + install -Dm755 "$srcdir/pdfs-prompt" "$pkgdir/usr/bin/pdfs-prompt" + + install -Dm644 "$srcdir/io.narl.proton-drive-linux.desktop" \ + "$pkgdir/usr/share/applications/io.narl.proton-drive-linux.desktop" + install -Dm644 "$srcdir/io.narl.proton-drive-linux-tray.desktop" \ + "$pkgdir/etc/xdg/autostart/io.narl.proton-drive-linux-tray.desktop" + install -Dm644 "$srcdir/io.narl.proton-drive-linux.svg" \ + "$pkgdir/usr/share/icons/hicolor/scalable/apps/io.narl.proton-drive-linux.svg" + + # systemd user unit for the auto-mount daemon; enabled per user, not by pacman. + install -Dm644 "$srcdir/proton-drive.service" \ + "$pkgdir/usr/lib/systemd/user/proton-drive.service" + + install -Dm644 "$srcdir/LICENSE-$pkgver" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/packaging/aur/proton-drive-for-linux-git/.SRCINFO b/packaging/aur/proton-drive-for-linux-git/.SRCINFO new file mode 100644 index 0000000..4017489 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-git/.SRCINFO @@ -0,0 +1,34 @@ +pkgbase = proton-drive-for-linux-git + pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git) + pkgver = 1.11.1.r0.g860d29c + pkgrel = 1 + url = https://github.com/narrrl/proton-drive-linux + arch = x86_64 + license = MIT + makedepends = cargo + makedepends = git + depends = fuse3 + depends = gtk4 + depends = libadwaita + depends = webkitgtk-6.0 + depends = dbus + depends = gcc-libs + depends = glibc + depends = hicolor-icon-theme + optdepends = perl-image-exiftool: thumbnails for camera RAW files + optdepends = gnome-keyring: credential storage over the Secret Service API + optdepends = kwallet: credential storage over the Secret Service API + optdepends = xdg-utils: "Open folder" action in the tray menu + optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf) + optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding + provides = proton-drive-for-linux=1.11.1.r0.g860d29c + provides = proton-drive-linux=1.11.1.r0.g860d29c + provides = pdfs + conflicts = proton-drive-linux + conflicts = proton-drive-for-linux + conflicts = proton-drive-for-linux-bin + options = !lto + source = proton-drive-for-linux-git::git+https://github.com/narrrl/proton-drive-linux.git + sha256sums = SKIP + +pkgname = proton-drive-for-linux-git diff --git a/packaging/aur/proton-drive-for-linux-git/.gitignore b/packaging/aur/proton-drive-for-linux-git/.gitignore new file mode 100644 index 0000000..68dbfe4 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-git/.gitignore @@ -0,0 +1,7 @@ +# Keep the AUR repository to the sources only: ignore everything, then +# force-add the tracked files with `git add -f`. +* +!.gitignore +!.SRCINFO +!LICENSE +!PKGBUILD diff --git a/packaging/aur/proton-drive-for-linux-git/LICENSE b/packaging/aur/proton-drive-for-linux-git/LICENSE new file mode 100644 index 0000000..5491f92 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-git/LICENSE @@ -0,0 +1,12 @@ +Copyright (C) 2026 Nils Pukropp + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/packaging/aur/proton-drive-for-linux-git/PKGBUILD b/packaging/aur/proton-drive-for-linux-git/PKGBUILD new file mode 100644 index 0000000..ff89828 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux-git/PKGBUILD @@ -0,0 +1,78 @@ +# Maintainer: Nils Pukropp + +pkgname=proton-drive-for-linux-git +pkgver=1.11.1.r0.g860d29c +pkgrel=1 +pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)" +arch=('x86_64') +url="https://github.com/narrrl/proton-drive-linux" +license=('MIT') +depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc' + 'hicolor-icon-theme') +makedepends=('cargo' 'git') +optdepends=('perl-image-exiftool: thumbnails for camera RAW files' + 'gnome-keyring: credential storage over the Secret Service API' + 'kwallet: credential storage over the Secret Service API' + 'xdg-utils: "Open folder" action in the tray menu' + 'fzf: search-as-you-type launcher (pdfs-prompt --fzf)' + 'foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding') +provides=("${pkgname%-git}=$pkgver" "proton-drive-linux=$pkgver" 'pdfs') +conflicts=('proton-drive-linux' 'proton-drive-for-linux' 'proton-drive-for-linux-bin') +# LTO has broken GTK/Rust links for this workspace; the release profile keeps it off. +options=('!lto') +source=("$pkgname::git+$url.git") +sha256sums=('SKIP') + +pkgver() { + cd "$pkgname" + git describe --long --abbrev=7 --tags 2>/dev/null | + sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' || + printf '0.0.0.r%s.g%s' "$(git rev-list --count HEAD)" "$(git rev-parse --short=7 HEAD)" +} + +prepare() { + cd "$pkgname" + export RUSTUP_TOOLCHAIN=stable + cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')" +} + +build() { + cd "$pkgname" + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cargo build --frozen --release \ + --bin pdfs \ + --bin pdfs-tray \ + --bin pdfs-app \ + --bin pdfs-prompt +} + +check() { + cd "$pkgname" + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cargo test --frozen --workspace +} + +package() { + cd "$pkgname" + + install -Dm755 target/release/pdfs "$pkgdir/usr/bin/pdfs" + install -Dm755 target/release/pdfs-tray "$pkgdir/usr/bin/pdfs-tray" + install -Dm755 target/release/pdfs-app "$pkgdir/usr/bin/pdfs-app" + install -Dm755 target/release/pdfs-prompt "$pkgdir/usr/bin/pdfs-prompt" + + install -Dm644 packaging/io.narl.proton-drive-linux.desktop \ + "$pkgdir/usr/share/applications/io.narl.proton-drive-linux.desktop" + install -Dm644 packaging/io.narl.proton-drive-linux-tray.desktop \ + "$pkgdir/etc/xdg/autostart/io.narl.proton-drive-linux-tray.desktop" + install -Dm644 packaging/io.narl.proton-drive-linux.svg \ + "$pkgdir/usr/share/icons/hicolor/scalable/apps/io.narl.proton-drive-linux.svg" + + # systemd user unit for the auto-mount daemon; enabled per user, not by pacman. + install -Dm644 packaging/proton-drive.service \ + "$pkgdir/usr/lib/systemd/user/proton-drive.service" + + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" +} diff --git a/packaging/aur/proton-drive-for-linux/.SRCINFO b/packaging/aur/proton-drive-for-linux/.SRCINFO new file mode 100644 index 0000000..4ebb1bf --- /dev/null +++ b/packaging/aur/proton-drive-for-linux/.SRCINFO @@ -0,0 +1,32 @@ +pkgbase = proton-drive-for-linux + pkgdesc = Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray + pkgver = 1.11.1 + pkgrel = 1 + url = https://github.com/narrrl/proton-drive-linux + arch = x86_64 + license = MIT + makedepends = cargo + depends = fuse3 + depends = gtk4 + depends = libadwaita + depends = webkitgtk-6.0 + depends = dbus + depends = gcc-libs + depends = glibc + depends = hicolor-icon-theme + optdepends = perl-image-exiftool: thumbnails for camera RAW files + optdepends = gnome-keyring: credential storage over the Secret Service API + optdepends = kwallet: credential storage over the Secret Service API + optdepends = xdg-utils: "Open folder" action in the tray menu + optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf) + optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding + provides = proton-drive-linux=1.11.1 + provides = pdfs + conflicts = proton-drive-linux + conflicts = proton-drive-for-linux-bin + conflicts = proton-drive-for-linux-git + options = !lto + source = proton-drive-for-linux-1.11.1.tar.gz::https://github.com/narrrl/proton-drive-linux/archive/refs/tags/v1.11.1.tar.gz + sha256sums = 1481379b2b70102ea6345a00b1092f73511f6ba99d6fba9a3f185ad6d28caaf2 + +pkgname = proton-drive-for-linux diff --git a/packaging/aur/proton-drive-for-linux/.gitignore b/packaging/aur/proton-drive-for-linux/.gitignore new file mode 100644 index 0000000..68dbfe4 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux/.gitignore @@ -0,0 +1,7 @@ +# Keep the AUR repository to the sources only: ignore everything, then +# force-add the tracked files with `git add -f`. +* +!.gitignore +!.SRCINFO +!LICENSE +!PKGBUILD diff --git a/packaging/aur/proton-drive-for-linux/LICENSE b/packaging/aur/proton-drive-for-linux/LICENSE new file mode 100644 index 0000000..5491f92 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux/LICENSE @@ -0,0 +1,12 @@ +Copyright (C) 2026 Nils Pukropp + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/packaging/aur/proton-drive-for-linux/PKGBUILD b/packaging/aur/proton-drive-for-linux/PKGBUILD new file mode 100644 index 0000000..a01a2a1 --- /dev/null +++ b/packaging/aur/proton-drive-for-linux/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Nils Pukropp + +pkgname=proton-drive-for-linux +pkgver=1.11.1 +pkgrel=1 +pkgdesc="Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray" +arch=('x86_64') +url="https://github.com/narrrl/proton-drive-linux" +license=('MIT') +depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc' + 'hicolor-icon-theme') +makedepends=('cargo') +optdepends=('perl-image-exiftool: thumbnails for camera RAW files' + 'gnome-keyring: credential storage over the Secret Service API' + 'kwallet: credential storage over the Secret Service API' + 'xdg-utils: "Open folder" action in the tray menu' + 'fzf: search-as-you-type launcher (pdfs-prompt --fzf)' + 'foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding') +provides=("proton-drive-linux=$pkgver" 'pdfs') +conflicts=('proton-drive-linux' 'proton-drive-for-linux-bin' 'proton-drive-for-linux-git') +# LTO has broken GTK/Rust links for this workspace; the release profile keeps it off. +options=('!lto') +source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz") +sha256sums=('1481379b2b70102ea6345a00b1092f73511f6ba99d6fba9a3f185ad6d28caaf2') + +_srcname="proton-drive-linux-$pkgver" + +prepare() { + cd "$_srcname" + export RUSTUP_TOOLCHAIN=stable + cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')" +} + +build() { + cd "$_srcname" + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cargo build --frozen --release \ + --bin pdfs \ + --bin pdfs-tray \ + --bin pdfs-app \ + --bin pdfs-prompt +} + +check() { + cd "$_srcname" + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cargo test --frozen --workspace +} + +package() { + cd "$_srcname" + + install -Dm755 target/release/pdfs "$pkgdir/usr/bin/pdfs" + install -Dm755 target/release/pdfs-tray "$pkgdir/usr/bin/pdfs-tray" + install -Dm755 target/release/pdfs-app "$pkgdir/usr/bin/pdfs-app" + install -Dm755 target/release/pdfs-prompt "$pkgdir/usr/bin/pdfs-prompt" + + install -Dm644 packaging/io.narl.proton-drive-linux.desktop \ + "$pkgdir/usr/share/applications/io.narl.proton-drive-linux.desktop" + install -Dm644 packaging/io.narl.proton-drive-linux-tray.desktop \ + "$pkgdir/etc/xdg/autostart/io.narl.proton-drive-linux-tray.desktop" + install -Dm644 packaging/io.narl.proton-drive-linux.svg \ + "$pkgdir/usr/share/icons/hicolor/scalable/apps/io.narl.proton-drive-linux.svg" + + # systemd user unit for the auto-mount daemon; enabled per user, not by pacman. + install -Dm644 packaging/proton-drive.service \ + "$pkgdir/usr/lib/systemd/user/proton-drive.service" + + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" +} diff --git a/packaging/aur/push.sh b/packaging/aur/push.sh new file mode 100755 index 0000000..b32d37a --- /dev/null +++ b/packaging/aur/push.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Publish the packages in this directory to their AUR repositories. +# +# Usage: ./push.sh [pkgbase ...] (default: all three) +# MESSAGE="..." ./push.sh (custom commit message) +set -euo pipefail + +cd "$(dirname "$(readlink -f "$0")")" + +packages=("$@") +if [[ ${#packages[@]} -eq 0 ]]; then + packages=(proton-drive-for-linux proton-drive-for-linux-git proton-drive-for-linux-bin) +fi + +workdir="$(mktemp -d)" +trap 'rm -rf "$workdir"' EXIT + +for pkg in "${packages[@]}"; do + test -f "$pkg/PKGBUILD" || { echo "no such package: $pkg" >&2; exit 1; } + + # A fresh clone every time: the AUR repository, not this checkout, is what the + # commit history has to build on. + git -c init.defaultBranch=master clone -q "ssh://aur@aur.archlinux.org/$pkg.git" "$workdir/$pkg" + install -m644 "$pkg/PKGBUILD" "$pkg/.SRCINFO" "$pkg/.gitignore" "$pkg/LICENSE" "$workdir/$pkg/" + + git -C "$workdir/$pkg" add -f PKGBUILD .SRCINFO .gitignore LICENSE + if git -C "$workdir/$pkg" diff --cached --quiet; then + echo "$pkg: no changes" + continue + fi + + version="$(sed -n 's/^\tpkgver = //p' "$pkg/.SRCINFO" | head -n1)" + git -C "$workdir/$pkg" commit -q -m "${MESSAGE:-Update to $version}" + git -C "$workdir/$pkg" push -q origin HEAD:master + echo "$pkg: pushed ${MESSAGE:-$version}" +done diff --git a/packaging/aur/update.sh b/packaging/aur/update.sh new file mode 100755 index 0000000..4348dd8 --- /dev/null +++ b/packaging/aur/update.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# Point the AUR packages at a new upstream release: rewrite pkgver, reset +# pkgrel, refresh the checksums that depend on the version, and regenerate +# every .SRCINFO. +# +# Usage: ./update.sh 1.12.0 +set -euo pipefail + +version="${1:-}" +if [[ -z $version ]]; then + echo "usage: ${0##*/} " >&2 + exit 2 +fi + +cd "$(dirname "$(readlink -f "$0")")" + +# The -git package derives its pkgver from git describe, so only the two +# release-based packages are versioned here. +for pkg in proton-drive-for-linux proton-drive-for-linux-bin; do + sed -i -e "s/^pkgver=.*/pkgver=$version/" -e "s/^pkgrel=.*/pkgrel=1/" "$pkg/PKGBUILD" + (cd "$pkg" && updpkgsums) +done + +for pkg in proton-drive-for-linux proton-drive-for-linux-git proton-drive-for-linux-bin; do + (cd "$pkg" && makepkg --printsrcinfo > .SRCINFO) + echo "updated $pkg" +done