From 32e5e90b169038c955134c597810e051f40f4fc5 Mon Sep 17 00:00:00 2001
From: matt1432 <matt@nelim.org>
Date: Sat, 20 Apr 2024 13:42:51 -0400
Subject: [PATCH] feat(binto): add logitech mouse

---
 devices/binto/default.nix   |  1 +
 flake.lock                  | 38 +++++++++++++++++++++++++++++++++++++
 flake.nix                   |  8 ++++++++
 modules/hyprland/inputs.nix |  5 +++--
 modules/logitech.nix        | 30 +++++++++++++++++++++++++++++
 5 files changed, 80 insertions(+), 2 deletions(-)
 create mode 100644 modules/logitech.nix

diff --git a/devices/binto/default.nix b/devices/binto/default.nix
index b4429e1b..41ba3618 100644
--- a/devices/binto/default.nix
+++ b/devices/binto/default.nix
@@ -11,6 +11,7 @@ in {
     ../../modules/kmscon.nix
     ../../modules/printer.nix
     ../../modules/razer.nix
+    ../../modules/logitech.nix
     ../../modules/sshd.nix
     ../../modules/tailscale.nix
 
diff --git a/flake.lock b/flake.lock
index f4dd1312..f32d85e6 100644
--- a/flake.lock
+++ b/flake.lock
@@ -204,6 +204,22 @@
         "type": "github"
       }
     },
+    "flake-compat_2": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1696426674,
+        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+        "type": "github"
+      },
+      "original": {
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "type": "github"
+      }
+    },
     "flake-parts": {
       "inputs": {
         "nixpkgs-lib": [
@@ -1486,6 +1502,7 @@
         "pointer-event-src": "pointer-event-src",
         "pokemon-colorscripts-src": "pokemon-colorscripts-src",
         "secrets": "secrets",
+        "solaar": "solaar",
         "subsync": "subsync",
         "touch-gestures-src": "touch-gestures-src",
         "trash-d-src": "trash-d-src",
@@ -1530,6 +1547,27 @@
         "url": "ssh://git@git.nelim.org/matt1432/nixos-secrets"
       }
     },
+    "solaar": {
+      "inputs": {
+        "flake-compat": "flake-compat_2",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1713515557,
+        "narHash": "sha256-n9I+GyQP19CsXPAOrAFOMTn8n4UIuzt0a1k5XfiVFQI=",
+        "owner": "Svenum",
+        "repo": "Solaar-Flake",
+        "rev": "c0dfdaa082ed084dd08a7f09c48f783e4fddccbe",
+        "type": "github"
+      },
+      "original": {
+        "owner": "Svenum",
+        "repo": "Solaar-Flake",
+        "type": "github"
+      }
+    },
     "sops-nix": {
       "inputs": {
         "nixpkgs": "nixpkgs_9",
diff --git a/flake.nix b/flake.nix
index f196dda6..100149d3 100644
--- a/flake.nix
+++ b/flake.nix
@@ -252,6 +252,14 @@
       inputs.hyprland.follows = "hyprland";
     };
 
+    solaar = {
+      type = "github";
+      owner = "Svenum";
+      repo = "Solaar-Flake";
+
+      inputs.nixpkgs.follows = "nixpkgs";
+    };
+
     ags = {
       type = "github";
       owner = "Aylur";
diff --git a/modules/hyprland/inputs.nix b/modules/hyprland/inputs.nix
index 95214526..bda3c5cc 100644
--- a/modules/hyprland/inputs.nix
+++ b/modules/hyprland/inputs.nix
@@ -7,7 +7,7 @@
   inherit (osConfig.services.xserver) xkb;
   inherit (osConfig.vars) mainMonitor;
 
-  nagaProNames = [
+  miceNames = [
     # Wireless
     "razer-razer-naga-pro"
 
@@ -17,6 +17,7 @@
     "razer-naga-pro-1"
     "razer-naga-pro-2"
     "razer-naga-pro-3"
+    "logitech-g502-hero-gaming-mouse"
   ];
   nagaConf = name: {
     inherit name;
@@ -26,7 +27,7 @@
 in {
   wayland.windowManager.hyprland = {
     settings = {
-      device = map (d: (nagaConf d)) nagaProNames;
+      device = map (d: (nagaConf d)) miceNames;
 
       input = {
         kb_layout = xkb.layout;
diff --git a/modules/logitech.nix b/modules/logitech.nix
new file mode 100644
index 00000000..a9efe0b8
--- /dev/null
+++ b/modules/logitech.nix
@@ -0,0 +1,30 @@
+{
+  config,
+  lib,
+  solaar,
+  ...
+}: let
+  inherit (config.vars) mainUser;
+  inherit (lib) mkIf;
+  cfgHypr =
+    config
+    .home-manager
+    .users
+    .${mainUser}
+    .wayland
+    .windowManager
+    .hyprland;
+in {
+  imports = [
+    solaar.nixosModules.default
+  ];
+
+  programs.solaar.enable = true;
+
+  # HOME-MANAGER CONFIG
+  home-manager.users.${mainUser} = {
+    wayland.windowManager.hyprland = mkIf (cfgHypr.enable) {
+      settings.exec-once = ["solaar -w hide -b symbolic"];
+    };
+  };
+}