{ lib, config, pkgs, ... }: let cfg = config.snowhawk.playerctl; sxhkdCfg = config.services.sxhkd; keybindingsStr = lib.concatStringsSep "\n" (lib.mapAttrsToList (hotkey: command: lib.optionalString (command != null) '' ${hotkey} ${command} '') sxhkdCfg.keybindings); in { options.snowhawk.playerctl = { enable = lib.mkEnableOption "playerctl"; }; config = lib.mkIf cfg.enable { services.playerctld.enable = true; home.packages = with pkgs; [ playerctl ]; systemd.user.services.sxhkd = { Unit = { Description = "sxhkd service"; PartOf = [ "graphical-session.target" ]; }; Service = { Type = "exec"; ExecStart = "${pkgs.sxhkd}/bin/sxhkd"; }; Install = { WantedBy = [ "graphical-session.target" ]; }; }; xdg.configFile."sxhkd/sxhkdrc".text = keybindingsStr; services.sxhkd = let playerctlcmd = "${pkgs.playerctl}/bin/playerctl"; in { keybindings = { "XF86AudioPlay" = "${playerctlcmd} play-pause"; "XF86AudioPrev" = "${playerctlcmd} previous"; "XF86AudioNext" = "${playerctlcmd} next"; }; }; }; }