Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

openrazer: init at 2.6.0 #64552

Merged
merged 5 commits into from Sep 3, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions maintainers/maintainer-list.nix
Expand Up @@ -5397,6 +5397,12 @@
githubId = 852967;
name = "Russell O'Connor";
};
roelvandijk = {
email = "roel@lambdacube.nl";
github = "roelvandijk";
evanjs marked this conversation as resolved.
Show resolved Hide resolved
githubId = 710906;
name = "Roel van Dijk";
};
romildo = {
email = "malaquias@gmail.com";
github = "romildo";
Expand Down
133 changes: 133 additions & 0 deletions 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 ];
};
}
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Expand Up @@ -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
Expand Down
17 changes: 17 additions & 0 deletions 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;
};
}
45 changes: 45 additions & 0 deletions 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";
};
})
26 changes: 26 additions & 0 deletions 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";
};
})
39 changes: 39 additions & 0 deletions 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; };
evanjs marked this conversation as resolved.
Show resolved Hide resolved
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";
};
})
4 changes: 4 additions & 0 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -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 { };
Expand Down Expand Up @@ -19996,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 { };
Expand Down
3 changes: 3 additions & 0 deletions pkgs/top-level/python-packages.nix
Expand Up @@ -2569,6 +2569,9 @@ in {

odfpy = callPackage ../development/python-modules/odfpy { };

openrazer = callPackage ../development/python-modules/openrazer/pylib.nix { };
openrazer-daemon = callPackage ../development/python-modules/openrazer/daemon.nix { };
evanjs marked this conversation as resolved.
Show resolved Hide resolved

oset = callPackage ../development/python-modules/oset { };

pamela = callPackage ../development/python-modules/pamela { };
Expand Down