Files
nixpkgs/pkgs/by-name/rc/rcu/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

202 lines
4.8 KiB
Nix

{
stdenv,
lib,
requireFile,
runCommand,
rcu,
testers,
copyDesktopItems,
coreutils,
desktopToDarwinBundle,
gnutar,
libsForQt5,
makeDesktopItem,
net-tools,
protobuf,
python312Packages,
system-config-printer,
wget,
}:
let
python3Packages = python312Packages;
in
python3Packages.buildPythonApplication rec {
pname = "rcu";
version = "4.0.29";
format = "other";
src =
let
src-tarball = requireFile {
name = "rcu-${version}-source.tar.gz";
hash = "sha256-qbHjRKH9GOwBduyod8AOm2SYOjGUH1mYSpCTifOehVM=";
url = "https://www.davisr.me/projects/rcu/";
};
in
runCommand "${src-tarball.name}-unpacked" { } ''
gunzip -ck ${src-tarball} | tar -xvf-
mv rcu $out
ln -s ${src-tarball} $out/src
'';
patches = [
./Port-to-paramiko-4.x.patch
];
postPatch = ''
substituteInPlace src/main.py \
--replace-fail "ui_basepath = '.'" "ui_basepath = '$out/share/rcu'"
substituteInPlace package_support/gnulinux/50-remarkable.rules \
--replace-fail 'GROUP="yourgroup"' 'GROUP="users"'
# This must match the protobuf version imported at runtime, regenerate it
rm src/model/update_metadata_pb2.py
protoc --proto_path src/model src/model/update_metadata.proto --python_out=src/model
# We don't make it available at this location, wrapping adds it to PATH instead
substituteInPlace src/model/document.py \
--replace-fail '/sbin/ifconfig' 'ifconfig'
'';
nativeBuildInputs = [
copyDesktopItems
protobuf
libsForQt5.wrapQtAppsHook
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
desktopToDarwinBundle
];
buildInputs = [
libsForQt5.qtbase
libsForQt5.qtwayland
];
propagatedBuildInputs = with python3Packages; [
certifi
packaging
paramiko
pdfminer-six
pikepdf
pillow
python3Packages.protobuf # otherwise it picks up protobuf from function args
pyside2
];
desktopItems = [
(makeDesktopItem {
name = "rcu";
desktopName = "reMarkable Connection Utility";
comment = "All-in-one offline/local management software for reMarkable e-paper tablets";
icon = "rcu";
exec = "rcu";
})
];
dontConfigure = true;
dontBuild = true;
# No tests
doCheck = false;
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,share}
cp -r src $out/share/rcu
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
install -Dm644 package_support/gnulinux/50-remarkable.rules $out/etc/udev/rules.d/50-remarkable.rules
''
+ ''
# Keep source from being GC'd by linking into it
for icondir in $(find icons -type d -name '[0-9]*x[0-9]*'); do
iconsize=$(basename $icondir)
mkdir -p $out/share/icons/hicolor/$iconsize/apps
ln -s ${src}/icons/$iconsize/rcu-icon-$iconsize.png $out/share/icons/hicolor/$iconsize/apps/rcu.png
done
mkdir -p $out/share/icons/hicolor/scalable/apps
ln -s ${src}/icons/64x64/rcu-icon-64x64.svg $out/share/icons/hicolor/scalable/apps/rcu.svg
mkdir -p $out/share/doc/rcu
for docfile in {COPYING,manual.pdf}; do
ln -s ${src}/manual/$docfile $out/share/doc/rcu/$docfile
done
mkdir -p $out/share/licenses/rcu
ln -s ${src}/COPYING $out/share/licenses/rcu/COPYING
runHook postInstall
'';
# Manually creating wrapper, hook struggles with lack of shebang & symlink
dontWrapPythonPrograms = true;
preFixup = ''
makeWrapperArgs+=(
"''${qtWrapperArgs[@]}"
--prefix PATH : ${
lib.makeBinPath [
coreutils
gnutar
wget
]
}
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
--prefix PATH : ${
lib.makeBinPath [
net-tools
system-config-printer
]
}
''
+ ''
)
'';
postFixup = ''
makeWrapper ${lib.getExe python3Packages.python} $out/bin/rcu \
''${makeWrapperArgs[@]} \
--prefix PYTHONPATH : ${
python3Packages.makePythonPath (propagatedBuildInputs ++ [ (placeholder "out") ])
} \
--add-flags $out/share/rcu/main.py
'';
passthru = {
tests.version = testers.testVersion {
package = rcu;
version =
let
versionSuffixPos = (lib.strings.stringLength rcu.version) - 1;
in
"d${lib.strings.substring 0 versionSuffixPos rcu.version}(${
lib.strings.substring versionSuffixPos 1 rcu.version
})";
};
# Python stuff automatically adds an updateScript that just fails
updateScript = null;
};
meta = {
mainProgram = "rcu";
description = "All-in-one offline/local management software for reMarkable e-paper tablets";
homepage = "http://www.davisr.me/projects/rcu/";
license = lib.licenses.agpl3Plus;
maintainers = with lib.maintainers; [
OPNA2608
m0streng0
];
hydraPlatforms = [ ]; # requireFile used as src
};
}