-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathxmonad.hs
82 lines (72 loc) · 3.2 KB
/
xmonad.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import XMonad
import XMonad.Util.Run
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog
import XMonad.Layout.NoBorders
import XMonad.Layout.Tabbed
import System.IO
import qualified Data.Map as Map
myFont = "Terminus:pixelsize=14"
myFocusFGColor = "#ABCDEF"
myFocusBGColor = "#123456"
myNormalFGColor = "#5678AB"
myNormalBGColor = "#222222"
myIconDir = "/home/mawww/misc/icons/"
dmenuCmd prompt = "dmenu -fa \"" ++ myFont ++ "\" -p \"" ++ prompt ++
"\" -nf \"" ++ myNormalFGColor ++ "\" -nb \"" ++ myNormalBGColor ++
"\" -sf \"" ++ myFocusFGColor ++ "\" -sb \"" ++ myFocusBGColor ++ "\""
main = do
dzenPipe <- spawnPipe myStatusBar
xmonad $ defaultConfig
{ borderWidth = 1
, terminal = "urxvt"
, normalBorderColor = myNormalBGColor
, focusedBorderColor = myFocusBGColor
, modMask = mod4Mask
, workspaces = ["web", "dev", "tmp", "bg"]
, manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = smartBorders $ avoidStruts $ layoutHook defaultConfig ||| tabbed shrinkText myTabConfig
, logHook = dynamicLogWithPP $ myDzenPP dzenPipe
, keys = newKeys
}
myStatusBar = "dzen2 -x 0 -y 0 -h 16 -w 1000 -ta l -fg '" ++ myNormalFGColor ++
"' -bg '" ++ myNormalBGColor ++ "' -fn '" ++ myFont ++ "'"
colors fg bg = "^fg(" ++ fg ++ ")^bg(" ++ bg ++ ")"
endcolors = "^fg()^bg()^p()"
icon name = "^i(" ++ myIconDir ++ "/" ++ name ++ ")"
myDzenPP h = defaultPP
{ ppCurrent = wrap (colors myFocusFGColor myFocusBGColor ++ "^p() ") (" " ++ endcolors) . \wsId -> dropIx wsId
, ppVisible = wrap (colors myFocusFGColor myFocusBGColor ++ "^p() ") (" " ++ endcolors) . \wsId -> dropIx wsId
, ppHidden = wrap (colors myNormalFGColor myNormalBGColor ++ "^p() ") (" " ++ endcolors) . \wsId -> dropIx wsId
, ppSep = " "
, ppWsSep = " "
, ppTitle = dzenColor myFocusFGColor ""
, ppLayout = dzenColor myNormalFGColor "" .
(\x -> case x of
"Tall" -> icon "tall.xbm"
"Mirror Tall" -> icon "mtall.xbm"
"Full" -> icon "full.xbm"
"Tabbed Simplest" -> icon "tabbed.xbm"
_ -> x
)
, ppOutput = hPutStrLn h
}
where
dropIx wsId = if (':' `elem` wsId) then drop 2 wsId else wsId
myTabConfig = defaultTheme
{ activeColor = myFocusBGColor
, activeBorderColor = myFocusBGColor
, activeTextColor = myFocusFGColor
, inactiveColor = myNormalBGColor
, inactiveBorderColor = myNormalBGColor
, inactiveTextColor = myNormalFGColor
, urgentColor = myNormalBGColor
, urgentBorderColor = myNormalBGColor
, urgentTextColor = myNormalFGColor
, fontName = myFont
, decoHeight = 16
}
newKeys x = Map.union (Map.fromList (myKeys x)) (keys defaultConfig x)
myKeys conf@(XConfig {XMonad.modMask = modm }) =
[ ((modm .|. shiftMask, xK_p), spawn ("exe=`dmenu_path | " ++ dmenuCmd "terminal launch:" ++ "` && urxvt -e \"$exe\""))
, ((modm , xK_p), spawn ("exe=`dmenu_path | " ++ dmenuCmd "launch:"++ "` && $exe")) ]