Skip to content

Commit

Permalink
feat: improbe xp-pen-driver support
Browse files Browse the repository at this point in the history
  • Loading branch information
misumisumi committed May 12, 2024
1 parent 8139f14 commit d1c9cbd
Show file tree
Hide file tree
Showing 9 changed files with 142 additions and 72 deletions.
7 changes: 3 additions & 4 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
inputs.nixpkgs.follows = "nixpkgs";
};
dotfiles = {
url = "github:misumisumi/home-manager-config/release-1.0";
url = "github:misumisumi/home-manager-config";
# url = "path:/home/sumi/Templates/nix/home-manager-config";
inputs = {
flakes.follows = "flakes";
Expand Down
17 changes: 0 additions & 17 deletions machines/mother/security.nix

This file was deleted.

2 changes: 1 addition & 1 deletion machines/mother/system.nix
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
tmpfsSize = "50%";
};
};
environment.systemPackages = with pkgs; [ xp-pen-driver ];
services.xserver.xp-pentablet.enable = true;
services.xserver.displayManager.lightdm.greeters.slick.cursorTheme.size = 32;
nix = {
settings = {
Expand Down
1 change: 1 addition & 0 deletions modules/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
imports = [
./vfio.nix
./virtualisation.nix
./xp-pentablet.nix
];
}
35 changes: 35 additions & 0 deletions modules/xp-pentablet.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.services.xserver.xp-pentablet;
dataDir = "/var/lib/xppenconf";
in
{
options = {
services.xserver.xp-pentablet = {
enable = mkOption {
type = types.bool;
default = false;
description = lib.mdDoc ''
Whether to enable the xp-pen-tablet.
'';
};
};
};
config = mkIf cfg.enable {
hardware.uinput.enable = true;

environment.systemPackages = [ pkgs.xp-pentablet ]; # provides xsetwacom

services.udev.packages = [ pkgs.xp-pentablet ];

system.activationScripts.xp-pentablet-config.text = ''
install -m 755 -d "${dataDir}/conf/xppen"
find ${pkgs.xp-pentablet}/usr/lib/pentablet/conf -type f | while read -r file; do
if [ ! -f ${dataDir}/conf/$(basename ''${file}) ]; then
install -m 666 "''${file}" "${dataDir}/conf/xppen/$(basename ''${file})"
fi
done
'';
};
}
51 changes: 2 additions & 49 deletions patches/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -37,55 +37,8 @@
# Patch from https://github.com/NixOS/nixpkgs/pull/211600
{ nixpkgs-stable, ... }:
final: prev:
let
dataDir = "var/lib/xppend1v2";
in
{
xp-pen-driver = prev.xp-pen-deco-01-v2-driver.overrideAttrs (old: {
desktopItems = [
(prev.makeDesktopItem {
name = "xp-pen-driver";
exec = "xp-pen-driver-indicator";
icon = "pentablet";
comment = "XPPen driver";
desktopName = "xppentablet";
categories = [ "Application" "Utility" ];
})
];
run_script = prev.writeShellApplication {
name = "xp-pen-driver";
text = ''
sudo sh -c "xp-pen-driver &"
'';
};
indicator = prev.writeShellApplication {
name = "xp-pen-driver-indicator";
text = ''
sudo sh -c "xp-pen-driver /mini &"
'';
};
installPhase = ''
runHook preInstall
mkdir -p $out/{opt,bin,share}
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
cp -r $run_script/bin/* $out/bin
cp -r $indicator/bin/* $out/bin
sed -i "s#xp-pen-driver#$out/opt/xp-pen-driver#g" $out/bin/xp-pen-driver
sed -i "s#xp-pen-driver#$out/opt/xp-pen-driver#g" $out/bin/xp-pen-driver-indicator
cp -r App/usr/share/icons $out/share/icons
cp -r $desktopItems/share/applications $out/share/applications
runHook postInstall
'';

postFixup = ''
makeWrapper $out/opt/pentablet $out/opt/xp-pen-driver \
"''${qtWrapperArgs[@]}" \
--run 'if [ ! -d /${dataDir} ]; then mkdir -p /${dataDir}; cp -r '$out'/opt/conf /${dataDir}; chmod u+w -R /${dataDir}; fi'
'';
});
# xp-pentablet-unwrapped = prev.libsForQt5.callPackage ./xp-pen-drivers { };
xp-pentablet = prev.libsForQt5.callPackage ./xp-pen-drivers.nix { };
}

98 changes: 98 additions & 0 deletions patches/xp-pen-drivers.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
{ 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";
dataDir = "var/lib/xppenconf";
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*
sed -i 's#usr/lib/pentablet#${dataDir}#g' $out/usr/lib/pentablet/PenTablet
mkdir -p $out/share/icons
cp -r App/usr/share/icons/* $out/share/icons
cp -r App/lib $out/lib
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;
};
}
1 change: 1 addition & 0 deletions system/user/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
shell = pkgs.zsh;
extraGroups = [
"input"
"uinput"
"uucp"
"wheel"
];
Expand Down

0 comments on commit d1c9cbd

Please sign in to comment.