{ pkgs, config, lib, outputs, ... }: let df = lib.mkDefault; mkxf = with lib; mapAttrs' (name: value: nameValuePair ("XF86" + name) (value)); # not rewriting this rn keysetting = "${outputs.packages.${pkgs.system}.wm-helpers}/bin/keysetting"; in { options.nixfiles.common.wm = { keybinds = lib.mkOption { description = '' Attribute set containing wm-independent XF86 keysyms and associated commands (without the XF86 prefix) ''; type = with lib.types; attrsOf str; default = {}; example = { XF86AudioPlay = "playerctl play-pause"; }; }; finalKeybinds = lib.mkOption { description = "Keysyms with XF86 prefix"; type = with lib.types; attrsOf str; default = mkxf config.nixfiles.common.wm.keybinds; readOnly = true; }; }; config = { nixfiles.common.wm.keybinds = { AudioRaiseVolume = df "${keysetting} volumeup"; AudioLowerVolume = df "${keysetting} volumedown"; AudioMute = df "${keysetting} mute"; AudioMicMute = df "${keysetting} micmute"; KbdBrightnessDown = df "${keysetting} keydown"; KbdBrightnessUp = df "${keysetting} keyup"; MonBrightnessDown = df "${keysetting} mondown"; MonBrightnessUp = df "${keysetting} monup"; AudioPlay = df "playerctl play-pause"; AudioPrev = df "playerctl previous"; AudioNext = df "playerctl next"; }; }; }