Guest User

Untitled

a guest
Jul 17th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.33 KB | None | 0 0
  1. -- ~/.xmonad/xmonad.hs
  2. -- Imports {{{
  3. import XMonad
  4. -- Prompt
  5. import XMonad.Prompt
  6. import XMonad.Prompt.RunOrRaise (runOrRaisePrompt)
  7. import XMonad.Prompt.AppendFile (appendFilePrompt)
  8. import XMonad.Prompt.Ssh
  9. -- Hooks
  10. import XMonad.Operations
  11.  
  12. import System.IO
  13. import System.Exit
  14.  
  15. import XMonad.Util.Run
  16. import XMonad.Util.Scratchpad
  17.  
  18. import XMonad.Hooks.ManageDocks
  19. import XMonad.Hooks.ManageHelpers
  20. import XMonad.Hooks.SetWMName
  21. import XMonad.Hooks.DynamicLog
  22. import XMonad.Hooks.UrgencyHook
  23. import XMonad.Hooks.FadeInactive
  24. import XMonad.Hooks.EwmhDesktops
  25. import XMonad.Hooks.SetWMName
  26. import XMonad.Hooks.ServerMode
  27.  
  28. --import XMonad.Layout.NoBorders (smartBorders, noBorders)
  29. import XMonad.Layout.PerWorkspace (onWorkspace)
  30. import XMonad.Layout.Reflect (reflectHoriz)
  31. import XMonad.Layout.Maximize
  32. import XMonad.Layout.ToggleLayouts
  33. import XMonad.Layout.Grid
  34. import XMonad.Layout.IM
  35. import XMonad.Layout.SimplestFloat
  36. import XMonad.Layout.Spacing
  37. import XMonad.Layout.ResizableTile
  38. import XMonad.Layout.Gaps
  39.  
  40. -- Actions
  41. import XMonad.Actions.CycleWS
  42. import XMonad.Actions.CycleWindows
  43. import XMonad.Actions.Commands
  44.  
  45. import qualified XMonad.StackSet as W
  46. import qualified Data.Map as M
  47.  
  48. --}}}
  49.  
  50. -- Config {{{
  51. -- Define Terminal
  52. myTerminal = "urxvt"
  53. -- Define modMask
  54. modMask' :: KeyMask
  55. modMask' = mod4Mask
  56. -- Define workspaces
  57. myWorkspaces = ["1:www","2:dev","3:vbox","4:main","5:void","6:chat"]
  58. -- Dzen config
  59. myStatusBarLeft = "dzen2 -x '0' -y '0' -h '16' -w '960' -ta 'l' -fg '#cccccc' -bg '#111111' -fn 'ubuntu:size=9'"
  60. myStatusBarRight = "conky -c /home/bmartin/.xmonad/conky_topright_dzen | dzen2 -x '960' -y '0' -w '960' -h '16' -ta 'r' -bg '#111111' -fg '#cccccc' -fn 'ubuntu:size=9'"
  61. myStatusBarBottom = "conky -c /home/bmartin/.xmonad/conky_bottom_dzen | dzen2 -x '0' -y '1080' -w '1920' -h '16' -ta 'c' -bg '#111111' -fg '#cccccc' -fn 'ubuntu:size=9'"
  62. myBitmapsDir = "/home/bmartin/.xmonad/dzen"
  63. --}}}
  64. -- Main {{{
  65. main = do
  66. dzenTopBarLeft <- spawnPipe myStatusBarLeft
  67. dzenTopBarRight <- spawnPipe myStatusBarRight
  68. dzenBtmBar <- spawnPipe myStatusBarBottom
  69. spawn "sh /home/bmartin/.xmonad/autostart.sh"
  70. xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig
  71. { terminal = myTerminal
  72. , workspaces = myWorkspaces
  73. , keys = keys'
  74. , modMask = modMask'
  75. , startupHook = ewmhDesktopsStartup >> setWMName "LG3D"
  76. , layoutHook = layoutHook'
  77. , manageHook = manageHook'
  78. , handleEventHook = serverModeEventHook
  79. , logHook = myLogHook dzenTopBarLeft >> fadeInactiveLogHook 0xdddddddd >> setWMName "LG3D"
  80. , normalBorderColor = "#444444"
  81. , focusedBorderColor = "#bf7b26"
  82. }
  83. --}}}
  84.  
  85.  
  86. -- Hooks {{{
  87. -- ManageHook {{{
  88. manageHook' :: ManageHook
  89. manageHook' = (composeAll . concat $
  90. [ [resource =? r --> doIgnore | r <- myIgnores ] -- ignore desktop
  91. , [resource =? r --> doShift "2:dev" | r <- myDevs ] -- move devs to devs
  92. , [resource =? r --> doShift "6:chat" | r <- myChats ] -- move chats to chats
  93. , [className =? c --> myToggleFull | c <- myVBox ] -- toggle full layout with virtualbox
  94. , [className =? c --> doShift "1:www" | c <- myWebs ] -- move webs to webs
  95. , [className =? c --> doCenterFloat | c <- myCenterFloats ] -- float my center floats
  96. , [name =? n --> doCenterFloat | n <- myNames ] -- float my names
  97. , [className =? c --> doFloat | c <- myFloats ] -- float my floats
  98. , [isFullscreen --> myDoFullFloat ]
  99. ]) <+> myScratchPad
  100.  
  101. where
  102.  
  103. role = stringProperty "WM_WINDOW_ROLE"
  104. name = stringProperty "WM_NAME"
  105.  
  106. -- classnames
  107. myCenterFloats = ["MPlayer","Zenity","Xmessage","Save As...","XFontSel","Downloads","Nm-connection-editor","Pidgin","Shutdown-dialog.py"]
  108. myWebs = ["Google-chrome","Chromium"]
  109. myDevs = ["Redcar","gvim","tmuxdev"]
  110. myChats = ["Pidgin", "tmuxchat"]
  111. myVBox = ["VirtualBox"]
  112. myFloats = ["Gimp", "Gimp-2.6"]
  113.  
  114. -- resources
  115. myIgnores = ["desktop","desktop_window","notify-osd","stalonetray","trayer","dzen2"]
  116.  
  117. -- names
  118. myNames = ["bashrun","Google Chrome Options","Chromium Options"]
  119.  
  120. -- then define your scratchpad management separately:
  121. myScratchPad :: ManageHook
  122. myScratchPad = scratchpadManageHook (W.RationalRect l t w h)
  123.  
  124. where
  125.  
  126. h = 0.4 -- terminal height, 10%
  127. w = 1 -- terminal width, 100%
  128. t = 1 - h -- distance from top edge, 90%
  129. l = 1 - w -- distance from left edge, 0%
  130.  
  131. -- a trick for fullscreen but stil allow focusing of other WSs
  132. myDoFullFloat :: ManageHook
  133. myDoFullFloat = doF W.focusDown <+> doFullFloat
  134.  
  135. myToggleFull :: ManageHook
  136. myToggleFull = liftX (sendMessage ToggleLayout) >> idHook
  137. -- }}}
  138. layoutHook' = customLayout
  139.  
  140. -- Bar
  141. myLogHook :: Handle -> X ()
  142. myLogHook h = dynamicLogWithPP $ defaultPP
  143. {
  144. ppCurrent = dzenColor "#cccccc" "#111111" . pad
  145. , ppVisible = dzenColor "#bf7b26" "#111111" . pad
  146. , ppHidden = dzenColor "#bf7b26" "#111111" . pad . noScratchPad
  147. , ppHiddenNoWindows = dzenColor "#444444" "#111111" . pad . noScratchPad
  148. , ppUrgent = dzenColor "#af0000" "#111111" . pad . dzenStrip
  149. , ppWsSep = " "
  150. , ppSep = " | "
  151. , ppLayout = dzenColor "#bf7b26" "#111111" .
  152. (\x -> case x of
  153. "Maximize ResizableTall" -> "^i(" ++ myBitmapsDir ++ "/tall.xbm)"
  154. "Maximize Mirror ResizableTall" -> "^i(" ++ myBitmapsDir ++ "/mtall.xbm)"
  155. "Maximize Grid" -> "^i(" ++ myBitmapsDir ++ "/grid.xbm)"
  156. "Full" -> "^i(" ++ myBitmapsDir ++ "/full.xbm)"
  157. "SimplestFloat" -> "^i(" ++ myBitmapsDir ++ "/float.xbm)"
  158. _ -> x
  159. )
  160. , ppTitle = (" " ++) . dzenColor "#cccccc" "#111111" . dzenEscape
  161. , ppOutput = hPutStrLn h
  162. }
  163.  
  164. where
  165. noScratchPad ws = if ws == "NSP" then "" else ws -- Hide NSP workspace (ScratchPad)
  166.  
  167. -- Layout
  168. customLayout = gaps [(D,16)] $ avoidStruts $ toggleLayouts Full (maximize (tiled)) ||| toggleLayouts Full (maximize ((Mirror tiled))) ||| toggleLayouts Full (maximize (Grid)) ||| Full ||| simplestFloat
  169. where
  170. --tiled = ResizableTall 1 (2/100) (1/2) []
  171. tiled = ResizableTall nmaster delta ratio []
  172. nmaster = 1
  173. delta = 2/100
  174. ratio = 1/2
  175. --}}}
  176. -- Theme {{{
  177. barXFont = "ubuntu:size=10"
  178. xftFont = "xft: ubuntu-10"
  179. --}}}
  180.  
  181. -- Prompt Config {{{
  182. mXPConfig :: XPConfig
  183. mXPConfig =
  184. defaultXPConfig { font = barXFont
  185. , bgColor = "#111111"
  186. , fgColor = "#cccccc"
  187. , bgHLight = "#bf7b26"
  188. , fgHLight = "#111111"
  189. , promptBorderWidth = 0
  190. , height = 16
  191. , historyFilter = deleteConsecutive
  192. }
  193.  
  194. -- Run or Raise Menu
  195. largeXPConfig :: XPConfig
  196. largeXPConfig = mXPConfig
  197. { font = xftFont
  198. , height = 16
  199. }
  200. -- }}}
  201. -- Key mapping {{{
  202. keys' :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
  203. keys' conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
  204. [ ((mod1Mask, xK_x ), runOrRaisePrompt largeXPConfig)
  205. , ((mod1Mask .|. controlMask, xK_s ), sshPrompt largeXPConfig)
  206. , ((0, xK_Print ), spawn "scrot '%m-%d-%Y_%S_$wx$h.png'")
  207.  
  208. -- Programs
  209. , ((mod1Mask, xK_t ), spawn $ XMonad.terminal conf) -- spawn terminal
  210. , ((mod1Mask, xK_s ), scratchpadSpawnActionTerminal myTerminal) -- spawn scratchpad
  211. , ((mod1Mask, xK_d ), spawn "urxvt -name tmuxdev -e tmux new -s dev")
  212. , ((mod1Mask .|. shiftMask, xK_d ), spawn "urxvt -name tmuxdev")
  213. , ((mod1Mask, xK_c ), spawn "urxvt -name tmuxchat -e tmux new -s chat weechat-curses")
  214. , ((mod1Mask .|. shiftMask, xK_c ), spawn "urxvt -name tmuxchat")
  215. , ((mod1Mask, xK_w ), spawn "chromium")
  216. , ((mod1Mask .|. shiftMask, xK_w ), spawn "firefox")
  217. , ((mod1Mask, xK_r ), spawn "redcar")
  218. , ((mod1Mask, xK_e ), spawn "thunderbird")
  219. , ((mod1Mask, xK_v ), spawn "VirtualBox")
  220. , ((mod1Mask, xK_g ), spawn "gvim")
  221. , ((mod1Mask, xK_f ), spawn "thunar")
  222. , ((mod1Mask, xK_p ), spawn "pidgin")
  223. , ((mod1Mask, xK_b ), spawn "dbus-launch brasero")
  224. , ((modMask, xK_Up ), spawn "sonata pp")
  225. , ((modMask, xK_Right ), spawn "sonata next")
  226. , ((modMask, xK_Left ), spawn "sonata prev")
  227. , ((mod1Mask, xK_q ), spawn "shutdown-dialog.py ~/.xmonad/sendCommand 33")
  228.  
  229. -- Media Keys
  230. , ((0, 0x1008ff12 ), spawn "/home/bmartin/.bin/changevol -t") -- XF86AudioMute
  231. , ((0, 0x1008ff11 ), spawn "/home/bmartin/.bin/changevol -d 5") -- XF86AudioLowerVolume
  232. , ((0, 0x1008ff13 ), spawn "/home/bmartin/.bin/changevol -i 5") -- XF86AudioRaiseVolume
  233.  
  234. -- layouts
  235. , ((modMask, xK_BackSpace), focusUrgent) -- Move focus to urgent window
  236. , ((modMask, xK_space ), sendMessage NextLayout) -- Rotate through the available layout algorithms
  237. , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) -- reset layout on current desktop to default
  238. , ((modMask, xK_backslash), withFocused (sendMessage . maximizeRestore)) -- Temporarily yanks the focused window out of the layout to mostly fill the screen.
  239. , ((modMask .|. controlMask, xK_space ), sendMessage ToggleLayout) -- Toggle layout to Full
  240. , ((modMask, xK_b ), sendMessage ToggleStruts) -- Toggle the status bar gap. Use this binding with avoidStruts from Hooks.ManageDocks. See also the statusBar function from Hooks.DynamicLog.
  241. , ((modMask, xK_n ), refresh) -- Resize viewed windows to the correct size
  242. , ((mod1Mask, xK_Tab ), windows rotFocused') -- Move focus to the next window
  243. , ((modMask, xK_Tab ), windows W.focusDown) -- Move focus to the next window
  244. , ((modMask, xK_j ), windows W.focusDown) -- Move focus to the next window
  245. , ((modMask, xK_k ), windows W.focusUp ) -- Move focus to the previous window
  246. , ((modMask, xK_m ), windows W.focusMaster ) -- Move focus to the master window
  247. , ((modMask, xK_Return ), windows W.swapMaster) -- Swap the focused window and the master window
  248. , ((modMask .|. shiftMask, xK_j ), windows W.swapDown ) -- Swap the focused window with the next window
  249. , ((modMask .|. shiftMask, xK_k ), windows W.swapUp ) -- Swap the focused window with the previous window
  250. , ((modMask, xK_h ), sendMessage Shrink) -- Shrink the master area
  251. , ((modMask, xK_l ), sendMessage Expand) -- Expand the master area
  252. , ((modMask, xK_t ), withFocused $ windows . W.sink) -- Push window back into tiling
  253. , ((modMask, xK_comma ), sendMessage (IncMasterN 1)) -- Increment the number of windows in the master area
  254. , ((modMask, xK_period ), sendMessage (IncMasterN (-1))) -- Deincrement the number of windows in the master area
  255. , ((modMask .|. shiftMask, xK_c ), kill) -- kill selected window
  256.  
  257. -- workspaces
  258. , ((mod1Mask .|. controlMask, xK_Right ), nextWS)
  259. , ((mod1Mask .|. shiftMask, xK_Right ), shiftToNext)
  260. , ((mod1Mask .|. controlMask, xK_Left ), prevWS)
  261. , ((mod1Mask .|. shiftMask, xK_Left ), shiftToPrev)
  262.  
  263. -- quit, or restart
  264. , ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
  265. , ((modMask , xK_q ), restart "xmonad" True)
  266. , ((modMask .|. shiftMask, xK_r ), spawn "killall stalonetray wicd-client conky dzen2 && xmonad --recompile && xmonad --restart")
  267. ]
  268. ++
  269. -- mod-[1..9] %! Switch to workspace N
  270. -- mod-shift-[1..9] %! Move client to workspace N
  271. [((m .|. modMask, k), windows $ f i)
  272. | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  273. , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
  274.  
  275. --}}}
Add Comment
Please, Sign In to add comment