From 6f2094c1464ecd9513563728a1d5212792717adf Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sat, 12 Sep 2020 15:14:16 -0400 Subject: feat(gs): Bind a push-to-talk key Bind a key, which I've located at the top-left of my right keyboard, to a momentary push-to-talk by muting and unmuting my pulseaudio source using xbindkeys. I had been putting this off for a while because i3 doesn't support binding different commands to keyup than to keydown events, but the xbindkeys support appears to have solved that reasonably well, plus it's got Scheme in it so that's cool. If there's demand for it I'll gladly expose this as a reusable, configurable home-manager module outside my users dir in the depot. Change-Id: Ie591c93037dbdac364d5d8a718d99edb70780789 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1975 Tested-by: BuildkiteCI Reviewed-by: glittershark --- users/glittershark/keyboard/keymap.c | 2 +- .../system/home/machines/chupacabra.nix | 1 + users/glittershark/system/home/modules/ptt.nix | 44 ++++++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 users/glittershark/system/home/modules/ptt.nix (limited to 'users/glittershark') diff --git a/users/glittershark/keyboard/keymap.c b/users/glittershark/keyboard/keymap.c index 9ffa6fe9eb..fbb28c9aac 100644 --- a/users/glittershark/keyboard/keymap.c +++ b/users/glittershark/keyboard/keymap.c @@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LBRACKET, GUI_T(KC_NO), LSFT_T(KC_BSPACE), KC_COLN, - KC_RIGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_MY_COMPUTER, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_RALT, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, KC_H, KC_J, KC_K, KC_L, LT(2,KC_SCOLON), LT(1,KC_QUOTE), KC_MINUS, KC_N, KC_M, KC_COMMA, KC_DOT, CTL_T(KC_SLASH), KC_RSFT, diff --git a/users/glittershark/system/home/machines/chupacabra.nix b/users/glittershark/system/home/machines/chupacabra.nix index 66531e9d7f..b6940dc831 100644 --- a/users/glittershark/system/home/machines/chupacabra.nix +++ b/users/glittershark/system/home/machines/chupacabra.nix @@ -11,6 +11,7 @@ in { ../modules/games.nix ../modules/rtlsdr.nix ../modules/urbint.nix + ../modules/ptt.nix ]; # for when hacking diff --git a/users/glittershark/system/home/modules/ptt.nix b/users/glittershark/system/home/modules/ptt.nix new file mode 100644 index 0000000000..436c8f2617 --- /dev/null +++ b/users/glittershark/system/home/modules/ptt.nix @@ -0,0 +1,44 @@ +{ config, lib, pkgs, ... }: + +let + + pttKeycode = "152"; + sourceID = "3"; + + mute = pkgs.writeShellScript "mute-mic" '' + xset -r ${pttKeycode} + ${pkgs.pulseaudio}/bin/pactl set-source-mute ${sourceID} 1 + ''; + + unmute = pkgs.writeShellScript "unmute-mic" '' + xset -r ${pttKeycode} + ${pkgs.pulseaudio}/bin/pactl set-source-mute ${sourceID} 0 + ''; + +in + +{ + home.packages = with pkgs; [ + xbindkeys + ]; + + + home.file.".xbindkeysrc.scm".text = '' + (xbindkey '("c:${pttKeycode}") "${unmute}") + (xbindkey '(release "c:${pttKeycode}") "${mute}") + ''; + + systemd.user.services."xbindkeys" = { + Unit = { + Description = "Keybind daemon for push-to-talk"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + + Install = { WantedBy = [ "graphical-session.target" ]; }; + + Service = { + ExecStart = "${pkgs.xbindkeys}/bin/xbindkeys -n -v"; + }; + }; +} -- cgit 1.4.1