diff --git a/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml
index cdf6e9999408..566001c06bfe 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2211.section.xml
@@ -233,6 +233,13 @@
services.languagetool.
+
+
+ OpenRGB,
+ a FOSS tool for controlling RGB lighting. Available as
+ services.hardware.openrgb.enable.
+
+
Outline,
diff --git a/nixos/doc/manual/release-notes/rl-2211.section.md b/nixos/doc/manual/release-notes/rl-2211.section.md
index 607e5cfeb4d4..8ab9f27edb94 100644
--- a/nixos/doc/manual/release-notes/rl-2211.section.md
+++ b/nixos/doc/manual/release-notes/rl-2211.section.md
@@ -85,6 +85,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [languagetool](https://languagetool.org/), a multilingual grammar, style, and spell checker.
Available as [services.languagetool](options.html#opt-services.languagetool.enable).
+- [OpenRGB](https://gitlab.com/CalcProgrammer1/OpenRGB/-/tree/master), a FOSS tool for controlling RGB lighting. Available as [services.hardware.openrgb.enable](options.html#opt-services-hardware-openrgb-enable).
+
- [Outline](https://www.getoutline.com/), a wiki and knowledge base similar to Notion. Available as [services.outline](#opt-services.outline.enable).
- [alps](https://git.sr.ht/~migadu/alps), a simple and extensible webmail. Available as [services.alps](#opt-services.alps.enable).
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 5568577909b9..50446e3ee598 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -455,6 +455,7 @@
./services/hardware/lcd.nix
./services/hardware/lirc.nix
./services/hardware/nvidia-optimus.nix
+ ./services/hardware/openrgb.nix
./services/hardware/pcscd.nix
./services/hardware/pommed.nix
./services/hardware/power-profiles-daemon.nix
diff --git a/nixos/modules/services/hardware/openrgb.nix b/nixos/modules/services/hardware/openrgb.nix
new file mode 100644
index 000000000000..12438f01e524
--- /dev/null
+++ b/nixos/modules/services/hardware/openrgb.nix
@@ -0,0 +1,52 @@
+{ pkgs, lib, config, ... }:
+
+with lib;
+
+let
+ cfg = config.services.hardware.openrgb;
+in {
+ options.services.hardware.openrgb = {
+ enable = mkEnableOption (lib.mdDoc "OpenRGB server");
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.openrgb;
+ defaultText = literalMD "pkgs.openrgb";
+ description = lib.mdDoc "Set version of openrgb package to use.";
+ };
+
+ motherboard = mkOption {
+ type = types.nullOr (types.enum [ "amd" "intel" ]);
+ default = null;
+ description = lib.mdDoc "CPU family of motherboard. Allows for addition motherboard i2c support.";
+ };
+
+ server.port = mkOption {
+ type = types.port;
+ default = 6742;
+ description = lib.mdDoc "Set server port of openrgb.";
+ };
+
+ };
+
+ config = mkIf cfg.enable {
+ environment.systemPackages = [ cfg.package ];
+ services.udev.packages = [ cfg.package ];
+
+ boot.kernelModules = [ "i2c-dev" ]
+ ++ lib.optionals (cfg.motherboard == "amd") [ "i2c-piix" ]
+ ++ lib.optionals (cfg.motherboard == "intel") [ "i2c-i801" ];
+
+ systemd.services.openrgb = {
+ description = "OpenRGB server daemon";
+ wantedBy = [ "multi-user.target" ];
+
+ serviceConfig = {
+ ExecStart = "${cfg.package}/bin/openrgb --server --server-port ${toString cfg.server.port}";
+ Restart = "always";
+ };
+ };
+ };
+
+ meta.maintainers = with lib.maintainers; [ jonringer ];
+}