summaryrefslogtreecommitdiffstats
path: root/nixos/modules/hardware
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2019-09-03 19:14:58 +0200
committerGitHub <noreply@github.com>2019-09-03 19:14:58 +0200
commitce944b4bdedcd8619b75989b79188f26a16a2b5f (patch)
treebfafc7d7f54f7acdf3b22e5894f24d4397ee615a /nixos/modules/hardware
parent26b8a0a940fabfe58e6c204678ac96f18d1e1043 (diff)
parente9b167bef4a76d0d5ae262e19d79fee360b8ebd5 (diff)
Merge pull request #64552 from evanjs/feature/openrazer-2.3.1
openrazer: init at 2.6.0
Diffstat (limited to 'nixos/modules/hardware')
-rw-r--r--nixos/modules/hardware/openrazer.nix133
1 files changed, 133 insertions, 0 deletions
diff --git a/nixos/modules/hardware/openrazer.nix b/nixos/modules/hardware/openrazer.nix
new file mode 100644
index 000000000000..883db7f2f4f1
--- /dev/null
+++ b/nixos/modules/hardware/openrazer.nix
@@ -0,0 +1,133 @@
+{ 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 ];
+ };
+}