1{ config, lib, pkgs, ... }:
2
3with lib;
4let
5 cfg = config.hardware.opentabletdriver;
6in
7{
8 meta.maintainers = with lib.maintainers; [ thiagokokada ];
9
10 options = {
11 hardware.opentabletdriver = {
12 enable = mkOption {
13 default = false;
14 type = types.bool;
15 description = lib.mdDoc ''
16 Enable OpenTabletDriver udev rules, user service and blacklist kernel
17 modules known to conflict with OpenTabletDriver.
18 '';
19 };
20
21 blacklistedKernelModules = mkOption {
22 type = types.listOf types.str;
23 default = [ "hid-uclogic" "wacom" ];
24 description = lib.mdDoc ''
25 Blacklist of kernel modules known to conflict with OpenTabletDriver.
26 '';
27 };
28
29 package = mkOption {
30 type = types.package;
31 default = pkgs.opentabletdriver;
32 defaultText = literalExpression "pkgs.opentabletdriver";
33 description = lib.mdDoc ''
34 OpenTabletDriver derivation to use.
35 '';
36 };
37
38 daemon = {
39 enable = mkOption {
40 default = true;
41 type = types.bool;
42 description = lib.mdDoc ''
43 Whether to start OpenTabletDriver daemon as a systemd user service.
44 '';
45 };
46 };
47 };
48 };
49
50 config = mkIf cfg.enable {
51 environment.systemPackages = [ cfg.package ];
52
53 services.udev.packages = [ cfg.package ];
54
55 boot.blacklistedKernelModules = cfg.blacklistedKernelModules;
56
57 systemd.user.services.opentabletdriver = with pkgs; mkIf cfg.daemon.enable {
58 description = "Open source, cross-platform, user-mode tablet driver";
59 wantedBy = [ "graphical-session.target" ];
60 partOf = [ "graphical-session.target" ];
61
62 serviceConfig = {
63 Type = "simple";
64 ExecStart = "${cfg.package}/bin/otd-daemon";
65 Restart = "on-failure";
66 };
67 };
68 };
69}