-- | Bind media keys using dbus -- Requires amixer to control volume. module XMonad.Util.MediaKeys (-- * default keybindings mediaKeys -- * media control in the 'X' monad , audioPrev , audioNext , audioPlayPause ) where --gives us media keys import Graphics.X11.ExtraTypes.XF86 import Graphics.X11.Types --XMonad stuff import XMonad.Core import XMonad.Util.Volume --monads and all that import qualified Data.Map as M import Data.Monoid -- | Given your keymaps, add the media keybindings mediaKeys :: M.Map (KeyMask, KeySym) (X ()) -> M.Map (KeyMask, KeySym) (X ()) mediaKeys = M.fromList . (<>) mediaKeyList . M.toList mediaKeyList :: [((KeyMask, KeySym), X ())] mediaKeyList = [ ((0, xF86XK_AudioNext), audioNext) , ((0, xF86XK_AudioPrev), audioPrev) , ((0, xF86XK_AudioPlay), audioPlayPause) , ((0, xF86XK_AudioMute), toggleMute) , ((0, xF86XK_AudioLowerVolume), lowerVolume (5 :: Word)) , ((0, xF86XK_AudioRaiseVolume), raiseVolume (5 :: Word)) ] -- | Helper function for use with dbus sp :: String -> X () sp = spawn . (<>) "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player." -- | Action in the 'X' monad to go to next audioNext :: X () audioNext = sp "Next" -- | Action in the 'X' monad to go the previous audioPrev :: X () audioPrev = sp "Previous" -- | Action in the 'X' monad to play/pause audioPlayPause :: X () audioPlayPause = sp "PlayPause" -- lana = sp "OpenUri string:6QOU3FhUkPeA2RtaXcvgi7"