formatting, big time

This commit is contained in:
Schrottkatze 2025-04-11 09:20:46 +02:00
parent 38d96c9f52
commit 509320c115
Signed by: schrottkatze
SSH key fingerprint: SHA256:FPOYVeBy3QP20FEM42uWF1Wa/Qhlk+L3S2+Wuau/Auo
64 changed files with 1293 additions and 990 deletions

View file

@ -1,4 +1,5 @@
{...}: {
{ ... }:
{
imports = [
./evremap.nix
];

View file

@ -3,7 +3,8 @@
config,
lib,
...
}: let
}:
let
cfg = config.jade.input.remapping;
evremap = pkgs.rustPlatform.buildRustPackage {
pname = "evremap";
@ -16,91 +17,117 @@
};
useFetchCargoVendor = true;
cargoHash = "sha256-O1rJ48m8Q7kZABw/UNpmUT7FFBWQedo6CuV+NX9kDt8=";
nativeBuildInputs = [pkgs.pkg-config];
buildInputs = [pkgs.libevdev];
nativeBuildInputs = [ pkgs.pkg-config ];
buildInputs = [ pkgs.libevdev ];
};
toml = pkgs.formats.toml {};
toml = pkgs.formats.toml { };
in
with lib; {
options.jade.input.remapping = {
enable = mkEnableOption "Enable evremap";
devices = mkOption {
type = types.attrsOf (types.submodule ({name, ...}: {
options = {
device_name = mkOption {
type = types.str;
description = "The device name";
default = name;
with lib;
{
options.jade.input.remapping = {
enable = mkEnableOption "Enable evremap";
devices = mkOption {
type = types.attrsOf (
types.submodule (
{ name, ... }:
{
options = {
device_name = mkOption {
type = types.str;
description = "The device name";
default = name;
};
remap = mkOption {
type = types.listOf (
types.submodule (
{ ... }:
{
options.input = mkOption { type = types.listOf types.str; };
options.output = mkOption { type = types.listOf types.str; };
}
)
);
default = [ ];
};
swapKeys = mkOption {
description = "Lists with two keys to be swapped on the keyboard layout.";
type = types.listOf (
# verify that each key swapping list contains two elements
types.addCheck (types.listOf types.str) (v: builtins.length v == 2)
);
default = [ ];
};
dual_role = mkOption {
type = types.listOf (
types.submodule (
{ ... }:
{
options.input = mkOption { type = types.str; };
options.hold = mkOption { type = types.listOf types.str; };
options.tap = mkOption { type = types.listOf types.str; };
}
)
);
default = [ ];
};
};
remap = mkOption {
type = types.listOf (types.submodule ({...}: {
options.input = mkOption {type = types.listOf types.str;};
options.output = mkOption {type = types.listOf types.str;};
}));
default = [];
};
swapKeys = mkOption {
description = "Lists with two keys to be swapped on the keyboard layout.";
type = types.listOf (
# verify that each key swapping list contains two elements
types.addCheck (types.listOf types.str) (v: builtins.length v == 2)
);
default = [];
};
dual_role = mkOption {
type = types.listOf (types.submodule ({...}: {
options.input = mkOption {type = types.str;};
options.hold = mkOption {type = types.listOf types.str;};
options.tap = mkOption {type = types.listOf types.str;};
}));
default = [];
};
};
}));
};
}
)
);
};
config = mkIf cfg.enable (
with builtins; let
devs = map ({
};
config = mkIf cfg.enable (
with builtins;
let
devs = map (
{
device_name,
remap,
swapKeys,
dual_role,
}: {
}:
{
inherit device_name dual_role;
# expand swapKeys to normal remaps
remap = concatLists [
remap
(lib.lists.flatten (map (keys: [
(lib.lists.flatten (
map (keys: [
{
input = [(head keys)];
output = [(lib.lists.last keys)];
input = [ (head keys) ];
output = [ (lib.lists.last keys) ];
}
{
input = [(lib.lists.last keys)];
output = [(head keys)];
input = [ (lib.lists.last keys) ];
output = [ (head keys) ];
}
])
swapKeys))
]) swapKeys
))
];
}) (attrValues cfg.devices);
in {
# generate numbered systemd services for each device to be remapped
# https://github.com/wez/evremap/issues/17
systemd.services = listToAttrs (genList (i: {
}
) (attrValues cfg.devices);
in
{
# generate numbered systemd services for each device to be remapped
# https://github.com/wez/evremap/issues/17
systemd.services = listToAttrs (
genList (i: {
name = "evremap${toString i}";
value = let
cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i);
in {
wantedBy = ["multi-user.target"];
serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}";
unitConfig = {
Restart = "on-failure";
value =
let
cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i);
in
{
wantedBy = [ "multi-user.target" ];
serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}";
unitConfig = {
Restart = "on-failure";
};
};
};
}) (length devs));
environment.systemPackages = [evremap];
}
);
}
}) (length devs)
);
environment.systemPackages = [ evremap ];
}
);
}