99 lines
2.5 KiB
Nix
99 lines
2.5 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let cfg = config.services.xserver.multitouch;
|
|
disabledTapConfig = ''
|
|
Option "MaxTapTime" "0"
|
|
Option "MaxTapMove" "0"
|
|
Option "TapButton1" "0"
|
|
Option "TapButton2" "0"
|
|
Option "TapButton3" "0"
|
|
'';
|
|
in {
|
|
|
|
options = {
|
|
|
|
services.xserver.multitouch = {
|
|
|
|
enable = mkOption {
|
|
default = false;
|
|
example = true;
|
|
description = "Whether to enable multitouch touchpad support.";
|
|
};
|
|
|
|
invertScroll = mkOption {
|
|
default = false;
|
|
example = true;
|
|
type = types.bool;
|
|
description = "Whether to invert scrolling direction à la OSX Lion";
|
|
};
|
|
|
|
ignorePalm = mkOption {
|
|
default = false;
|
|
example = true;
|
|
type = types.bool;
|
|
description = "Whether to ignore touches detected as being the palm (i.e when typing)";
|
|
};
|
|
|
|
tapButtons = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
example = false;
|
|
description = "Whether to enable tap buttons.";
|
|
};
|
|
|
|
buttonsMap = mkOption {
|
|
type = types.listOf types.int;
|
|
default = [3 2 0];
|
|
example = [1 3 2];
|
|
description = "Remap touchpad buttons.";
|
|
apply = map toString;
|
|
};
|
|
|
|
additionalOptions = mkOption {
|
|
type = types.str;
|
|
default = "";
|
|
example = ''
|
|
Option "ScaleDistance" "50"
|
|
Option "RotateDistance" "60"
|
|
'';
|
|
description = ''
|
|
Additional options for mtrack touchpad driver.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
services.xserver.modules = [ pkgs.xf86_input_mtrack ];
|
|
|
|
services.xserver.config =
|
|
''
|
|
# Automatically enable the multitouch driver
|
|
Section "InputClass"
|
|
MatchIsTouchpad "on"
|
|
Identifier "Touchpads"
|
|
Driver "mtrack"
|
|
Option "IgnorePalm" "${if cfg.ignorePalm then "true" else "false"}"
|
|
Option "ClickFinger1" "${builtins.elemAt cfg.buttonsMap 0}"
|
|
Option "ClickFinger2" "${builtins.elemAt cfg.buttonsMap 1}"
|
|
Option "ClickFinger3" "${builtins.elemAt cfg.buttonsMap 2}"
|
|
${optionalString (!cfg.tapButtons) disabledTapConfig}
|
|
${optionalString cfg.invertScroll ''
|
|
Option "ScrollUpButton" "5"
|
|
Option "ScrollDownButton" "4"
|
|
Option "ScrollLeftButton" "7"
|
|
Option "ScrollRightButton" "6"
|
|
''}
|
|
${cfg.additionalOptions}
|
|
EndSection
|
|
'';
|
|
|
|
};
|
|
|
|
}
|