1{ config, lib, pkgs, ... }:
2
3let
4 cfg = config.services.joycond;
5 kernelPackages = config.boot.kernelPackages;
6in
7
8with lib;
9
10{
11 options.services.joycond = {
12 enable = mkEnableOption (lib.mdDoc "support for Nintendo Pro Controllers and Joycons");
13
14 package = mkOption {
15 type = types.package;
16 default = pkgs.joycond;
17 defaultText = lib.literalExpression "pkgs.joycond";
18 description = lib.mdDoc ''
19 The joycond package to use.
20 '';
21 };
22 };
23
24 config = mkIf cfg.enable {
25 environment.systemPackages = [ cfg.package ];
26
27 boot.extraModulePackages = optional (versionOlder kernelPackages.kernel.version "5.16") kernelPackages.hid-nintendo;
28
29 services.udev.packages = [ cfg.package ];
30
31 systemd.packages = [ cfg.package ];
32
33 # Workaround for https://github.com/NixOS/nixpkgs/issues/81138
34 systemd.services.joycond.wantedBy = [ "multi-user.target" ];
35 };
36}