nixos/crossmacro: add module

This commit is contained in:
alper-han
2026-02-09 05:30:18 +03:00
parent 78c93bb286
commit d5b6a136a6
2 changed files with 120 additions and 0 deletions
+1
View File
@@ -556,6 +556,7 @@
./services/desktops/blueman.nix
./services/desktops/bonsaid.nix
./services/desktops/cpupower-gui.nix
./services/desktops/crossmacro.nix
./services/desktops/dleyna.nix
./services/desktops/espanso.nix
./services/desktops/flatpak.nix
@@ -0,0 +1,119 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.crossmacro;
in
{
options.services.crossmacro = {
enable = lib.mkEnableOption "CrossMacro, a cross-platform mouse and keyboard macro application";
package = lib.mkPackageOption pkgs "crossmacro" { };
daemonPackage = lib.mkPackageOption pkgs "crossmacro-daemon" { };
users = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [
"alice"
"bob"
];
description = "List of users granted permission to use CrossMacro.";
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = cfg.users != [ ];
message = "CrossMacro: You must specify at least one user. Set `services.crossmacro.users`.";
}
];
environment.systemPackages = [ cfg.package ];
hardware.uinput.enable = true;
services.udev.extraRules = ''
KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"
ACTION=="add|change", KERNEL=="event*", ATTRS{name}=="CrossMacro Virtual Input Device", ENV{LIBINPUT_ATTR_POINTER_ACCEL}="0"
'';
environment.etc."polkit-1/actions/org.crossmacro.policy".source =
"${cfg.daemonPackage}/share/polkit-1/actions/org.crossmacro.policy";
environment.etc."polkit-1/rules.d/50-crossmacro.rules".source =
"${cfg.daemonPackage}/share/polkit-1/rules.d/50-crossmacro.rules";
users.groups.crossmacro = { };
users.users =
lib.listToAttrs (
map (user: {
name = user;
value = {
extraGroups = [ "crossmacro" ];
};
}) cfg.users
)
// {
crossmacro = {
isSystemUser = true;
group = "input";
extraGroups = [
"crossmacro"
"uinput"
];
description = "CrossMacro Input Daemon User";
};
};
systemd.services.crossmacro = {
description = "CrossMacro Input Daemon Service";
documentation = [ "https://github.com/alper-han/CrossMacro" ];
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
"dbus.service"
"polkit.service"
];
wants = [
"dbus.service"
"polkit.service"
];
path = [ pkgs.polkit ];
serviceConfig = {
Type = "notify";
User = "crossmacro";
Group = "input";
ExecStart = lib.getExe cfg.daemonPackage;
Restart = "always";
RestartSec = 5;
RuntimeDirectory = "crossmacro";
RuntimeDirectoryMode = "0755";
CapabilityBoundingSet = [
"CAP_SYS_ADMIN"
"CAP_SETUID"
"CAP_SETGID"
"CAP_CHOWN"
"CAP_DAC_READ_SEARCH"
];
AmbientCapabilities = [
"CAP_SYS_ADMIN"
"CAP_CHOWN"
"CAP_DAC_READ_SEARCH"
];
};
};
};
meta.maintainers = with lib.maintainers; [ alper-han ];
}