Skip to content

Instantly share code, notes, and snippets.

@bobymicroby
Last active March 6, 2019 09:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bobymicroby/8ba8f4bd23cb2756aa541a6d89cba4ea to your computer and use it in GitHub Desktop.
Save bobymicroby/8ba8f4bd23cb2756aa541a6d89cba4ea to your computer and use it in GitHub Desktop.
My xmonad config
import XMonad
import XMonad.Hooks.SetWMName
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.UrgencyHook
import XMonad.Hooks.ManageHelpers
import XMonad.Layout.NoBorders (smartBorders)
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.FadeInactive
import XMonad.Actions.Volume
import Graphics.X11.ExtraTypes.XF86
import XMonad.Util.Dzen
import XMonad.Util.Run
import XMonad.StackSet as W
import System.IO
import qualified Data.Map as M
import Data.Monoid (mappend)
centeredHalfWidthRect = W.RationalRect 0.25 0.25 0.5 0.5
doDialogFloat = doRectFloat centeredHalfWidthRect
myScreenshot = "gnome-screenshot --interactive"
myManageHook = composeAll
[
(stringProperty "WM_WINDOW_ROLE" =? "GtkFileChooserDialog") --> doDialogFloat,
className =? "Google-chrome" --> doShift "web",
className =? "jetbrains-studio" --> doShift "andr",
className =? "idea-community" --> doShift "idea",
manageDocks
]
myEventHook = docksEventHook <+> fullscreenEventHook
myLayoutHook = avoidStruts . smartBorders $ layoutHook defaultConfig
myKeys x =
[
((0, xK_Print), spawn myScreenshot),
((0, xF86XK_AudioLowerVolume), fmap (max 0) (lowerVolume 4) >>= alert),
((0, xF86XK_AudioRaiseVolume) , fmap (min 100) (raiseVolume 4) >>= alert),
((0, xF86XK_AudioMute), toggleMute >>= (\b -> if(b) then getVolume else pure 0) >>= alert)
]
alert = dzenConfig centered . show . round
centered =
onCurr (center 150 66)
>=> font "-*-terminus-*-r-*-*-64-*-*-*-*-*-*-*"
>=> addArgs ["-fg", "#ffffff"]
>=> addArgs ["-bg", "#000000"]
newKeys x = M.union (keys defaultConfig x) (M.fromList (myKeys x))
myLogHook h = dynamicLogWithPP $ defaultPP
-- display current workspace as darkgrey on light grey (opposite of
-- default colors)
{ ppCurrent = dzenColor "#303030" "#909090" . pad
-- display other workspaces which contain windows as a brighter grey
, ppHidden = dzenColor "#909090" "" . pad
-- display other workspaces with no windows as a normal grey
, ppHiddenNoWindows = dzenColor "#606060" "" . pad
-- display the current layout as a brighter grey
, ppLayout = dzenColor "#909090" "" . pad
-- if a window on a hidden workspace needs my attention, color it so
, ppUrgent = dzenColor "#ff0000" "" . pad . dzenStrip
-- shorten if it goes over 100 characters
, ppTitle = shorten 100
-- no separator between workspaces
, ppWsSep = ""
-- put a few spaces between each object
, ppSep = " "
-- output to the handle we were given as an argument
, ppOutput = hPutStrLn h
}
--LG3D makes java swing (IntelliJ IDEA , Android studio etc) work
main = do
let conkyBarWidth = 1440 -- found this value experimentally
let screenWidth = 3440 -- one 3440 screen
let dzenConfig = "-h '23' -fn 'xft:Source Code Pro:size=10:antialias=true' -bg '#000000' -fg '#FFFFFF' -y '-1' "
dzenXMonadBar <- spawnPipe $ "dzen2 -dock -x '0' -w '" ++ show (screenWidth-conkyBarWidth)++ "' -ta 'l' " ++ dzenConfig
dzenConkyBar <- spawnPipe $ "conky -c ~/.conky.conf | dzen2 -dock -x '" ++ show (screenWidth-conkyBarWidth) ++ "' -w '" ++ show conkyBarWidth ++ "' -ta 'r' " ++ dzenConfig
xmonad . docks . ewmh $ withUrgencyHook NoUrgencyHook $ defaultConfig {
XMonad.workspaces = ["web","andr","idea","term1","term2","term3"] ,
logHook = myLogHook dzenXMonadBar >> fadeInactiveLogHook 0xdddddddd ,
startupHook = setWMName "LG3D",
manageHook = myManageHook ,
keys = newKeys,
layoutHook = myLayoutHook,
handleEventHook = myEventHook
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment