42 lines
1.1 KiB
Nix
42 lines
1.1 KiB
Nix
{ pkgs, config, lib, ... }:
|
|
|
|
with lib;
|
|
let
|
|
cfg = config.modules.hardware.rgb;
|
|
in {
|
|
options.modules.hardware.rgb = {
|
|
enable = mkEnableOption "Enable support for rgb devices through OpenRGB";
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.openrgb;
|
|
example = "pkgs.openrgb";
|
|
};
|
|
swapScript = mkOption {
|
|
type = types.package;
|
|
default = pkgs.writeShellScript "openrgb-swap" ''
|
|
set -euo pipefail
|
|
|
|
mapfile -t files < <(
|
|
find "$XDG_CONFIG_HOME/OpenRGB" -name "*.orp"
|
|
find /var/lib/OpenRGB -name "*.orp" 2>/dev/null
|
|
)
|
|
|
|
selected=$(printf '%s\n' "''${files[@]}" | xargs -n1 basename | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -i -p "select profile")
|
|
|
|
[[ -z "$selected" ]] && exit 0
|
|
|
|
for f in "''${files[@]}"; do
|
|
if [[ $(basename "$f") == "$selected" ]]; then
|
|
${lib.getExe cfg.package} -p "$f"
|
|
break
|
|
fi
|
|
done
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
services.hardware.openrgb.enable = true;
|
|
services.hardware.openrgb.package = cfg.package;
|
|
};
|
|
}
|