uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead
https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948 this can do it nicely. Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
commit
56de2bcd43
30691 changed files with 3076956 additions and 0 deletions
59
nixos/modules/services/x11/hardware/cmt.nix
Normal file
59
nixos/modules/services/x11/hardware/cmt.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.services.xserver.cmt;
|
||||
etcPath = "X11/xorg.conf.d";
|
||||
|
||||
in {
|
||||
|
||||
options = {
|
||||
|
||||
services.xserver.cmt = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enable chrome multitouch input (cmt). Touchpad drivers that are configured for chromebooks.";
|
||||
};
|
||||
models = mkOption {
|
||||
type = types.enum [ "atlas" "banjo" "candy" "caroline" "cave" "celes" "clapper" "cyan" "daisy" "elan" "elm" "enguarde" "eve" "expresso" "falco" "gandof" "glimmer" "gnawty" "heli" "kevin" "kip" "leon" "lulu" "orco" "pbody" "peppy" "pi" "pit" "puppy" "quawks" "rambi" "samus" "snappy" "spring" "squawks" "swanky" "winky" "wolf" "auron_paine" "auron_yuna" "daisy_skate" "nyan_big" "nyan_blaze" "veyron_jaq" "veyron_jerry" "veyron_mighty" "veyron_minnie" "veyron_speedy" ];
|
||||
example = "banjo";
|
||||
description = ''
|
||||
Which models to enable cmt for. Enter the Code Name for your Chromebook.
|
||||
Code Name can be found at <link xlink:href="https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices" />.
|
||||
'';
|
||||
};
|
||||
}; #closes services
|
||||
}; #closes options
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.xserver.modules = [ pkgs.xf86_input_cmt ];
|
||||
|
||||
environment.etc = {
|
||||
"${etcPath}/40-touchpad-cmt.conf" = {
|
||||
source = "${pkgs.chromium-xorg-conf}/40-touchpad-cmt.conf";
|
||||
};
|
||||
"${etcPath}/50-touchpad-cmt-${cfg.models}.conf" = {
|
||||
source = "${pkgs.chromium-xorg-conf}/50-touchpad-cmt-${cfg.models}.conf";
|
||||
};
|
||||
"${etcPath}/60-touchpad-cmt-${cfg.models}.conf" = {
|
||||
source = "${pkgs.chromium-xorg-conf}/60-touchpad-cmt-${cfg.models}.conf";
|
||||
};
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = !config.services.xserver.libinput.enable;
|
||||
message = ''
|
||||
cmt and libinput are incompatible, meaning you cannot enable them both.
|
||||
To use cmt you need to disable libinput with `services.xserver.libinput.enable = false`
|
||||
If you haven't enabled it in configuration.nix, it's enabled by default on a
|
||||
different xserver module.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
38
nixos/modules/services/x11/hardware/digimend.nix
Normal file
38
nixos/modules/services/x11/hardware/digimend.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.services.xserver.digimend;
|
||||
|
||||
pkg = config.boot.kernelPackages.digimend;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
services.xserver.digimend = {
|
||||
|
||||
enable = mkEnableOption "the digimend drivers for Huion/XP-Pen/etc. tablets";
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
# digimend drivers use xsetwacom and wacom X11 drivers
|
||||
services.xserver.wacom.enable = true;
|
||||
|
||||
boot.extraModulePackages = [ pkg ];
|
||||
|
||||
environment.etc."X11/xorg.conf.d/50-digimend.conf".source =
|
||||
"${pkg}/usr/share/X11/xorg.conf.d/50-digimend.conf";
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
291
nixos/modules/services/x11/hardware/libinput.nix
Normal file
291
nixos/modules/services/x11/hardware/libinput.nix
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let cfg = config.services.xserver.libinput;
|
||||
|
||||
xorgBool = v: if v then "on" else "off";
|
||||
|
||||
mkConfigForDevice = deviceType: {
|
||||
dev = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "/dev/input/event0";
|
||||
description =
|
||||
''
|
||||
Path for ${deviceType} device. Set to <literal>null</literal> to apply to any
|
||||
auto-detected ${deviceType}.
|
||||
'';
|
||||
};
|
||||
|
||||
accelProfile = mkOption {
|
||||
type = types.enum [ "flat" "adaptive" ];
|
||||
default = "adaptive";
|
||||
example = "flat";
|
||||
description =
|
||||
''
|
||||
Sets the pointer acceleration profile to the given profile.
|
||||
Permitted values are <literal>adaptive</literal>, <literal>flat</literal>.
|
||||
Not all devices support this option or all profiles.
|
||||
If a profile is unsupported, the default profile for this is used.
|
||||
<literal>flat</literal>: Pointer motion is accelerated by a constant
|
||||
(device-specific) factor, depending on the current speed.
|
||||
<literal>adaptive</literal>: Pointer acceleration depends on the input speed.
|
||||
This is the default profile for most devices.
|
||||
'';
|
||||
};
|
||||
|
||||
accelSpeed = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "-0.5";
|
||||
description = "Cursor acceleration (how fast speed increases from minSpeed to maxSpeed).";
|
||||
};
|
||||
|
||||
buttonMapping = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "1 6 3 4 5 0 7";
|
||||
description =
|
||||
''
|
||||
Sets the logical button mapping for this device, see XSetPointerMapping(3). The string must
|
||||
be a space-separated list of button mappings in the order of the logical buttons on the
|
||||
device, starting with button 1. The default mapping is "1 2 3 ... 32". A mapping of 0 deac‐
|
||||
tivates the button. Multiple buttons can have the same mapping. Invalid mapping strings are
|
||||
discarded and the default mapping is used for all buttons. Buttons not specified in the
|
||||
user's mapping use the default mapping. See section BUTTON MAPPING for more details.
|
||||
'';
|
||||
};
|
||||
|
||||
calibrationMatrix = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "0.5 0 0 0 0.8 0.1 0 0 1";
|
||||
description =
|
||||
''
|
||||
A string of 9 space-separated floating point numbers. Sets the calibration matrix to the
|
||||
3x3 matrix where the first row is (abc), the second row is (def) and the third row is (ghi).
|
||||
'';
|
||||
};
|
||||
|
||||
clickMethod = mkOption {
|
||||
type = types.nullOr (types.enum [ "none" "buttonareas" "clickfinger" ]);
|
||||
default = null;
|
||||
example = "buttonareas";
|
||||
description =
|
||||
''
|
||||
Enables a click method. Permitted values are <literal>none</literal>,
|
||||
<literal>buttonareas</literal>, <literal>clickfinger</literal>.
|
||||
Not all devices support all methods, if an option is unsupported,
|
||||
the default click method for this device is used.
|
||||
'';
|
||||
};
|
||||
|
||||
leftHanded = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enables left-handed button orientation, i.e. swapping left and right buttons.";
|
||||
};
|
||||
|
||||
middleEmulation = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description =
|
||||
''
|
||||
Enables middle button emulation. When enabled, pressing the left and right buttons
|
||||
simultaneously produces a middle mouse button click.
|
||||
'';
|
||||
};
|
||||
|
||||
naturalScrolling = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enables or disables natural scrolling behavior.";
|
||||
};
|
||||
|
||||
scrollButton = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
example = 1;
|
||||
description =
|
||||
''
|
||||
Designates a button as scroll button. If the ScrollMethod is button and the button is logically
|
||||
held down, x/y axis movement is converted into scroll events.
|
||||
'';
|
||||
};
|
||||
|
||||
scrollMethod = mkOption {
|
||||
type = types.enum [ "twofinger" "edge" "button" "none" ];
|
||||
default = "twofinger";
|
||||
example = "edge";
|
||||
description =
|
||||
''
|
||||
Specify the scrolling method: <literal>twofinger</literal>, <literal>edge</literal>,
|
||||
<literal>button</literal>, or <literal>none</literal>
|
||||
'';
|
||||
};
|
||||
|
||||
horizontalScrolling = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description =
|
||||
''
|
||||
Disables horizontal scrolling. When disabled, this driver will discard any horizontal scroll
|
||||
events from libinput. Note that this does not disable horizontal scrolling, it merely
|
||||
discards the horizontal axis from any scroll events.
|
||||
'';
|
||||
};
|
||||
|
||||
sendEventsMode = mkOption {
|
||||
type = types.enum [ "disabled" "enabled" "disabled-on-external-mouse" ];
|
||||
default = "enabled";
|
||||
example = "disabled";
|
||||
description =
|
||||
''
|
||||
Sets the send events mode to <literal>disabled</literal>, <literal>enabled</literal>,
|
||||
or <literal>disabled-on-external-mouse</literal>
|
||||
'';
|
||||
};
|
||||
|
||||
tapping = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description =
|
||||
''
|
||||
Enables or disables tap-to-click behavior.
|
||||
'';
|
||||
};
|
||||
|
||||
tappingDragLock = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description =
|
||||
''
|
||||
Enables or disables drag lock during tapping behavior. When enabled, a finger up during tap-
|
||||
and-drag will not immediately release the button. If the finger is set down again within the
|
||||
timeout, the draging process continues.
|
||||
'';
|
||||
};
|
||||
|
||||
transformationMatrix = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "0.5 0 0 0 0.8 0.1 0 0 1";
|
||||
description = ''
|
||||
A string of 9 space-separated floating point numbers. Sets the transformation matrix to
|
||||
the 3x3 matrix where the first row is (abc), the second row is (def) and the third row is (ghi).
|
||||
'';
|
||||
};
|
||||
|
||||
disableWhileTyping = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description =
|
||||
''
|
||||
Disable input method while typing.
|
||||
'';
|
||||
};
|
||||
|
||||
additionalOptions = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example =
|
||||
''
|
||||
Option "DragLockButtons" "L1 B1 L2 B2"
|
||||
'';
|
||||
description = ''
|
||||
Additional options for libinput ${deviceType} driver. See
|
||||
<citerefentry><refentrytitle>libinput</refentrytitle><manvolnum>4</manvolnum></citerefentry>
|
||||
for available options.";
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
mkX11ConfigForDevice = deviceType: matchIs: ''
|
||||
Identifier "libinput ${deviceType} configuration"
|
||||
MatchDriver "libinput"
|
||||
MatchIs${matchIs} "${xorgBool true}"
|
||||
${optionalString (cfg.${deviceType}.dev != null) ''MatchDevicePath "${cfg.${deviceType}.dev}"''}
|
||||
Option "AccelProfile" "${cfg.${deviceType}.accelProfile}"
|
||||
${optionalString (cfg.${deviceType}.accelSpeed != null) ''Option "AccelSpeed" "${cfg.${deviceType}.accelSpeed}"''}
|
||||
${optionalString (cfg.${deviceType}.buttonMapping != null) ''Option "ButtonMapping" "${cfg.${deviceType}.buttonMapping}"''}
|
||||
${optionalString (cfg.${deviceType}.calibrationMatrix != null) ''Option "CalibrationMatrix" "${cfg.${deviceType}.calibrationMatrix}"''}
|
||||
${optionalString (cfg.${deviceType}.transformationMatrix != null) ''Option "TransformationMatrix" "${cfg.${deviceType}.transformationMatrix}"''}
|
||||
${optionalString (cfg.${deviceType}.clickMethod != null) ''Option "ClickMethod" "${cfg.${deviceType}.clickMethod}"''}
|
||||
Option "LeftHanded" "${xorgBool cfg.${deviceType}.leftHanded}"
|
||||
Option "MiddleEmulation" "${xorgBool cfg.${deviceType}.middleEmulation}"
|
||||
Option "NaturalScrolling" "${xorgBool cfg.${deviceType}.naturalScrolling}"
|
||||
${optionalString (cfg.${deviceType}.scrollButton != null) ''Option "ScrollButton" "${toString cfg.${deviceType}.scrollButton}"''}
|
||||
Option "ScrollMethod" "${cfg.${deviceType}.scrollMethod}"
|
||||
Option "HorizontalScrolling" "${xorgBool cfg.${deviceType}.horizontalScrolling}"
|
||||
Option "SendEventsMode" "${cfg.${deviceType}.sendEventsMode}"
|
||||
Option "Tapping" "${xorgBool cfg.${deviceType}.tapping}"
|
||||
Option "TappingDragLock" "${xorgBool cfg.${deviceType}.tappingDragLock}"
|
||||
Option "DisableWhileTyping" "${xorgBool cfg.${deviceType}.disableWhileTyping}"
|
||||
${cfg.${deviceType}.additionalOptions}
|
||||
'';
|
||||
in {
|
||||
|
||||
imports =
|
||||
(map (option: mkRenamedOptionModule ([ "services" "xserver" "libinput" option ]) [ "services" "xserver" "libinput" "touchpad" option ]) [
|
||||
"accelProfile"
|
||||
"accelSpeed"
|
||||
"buttonMapping"
|
||||
"calibrationMatrix"
|
||||
"clickMethod"
|
||||
"leftHanded"
|
||||
"middleEmulation"
|
||||
"naturalScrolling"
|
||||
"scrollButton"
|
||||
"scrollMethod"
|
||||
"horizontalScrolling"
|
||||
"sendEventsMode"
|
||||
"tapping"
|
||||
"tappingDragLock"
|
||||
"transformationMatrix"
|
||||
"disableWhileTyping"
|
||||
"additionalOptions"
|
||||
]);
|
||||
|
||||
options = {
|
||||
|
||||
services.xserver.libinput = {
|
||||
enable = mkEnableOption "libinput";
|
||||
mouse = mkConfigForDevice "mouse";
|
||||
touchpad = mkConfigForDevice "touchpad";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.xserver.modules = [ pkgs.xorg.xf86inputlibinput ];
|
||||
|
||||
environment.systemPackages = [ pkgs.xorg.xf86inputlibinput ];
|
||||
|
||||
environment.etc =
|
||||
let cfgPath = "X11/xorg.conf.d/40-libinput.conf";
|
||||
in {
|
||||
${cfgPath} = {
|
||||
source = pkgs.xorg.xf86inputlibinput.out + "/share/" + cfgPath;
|
||||
};
|
||||
};
|
||||
|
||||
services.udev.packages = [ pkgs.libinput.out ];
|
||||
|
||||
services.xserver.inputClassSections = [
|
||||
(mkX11ConfigForDevice "mouse" "Pointer")
|
||||
(mkX11ConfigForDevice "touchpad" "Touchpad")
|
||||
];
|
||||
|
||||
assertions = [
|
||||
# already present in synaptics.nix
|
||||
/* {
|
||||
assertion = !config.services.xserver.synaptics.enable;
|
||||
message = "Synaptics and libinput are incompatible, you cannot enable both (in services.xserver).";
|
||||
} */
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
218
nixos/modules/services/x11/hardware/synaptics.nix
Normal file
218
nixos/modules/services/x11/hardware/synaptics.nix
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let cfg = config.services.xserver.synaptics;
|
||||
opt = options.services.xserver.synaptics;
|
||||
tapConfig = if cfg.tapButtons then enabledTapConfig else disabledTapConfig;
|
||||
enabledTapConfig = ''
|
||||
Option "MaxTapTime" "180"
|
||||
Option "MaxTapMove" "220"
|
||||
Option "TapButton1" "${builtins.elemAt cfg.fingersMap 0}"
|
||||
Option "TapButton2" "${builtins.elemAt cfg.fingersMap 1}"
|
||||
Option "TapButton3" "${builtins.elemAt cfg.fingersMap 2}"
|
||||
'';
|
||||
disabledTapConfig = ''
|
||||
Option "MaxTapTime" "0"
|
||||
Option "MaxTapMove" "0"
|
||||
Option "TapButton1" "0"
|
||||
Option "TapButton2" "0"
|
||||
Option "TapButton3" "0"
|
||||
'';
|
||||
pkg = pkgs.xorg.xf86inputsynaptics;
|
||||
etcFile = "X11/xorg.conf.d/70-synaptics.conf";
|
||||
in {
|
||||
|
||||
options = {
|
||||
|
||||
services.xserver.synaptics = {
|
||||
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Whether to enable touchpad support. Deprecated: Consider services.xserver.libinput.enable.";
|
||||
};
|
||||
|
||||
dev = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "/dev/input/event0";
|
||||
description =
|
||||
''
|
||||
Path for touchpad device. Set to null to apply to any
|
||||
auto-detected touchpad.
|
||||
'';
|
||||
};
|
||||
|
||||
accelFactor = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "0.001";
|
||||
description = "Cursor acceleration (how fast speed increases from minSpeed to maxSpeed).";
|
||||
};
|
||||
|
||||
minSpeed = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "0.6";
|
||||
description = "Cursor speed factor for precision finger motion.";
|
||||
};
|
||||
|
||||
maxSpeed = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "1.0";
|
||||
description = "Cursor speed factor for highest-speed finger motion.";
|
||||
};
|
||||
|
||||
scrollDelta = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
example = 75;
|
||||
description = "Move distance of the finger for a scroll event.";
|
||||
};
|
||||
|
||||
twoFingerScroll = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Whether to enable two-finger drag-scrolling. Overridden by horizTwoFingerScroll and vertTwoFingerScroll.";
|
||||
};
|
||||
|
||||
horizTwoFingerScroll = mkOption {
|
||||
type = types.bool;
|
||||
default = cfg.twoFingerScroll;
|
||||
defaultText = literalExpression "config.${opt.twoFingerScroll}";
|
||||
description = "Whether to enable horizontal two-finger drag-scrolling.";
|
||||
};
|
||||
|
||||
vertTwoFingerScroll = mkOption {
|
||||
type = types.bool;
|
||||
default = cfg.twoFingerScroll;
|
||||
defaultText = literalExpression "config.${opt.twoFingerScroll}";
|
||||
description = "Whether to enable vertical two-finger drag-scrolling.";
|
||||
};
|
||||
|
||||
horizEdgeScroll = mkOption {
|
||||
type = types.bool;
|
||||
default = ! cfg.horizTwoFingerScroll;
|
||||
defaultText = literalExpression "! config.${opt.horizTwoFingerScroll}";
|
||||
description = "Whether to enable horizontal edge drag-scrolling.";
|
||||
};
|
||||
|
||||
vertEdgeScroll = mkOption {
|
||||
type = types.bool;
|
||||
default = ! cfg.vertTwoFingerScroll;
|
||||
defaultText = literalExpression "! config.${opt.vertTwoFingerScroll}";
|
||||
description = "Whether to enable vertical edge drag-scrolling.";
|
||||
};
|
||||
|
||||
tapButtons = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether to enable tap buttons.";
|
||||
};
|
||||
|
||||
buttonsMap = mkOption {
|
||||
type = types.listOf types.int;
|
||||
default = [1 2 3];
|
||||
example = [1 3 2];
|
||||
description = "Remap touchpad buttons.";
|
||||
apply = map toString;
|
||||
};
|
||||
|
||||
fingersMap = mkOption {
|
||||
type = types.listOf types.int;
|
||||
default = [1 2 3];
|
||||
example = [1 3 2];
|
||||
description = "Remap several-fingers taps.";
|
||||
apply = map toString;
|
||||
};
|
||||
|
||||
palmDetect = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Whether to enable palm detection (hardware support required)";
|
||||
};
|
||||
|
||||
palmMinWidth = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
example = 5;
|
||||
description = "Minimum finger width at which touch is considered a palm";
|
||||
};
|
||||
|
||||
palmMinZ = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
example = 20;
|
||||
description = "Minimum finger pressure at which touch is considered a palm";
|
||||
};
|
||||
|
||||
horizontalScroll = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether to enable horizontal scrolling (on touchpad)";
|
||||
};
|
||||
|
||||
additionalOptions = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = ''
|
||||
Option "RTCornerButton" "2"
|
||||
Option "RBCornerButton" "3"
|
||||
'';
|
||||
description = ''
|
||||
Additional options for synaptics touchpad driver.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.xserver.modules = [ pkg.out ];
|
||||
|
||||
environment.etc.${etcFile}.source =
|
||||
"${pkg.out}/share/X11/xorg.conf.d/70-synaptics.conf";
|
||||
|
||||
environment.systemPackages = [ pkg ];
|
||||
|
||||
services.xserver.config =
|
||||
''
|
||||
# Automatically enable the synaptics driver for all touchpads.
|
||||
Section "InputClass"
|
||||
Identifier "synaptics touchpad catchall"
|
||||
MatchIsTouchpad "on"
|
||||
${optionalString (cfg.dev != null) ''MatchDevicePath "${cfg.dev}"''}
|
||||
Driver "synaptics"
|
||||
${optionalString (cfg.minSpeed != null) ''Option "MinSpeed" "${cfg.minSpeed}"''}
|
||||
${optionalString (cfg.maxSpeed != null) ''Option "MaxSpeed" "${cfg.maxSpeed}"''}
|
||||
${optionalString (cfg.accelFactor != null) ''Option "AccelFactor" "${cfg.accelFactor}"''}
|
||||
${optionalString cfg.tapButtons tapConfig}
|
||||
Option "ClickFinger1" "${builtins.elemAt cfg.buttonsMap 0}"
|
||||
Option "ClickFinger2" "${builtins.elemAt cfg.buttonsMap 1}"
|
||||
Option "ClickFinger3" "${builtins.elemAt cfg.buttonsMap 2}"
|
||||
Option "VertTwoFingerScroll" "${if cfg.vertTwoFingerScroll then "1" else "0"}"
|
||||
Option "HorizTwoFingerScroll" "${if cfg.horizTwoFingerScroll then "1" else "0"}"
|
||||
Option "VertEdgeScroll" "${if cfg.vertEdgeScroll then "1" else "0"}"
|
||||
Option "HorizEdgeScroll" "${if cfg.horizEdgeScroll then "1" else "0"}"
|
||||
${optionalString cfg.palmDetect ''Option "PalmDetect" "1"''}
|
||||
${optionalString (cfg.palmMinWidth != null) ''Option "PalmMinWidth" "${toString cfg.palmMinWidth}"''}
|
||||
${optionalString (cfg.palmMinZ != null) ''Option "PalmMinZ" "${toString cfg.palmMinZ}"''}
|
||||
${optionalString (cfg.scrollDelta != null) ''Option "VertScrollDelta" "${toString cfg.scrollDelta}"''}
|
||||
${if !cfg.horizontalScroll then ''Option "HorizScrollDelta" "0"''
|
||||
else (optionalString (cfg.scrollDelta != null) ''Option "HorizScrollDelta" "${toString cfg.scrollDelta}"'')}
|
||||
${cfg.additionalOptions}
|
||||
EndSection
|
||||
'';
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = !config.services.xserver.libinput.enable;
|
||||
message = "Synaptics and libinput are incompatible, you cannot enable both (in services.xserver).";
|
||||
}
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
48
nixos/modules/services/x11/hardware/wacom.nix
Normal file
48
nixos/modules/services/x11/hardware/wacom.nix
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.services.xserver.wacom;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
services.xserver.wacom = {
|
||||
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to enable the Wacom touchscreen/digitizer/tablet.
|
||||
If you ever have any issues such as, try switching to terminal (ctrl-alt-F1) and back
|
||||
which will make Xorg reconfigure the device ?
|
||||
|
||||
If you're not satisfied by the default behaviour you can override
|
||||
<option>environment.etc."X11/xorg.conf.d/70-wacom.conf"</option> in
|
||||
configuration.nix easily.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
environment.systemPackages = [ pkgs.xf86_input_wacom ]; # provides xsetwacom
|
||||
|
||||
services.xserver.modules = [ pkgs.xf86_input_wacom ];
|
||||
|
||||
services.udev.packages = [ pkgs.xf86_input_wacom ];
|
||||
|
||||
environment.etc."X11/xorg.conf.d/70-wacom.conf".source = "${pkgs.xf86_input_wacom}/share/X11/xorg.conf.d/70-wacom.conf";
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue