From 49074303afdc219c54b309a1955151517cc50317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Eug=C3=AAnio?= Date: Thu, 30 May 2024 21:48:43 -0300 Subject: [PATCH] controller: add auto-connect service --- scripts/auto_connect_gamepad | 26 ++++++++++++++++++++++++++ scripts/default.nix | 1 + user/controller.nix | 29 +++++++++++++++++------------ 3 files changed, 44 insertions(+), 12 deletions(-) create mode 100755 scripts/auto_connect_gamepad diff --git a/scripts/auto_connect_gamepad b/scripts/auto_connect_gamepad new file mode 100755 index 0000000..9753966 --- /dev/null +++ b/scripts/auto_connect_gamepad @@ -0,0 +1,26 @@ +#!/bin/sh + +list_paired_controllers() { + bluetoothctl devices Paired | grep -i 'controller' | cut -d' ' -f2 +} + +count_connected_controllers() { + bluetoothctl devices Connected | grep -i 'controller' | wc -l +} + +try_to_connect_to_all_controllers() { + list_paired_controllers | while read paired_controller; do + echo "Trying to connect to controller $paired_controller" + bluetoothctl connect "$paired_controller" + done +} + +while true; do + echo "looping" + if test "$(count_connected_controllers)" -ne 0 ; then + echo "there is a controller connected, not attempting to connect to any other" + sleep 10s + continue + fi + try_to_connect_to_all_controllers +done diff --git a/scripts/default.nix b/scripts/default.nix index f509e37..12d38d3 100644 --- a/scripts/default.nix +++ b/scripts/default.nix @@ -125,6 +125,7 @@ zbar wl-clipboard ]; + auto_connect_gamepad = [ bluez ]; } // lib.mapAttrs import_script { wdmenu = ./wdmenu.nix; diff --git a/user/controller.nix b/user/controller.nix index 6a756df..fe08a98 100644 --- a/user/controller.nix +++ b/user/controller.nix @@ -1,17 +1,22 @@ +{ pkgs, lib, ... }: { - config, - pkgs, - lib, - inputs, - ... -}: -{ - xdg.desktopEntries = { - connect-controller = { - name = "Connect Controller"; - exec = "bluetoothctl connect 84:30:95:97:1A:79"; - terminal = false; + systemd.user.services = { + autoconnect-gamepad = { + Unit = { + Description = "Attempt to connect to game controllers"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + }; + Service = { + ExecStart = lib.getExe pkgs.auto_connect_gamepad; + }; + Install = { + WantedBy = [ "sway-session.target" ]; + }; }; + }; + + xdg.desktopEntries = { disconnect-controller = { name = "Disconnect Controller"; exec = "bluetoothctl disconnect 84:30:95:97:1A:79";