Files
nixos-config/modules/desktop/touchpad.nix
T
2025-10-18 21:43:14 +02:00

178 lines
5.2 KiB
Nix

{ config, lib, pkgs, modulesPath, ... }:
# Touch pad configuration interface
let
scrollMethods = {
twoFingers = "twoFingers";
touchPadEdges = "touchPadEdges";
};
rightClickMethods = {
bottomRight = "bottomRight";
twoFingers = "twoFingers";
};
accelerationProfiles = {
none = "none";
default = "default";
};
in
{
# Copy of https://github.com/nix-community/plasma-manager/blob/trunk/modules/input.nix#L69
options.lumpiasty.touchPad = {
enable = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable the touchpad.
'';
};
name = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "PNP0C50:00 0911:5288 Touchpad";
description = ''
The name of the touchpad.
This can be found by looking at the `Name` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
vendorId = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "0911";
description = ''
The vendor ID of the touchpad.
This can be found by looking at the `Vendor` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
productId = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "5288";
description = ''
The product ID of the touchpad.
This can be found by looking at the `Product` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
disableWhileTyping = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to disable the touchpad while typing.
'';
};
leftHanded = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = false;
description = ''
Whether to swap the left and right buttons.
'';
};
middleButtonEmulation = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = false;
description = ''
Whether to enable middle mouse click emulation by pressing the left and right buttons at the same time.
Activating this increases the click latency by 50ms.
'';
};
pointerSpeed = lib.mkOption {
type = with lib.types; nullOr (numbers.between (-1) 1);
default = null;
example = "0";
description = ''
How fast the pointer moves.
'';
};
accelerationProfile = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames accelerationProfiles));
default = null;
example = "none";
description = "Set the touchpad acceleration profile.";
apply = profile: if (profile == null) then null else accelerationProfiles."${profile}";
};
naturalScroll = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable natural scrolling for the touchpad.
'';
};
tapToClick = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable tap-to-click for the touchpad.
'';
};
tapAndDrag = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable tap-and-drag for the touchpad.
'';
};
tapDragLock = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable the tap-and-drag lock for the touchpad.
'';
};
scrollMethod = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames scrollMethods));
default = null;
example = "touchPadEdges";
description = ''
Configure how scrolling is performed on the touchpad.
'';
apply = method: if (method == null) then null else scrollMethods."${method}";
};
scrollSpeed = lib.mkOption {
type = with lib.types; nullOr (numbers.between 0.1 20);
default = null;
example = 0.1;
description = ''
Configure the scrolling speed of the touchpad. Lower is slower.
If unset, KDE Plasma will default to 0.3.
'';
};
rightClickMethod = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames rightClickMethods));
default = null;
example = "twoFingers";
description = ''
Configure how right-clicking is performed on the touchpad.
'';
apply = method: if (method == null) then null else rightClickMethods."${method}";
};
twoFingerTap = lib.mkOption {
type =
with lib.types;
nullOr (enum [
"rightClick"
"middleClick"
]);
default = null;
example = "twoFingers";
description = ''
Configure what a two-finger tap maps to on the touchpad.
'';
apply = v: if (v == null) then null else (v == "middleClick");
};
};
}