import XMonad import XMonad.Actions.SpawnOn import XMonad.Hooks.DynamicLog() import XMonad.Hooks.ManageDocks import XMonad.Util.EZConfig(additionalKeys) import System.IO() import XMonad.Layout.NoBorders import XMonad.Hooks.SetWMName import XMonad.Hooks.ManageHelpers import XMonad.Util.Scratchpad import qualified XMonad.StackSet as W main :: IO () main = xmonad $ def -- Fullscreen handling: -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> manageHook def <+> manageScratchPad , handleEventHook = handleEventHook def <+> docksEventHook -- , layoutHook = smartBorders $ lessBorders OnlyFloat $ avoidStruts $ layoutHook def , layoutHook = smartBorders $ avoidStruts $ layoutHook def , modMask = mod4Mask -- User Super instead of Alt , terminal = myTerminal , startupHook = startup } `additionalKeys` myKeyBindings myTerminal = "gnome-terminal" manageScratchPad :: ManageHook manageScratchPad = scratchpadManageHook (W.RationalRect l t w h) where h = 0.1 -- terminal height, 10% w = 1 -- terminal width, 100% t = 1 - h -- distance from top edge, 90% l = 1 - w -- distance from left edge, 0% myKeyBindings :: [((ButtonMask, KeySym), X())] myKeyBindings = [ -- XF86MonBrightnessUp ((0, 0x1008ff02), spawn "xbacklight +10") -- XF86MonBrightnessDown , ((0, 0x1008ff03), spawn "xbacklight -10") -- XF86AudioMute , ((0, 0x1008ff12), spawn "amixer -q sset Master toggle") -- XF86AudioLowerVolume , ((0, 0x1008ff11), spawn "amixer -q sset Master 5%- unmute") -- XF86AudioRaiseVolume , ((0, 0x1008ff13), spawn "amixer -q sset Master 5%+ unmute") -- XF86AudioPrev , ((0, 0x1008ff16), spawn "playerctl previous") -- XF86AudioPlay , ((0, 0x1008ff14), spawn "playerctl play-pause") -- XF86AudioNext , ((0, 0x1008ff17), spawn "playerctl next") -- yeganesh launcher , ((mod4Mask, xK_p), spawnHere "exe=$(yeganesh -x) && exec $exe") -- Lock screen , ((mod4Mask .|. controlMask, xK_l), spawn "dm-tool lock & systemctl suspend") -- print screen of clicked window , ((mod4Mask .|. controlMask, xK_Print), spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png -s") -- print whole screen , ((mod4Mask, xK_Print), spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png") -- xrandr single monitor setup , ((mod4Mask .|. controlMask, xK_1), spawn "~/annex/dev/code/dotfiles/scripts/single-monitor.sh") -- xrandr three monitor setup , ((mod4Mask .|. controlMask, xK_3), spawn "~/annex/dev/code/dotfiles/scripts/three-monitors.sh") -- restart network , ((mod4Mask, xK_x), spawn "gksudo -S systemctl restart network-manager") -- save selection (link) in buku , ((mod4Mask, xK_c), spawn "$HOME/dev/libre/dotfiles/scripts/buku-add.sh >> /tmp/buku-xmonad.log") -- delete selection (link) from buku , ((mod4Mask, xK_d), spawn "$HOME/dev/libre/dotfiles/scripts/buku-delete.sh >> /tmp/buku-xmonad.log") -- archive selection (link) in buku , ((mod4Mask, xK_a), spawn "$HOME/dev/libre/dotfiles/scripts/buku-archive.sh >> /tmp/buku-xmonad.log") ] startup :: X() startup = do spawn "xbacklight =100" spawn "xmobar ~/.xmobarrc" spawn "killall trayer; trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" spawn "nm-applet" spawn "~/annex/dev/code/dotfiles/scripts/once-only-nextcloud.sh" setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad