feat: added prime run support
WIP: touchegg module
This commit is contained in:
parent
e49414d96f
commit
7e4c4c5ad1
|
@ -15,6 +15,7 @@
|
|||
#
|
||||
./modules/pipewire.nix
|
||||
./modules/rekey.nix
|
||||
./modules/nvidia.nix
|
||||
];
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
|
@ -71,7 +72,7 @@
|
|||
xkbVariant = "bone";
|
||||
autoRepeatDelay = 235;
|
||||
autoRepeatInterval = 60;
|
||||
videoDrivers = ["modesetting" "nvidia"];
|
||||
videoDrivers = ["modesetting"];
|
||||
libinput = {
|
||||
enable = true;
|
||||
mouse.accelProfile = "flat";
|
||||
|
|
|
@ -103,11 +103,11 @@
|
|||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1675855108,
|
||||
"narHash": "sha256-KSiF7aTXTLlocFjMj+61USedaaiscD1ek6f/anFqr3Q=",
|
||||
"lastModified": 1675888750,
|
||||
"narHash": "sha256-w3T9UiRN6SaKMYI62+Ic3ka1Tyr9zaBcclhh3e4RCUk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "e631d78ddfbf808fd1cfc4d79039a1b3acda5bed",
|
||||
"rev": "1232d0e13305f462a5a7c29584f50eb232cc4ba0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
20
modules/nvidia.nix
Normal file
20
modules/nvidia.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
{pkgs, ...}: let
|
||||
prime-run = pkgs.writeShellScriptBin "prime-run" ''
|
||||
export __NV_PRIME_RENDER_OFFLOAD=1
|
||||
export __NV_PRIME_RENDER_OFFLOAD_Provider=NVIDIA-G0
|
||||
export __GLX_VENDOR_LIBRARY_NAME=nvidia
|
||||
export __VK_LAYER_NV_optimus=NVIDIA_only
|
||||
exec "$@"
|
||||
'';
|
||||
in {
|
||||
services.xserver.videoDrivers = ["nvidia"];
|
||||
|
||||
environment.systemPackages = [prime-run];
|
||||
|
||||
hardware.nvidia.prime = {
|
||||
offload.enable = true;
|
||||
|
||||
intelBusId = "PCI:00:02:0";
|
||||
nvidiaBusId = "PCI:59:00:0";
|
||||
};
|
||||
}
|
387
users/common/touchegg.nix
Normal file
387
users/common/touchegg.nix
Normal file
|
@ -0,0 +1,387 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.programs.touchegg;
|
||||
|
||||
# common options
|
||||
fingers = mkOption {
|
||||
type = types.ints.between 2 5;
|
||||
description = ''
|
||||
amount of simoultaneous fingers
|
||||
needed to trigger the gesture
|
||||
'';
|
||||
default = 3;
|
||||
example = "";
|
||||
};
|
||||
|
||||
# Submodules for the different gestures
|
||||
swipe_gesture = types.submodule {
|
||||
inherit fingers;
|
||||
|
||||
direction = mkOption {
|
||||
type = types.enum ["UP" "DOWN" "LEFT" "RIGHT"];
|
||||
description = ''
|
||||
the swipe direction
|
||||
'';
|
||||
example = "UP";
|
||||
};
|
||||
};
|
||||
|
||||
pinch_gesture = types.submodule {
|
||||
inherit fingers;
|
||||
|
||||
direction = mkOption {
|
||||
type = types.enum ["IN" "OUT"];
|
||||
description = ''
|
||||
the pinch direction
|
||||
'';
|
||||
example = "IN";
|
||||
};
|
||||
};
|
||||
|
||||
tap_gesture = types.submodule {
|
||||
inherit fingers;
|
||||
};
|
||||
|
||||
# common options
|
||||
animate = mkOption {
|
||||
type = tyes.bool;
|
||||
description = ''
|
||||
Whether to display the animation
|
||||
'';
|
||||
default = false;
|
||||
};
|
||||
|
||||
color = mkOption {
|
||||
type = type.str;
|
||||
description = ''
|
||||
hex value of the animation color
|
||||
'';
|
||||
default = "3E9FED";
|
||||
example = "909090";
|
||||
};
|
||||
|
||||
borderColor = mkOption {
|
||||
type = type.str;
|
||||
description = ''
|
||||
hex value of the color of the
|
||||
animation border
|
||||
'';
|
||||
default = "3E9FED";
|
||||
example = "FF90FF";
|
||||
};
|
||||
|
||||
animation_common_options = {
|
||||
inherit animate color borderColor;
|
||||
};
|
||||
|
||||
# Submodules for the actions performed
|
||||
# by gestures
|
||||
maximize_restore_window = {
|
||||
inherit animation_common_options;
|
||||
};
|
||||
|
||||
minimize_restore_window = {
|
||||
};
|
||||
|
||||
tile_window = {
|
||||
inherit animation_common_options;
|
||||
direction = mkOption {
|
||||
type = types.enum ["left" "right"];
|
||||
description = ''
|
||||
Which side of the screen to snap to
|
||||
'';
|
||||
default = "";
|
||||
example = "left";
|
||||
};
|
||||
};
|
||||
|
||||
fullscreen_window = {
|
||||
inherit animation_common_options;
|
||||
};
|
||||
|
||||
close_window = {
|
||||
inherit animation_common_options;
|
||||
};
|
||||
|
||||
change_desktop = {
|
||||
inherit animation_common_options;
|
||||
|
||||
direction = mkOption {
|
||||
type = types.enum [
|
||||
"previous"
|
||||
"next"
|
||||
"up"
|
||||
"down"
|
||||
"left"
|
||||
"right"
|
||||
"auto"
|
||||
];
|
||||
description = ''
|
||||
The desktop/workspace to switch to. It is recommended to use previous/next for better compatibility. However, some desktop environments, like KDE, allow to configure a grid of desktops and up/down/left/right come in handy. With SWIPE gestures, auto will use your natural scroll preferences to figure out the direction.
|
||||
'';
|
||||
default = "auto";
|
||||
example = "next";
|
||||
};
|
||||
|
||||
cyclic = mkOption {
|
||||
type = types.bool;
|
||||
description = ''
|
||||
Set it to true when using
|
||||
previous/next directions
|
||||
to navigate from last
|
||||
desktop to first desktop
|
||||
or from first to last.
|
||||
'';
|
||||
default = true;
|
||||
example = false;
|
||||
};
|
||||
|
||||
animationPosition = mkOption {
|
||||
type = types.enum ["up" "down" "left" "right" "auto"];
|
||||
description = ''
|
||||
Edge of the screen where the animation will be displayed. With SWIPE gestures, auto will use your natural scroll preferences to figure out the animation position.
|
||||
'';
|
||||
default = "auto";
|
||||
example = "up";
|
||||
};
|
||||
};
|
||||
|
||||
show_desktop = {
|
||||
inherit animation_common_options;
|
||||
};
|
||||
|
||||
repeat = mkOption {
|
||||
type = types.bool;
|
||||
description = ''
|
||||
Whether to execute the keyboard shortcut multiple times (default: false). This is useful to perform actions like pinch to zoom.
|
||||
'';
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
|
||||
on = mkOption {
|
||||
type = types.enum ["begin" "end"];
|
||||
description = ''
|
||||
Only used when repeat is false. Whether to execute the shortcut at the beginning or at the end of the gesture.
|
||||
'';
|
||||
example = "begin";
|
||||
default = "end";
|
||||
};
|
||||
|
||||
times = mkOption {
|
||||
type = types.ints.between 2 15;
|
||||
description = ''
|
||||
Only used when repeat is true. Number of times to repeat the action.
|
||||
'';
|
||||
example = 5;
|
||||
};
|
||||
|
||||
animation = mkOption {
|
||||
type = types.nullOr (types.enum [
|
||||
"CHANGE_DESKTOP_UP"
|
||||
"CHANGE_DESKTOP_DOWN"
|
||||
"CHANGE_DESKTOP_LEFT"
|
||||
"CHANGE_DESKTOP_RIGHT"
|
||||
"CLOSE_WINDOW"
|
||||
"MAXIMIZE_WINDOW"
|
||||
"RESTORE_WINDOW"
|
||||
"MINIMIZE_WINDOW"
|
||||
"SHOW_DESKTOP"
|
||||
"EXIST_SHOW_DESKTOP"
|
||||
"TILE_WINDOW_LEFT"
|
||||
"TILE_WINDOW_RIGHT"
|
||||
]); # TODO
|
||||
description = ''
|
||||
Which animation to use
|
||||
'';
|
||||
default = "";
|
||||
example = "TILE_WINDOW_RIGHT";
|
||||
};
|
||||
|
||||
send_keys = {
|
||||
inherit animation_common_options;
|
||||
inherit repeat on times animation;
|
||||
|
||||
modifiers = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Typical values are: Shift_L, Control_L, Alt_L, Alt_R, Meta_L, Super_L, Hyper_L. You can use multiple keysyms: Control_L+Alt_L. See X11 keysymdefs
|
||||
'';
|
||||
default = "";
|
||||
example = "Shift_L";
|
||||
};
|
||||
|
||||
keys = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Shortcut keys. You can use multiple keysyms: A+B+C. See X11 keysymdefs.
|
||||
'';
|
||||
example = "A+c";
|
||||
};
|
||||
|
||||
decreaseKeys = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Only used when repeat is true. Keys to press when you change the gesture direction to the opposite. You can use multiple keysyms: A+B+C. This is useful to perform actions like pinch to zoom.
|
||||
'';
|
||||
example = "Y+Z";
|
||||
};
|
||||
};
|
||||
|
||||
run_command = {
|
||||
inherit animation_common_options;
|
||||
inherit repeat on times animation;
|
||||
|
||||
command = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The command to execute
|
||||
'';
|
||||
default = "";
|
||||
example = "ls -lah";
|
||||
};
|
||||
|
||||
decreaseCommand = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Only used when repeat is true. Keys to press when you change the gesture direction to the opposite. You can use multiple keysyms: A+B+C. This is useful to perform actions like pinch to zoom.
|
||||
'';
|
||||
example = "Y+Z";
|
||||
};
|
||||
};
|
||||
|
||||
mouse_click = {
|
||||
button = mkOption {
|
||||
type = types.enum ["left" "right" "middle"];
|
||||
description = ''
|
||||
Which button to press
|
||||
'';
|
||||
example = "left";
|
||||
};
|
||||
|
||||
on = mkOption {
|
||||
type = types.enum ["begin" "end"];
|
||||
description = ''
|
||||
If the command should be executed on the beginning or on the end of the gesture.
|
||||
'';
|
||||
default = "end";
|
||||
example = "begin";
|
||||
};
|
||||
};
|
||||
|
||||
gestureModule = let
|
||||
helpStr = ''
|
||||
The gesture to trigger.
|
||||
Only one of 'swipe_gesture' 'pinch_gesture' and 'tap_gesture'
|
||||
can be defined
|
||||
'';
|
||||
in
|
||||
types.submodule {
|
||||
options = {
|
||||
# hopefully this works it not
|
||||
# because of submodule weirdness
|
||||
|
||||
swipe_gesture = mkOption {
|
||||
type = types.listOf swipe_gesture;
|
||||
description = helpStr;
|
||||
default = [];
|
||||
};
|
||||
|
||||
pinch_gesture = mkOption {
|
||||
type = types.listOf pinch_gesture;
|
||||
description = helpStr;
|
||||
default = [];
|
||||
};
|
||||
|
||||
tap_gesture = mkOption {
|
||||
type = types.listOf tap_gesture;
|
||||
description = helpStr;
|
||||
default = [];
|
||||
};
|
||||
|
||||
description = ''
|
||||
the type of gesture
|
||||
'';
|
||||
|
||||
example = ""; # TODO
|
||||
};
|
||||
|
||||
action = mkOption {
|
||||
type =
|
||||
types.oneOf [
|
||||
];
|
||||
description = ''
|
||||
The actions to perform
|
||||
'';
|
||||
};
|
||||
};
|
||||
in {
|
||||
options.programs.touchegg = {
|
||||
enable = mkEnableOption "Touch gesture daemon";
|
||||
|
||||
animation_delay = mkOption {
|
||||
type = types.ints.unsigned;
|
||||
description = ''
|
||||
Delay, in milliseconds,
|
||||
since the gesture starts
|
||||
before the animation is displayed
|
||||
'';
|
||||
default = 150;
|
||||
example = "";
|
||||
};
|
||||
|
||||
action_execute_threshold = mkOption {
|
||||
type = types.ints.between 0 100;
|
||||
description = ''
|
||||
Percentage of the
|
||||
gesture to be completed
|
||||
to apply the action.
|
||||
Set to 0 to execute
|
||||
actions unconditionally
|
||||
'';
|
||||
default = 20;
|
||||
example = "";
|
||||
};
|
||||
|
||||
color = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Color of the animation
|
||||
'';
|
||||
default = "39E9FED";
|
||||
example = "";
|
||||
};
|
||||
|
||||
borderColor = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Color of the animation
|
||||
'';
|
||||
default = "9E9FED";
|
||||
example = "";
|
||||
};
|
||||
|
||||
gestures = mkOption {
|
||||
type = types.attrOf gestureModule;
|
||||
description = "touchegg gestures";
|
||||
default = {};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
#assertions =
|
||||
# TODO
|
||||
home.packages = [pkgs.touchegg];
|
||||
|
||||
xdg.configFile.touchegg = {
|
||||
target = "touchegg/touchegg.conf";
|
||||
text = builtins.toXML {};
|
||||
};
|
||||
|
||||
#systemd.user.services.touchegg =
|
||||
};
|
||||
}
|
|
@ -10,6 +10,7 @@
|
|||
common/desktop.nix
|
||||
common/polybar.nix
|
||||
common/rofi.nix
|
||||
#common/touchegg.nix
|
||||
];
|
||||
|
||||
home = {
|
||||
|
|
Loading…
Reference in a new issue