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 = ''
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 = ''
25 Blacklist of kernel modules known to conflict with OpenTabletDriver.
26 '';
27 };
28
29 package = mkPackageOption pkgs "opentabletdriver" { };
30
31 daemon = {
32 enable = mkOption {
33 default = true;
34 type = types.bool;
35 description = ''
36 Whether to start OpenTabletDriver daemon as a systemd user service.
37 '';
38 };
39 };
40 };
41 };
42
43 config = mkIf cfg.enable {
44 environment.systemPackages = [ cfg.package ];
45
46 services.udev.packages = [ cfg.package ];
47
48 boot.blacklistedKernelModules = cfg.blacklistedKernelModules;
49
50 systemd.user.services.opentabletdriver = with pkgs; mkIf cfg.daemon.enable {
51 description = "Open source, cross-platform, user-mode tablet driver";
52 wantedBy = [ "graphical-session.target" ];
53 partOf = [ "graphical-session.target" ];
54
55 serviceConfig = {
56 Type = "simple";
57 ExecStart = "${cfg.package}/bin/otd-daemon";
58 Restart = "on-failure";
59 };
60 };
61 };
62}