mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-03 16:41:26 +01:00
Preferences gets a switch that asks GitHub once a day for the latest release and shows a banner over the sidebar when it is newer. Off by default. Packages whose package manager brings updates install the marker share/proton-drive-linux/managed-updates, which hides the switch. Refs #42
131 lines
3.9 KiB
Nix
131 lines
3.9 KiB
Nix
# Nix package for the workspace, built from the checkout this file lives in.
|
|
# The flake at the repository root exposes it; `nix build` builds it.
|
|
{
|
|
lib,
|
|
rustPlatform,
|
|
adwaita-icon-theme,
|
|
pkg-config,
|
|
gettext,
|
|
glib,
|
|
wrapGAppsHook4,
|
|
fuse3,
|
|
glib-networking,
|
|
gtk4,
|
|
libadwaita,
|
|
webkitgtk_6_0,
|
|
libsecret,
|
|
dbus,
|
|
exiftool,
|
|
ffmpeg-headless,
|
|
withFfmpeg ? true,
|
|
}:
|
|
|
|
let
|
|
cargoToml = lib.importTOML ../../Cargo.toml;
|
|
in
|
|
rustPlatform.buildRustPackage {
|
|
pname = "proton-drive-linux";
|
|
inherit (cargoToml.workspace.package) version;
|
|
|
|
# Only what the build reads, so editing docs or CI does not rebuild.
|
|
src = lib.fileset.toSource {
|
|
root = ../..;
|
|
fileset = lib.fileset.unions [
|
|
../../Cargo.toml
|
|
../../Cargo.lock
|
|
../../crates
|
|
../../po
|
|
../../LICENSE
|
|
../proton-drive.service
|
|
../io.narl.proton-drive-linux.desktop
|
|
../io.narl.proton-drive-linux-tray.desktop
|
|
../io.narl.proton-drive-linux.svg
|
|
];
|
|
};
|
|
|
|
cargoLock.lockFile = ../../Cargo.lock;
|
|
|
|
cargoBuildFlags = [
|
|
"--bin"
|
|
"pdfs"
|
|
"--bin"
|
|
"pdfs-tray"
|
|
"--bin"
|
|
"pdfs-app"
|
|
"--bin"
|
|
"pdfs-prompt"
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
pkg-config
|
|
gettext # msgfmt, for po/build.sh
|
|
glib # glib-compile-resources, for the GUI's build.rs
|
|
wrapGAppsHook4
|
|
];
|
|
|
|
buildInputs = [
|
|
fuse3
|
|
# TLS for WebKitGTK's GIO: without it the CAPTCHA page fails with "TLS
|
|
# support is not available". wrapGAppsHook4 adds it to GIO_EXTRA_MODULES.
|
|
glib-networking
|
|
# The stock icons the app asks for, such as the Photos and Computers
|
|
# sidebar entries. GTK ships only a few itself, and a session without
|
|
# Adwaita installed showed the rest as missing. wrapGAppsHook4 adds it to
|
|
# XDG_DATA_DIRS.
|
|
adwaita-icon-theme
|
|
gtk4
|
|
libadwaita
|
|
webkitgtk_6_0
|
|
libsecret
|
|
dbus
|
|
];
|
|
|
|
# The app looks for its catalogs here instead of /usr/share/locale.
|
|
env.PDFS_LOCALEDIR = "${placeholder "out"}/share/locale";
|
|
|
|
# The suite mounts FUSE, talks to D-Bus and the kernel keyring, and checks
|
|
# permissions a build sandbox does not have; CI runs it on every push.
|
|
doCheck = false;
|
|
|
|
postInstall = ''
|
|
install -Dm644 packaging/io.narl.proton-drive-linux.desktop \
|
|
$out/share/applications/io.narl.proton-drive-linux.desktop
|
|
install -Dm644 packaging/io.narl.proton-drive-linux-tray.desktop \
|
|
$out/etc/xdg/autostart/io.narl.proton-drive-linux-tray.desktop
|
|
install -Dm644 packaging/io.narl.proton-drive-linux.svg \
|
|
$out/share/icons/hicolor/scalable/apps/io.narl.proton-drive-linux.svg
|
|
substituteInPlace $out/share/applications/io.narl.proton-drive-linux.desktop \
|
|
--replace-fail "Exec=pdfs-app" "Exec=$out/bin/pdfs-app"
|
|
substituteInPlace $out/etc/xdg/autostart/io.narl.proton-drive-linux-tray.desktop \
|
|
--replace-fail "Exec=pdfs-tray" "Exec=$out/bin/pdfs-tray"
|
|
|
|
install -Dm644 packaging/proton-drive.service \
|
|
$out/lib/systemd/user/proton-drive.service
|
|
substituteInPlace $out/lib/systemd/user/proton-drive.service \
|
|
--replace-fail "ExecStart=/usr/bin/pdfs" "ExecStart=$out/bin/pdfs"
|
|
|
|
patchShebangs po/build.sh
|
|
po/build.sh $out/share/locale
|
|
|
|
# Nix brings new releases, so the app never checks for them itself.
|
|
install -Dm644 /dev/null $out/share/proton-drive-linux/managed-updates
|
|
'';
|
|
|
|
# Thumbnails shell out to exiftool, and to ffmpeg for video. Suffixed, so a
|
|
# user's own builds on PATH win. fusermount3 comes from the system: on NixOS
|
|
# it is the setuid wrapper in /run/wrappers/bin.
|
|
preFixup = ''
|
|
gappsWrapperArgs+=(--suffix PATH : ${
|
|
lib.makeBinPath ([ exiftool ] ++ lib.optional withFfmpeg ffmpeg-headless)
|
|
})
|
|
'';
|
|
|
|
meta = {
|
|
description = "Unofficial Proton Drive client for Linux: files-on-demand FUSE mount, CLI, GTK4 app and tray";
|
|
homepage = "https://proton-drive.narl.io";
|
|
license = lib.licenses.mit;
|
|
platforms = lib.platforms.linux;
|
|
mainProgram = "pdfs";
|
|
};
|
|
}
|