diff options
author | Griffin Smith <grfn@gws.fyi> | 2020-09-12T19·14-0400 |
---|---|---|
committer | glittershark <grfn@gws.fyi> | 2020-09-12T19·20+0000 |
commit | 6f2094c1464ecd9513563728a1d5212792717adf (patch) | |
tree | bb4d7076d671889be286fcb2d11cd24cf8403c5b | |
parent | 65967bbbb163d7955de412381831c52c14ce1dbc (diff) |
feat(gs): Bind a push-to-talk key r/1784
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 <grfn@gws.fyi>
-rw-r--r-- | users/glittershark/keyboard/keymap.c | 2 | ||||
-rw-r--r-- | users/glittershark/system/home/machines/chupacabra.nix | 1 | ||||
-rw-r--r-- | users/glittershark/system/home/modules/ptt.nix | 44 |
3 files changed, 46 insertions, 1 deletions
diff --git a/users/glittershark/keyboard/keymap.c b/users/glittershark/keyboard/keymap.c index 9ffa6fe9eb9f..fbb28c9aac59 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 66531e9d7f31..b6940dc831b4 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 000000000000..436c8f261797 --- /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"; + }; + }; +} |