mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-27 09:23:01 +00:00
134 lines
3.5 KiB
Nix
134 lines
3.5 KiB
Nix
|
{ config, pkgs, lib, ... }:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
let
|
||
|
cfg = config.hardware.openrazer;
|
||
|
kernelPackages = config.boot.kernelPackages;
|
||
|
|
||
|
toPyBoolStr = b: if b then "True" else "False";
|
||
|
|
||
|
daemonExe = "${pkgs.openrazer-daemon}/bin/openrazer-daemon --config ${daemonConfFile}";
|
||
|
|
||
|
daemonConfFile = pkgs.writeTextFile {
|
||
|
name = "razer.conf";
|
||
|
text = ''
|
||
|
[General]
|
||
|
verbose_logging = ${toPyBoolStr cfg.verboseLogging}
|
||
|
|
||
|
[Startup]
|
||
|
sync_effects_enabled = ${toPyBoolStr cfg.syncEffectsEnabled}
|
||
|
devices_off_on_screensaver = ${toPyBoolStr cfg.devicesOffOnScreensaver}
|
||
|
mouse_battery_notifier = ${toPyBoolStr cfg.mouseBatteryNotifier}
|
||
|
|
||
|
[Statistics]
|
||
|
key_statistics = ${toPyBoolStr cfg.keyStatistics}
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
dbusServiceFile = pkgs.writeTextFile rec {
|
||
|
name = "org.razer.service";
|
||
|
destination = "/share/dbus-1/services/${name}";
|
||
|
text = ''
|
||
|
[D-BUS Service]
|
||
|
Name=org.razer
|
||
|
Exec=${daemonExe}
|
||
|
SystemdService=openrazer-daemon.service
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
drivers = [
|
||
|
"razerkbd"
|
||
|
"razermouse"
|
||
|
"razerfirefly"
|
||
|
"razerkraken"
|
||
|
"razermug"
|
||
|
"razercore"
|
||
|
];
|
||
|
in
|
||
|
{
|
||
|
options = {
|
||
|
hardware.openrazer = {
|
||
|
enable = mkEnableOption "OpenRazer drivers and userspace daemon.";
|
||
|
|
||
|
verboseLogging = mkOption {
|
||
|
type = types.bool;
|
||
|
default = false;
|
||
|
description = ''
|
||
|
Whether to enable verbose logging. Logs debug messages.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
syncEffectsEnabled = mkOption {
|
||
|
type = types.bool;
|
||
|
default = true;
|
||
|
description = ''
|
||
|
Set the sync effects flag to true so any assignment of
|
||
|
effects will work across devices.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
devicesOffOnScreensaver = mkOption {
|
||
|
type = types.bool;
|
||
|
default = true;
|
||
|
description = ''
|
||
|
Turn off the devices when the systems screensaver kicks in.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
mouseBatteryNotifier = mkOption {
|
||
|
type = types.bool;
|
||
|
default = true;
|
||
|
description = ''
|
||
|
Mouse battery notifier.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
keyStatistics = mkOption {
|
||
|
type = types.bool;
|
||
|
default = false;
|
||
|
description = ''
|
||
|
Collects number of keypresses per hour per key used to
|
||
|
generate a heatmap.
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = mkIf cfg.enable {
|
||
|
boot.extraModulePackages = [ kernelPackages.openrazer ];
|
||
|
boot.kernelModules = drivers;
|
||
|
|
||
|
# Makes the man pages available so you can succesfully run
|
||
|
# > systemctl --user help openrazer-daemon
|
||
|
environment.systemPackages = [ pkgs.python3Packages.openrazer-daemon.man ];
|
||
|
|
||
|
services.udev.packages = [ kernelPackages.openrazer ];
|
||
|
services.dbus.packages = [ dbusServiceFile ];
|
||
|
|
||
|
# A user must be a member of the plugdev group in order to start
|
||
|
# the openrazer-daemon. Therefore we make sure that the plugdev
|
||
|
# group exists.
|
||
|
users.groups.plugdev = {};
|
||
|
|
||
|
systemd.user.services.openrazer-daemon = {
|
||
|
description = "Daemon to manage razer devices in userspace";
|
||
|
unitConfig.Documentation = "man:openrazer-daemon(8)";
|
||
|
# Requires a graphical session so the daemon knows when the screensaver
|
||
|
# starts. See the 'devicesOffOnScreensaver' option.
|
||
|
wantedBy = [ "graphical-session.target" ];
|
||
|
partOf = [ "graphical-session.target" ];
|
||
|
serviceConfig = {
|
||
|
Type = "dbus";
|
||
|
BusName = "org.razer";
|
||
|
ExecStart = "${daemonExe} --foreground";
|
||
|
Restart = "always";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
meta = {
|
||
|
maintainers = with lib.maintainers; [ roelvandijk ];
|
||
|
};
|
||
|
}
|