spacepaste

  1.  
  2. $ cat .xmonad/xmonad.hs
  3. import XMonad hiding ( (|||) )
  4. import Data.Monoid
  5. import System.Exit
  6. import XMonad.Actions.FloatSnap
  7. import XMonad.Actions.FloatKeys
  8. import XMonad.Actions.CycleWS
  9. import XMonad.Util.NamedScratchpad
  10. import XMonad.Prompt
  11. import XMonad.Prompt.Shell
  12. import XMonad.Prompt.Window
  13. import XMonad.Prompt.RunOrRaise
  14. import XMonad.Hooks.DynamicLog
  15. import XMonad.Hooks.ManageHelpers
  16. import XMonad.Hooks.EwmhDesktops
  17. import XMonad.Hooks.ManageDocks
  18. import XMonad.Hooks.UrgencyHook
  19. import XMonad.Hooks.Place
  20. import XMonad.Layout.NoBorders
  21. import XMonad.Layout.Tabbed
  22. import XMonad.Layout.LayoutCombinators
  23. import XMonad.Layout.TwoPane
  24. import XMonad.Layout.IM
  25. import XMonad.Layout.Grid
  26. import XMonad.Layout.PerWorkspace
  27. import XMonad.Layout.Reflect
  28. import XMonad.Layout.Renamed
  29. import XMonad.Layout.Spacing
  30. import XMonad.Layout.StackTile
  31. import XMonad.Layout.ThreeColumns
  32. -- import XMonad.Layout.Combo
  33. import qualified XMonad.StackSet as W
  34. import qualified Data.Map as M
  35. -- The preferred terminal program, which is used in a binding below and by
  36. -- certain contrib modules.
  37. --
  38. myTerminal = "urxvtc"
  39. -- Whether focus follows the mouse pointer.
  40. myFocusFollowsMouse :: Bool
  41. myFocusFollowsMouse = True
  42. -- Whether clicking on a window to focus also passes the click to the window
  43. myClickJustFocuses :: Bool
  44. myClickJustFocuses = False
  45. -- Width of the window border in pixels.
  46. --
  47. myBorderWidth = 2
  48. -- modMask lets you specify which modkey you want to use. The default
  49. -- is mod1Mask ("left alt"). You may also consider using mod3Mask
  50. -- ("right alt"), which does not conflict with emacs keybindings. The
  51. -- "windows key" is usually mod4Mask.
  52. --
  53. myModMask = mod4Mask
  54. -- The default number of workspaces (virtual screens) and their names.
  55. -- By default we use numeric strings, but any string may be used as a
  56. -- workspace name. The number of workspaces is determined by the length
  57. -- of this list.
  58. --
  59. -- A tagging example:
  60. --
  61. -- > workspaces = ["web", "irc", "code" ] ++ map show [4..9]
  62. --
  63. myWorkspaces = ["0","1","2","3","4","5","6","7","8","9","10","11","12"]
  64. -- Border colors for unfocused and focused windows, respectively.
  65. --
  66. myNormalBorderColor = "#191919"
  67. myFocusedBorderColor = "#a52a2a"
  68. ------------------------------------------------------------------------
  69. -- Key bindings. Add, modify or remove key bindings here.
  70. --
  71. myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
  72. -- launch a terminal
  73. [ ((modm .|. shiftMask, xK_Return ), spawn $ XMonad.terminal conf)
  74. -- launch shell prompt
  75. , ((modm, xK_p ), shellPrompt myXPConfig)
  76. -- launch run or raise prompt
  77. , ((modm .|. shiftMask, xK_p ), runOrRaisePrompt myXPConfig)
  78. -- close focused window
  79. , ((modm .|. shiftMask, xK_c ), kill)
  80. -- Rotate through the available layout algorithms
  81. , ((modm, xK_space ), sendMessage NextLayout)
  82. -- Reset the layouts on the current workspace to default
  83. , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
  84. -- Resize viewed windows to the correct size
  85. , ((modm, xK_n ), refresh)
  86. -- Toggle to the workspace displayed previously
  87. , ((modm, xK_Tab ), toggleWS' ["NSP"])
  88. -- Move focus to the next window
  89. , ((modm, xK_j ), windows W.focusDown)
  90. -- Move focus to the previous window
  91. , ((modm, xK_k ), windows W.focusUp)
  92. -- Move focus to the master window
  93. , ((modm, xK_m ), windows W.focusMaster)
  94. -- Swap the focused window and the master window
  95. , ((modm, xK_Return ), windows W.swapMaster)
  96. -- Swap the focused window with the next window
  97. , ((modm .|. shiftMask, xK_j ), windows W.swapDown)
  98. -- Swap the focused window with the previous window
  99. , ((modm .|. shiftMask, xK_k ), windows W.swapUp)
  100. -- Shrink the master area
  101. , ((modm, xK_h ), sendMessage Shrink)
  102. -- Expand the master area
  103. , ((modm, xK_l ), sendMessage Expand)
  104. -- Push window back into tiling
  105. , ((modm, xK_t ), withFocused $ windows . W.sink)
  106. -- Increment the number of windows in the master area
  107. , ((modm, xK_comma ), sendMessage (IncMasterN 1))
  108. -- Deincrement the number of windows in the master area
  109. , ((modm, xK_period ), sendMessage (IncMasterN (-1)))
  110. -- Toggle the status bar gap
  111. -- Use this binding with avoidStruts from Hooks.ManageDocks.
  112. -- See also the statusBar function from Hooks.DynamicLog.
  113. --
  114. -- , ((modm, xK_b ), sendMessage ToggleStruts)
  115. -- Quit xmonad
  116. , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
  117. -- Restart xmonad
  118. , ((modm, xK_q ), spawn "xmonad --recompile; xmonad --restart")
  119. , ((0, 0x1008ff11), spawn "amixer set Master 5%- ; notify-send -u low Volume: `vol.sh`")
  120. , ((0, 0x1008ff12), spawn "amixer set Master toggle ; notify-send -u low Volume: `vol.sh`")
  121. , ((0, 0x1008ff13), spawn "amixer set Master 5%+ ; notify-send -u low Volume: `vol.sh`")
  122. -- , ((0, 0x1008ff14), spawn "cmus-remote -u")
  123. , ((0, 0x1008ff14), spawn "$HOME/documents/music/scripts/foo_playpause.sh")
  124. -- , ((0, 0x1008ff15), spawn "cmus-remote -s")
  125. , ((0, 0x1008ff15), spawn "$HOME/documents/music/scripts/foo_stop.sh")
  126. -- , ((0, 0x1008ff16), spawn "cmus-remote -r")
  127. , ((0, 0x1008ff16), spawn "$HOME/documents/music/scripts/foo_prev.sh")
  128. -- , ((0, 0x1008ff17), spawn "cmus-remote -n")
  129. , ((0, 0x1008ff17), spawn "$HOME/documents/music/scripts/foo_next.sh")
  130. , ((0, 0x1008ff02), spawn "xbacklight -inc 20")
  131. , ((0, 0x1008ff03), spawn "xbacklight -dec 20")
  132. , ((0, 0xff61 ), spawn "scrot")
  133. , ((modm .|. shiftMask, xK_g ), windowPromptGoto myXPConfig)
  134. , ((modm .|. shiftMask, xK_b ), windowPromptBring myXPConfig)
  135. , ((modm .|. mod1Mask, xK_e ), sendMessage $ JumpToLayout "E")
  136. , ((modm .|. mod1Mask, xK_m ), sendMessage $ JumpToLayout "M")
  137. , ((modm .|. mod1Mask, xK_b ), sendMessage $ JumpToLayout "B")
  138. , ((modm .|. mod1Mask, xK_f ), sendMessage $ JumpToLayout "F")
  139. , ((modm .|. mod1Mask, xK_t ), sendMessage $ JumpToLayout "T")
  140. , ((modm .|. mod1Mask, xK_r ), sendMessage $ JumpToLayout "R")
  141. , ((modm .|. mod1Mask, xK_g ), sendMessage $ JumpToLayout "G")
  142. , ((modm .|. mod1Mask, xK_c ), sendMessage $ JumpToLayout "C")
  143. , ((modm .|. mod1Mask, xK_s ), sendMessage $ JumpToLayout "S")
  144. , ((modm .|. controlMask, xK_Left ), withFocused $ snapMove L Nothing)
  145. , ((modm .|. controlMask, xK_Right ), withFocused $ snapMove R Nothing)
  146. , ((modm .|. controlMask, xK_Up ), withFocused $ snapMove U Nothing)
  147. , ((modm .|. controlMask, xK_Down ), withFocused $ snapMove D Nothing)
  148. , ((modm, xK_Left ), withFocused (keysMoveWindow (-10,0)))
  149. , ((modm, xK_Right ), withFocused (keysMoveWindow (10,0)))
  150. , ((modm, xK_Up ), withFocused (keysMoveWindow (0,-10)))
  151. , ((modm, xK_Down ), withFocused (keysMoveWindow (0,10)))
  152. , ((modm .|. shiftMask, xK_Left ), withFocused (keysResizeWindow (-10,0) (0,0)))
  153. , ((modm .|. shiftMask, xK_Right ), withFocused (keysResizeWindow (10,0) (0,0)))
  154. , ((modm .|. shiftMask, xK_Up ), withFocused (keysResizeWindow (0,-10) (0,0)))
  155. , ((modm .|. shiftMask, xK_Down ), withFocused (keysResizeWindow (0,10) (0,0)))
  156. -- , ((modm .|. controlMask, xK_y ), withFocused (keysMoveWindowTo (0,16) (0,0)))
  157. , ((modm .|. controlMask, xK_y ), withFocused (keysMoveWindowTo (0,17) (0,0)))
  158. -- , ((modm .|. controlMask, xK_u ), withFocused (keysMoveWindowTo (1362,16) (1,0)))
  159. , ((modm .|. controlMask, xK_u ), withFocused (keysMoveWindowTo (1362,17) (1,0)))
  160. , ((modm .|. controlMask, xK_b ), withFocused (keysMoveWindowTo (0,764) (0,1)))
  161. , ((modm .|. controlMask, xK_n ), withFocused (keysMoveWindowTo (1362,764) (1,1)))
  162. , ((modm .|. controlMask, xK_Return ), withFocused (keysMoveWindowTo (681,382) (0.5,0.5)))
  163. , ((modm, xK_s ), namedScratchpadAction myScratchpads "cmus")
  164. , ((modm, xK_d ), namedScratchpadAction myScratchpads "terminal")
  165. ]
  166. ++
  167. --
  168. -- mod-[1..9], Switch to workspace N
  169. -- mod-shift-[1..9], Move client to workspace N
  170. --
  171. [((m .|. modm, k), windows $ f i)
  172. -- | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  173. | (i, k) <- zip (XMonad.workspaces conf) [xK_grave, xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9, xK_0, xK_minus, xK_equal]
  174. , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
  175. ++
  176. --
  177. -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
  178. -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
  179. --
  180. [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
  181. | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
  182. , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
  183. ------------------------------------------------------------------------
  184. -- Mouse bindings: default actions bound to mouse events
  185. --
  186. myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $
  187. -- mod-button1, Set the window to floating mode and move by dragging
  188. [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w
  189. >> windows W.shiftMaster))
  190. -- mod-button2, Raise the window to the top of the stack
  191. , ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
  192. -- mod-button3, Set the window to floating mode and resize by dragging
  193. , ((modm, button3), (\w -> focus w >> mouseResizeWindow w
  194. >> windows W.shiftMaster))
  195. -- you may also bind events to the mouse scroll wheel (button4 and button5)
  196. ]
  197. ------------------------------------------------------------------------
  198. -- Layouts:
  199. -- You can specify and transform your layouts by modifying these values.
  200. -- If you change layout bindings be sure to use 'mod-shift-space' after
  201. -- restarting (with 'mod-q') to reset your layout state to the new
  202. -- defaults, as xmonad preserves your old layout settings by default.
  203. --
  204. -- The available layouts. Note that each layout is separated by |||,
  205. -- which denotes layout choice.
  206. --
  207. myLayout = avoidStruts
  208. $ smartBorders
  209. -- $ onWorkspace "1" (f ||| b ||| e ||| m ||| t ||| r ||| g ||| c ||| s)
  210. $ onWorkspace "2" (e ||| b ||| m ||| f ||| t ||| r ||| g ||| c ||| s)
  211. $ onWorkspace "5" (gi)
  212. $ onWorkspace "8" (fi)
  213. (b ||| e ||| m ||| f ||| t ||| r ||| g ||| c ||| s)
  214. where
  215. --
  216. e = renamed [Replace "E"] (smartSpacing 2 tiled)
  217. -- e = renamed [Replace "E"] (tiled)
  218. m = renamed [Replace "M"] (smartSpacing 2 $ Mirror tiled)
  219. -- m = renamed [Replace "M"] (Mirror tiled)
  220. f = renamed [Replace "F"] (Full)
  221. b = renamed [Replace "B"] (tabbedBottom shrinkText myTabConfig)
  222. t = renamed [Replace "T"] (smartSpacing 2 $ TwoPane 0.01 0.5)
  223. -- t = renamed [Replace "T"] (TwoPane 0.01 0.5)
  224. -- t = renamed [Replace "T"] (reflectHoriz $ combineTwo (spacing 2 $ TwoPane 0.01 0.5) (reflectHoriz $ tabbedBottom shrinkText myTabConfig) (tabbedBottom shrinkText myTabConfig))
  225. -- t = renamed [Replace "T"] (reflectHoriz $ combineTwo (TwoPane 0.01 0.5) (reflectHoriz $ tabbedBottom shrinkText myTabConfig) (tabbedBottom shrinkText myTabConfig))
  226. r = renamed [Replace "R"] (smartSpacing 2 $ Mirror $ TwoPane 0.01 0.5)
  227. -- r = renamed [Replace "R"] (Mirror $ TwoPane 0.01 0.5)
  228. g = renamed [Replace "G"] (smartSpacing 2 Grid)
  229. -- g = renamed [Replace "G"] (Grid)
  230. c = renamed [Replace "C"] (smartSpacing 2 $ ThreeColMid 1 0.01 0.5)
  231. -- c = renamed [Replace "C"] (ThreeColMid 1 0.01 0.5)
  232. s = renamed [Replace "S"] (smartSpacing 2 $ StackTile 1 0.01 0.5)
  233. -- s = renamed [Replace "S"] (StackTile 1 0.01 0.5)
  234. gi = renamed [Replace "GI"] (smartSpacing 2 $ withIM 0.17 (Role "roster") (GridRatio 1))
  235. -- gi = renamed [Replace "GI"] (withIM 0.16 (Role "roster") (GridRatio 1))
  236. fi = renamed [Replace "FI"] (smartSpacing 2 $ withIM 0.15 (Role "gimp-toolbox") $ reflectHoriz $ withIM 0.175 (Role "gimp-dock") Full)
  237. -- fi = renamed [Replace "FI"] (withIM 0.15 (Role "gimp-toolbox") $ reflectHoriz $ withIM 0.175 (Role "gimp-dock") Full)
  238. -- default tiling algorithm partitions the screen into two panes
  239. tiled = Tall nmaster delta ratio
  240. -- The default number of windows in the master pane
  241. nmaster = 1
  242. -- Default proportion of screen occupied by master pane
  243. ratio = 0.5
  244. -- Percent of screen to increment by when resizing panes
  245. delta = 0.01
  246. ------------------------------------------------------------------------
  247. -- Window rules:
  248. -- Execute arbitrary actions and WindowSet manipulations when managing
  249. -- a new window. You can use this to, for example, always float a
  250. -- particular program, or have a client always appear on a particular
  251. -- workspace.
  252. --
  253. -- To find the property name associated with a program, use
  254. -- > xprop | grep WM_CLASS
  255. -- and click on the client you're interested in.
  256. --
  257. -- To match on the WM_NAME, you can use 'title' in the same way that
  258. -- 'className' and 'resource' are used below.
  259. --
  260. myManageHook = namedScratchpadManageHook myScratchpads <+> placeHook (smart (0.5,0.5)) <+> manageDocks <+> composeAll
  261. [ className =? "Xmessage" --> doFloat
  262. , className =? "feh" --> doFloat
  263. , className =? "MPlayer" --> doFloat
  264. , className =? "mpv" --> doFloat
  265. , className =? "ffplay" --> doFloat
  266. , className =? "Everlasting Summer.py" --> doFloat
  267. -- , className =? "Wine" --> doFloat
  268. , className =? "pokerth" --> doFloat
  269. , className =? "Xmag" --> doFloat
  270. , appName =? "Browser" --> doFloat
  271. , appName =? "explorer.exe" --> doFloat
  272. , className =? "Firefox" --> doShift "1"
  273. , className =? "Opera" --> doShift "1"
  274. , appName =? "term-1" --> doShift "2"
  275. , appName =? "term-2" --> doShift "2"
  276. , appName =? "term-3" --> doShift "2"
  277. , appName =? "term-4" --> doShift "2"
  278. , className =? "Geany" --> doShift "3"
  279. , className =? "Meld" --> doShift "3"
  280. , className =? "Pcmanfm" --> doShift "3"
  281. , className =? "XnView" --> doShift "4"
  282. , className =? "Deadbeef" --> doShift "4"
  283. , className =? "Puddletag" --> doShift "4"
  284. , className =? "Sonic Visualiser" --> doShift "4"
  285. , className =? "Gajim" --> doShift "5"
  286. , className =? "VirtualBox" --> doShift "6"
  287. , className =? "Zathura" --> doShift "7"
  288. , className =? "Gimp" --> doShift "8"
  289. , appName =? "foobar2000.exe" --> doShift "12"
  290. , isDialog --> doFloat
  291. , isFullscreen --> doFullFloat ]
  292. ------------------------------------------------------------------------
  293. -- Event handling
  294. -- * EwmhDesktops users should change this to ewmhDesktopsEventHook
  295. --
  296. -- Defines a custom handler function for X Events. The function should
  297. -- return (All True) if the default handler is to be run afterwards. To
  298. -- combine event hooks use mappend or mconcat from Data.Monoid.
  299. --
  300. myEventHook = fullscreenEventHook <+> docksEventHook
  301. ------------------------------------------------------------------------
  302. -- Status bars and logging
  303. -- Perform an arbitrary action on each internal state change or X event.
  304. -- See the 'XMonad.Hooks.DynamicLog' extension for examples.
  305. --
  306. myLogHook = return ()
  307. ------------------------------------------------------------------------
  308. -- Startup hook
  309. -- Perform an arbitrary action each time xmonad starts or is restarted
  310. -- with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize
  311. -- per-workspace layout choices.
  312. --
  313. -- By default, do nothing.
  314. myStartupHook = return ()
  315. ------------------------------------------------------------------------
  316. -- font
  317. --
  318. -- myFont = "-*-terminus-*-*-*-*-*-*-*-*-*-*-*-*"
  319. myFont = "xft:pragmatapro:size=9"
  320. ------------------------------------------------------------------------
  321. -- tabbed
  322. --
  323. myTabConfig = defaultTheme {
  324. activeColor = "#121212",
  325. inactiveColor = "#121212",
  326. activeBorderColor = "#121212",
  327. inactiveBorderColor = "#121212",
  328. activeTextColor = "#808080",
  329. inactiveTextColor = "#505050",
  330. fontName = myFont,
  331. decoHeight = 17
  332. }
  333. ------------------------------------------------------------------------
  334. -- statusbar
  335. --
  336. myBar = "xmobar"
  337. --
  338. myPP = xmobarPP {
  339. ppCurrent = xmobarColor "#808080" "" . wrap "" "",
  340. ppUrgent = xmobarColor "#7b3303" "" . wrap "" "",
  341. ppTitle = xmobarColor "#808080" "" . shorten 70,
  342. ppSep = xmobarColor "#808080" "" " "
  343. }
  344. --
  345. toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)
  346. ------------------------------------------------------------------------
  347. -- xp
  348. --
  349. myXPConfig = defaultXPConfig {
  350. font = myFont,
  351. bgColor = "#121212",
  352. fgColor = "#808080",
  353. bgHLight = "#121212",
  354. fgHLight = "#a67b07",
  355. promptBorderWidth = 0,
  356. position = Top,
  357. height = 17
  358. }
  359. ------------------------------------------------------------------------
  360. -- scratchpads
  361. --
  362. myScratchpads = [ NS "cmus" "urxvtc -e cmus" (title =? "cmus") (customFloating $ W.RationalRect 0.1 0.2 0.8 0.6)
  363. , NS "terminal" "urxvtc -name terminal" (appName =? "terminal") (customFloating $ W.RationalRect 0.2 0.3 0.6 0.4)
  364. ]
  365. ------------------------------------------------------------------------
  366. -- Now run xmonad with all the defaults we set up.
  367. -- Run xmonad with the settings you specify. No need to modify this.
  368. --
  369. main = xmonad =<< statusBar myBar myPP toggleStrutsKey defaults
  370. -- A structure containing your configuration settings, overriding
  371. -- fields in the default config. Any you don't override, will
  372. -- use the defaults defined in xmonad/XMonad/Config.hs
  373. --
  374. -- No need to modify this.
  375. --
  376. defaults = ewmh $ withUrgencyHook NoUrgencyHook defaultConfig {
  377. -- simple stuff
  378. terminal = myTerminal,
  379. focusFollowsMouse = myFocusFollowsMouse,
  380. clickJustFocuses = myClickJustFocuses,
  381. borderWidth = myBorderWidth,
  382. modMask = myModMask,
  383. workspaces = myWorkspaces,
  384. normalBorderColor = myNormalBorderColor,
  385. focusedBorderColor = myFocusedBorderColor,
  386. -- key bindings
  387. keys = myKeys,
  388. mouseBindings = myMouseBindings,
  389. -- hooks, layouts
  390. layoutHook = myLayout,
  391. manageHook = myManageHook,
  392. handleEventHook = myEventHook,
  393. logHook = myLogHook,
  394. startupHook = myStartupHook
  395. }
  396. $ cat .xmobarrc
  397. Config { font = "xft:pragmatapro:size=9"
  398. , bgColor = "#121212"
  399. , fgColor = "#353535"
  400. , position = Top
  401. , lowerOnStart = True
  402. , commands = [ Run StdinReader
  403. , Run Date "%d.%m.%Y %H:%M:%S" "date" 10
  404. , Run MultiCpu ["-w", "3", "-c", "0", "-L", "10", "-H", "50", "-l", "#505050", "-n", "#705b46", "-h", "#7b3303", "-t", "<total0> <total1>"] 10
  405. , Run Memory ["-w", "3", "-c", "0", "-L", "70", "-H", "90", "-l", "#505050", "-n", "#705b46", "-h", "#7b3303", "-t", "<usedratio>"] 50
  406. , Run Network "ppp0" ["-w", "5", "-c", "0", "-t", "<rx> <tx>"] 10
  407. , Run Wireless "wlan0" ["-w", "3", "-c", "0", "-t", "'<essid>' <quality>"] 50
  408. , Run Kbd [("us", "US"), ("ru", "RU")]
  409. , Run Com "vol.sh" [] "vol" 10
  410. , Run Battery ["-w", "3", "-c", "0", "-L", "15", "-H", "30", "-h", "#505050", "-n", "#705b46", "-l", "#7b3303", "-t", "<left>"] 600
  411. -- , Run Com "cmus-status.sh" [] "cmus" 10
  412. -- , Run Weather "ULLI" ["-t", "<tempC>°C"] 36000
  413. -- , Run Com "cut -f 1 $HOME/.foo.txt" [] "foo" 10
  414. ]
  415. , sepChar = "%"
  416. , alignSep = "}{"
  417. , template = " %StdinReader% }{ cpu %multicpu% mem %memory% net <fc=#505050>%ppp0%</fc> ess <fc=#505050>%wlan0wi%</fc> bat %battery% vol <fc=#505050>%vol%</fc> <fc=#808080>%kbd%</fc> <fc=#505050>%date%</fc> "
  418. }
  419.