diff --git a/pkgs/os-specific/linux/xp-pen-drivers/deco-01-v2/default.nix b/pkgs/os-specific/linux/xp-pen-drivers/deco-01-v2/default.nix deleted file mode 100644 index 8ae426269a86a..0000000000000 --- a/pkgs/os-specific/linux/xp-pen-drivers/deco-01-v2/default.nix +++ /dev/null @@ -1,83 +0,0 @@ -{ lib -, stdenv -, fetchzip -, libusb1 -, glibc -, libGL -, xorg -, makeWrapper -, qtx11extras -, wrapQtAppsHook -, autoPatchelfHook -, libX11 -, libXtst -, libXi -, libXrandr -, libXinerama -}: - -let - dataDir = "var/lib/xppend1v2"; -in -stdenv.mkDerivation rec { - pname = "xp-pen-deco-01-v2-driver"; - version = "3.2.3.230215-1"; - - src = fetchzip { - url = "https://download01.xp-pen.com/file/2023/03/XPPen-pentablet-${version}.x86_64.tar.gz"; - name = "xp-pen-deco-01-v2-driver-${version}.tar.gz"; - sha256 = "sha256-CV4ZaGCFFcfy2J0O8leYgcyzFVwJQFQJsShOv9B7jfI="; - }; - - nativeBuildInputs = [ - wrapQtAppsHook - autoPatchelfHook - makeWrapper - ]; - - dontBuild = true; - - dontWrapQtApps = true; # this is done manually - - buildInputs = [ - libusb1 - libX11 - libXtst - libXi - libXrandr - libXinerama - glibc - libGL - stdenv.cc.cc.lib - qtx11extras - ]; - - installPhase = '' - runHook preInstall - - mkdir -p $out/{opt,bin} - cp -r App/usr/lib/pentablet/{pentablet,resource.rcc,conf} $out/opt - chmod +x $out/opt/pentablet - cp -r App/lib $out/lib - sed -i 's#usr/lib/pentablet#${dataDir}#g' $out/opt/pentablet - - runHook postInstall - ''; - - postFixup = '' - makeWrapper $out/opt/pentablet $out/bin/xp-pen-deco-01-v2-driver \ - "''${qtWrapperArgs[@]}" \ - --run 'if [ "$EUID" -ne 0 ]; then echo "Please run as root."; exit 1; fi' \ - --run 'if [ ! -d /${dataDir} ]; then mkdir -p /${dataDir}; cp -r '$out'/opt/conf /${dataDir}; chmod u+w -R /${dataDir}; fi' - ''; - - meta = with lib; { - homepage = "https://www.xp-pen.com/product/461.html"; - description = "Drivers for the XP-PEN Deco 01 v2 drawing tablet"; - platforms = [ "x86_64-linux" ]; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; - maintainers = with maintainers; [ virchau13 ]; - license = licenses.unfree; - }; -} - diff --git a/pkgs/os-specific/linux/xp-pen-drivers/default.nix b/pkgs/os-specific/linux/xp-pen-drivers/default.nix new file mode 100644 index 0000000000000..71d2acaddb237 --- /dev/null +++ b/pkgs/os-specific/linux/xp-pen-drivers/default.nix @@ -0,0 +1,77 @@ +{ lib, stdenv, fetchzip, libusb1, glibc, libGL, xorg, makeWrapper +, makeDesktopItem, qtx11extras, wrapQtAppsHook, autoPatchelfHook +, libX11, libXtst, libXi, libXrandr, libXinerama, copyDesktopItems }: + +let + pname = "xp-pentablet-unwrapped"; + version = "3.4.9-231023"; +in stdenv.mkDerivation rec { + inherit pname version; + src = fetchzip { + url = + "https://download01.xp-pen.com/file/2023/11/XPPenLinux${version}.tar.gz"; + name = "XPPenLinux${version}.tar.gz"; + sha256 = "sha256-A/dv6DpelH0NHjlGj32tKv37S+9q3F8cYByiYlMuqLg="; + }; + + nativeBuildInputs = + [ wrapQtAppsHook autoPatchelfHook makeWrapper copyDesktopItems ]; + + dontBuild = true; + dontWrapQtApps = true; # this is done manually + + buildInputs = [ + libusb1 + libX11 + libXtst + libXi + libXrandr + libXinerama + glibc + libGL + stdenv.cc.cc.lib + qtx11extras + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/usr/lib + cp -r App/usr/lib/pentablet $out/usr/lib + chmod +x $out/usr/lib/pentablet/PenTablet* + + mkdir -p $out/share/icons + cp -r App/usr/share/icons/* $out/share/icons + + runHook postInstall + ''; + + postFixup = '' + makeWrapper $out/usr/lib/pentablet/PenTablet $out/bin/xp-pentablet \ + "''${qtWrapperArgs[@]}" \ + --set QT_QPA_PLATFORM xcb \ + --set QT_XKB_CONFIG_ROOT "${xorg.xkeyboardconfig}/share/X11/xkb" + ''; + + desktopItems = [ + (makeDesktopItem { + name = "xppentablet"; + desktopName = "XP Pen Tablet Drivers"; + genericName = "Graphic Tablet Drivers"; + exec = "xp-pentablet"; + icon = "xppentablet"; + comment = "XPPen graphical tablet drivers"; + categories = [ "Utility" "Graphics" ]; + }) + ]; + + meta = with lib; { + mainProgram = "xp-pentablet"; + homepage = "https://www.xp-pen.com/"; + description = "Drivers for the XP-PEN drawing tablets"; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + maintainers = with maintainers; [ virchau13 ivar sochotnicky ]; + license = licenses.unfree; + }; +} diff --git a/pkgs/os-specific/linux/xp-pen-drivers/fhsenv.nix b/pkgs/os-specific/linux/xp-pen-drivers/fhsenv.nix new file mode 100644 index 0000000000000..b08581ab3f220 --- /dev/null +++ b/pkgs/os-specific/linux/xp-pen-drivers/fhsenv.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, xp-pentablet-unwrapped, buildFHSEnv }: + +buildFHSEnv { + name = "xp-pentablet"; + + extraInstallCommands = '' + mkdir -p "$out/share" + ln -s ${xp-pentablet-unwrapped}/share/applications "$out/share" + ln -s ${xp-pentablet-unwrapped}/share/icons "$out/share" + ''; + + runScript = "${xp-pentablet-unwrapped}/bin/xp-pentablet"; + + # We have to add /usr/lib/pentablet but we can't mount into /usr because it's RO-mounted by default + extraBwrapArgs = [ "--bind ${xp-pentablet-unwrapped}/usr /usr" ]; + + # runScript = "/usr/lib/pentablet/PenTablet"; + targetPkgs = pkgs: [ + xp-pentablet-unwrapped + ]; + + meta = xp-pentablet-unwrapped.meta; +} diff --git a/pkgs/os-specific/linux/xp-pen-drivers/g430/default.nix b/pkgs/os-specific/linux/xp-pen-drivers/g430/default.nix deleted file mode 100644 index ad983662109a7..0000000000000 --- a/pkgs/os-specific/linux/xp-pen-drivers/g430/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ lib, stdenv, mkDerivation, fetchzip, autoPatchelfHook, libusb1, libX11, libXtst, qtbase, libglvnd }: - -mkDerivation rec { - pname = "xp-pen-g430-driver"; - version = "1.2.13.1"; - - src = fetchzip { - url = "https://download01.xp-pen.com/file/2020/04/Linux_Pentablet_V${version}.tar.gz(20200428).zip"; - sha256 = "1r423hcpi26v82pzl59br1zw5vablikclqsy6mcqi0v5p84hfrdd"; - } + /Linux_Pentablet_V1.2.13.1.tar.gz; - - nativeBuildInputs = [ - autoPatchelfHook - ]; - - buildInputs = [ - libusb1 - libX11 - libXtst - qtbase - libglvnd - stdenv.cc.cc.lib - ]; - - installPhase = '' - mkdir -p $out/bin - cp Pentablet_Driver $out/bin/pentablet-driver - cp config.xml $out/bin/config.xml - ''; - - meta = with lib; { - homepage = "https://www.xp-pen.com/download-46.html"; - description = "Driver for XP-PEN Pentablet drawing tablets"; - sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; - license = licenses.unfree; - platforms = [ "x86_64-linux" ]; - maintainers = with maintainers; [ ivar ]; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bb25cff7c7855..8f41e8ef17dd3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -41830,9 +41830,12 @@ with pkgs; bcompare = libsForQt5.callPackage ../applications/version-management/bcompare { }; - xp-pen-deco-01-v2-driver = libsForQt5.xp-pen-deco-01-v2-driver; + xp-pentablet-unwrapped = libsForQt5.xp-pentablet-unwrapped; + xp-pentablet = libsForQt5.xp-pentablet; - xp-pen-g430-driver = libsForQt5.xp-pen-g430-driver; + xp-pen-deco-01-v2-driver = xp-pentablet; + + xp-pen-g430-driver = xp-pentablet; new-session-manager = callPackage ../applications/audio/new-session-manager { }; diff --git a/pkgs/top-level/qt5-packages.nix b/pkgs/top-level/qt5-packages.nix index f38a4c1c49078..233d5604b472b 100644 --- a/pkgs/top-level/qt5-packages.nix +++ b/pkgs/top-level/qt5-packages.nix @@ -266,9 +266,12 @@ in (noExtraAttrs (kdeFrameworks // plasmaMobileGear // plasma5 // plasma5.thirdP soundkonverter = callPackage ../applications/audio/soundkonverter {}; - xp-pen-deco-01-v2-driver = callPackage ../os-specific/linux/xp-pen-drivers/deco-01-v2 { }; + xp-pentablet-unwrapped = callPackage ../os-specific/linux/xp-pen-drivers { }; + xp-pentablet = callPackage ../os-specific/linux/xp-pen-drivers/fhsenv.nix {}; - xp-pen-g430-driver = callPackage ../os-specific/linux/xp-pen-drivers/g430 { }; + # See https://github.com/NixOS/nixpkgs/issues/213263 + xp-pen-deco-01-v2-driver = pkgs.xp-pentablet; + xp-pen-g430-driver = pkgs.xp-pentablet; yuview = callPackage ../applications/video/yuview { }; }) // lib.optionalAttrs pkgs.config.allowAliases {