Files
dotfiles/.xmonad/xmonad.hs
2020-04-27 15:28:35 +02:00

175 lines
5.8 KiB
Haskell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import XMonad
import XMonad.Actions.SpawnOn
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.FadeInactive
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops(fullscreenEventHook,ewmh)
import XMonad.Hooks.SetWMName
import XMonad.Layout.Grid
import XMonad.Layout.ResizableTile
import XMonad.Layout.LayoutHints
import XMonad.Layout.Cross
import XMonad.Layout.ToggleLayouts
import XMonad.Layout.WindowNavigation
import XMonad.Layout.NoBorders
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.Scratchpad
import XMonad.Util.NamedScratchpad
import qualified XMonad.StackSet as W
-- import qualified XMonad.StackSet as S
import XMonad.Util.EZConfig(additionalKeys)
import System.IO
myManageHook =
manageDocks
<+> manageSpawn
<+>
(composeAll [ isFullscreen --> doFullFloat
, className =? "Gimp" --> doFloat
, className =? "Vncviewer" --> doFloat
, className =? "PrisonArchitect.x86_64" --> doFullFloat
, className =? "hl_linux" --> doFloat
, className =? "hl2_linux" --> doFloat
, className =? "chromium" --> doFloat
, className =? "Pinentry" --> doFloat
, className =? "GameClient.exe" --> doFloat
, className =? "Gajim" --> doShift "ι"
, className =? "Thunderbird" --> doShift "θ"
])
<+> namedScratchpadManageHook myScratchPads
manageScratchPad :: ManageHook
manageScratchPad = scratchpadManageHook (W.RationalRect l t w h)
where
h = 0.2 -- terminal height, 10%
w = 0.7 -- terminal width, 100%
t = 1 - h -- distance from top edge, 90%
l = (1 - w)/2 -- distance from left edge, 0%
myScratchPads = [ NS "mixer" spawnMixer findMixer manageMixer
, NS "terminal" spawnTerm findTerm manageTerm
, NS "bitwarden" spawnBitwarden findBitwarden manageBitwarden
, NS "quicknote" spawnQuicknote findQuicknote manageQuicknote
]
where
spawnMixer = "pavucontrol"
findMixer = className =? "Pavucontrol"
manageMixer = customFloating $ W.RationalRect l t w h
where
h = 0.6 -- height, 60%
w = 0.6 -- width, 60%
t = (1 - h)/2 -- centered top/bottom
l = (1 - w)/2 -- centered left/right
spawnTerm = myTerminal ++ " -name scratchpad"
findTerm = resource =? "scratchpad"
manageTerm = customFloating $ W.RationalRect l t w h
where
h = 0.4 -- terminal height, 20%
w = 0.7 -- terminal width, 70%
t = 1 - h -- distance from top edge
l = (1 - w)/2 -- distance from left edge
spawnQuicknote = myTerminal ++ " -name quicknote -e notology -q"
findQuicknote = resource =? "quicknote"
manageQuicknote = customFloating $ W.RationalRect l t w h
where
h = 0.6 -- terminal height, 60%
w = 0.6 -- terminal width, 60%
t = 1 - h -- distance from top edge
l = (1 - w)/2 -- distance from left edge
spawnBitwarden = "bitwarden-bin"
findBitwarden = resource =? "bitwarden"
manageBitwarden = customFloating $ W.RationalRect l t w h
where
h = 0.8 -- terminal height, 80%
w = 0.5 -- terminal width, 50%
t = 1 - h -- distance from top edge
l = (1 - w)/2 -- distance from left edge
myWorkspaces = ["α","β","γ","δ","ε","ζ","η","θ","ι"]
myLogHook xmproc = do
fadeInactiveLogHook 0.8
<+> dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "#01b8e0" "" . shorten 50
}
myTerminal = "urxvt"
myLayout = tiled ||| Mirror tiled ||| Full ||| Grid where
-- default tiling algorithm partitions the screen into two panes
tiled = Tall nmaster delta ratio
-- The default number of windows in the master pane
nmaster = 1
-- Default proportion of screen occupied by master pane
ratio = 1/2
-- Percent of screen to increment by when resizing panes
delta = 2/100
main = do
xmproc <- spawnPipe "xmobar ~/.xmonad/xmobar.hs"
xmonad $ defaultConfig
{ manageHook = myManageHook -- make sure to include myManageHook definition from above
-- <+> manageHook defaultConfig
, layoutHook = avoidStruts $ smartBorders $ myLayout
, startupHook = setWMName "LG3D"
, handleEventHook = mconcat
[ docksEventHook
, fullscreenEventHook
, handleEventHook defaultConfig ]
, logHook = myLogHook xmproc
, modMask = mod4Mask -- Rebind Mod to the Windows key
, terminal = myTerminal
, workspaces = myWorkspaces
} `additionalKeys`
[ ((mod4Mask .|. shiftMask, xK_l), spawn "xscreensaver-command -lock")
, ((mod4Mask .|. shiftMask, xK_r), spawn "terminator -e ranger")
, ((mod4Mask .|. shiftMask, xK_f), spawn "firefox")
, ((mod4Mask .|. shiftMask, xK_Return), spawn "terminator")
, ((mod4Mask .|. shiftMask, xK_t), namedScratchpadAction myScratchPads "terminal")
, ((mod4Mask .|. shiftMask, xK_m), namedScratchpadAction myScratchPads "mixer")
, ((mod4Mask .|. shiftMask, xK_n), namedScratchpadAction myScratchPads "quicknote")
, ((mod4Mask .|. shiftMask, xK_b), namedScratchpadAction myScratchPads "bitwarden")
, ((mod4Mask , xK_q), spawn "killall xmobar; xmonad --recompile; xmonad --restart")
, ((0 , 0x1008FF11), spawn "amixer -q sset Master 2%-")
, ((0 , 0x1008FF13), spawn "amixer -q sset Master 2%+")
, ((0 , 0x1008ff4a), spawn "xset dpms force off")
, ((0 , 0x1008ffb2), spawn "amixer set Capture toggle")
, ((0 , 0x1008FF12), spawn "amixer set Master toggle")
, ((0 , 0x1008FF03), spawn "xbacklight -dec 5")
, ((0 , 0x1008FF02), spawn "xbacklight -inc 5")
, ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
, ((0, xK_Print), spawn "scrot")
]