import XMonad import XMonad.Actions.SpawnOn(spawnHere) import XMonad.Hooks.ManageDocks import XMonad.Util.EZConfig(additionalKeysP) import XMonad.Layout.NoBorders import XMonad.Hooks.SetWMName import XMonad.Hooks.ManageHelpers import XMonad.Util.Run(spawnPipe) import XMonad.Layout.ResizableTile import XMonad.Layout.ResizableTile(MirrorResize(MirrorShrink, MirrorExpand)) main :: IO () main = do xmproc <- spawnPipe "xmobar $XDG_CONFIG_HOME/xmonad/xmobarrc" xmonad $ def -- Fullscreen handling: -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> (className =? "trayer" --> doIgnore) <+> manageHook def , handleEventHook = handleEventHook def <+> docksEventHook , layoutHook = myLayoutHook , modMask = mod4Mask -- User Super instead of Alt , terminal = myTerminal , startupHook = myStartup } `additionalKeysP` myKeyPBindings myTerminal :: String myTerminal = "st" dbg :: String dbg = "xmessage 'xmonad EuAndreh debug'" myKeyPBindings :: [(String, X ())] myKeyPBindings = [ -- Volume ("", spawn "amixer -q sset Master toggle") , ("", spawn "amixer -q sset Master 5%- unmute") , ("", spawn "amixer -q sset Master 5%+ unmute") -- Playback , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5-") , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) previous") , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/playerctl-play-pause.sh") , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/rotate-mpris-player.sh") , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5+") , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) next") -- Brightness , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh -10") , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/zero-brightness.sh") , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh +10") , ("M-p", spawnHere "exe=$(dmenu_path | dmenu) && exec $exe") , ("M-o", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-emoji.sh") , ("M-v", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-clipmenu.sh") , ("M-i", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass.sh") , ("C-M-i", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass-login.sh") -- Lock screen , ("C-M-l", spawn "dm-tool switch-to-greeter") -- print whole screen , ("M-", spawn "escrotum ~/Downloads/Screenshots/%Y-%m-%d-%T-screenshot.png") -- print screen of clicked window , ("C-M-", spawn "escrotum ~/Downloads/Screenshots/%Y-%m-%d-%T-screenshot.png -s") -- xrandr single monitor setup , ("C-M-1", spawn "~/dev/libre/dotfiles/xmonad/scripts/single-monitor.sh") -- xrandr three monitor setup , ("C-M-3", spawn "~/dev/libre/dotfiles/xmonad/scripts/three-monitors.sh") -- Toggle appearence of xmobar -- https://stackoverflow.com/a/27646652 , ("M-f", sendMessage ToggleStruts) , ("M-รง", spawn dbg) -- Vertically resize, taken from: -- https://stackoverflow.com/questions/25857674/xmonad-vertical-resize-tile-window , ("M-a", sendMessage MirrorExpand) , ("M-z", sendMessage MirrorShrink) -- Toggle PulseAudio sink , ("M-s", spawn "~/dev/libre/dotfiles/xmonad/scripts/toggle-pulseaudio-sink.sh") ] myLayoutHook = smartBorders $ avoidStruts $ (tiled ||| Mirror tiled ||| Full) where tiled = ResizableTall nmaster delta ratio [] nmaster = 1 delta = 3/100 ratio = 1/2 myStartup :: X () myStartup = do -- Taken from: -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad setWMName "LG3D"