{ config, lib, pkgs, ... }: with lib; let cfg = config.nixfiles.modules.solaar; in { options.nixfiles.modules.solaar = { enable = mkEnableOption "Solaar"; }; config = mkIf cfg.enable { hm = { home.packages = with pkgs; [ solaar ]; systemd.user.services.solaar = { Unit = { Description = "Device manager for Logitech devices"; After = [ "graphical-session-pre.target" ]; PartOf = [ "graphical-session.target" ]; }; Service = { # The dirtiest hack I've ever implemented... I should be ashamed of # it. Regardless, that shit still doesn't work because each reconnect, # /dev/hidraw* is recreated and has default permissions which breaks # Solaar. Fuck this shit. ExecStartPre = getExe ( pkgs.writeShellApplication { name = "solaar-pre"; text = '' for i in /dev/hidraw*; do if [ -c "$i" ]; then sudo chown root:input "$i" sudo chmod 0660 "$i" fi done ''; } ); ExecStart = "${getExe pkgs.solaar "solaar"} --window=hide"; }; Install.WantedBy = [ "graphical-session.target" ]; }; }; boot.kernelModules = [ "hid_logitech_dj" "hid_logitech_hidpp" ]; hardware.uinput.enable = true; my.extraGroups = [ "uinput" "input" ]; }; }