{- Docs: - EZConfig: https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Util-EZConfig.html#g:3 - Media keys: https://hackage.haskell.org/package/X11-1.9/docs/Graphics-X11-ExtraTypes-XF86.html - Audio control: https://xmonadhaskell.wordpress.com/2018/10/24/xmonad-audio-control/ - XMonad API: https://hackage.haskell.org/package/xmonad - Contrib API: https://hackage.haskell.org/package/xmonad-contrib -} import XMonad import XMonad.Config import XMonad.Hooks.EwmhDesktops (ewmh) import XMonad.Hooks.ManageDocks import XMonad.Layout.Spiral import XMonad.Util.CustomKeys (customKeys) import XMonad.Actions.CopyWindow import XMonad.Util.EZConfig (additionalKeys) import Graphics.X11.ExtraTypes.XF86 delKeys conf@(XConfig {modMask = modMask}) = [(modMask, xK_p)] insKeys :: XConfig l -> [((KeyMask, KeySym), X ())] insKeys conf@(XConfig {modMask = modMask}) = [ -- run dmenu with M-o ((modMask, xK_o), spawn "dmenu_run") -- passmenu doesn't work :( , ((modMask, xK_p), spawn "${SHELL:-\"/bin/sh\"} -c passmenu &") , ((modMask, xK_y), spawn "passmenu &") -- sticky windows , ((modMask, xK_a ), windows copyToAll) -- @@ Make focused window always visible , ((modMask .|. shiftMask, xK_a ), killAllOtherCopies) -- @@ Toggle window state back -- media/ function keys -- backlight , ((0, xK_F5), spawn "xbacklight -dec 5") , ((0, xK_F6), spawn "xbacklight -inc 5") , ((0, xF86XK_KbdBrightnessDown), spawn "xbacklight -dec 5") , ((0, xF86XK_KbdBrightnessUp), spawn "xbacklight -inc 5") -- volume controls , ((0, xK_F1), amixer "2%+") , ((0, xK_F2), amixer "2%-") , ((0, xK_F3), amixer "toggle") , ((0, xF86XK_AudioLowerVolume), amixer "2%+") , ((0, xF86XK_AudioRaiseVolume), amixer "2%-") , ((0, xF86XK_AudioMute), amixer "toggle") ] amixer :: String -> X () amixer cmd = spawn $ "amixer -q sset Master " <> cmd myLayout = spiral (6 / 7) myWorkspaces = ["1:mail", "2:org", "3:web"] ++ map show [4 .. 9] ++ ["0"] myConf = additionalKeys c (insKeys c) where c = def { modMask = mod4Mask -- ^ super instead of alt , normalBorderColor = "#eee8d4" -- ^ solarized base3 , focusedBorderColor = "#2aa198" -- ^ solarized cyan , manageHook = manageDocks <+> manageHook def , layoutHook = avoidStruts $ myLayout ||| layoutHook def , terminal = "/home/ben/.nix-profile/bin/xterm" , workspaces = myWorkspaces --, keys = customKeys delKeys insKeys } main = xmonad $ ewmh $ docks $ myConf