From e869513f0ff7af1d9bd9e6d9886a2c02700b48d2 Mon Sep 17 00:00:00 2001 From: Christian Harke Date: Sat, 5 Oct 2024 00:39:19 +0200 Subject: [PATCH] Update and re-enable xbindkeys for media keys --- home/roles/desktop/xserver/default.nix | 1 + .../desktop/xserver/xbindkeys/default.nix | 91 ++++++++----------- 2 files changed, 40 insertions(+), 52 deletions(-) diff --git a/home/roles/desktop/xserver/default.nix b/home/roles/desktop/xserver/default.nix index c8052df8..2f0b25e2 100644 --- a/home/roles/desktop/xserver/default.nix +++ b/home/roles/desktop/xserver/default.nix @@ -52,6 +52,7 @@ in cursors.enable = true; locker.enable = true; redshift.enable = true; + xbindkeys.enable = true; xmonad = { inherit (cfg) colorScheme; diff --git a/home/roles/desktop/xserver/xbindkeys/default.nix b/home/roles/desktop/xserver/xbindkeys/default.nix index 3bdc9d59..c6e7693a 100644 --- a/home/roles/desktop/xserver/xbindkeys/default.nix +++ b/home/roles/desktop/xserver/xbindkeys/default.nix @@ -4,9 +4,35 @@ with lib; let - xCfg = config.custom.roles.desktop.xserver; - cfg = xCfg.xbindkeys; - terminalCfg = xCfg.terminal; + desktopCfg = config.custom.roles.desktop; + cfg = desktopCfg.xserver.xbindkeys; + terminalCfg = desktopCfg.terminal; + + defaultKeymap = { + XF86AudioLowerVolume = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"; + XF86AudioRaiseVolume = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"; + XF86AudioMute = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + XF86AudioMicMute = "wpctl set-source-mute @DEFAULT_SOURCE@ toggle"; + XF86AudioPlay = "playerctl play-pause"; + XF86AudioStop = "playerctl stop"; + XF86AudioPause = "playerctl pause"; + XF86AudioNext = "playerctl next"; + XF86AudioPrev = "playerctl previous"; + XF86Bluetooth = "${getExe pkgs.bash} -c \"if rfkill list bluetooth|grep -q 'yes$';then rfkill unblock bluetooth;else rfkill block bluetooth;fi\""; + XF86MonBrightnessDown = "brightnessctl set 10%-"; + XF86MonBrightnessUp = "brightnessctl set 10%+"; + XF86Calculator = "${terminalCfg.commandSpawnCmd} ${getExe pkgs.eva}"; + XF86Explorer = "${terminalCfg.commandSpawnCmd} ${getExe pkgs.ranger}"; + XF86HomePage = "xdg-open"; + }; + + mkRcEntry = keymap: + concatStringsSep "\n" ( + mapAttrsToList (code: command: '' + "${command}" + ${code} + '') keymap + ); in @@ -14,6 +40,12 @@ in options = { custom.roles.desktop.xserver.xbindkeys = { enable = mkEnableOption "Xbindkeys"; + + keymap = mkOption { + type = with types; attrsOf str; + description = "Key mapping"; + default = defaultKeymap; + }; }; }; @@ -21,60 +53,15 @@ in custom.roles.desktop.terminal.enable = true; home.packages = with pkgs; [ - # Audio control - playerctl + terminalCfg.package + brightnessctl + playerctl xbindkeys - ] + [ - terminalCfg.package ]; xdg.configFile."xbindkeysrc" = { - text = '' - "pactl set-sink-volume 0 -5%" - XF86AudioLowerVolume - - "pactl set-sink-volume 0 +5%" - XF86AudioRaiseVolume - - "pactl set-sink-mute 0 toggle" - XF86AudioMute - - "pactl set-source-mute 1 toggle" - XF86AudioMicMute - - "playerctl play" - XF86AudioPlay - - "playerctl stop" - XF86AudioStop - - "playerctl pause" - XF86AudioPause - - "playerctl next" - XF86AudioNext - - "playerctl previous" - XF86AudioPrev - - "bash -c \"if rfkill list bluetooth|grep -q 'yes$';then rfkill unblock bluetooth;else rfkill block bluetooth;fi\"" - XF86Bluetooth - - # FIXME Only working once? - "${terminalCfg.commandSpawnCmd} eva" - XF86Calculator - - "${terminalCfg.commandSpawnCmd} ranger" - XF86Explorer - - "xdg-open" - XF86HomePage - - # TODO: - #"gsettings" - # XF86Tools - ''; + text = mkRcEntry (defaultKeymap // cfg.keymap); target = config.home.homeDirectory + "/.xbindkeysrc"; };