summary refs log tree commit diff
path: root/modules/services/x11/hardware/wacom.nix
blob: 32e29e9b3880f6aae39dd9fd41fe9dcbb9a89c3b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
{ config, pkgs, ... }:

with pkgs.lib;

let

  cfg = config.services.xserver.wacom;

in

{

  options = {

    services.xserver.wacom = {

      enable = mkOption {
        default = false;
        description = "Whether to enable the Wacom touchscreen/digitizer/tablet.";
      };

      device = mkOption {
        default = null;
        example = "/dev/ttyS0";
        description = "Device to use. Set to null for autodetect (think USB tablet).";
      };

      forceDeviceType = mkOption {
        default = null;
        example = "ISDV4";
        description = "Some models (think touchscreen) require the device type to be specified. Set to null for autodetect (think USB tablet).";
      };

      stylusExtraConfig = mkOption {
        default = "";
        example = ''
            Option "Button1" "2"
          '';
        description = "Lines to be added to Wacom_stylus InputDevice section.";
      };

      eraserExtraConfig = mkOption {
        default = "";
        example = ''
            Option "Button2" "3"
          '';
        description = "Lines to be added to Wacom_eraser InputDevice section.";
      };

      cursorExtraConfig = mkOption {
        default = "";
        example = "";
        description = "Lines to be added to Wacom_cursor InputDevice section.";
      };

    };

  };


  config = mkIf cfg.enable {

    environment.systemPackages = [ pkgs.xf86_input_wacom ]; # provides xsetwacom

    services.xserver.modules = [ pkgs.xf86_input_wacom ];

    services.udev.packages = [ pkgs.xf86_input_wacom ];

    services.xserver.serverLayoutSection =
      ''
        InputDevice "Wacom_stylus"
        InputDevice "Wacom_eraser"
        InputDevice "Wacom_cursor"
      '';

    services.xserver.config =
      ''
        Section "InputDevice"
          Driver "wacom"
          Identifier "Wacom_stylus"
          ${optionalString (cfg.device != null) ''
            Option "Device" "${cfg.device}"
          ''}
          Option "Type" "stylus"
          ${optionalString (cfg.forceDeviceType != null) ''
            Option "ForceDevice" "${cfg.forceDeviceType}"
          ''}
          ${cfg.stylusExtraConfig}
        EndSection

        Section "InputDevice"
          Driver "wacom"
          Identifier "Wacom_eraser"
          ${optionalString (cfg.device != null) ''
            Option "Device" "${cfg.device}"
          ''}
          Option "Type" "eraser"
          ${optionalString (cfg.forceDeviceType != null) ''
            Option "ForceDevice" "${cfg.forceDeviceType}"
          ''}
          ${cfg.eraserExtraConfig}
        EndSection

        Section "InputDevice"
          Driver "wacom"
          Identifier "Wacom_cursor"
          ${optionalString (cfg.device != null) ''
            Option "Device" "${cfg.device}"
          ''}
          Option "Type" "cursor"
          ${optionalString (cfg.forceDeviceType != null) ''
            Option "ForceDevice" "${cfg.forceDeviceType}"
          ''}
          ${cfg.cursorExtraConfig}
        EndSection
      '';

  };

}