From d9f95c1b1ea184a20b99b30dfb6d1a6390937e1d Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Wed, 28 Aug 2019 20:56:43 -0400 Subject: [PATCH 1/5] maintainers: add roelvandijk to maintainers --- maintainers/maintainer-list.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index fb7db98fa3a55e..9659c0d1ecd1f1 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -5397,6 +5397,12 @@ githubId = 852967; name = "Russell O'Connor"; }; + roelvandijk = { + email = "roel@lambdacube.nl"; + github = "roelvandijk"; + githubId = 710906; + name = "Roel van Dijk"; + }; romildo = { email = "malaquias@gmail.com"; github = "romildo"; From 50eba5b6886b84c5aa08ddf1717c087c5cf4979c Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Wed, 28 Aug 2019 21:06:30 -0400 Subject: [PATCH 2/5] pythonPackages.openrazer: init at 2.6.0 --- .../python-modules/openrazer/common.nix | 17 ++++++++++++ .../python-modules/openrazer/pylib.nix | 26 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 1 + 3 files changed, 44 insertions(+) create mode 100644 pkgs/development/python-modules/openrazer/common.nix create mode 100644 pkgs/development/python-modules/openrazer/pylib.nix diff --git a/pkgs/development/python-modules/openrazer/common.nix b/pkgs/development/python-modules/openrazer/common.nix new file mode 100644 index 00000000000000..eac2751ce3e5a0 --- /dev/null +++ b/pkgs/development/python-modules/openrazer/common.nix @@ -0,0 +1,17 @@ +{ stdenv +, fetchFromGitHub +}: rec { + version = "2.6.0"; + src = fetchFromGitHub { + owner = "openrazer"; + repo = "openrazer"; + rev = "v${version}"; + sha256 = "1s5irs3avrlp891mxan3z8p55ias9rq26rqp2qrlcc6i4vl29di0"; + }; + meta = with stdenv.lib; { + homepage = https://openrazer.github.io/; + license = licenses.gpl2; + maintainers = with maintainers; [ roelvandijk ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/development/python-modules/openrazer/pylib.nix b/pkgs/development/python-modules/openrazer/pylib.nix new file mode 100644 index 00000000000000..2f9ff467b2d9c4 --- /dev/null +++ b/pkgs/development/python-modules/openrazer/pylib.nix @@ -0,0 +1,26 @@ +{ buildPythonPackage +, dbus-python +, fetchFromGitHub +, numpy +, stdenv +, openrazer-daemon +}: + +let + common = import ./common.nix { inherit stdenv fetchFromGitHub; }; +in +buildPythonPackage (common // rec { + pname = "openrazer"; + + sourceRoot = "source/pylib"; + + propagatedBuildInputs = [ + dbus-python + numpy + openrazer-daemon + ]; + + meta = common.meta // { + description = "An entirely open source Python library that allows you to manage your Razer peripherals on GNU/Linux"; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index bdaae932f68f6f..9570f110c0766d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2569,6 +2569,7 @@ in { odfpy = callPackage ../development/python-modules/odfpy { }; + openrazer = callPackage ../development/python-modules/openrazer/pylib.nix { }; oset = callPackage ../development/python-modules/oset { }; pamela = callPackage ../development/python-modules/pamela { }; From bcbadc5ba238574467175dcfc80abe7738114935 Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Wed, 28 Aug 2019 21:13:56 -0400 Subject: [PATCH 3/5] kernel: openrazer: init at 2.6.0 --- pkgs/os-specific/linux/openrazer/driver.nix | 39 +++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 41 insertions(+) create mode 100644 pkgs/os-specific/linux/openrazer/driver.nix diff --git a/pkgs/os-specific/linux/openrazer/driver.nix b/pkgs/os-specific/linux/openrazer/driver.nix new file mode 100644 index 00000000000000..355108f56e4633 --- /dev/null +++ b/pkgs/os-specific/linux/openrazer/driver.nix @@ -0,0 +1,39 @@ +{ coreutils +, fetchFromGitHub +, kernel +, stdenv +, utillinux +}: + +let + common = import ../../../development/python-modules/openrazer/common.nix { inherit stdenv fetchFromGitHub; }; +in +stdenv.mkDerivation (common // { + name = "openrazer-${common.version}-${kernel.version}"; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + buildFlags = [ + "KERNELDIR=${kernel.dev}/lib/modules/${kernel.version}/build" + ]; + + installPhase = '' + binDir="$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/hid" + mkdir -p "$binDir" + cp -v driver/*.ko "$binDir" + RAZER_MOUNT_OUT="$out/bin/razer_mount" + RAZER_RULES_OUT="$out/etc/udev/rules.d/99-razer.rules" + install -m 644 -v -D install_files/udev/99-razer.rules $RAZER_RULES_OUT + install -m 755 -v -D install_files/udev/razer_mount $RAZER_MOUNT_OUT + substituteInPlace $RAZER_RULES_OUT \ + --replace razer_mount $RAZER_MOUNT_OUT + substituteInPlace $RAZER_MOUNT_OUT \ + --replace /usr/bin/logger ${utillinux}/bin/logger \ + --replace chgrp ${coreutils}/bin/chgrp \ + --replace "PATH='/sbin:/bin:/usr/sbin:/usr/bin'" "" + ''; + + meta = common.meta // { + description = "An entirely open source Linux driver that allows you to manage your Razer peripherals on GNU/Linux"; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e21f26634a3700..0c29526f5e446a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15856,6 +15856,8 @@ in nvidia_x11_beta = nvidiaPackages.beta; nvidia_x11 = nvidiaPackages.stable; + openrazer = callPackage ../os-specific/linux/openrazer/driver.nix { }; + ply = callPackage ../os-specific/linux/ply { }; r8168 = callPackage ../os-specific/linux/r8168 { }; From d2c4d4d6b69d7ebf954ffe2729d87c815a6a59a7 Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Wed, 28 Aug 2019 21:14:32 -0400 Subject: [PATCH 4/5] openrazer-daemon: init at 2.6.0 --- .../python-modules/openrazer/daemon.nix | 45 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + pkgs/top-level/python-packages.nix | 2 + 3 files changed, 49 insertions(+) create mode 100644 pkgs/development/python-modules/openrazer/daemon.nix diff --git a/pkgs/development/python-modules/openrazer/daemon.nix b/pkgs/development/python-modules/openrazer/daemon.nix new file mode 100644 index 00000000000000..6e3ab1e78338c3 --- /dev/null +++ b/pkgs/development/python-modules/openrazer/daemon.nix @@ -0,0 +1,45 @@ +{ buildPythonApplication +, daemonize +, dbus-python +, fetchFromGitHub +, fetchpatch +, gobject-introspection +, gtk3 +, makeWrapper +, pygobject3 +, pyudev +, setproctitle +, stdenv +, wrapGAppsHook +}: + +let + common = import ./common.nix { inherit stdenv fetchFromGitHub; }; +in +buildPythonApplication (common // rec { + pname = "openrazer_daemon"; + + sourceRoot = "source/daemon"; + + outputs = [ "out" "man" ]; + + nativeBuildInputs = [ makeWrapper wrapGAppsHook ]; + + propagatedBuildInputs = [ + daemonize + dbus-python + gobject-introspection + gtk3 + pygobject3 + pyudev + setproctitle + ]; + + postBuild = '' + DESTDIR="$out" PREFIX="" make install manpages + ''; + + meta = common.meta // { + description = "An entirely open source user-space daemon that allows you to manage your Razer peripherals on GNU/Linux"; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0c29526f5e446a..5fa6f97cf9434f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19998,6 +19998,8 @@ in openmpt123 = callPackage ../applications/audio/openmpt123 { }; + openrazer-daemon = with python3Packages; toPythonApplication openrazer-daemon; + opusfile = callPackage ../applications/audio/opusfile { }; opusTools = callPackage ../applications/audio/opus-tools { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 9570f110c0766d..169eeb5b41c2aa 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2570,6 +2570,8 @@ in { odfpy = callPackage ../development/python-modules/odfpy { }; openrazer = callPackage ../development/python-modules/openrazer/pylib.nix { }; + openrazer-daemon = callPackage ../development/python-modules/openrazer/daemon.nix { }; + oset = callPackage ../development/python-modules/oset { }; pamela = callPackage ../development/python-modules/pamela { }; From e9b167bef4a76d0d5ae262e19d79fee360b8ebd5 Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Wed, 28 Aug 2019 21:17:25 -0400 Subject: [PATCH 5/5] nixos/hardware/openrazer: init at 2.6.0 --- nixos/modules/hardware/openrazer.nix | 133 +++++++++++++++++++++++++++ nixos/modules/module-list.nix | 1 + 2 files changed, 134 insertions(+) create mode 100644 nixos/modules/hardware/openrazer.nix diff --git a/nixos/modules/hardware/openrazer.nix b/nixos/modules/hardware/openrazer.nix new file mode 100644 index 00000000000000..883db7f2f4f192 --- /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 ]; + }; +} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 22fd5d7609dfee..b3331f4a63d5ef 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -58,6 +58,7 @@ ./hardware/network/intel-2200bg.nix ./hardware/nitrokey.nix ./hardware/opengl.nix + ./hardware/openrazer.nix ./hardware/pcmcia.nix ./hardware/raid/hpsa.nix ./hardware/steam-hardware.nix