Advertisement
Guest User

Untitled

a guest
Dec 18th, 2012
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.53 KB | None | 0 0
  1. -- Imports {{{
  2. import XMonad hiding ( (|||) )
  3. import Control.Monad (liftM2)
  4. -- Prompt
  5. import XMonad.Prompt
  6. import XMonad.Prompt.RunOrRaise (runOrRaisePrompt)
  7. import XMonad.Prompt.AppendFile (appendFilePrompt)
  8. import XMonad.Prompt.Man
  9. -- Hooks
  10. import XMonad.Operations
  11.  
  12. import System.IO
  13. import System.Exit
  14.  
  15. import XMonad.Util.Run
  16.  
  17. --Actions
  18. import XMonad.Actions.GridSelect
  19. import XMonad.Actions.WindowGo
  20. import XMonad.Actions.CycleWS
  21.  
  22. --Hooks
  23. import XMonad.Hooks.ManageDocks
  24. import XMonad.Hooks.ManageHelpers
  25. import XMonad.Hooks.SetWMName
  26. import XMonad.Hooks.DynamicLog
  27. import XMonad.Hooks.UrgencyHook
  28. import XMonad.Hooks.FadeInactive
  29. import XMonad.Hooks.EwmhDesktops
  30. import XMonad.Hooks.SetWMName
  31. import XMonad.Hooks.DynamicHooks
  32.  
  33. --Layouts
  34. import XMonad.Layout.NoBorders (smartBorders, noBorders)
  35. import XMonad.Layout.PerWorkspace (onWorkspace)
  36. import XMonad.Layout.Reflect (reflectHoriz)
  37. import XMonad.Layout.IM
  38. import XMonad.Layout.SimpleFloat
  39. import XMonad.Layout.Spacing
  40. import XMonad.Layout.Grid
  41. import XMonad.Layout.ResizableTile
  42. import XMonad.Layout.NoBorders
  43. import XMonad.Layout.Gaps
  44. import XMonad.Layout.Circle
  45. import XMonad.Layout.LayoutCombinators
  46. import XMonad.Layout.Tabbed
  47. import XMonad.Layout.Named
  48. import XMonad.Layout.Spiral
  49. import XMonad.Layout.DragPane
  50.  
  51. import qualified XMonad.StackSet as W
  52. import qualified Data.Map as M
  53. import XMonad.Util.NamedScratchpad
  54. import Data.Ratio ((%))
  55. import qualified Data.Map as M
  56. --}}}
  57.  
  58.  
  59.  
  60. -- Config {{{
  61. -- Define Terminal
  62. myTerminal = "urxvt"
  63. -- Define modMask
  64. modMask' :: KeyMask
  65. modMask' = mod4Mask
  66.  
  67. myFont = "-*-montecarlo-medium-r-normal-*-11-*-*-*-c-*-*-*"
  68. myDzenFGColor = "#555555"
  69. myDzenBGColor = "#222222"
  70. myNormalFGColor = "#ffffff"
  71. myNormalBGColor = "#0f0f0f"
  72. myFocusedFGColor = "#f0f0f0"
  73. myFocusedBGColor = "#333333"
  74. myUrgentFGColor = "#0099ff"
  75. myUrgentBGColor = "#0077ff"
  76. myIconFGColor = "#777777"
  77. myIconBGColor = "#0f0f0f"
  78. myPatternColor = "#1f1f1f"
  79. mySeperatorColor = "#555555"
  80. separatorColor = "#444444"
  81.  
  82. -- GSConfig options:
  83. myGSConfig = defaultGSConfig
  84. { gs_cellheight = 50
  85. , gs_cellwidth = 250
  86. , gs_cellpadding = 10
  87. --, gs_colorizer = ""
  88. , gs_font = "" ++ myFont ++ ""
  89. --, gs_navigate = ""
  90. --, gs_originFractX = ""
  91. --, gs_originFractY = ""
  92. }
  93.  
  94. -- Define workspaces
  95. myWorkspaces = ["1:main","2:web","3:dev","4:etc","5:tabed"]
  96. -- Dzen config
  97. myStatusBar = "dzen2 -x '0' -y '0' -w '300' -h '16' -ta 'l' -fg '#FFFFFF' -bg '#0f0f0f' -fn '-*-montecarlo-medium-r-normal-*-11-*-*-*-*-*-*-*'"
  98.  
  99. myTopStatusBar = "conky -c /home/balalaika/conkydzen | dzen2 -x '300' -w '1380' -h '16' -ta 'r' -bg '#0f0f0f' -fg '#FFFFFF' -fn '-*-montecarlo-medium-r-normal-*-11-*-*-*-*-*-*-*' -y '0'"
  100. myBitmapsDir = "/home/balalaika/.xmonad/dzen"
  101. --}}}
  102. -- Main {{{
  103. main = do
  104. dzenTopBar <- spawnPipe myStatusBar
  105. dzenBar <- spawnPipe myTopStatusBar
  106. spawn "sh /home/balalaika/.xmonad/autostart.sh"
  107. xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig
  108. { terminal = myTerminal
  109. , workspaces = myWorkspaces
  110. , borderWidth = myBorderWidth
  111. , keys = keys'
  112. , modMask = modMask'
  113. -- , mouseBindings = newMouse
  114. , startupHook = ewmhDesktopsStartup >> setWMName "LG3D"
  115. , layoutHook = layoutHook'
  116. , manageHook = manageHook' <+> dynamicMasterHook
  117. , logHook = myLogHook dzenTopBar
  118. , normalBorderColor = colorNormalBorder
  119. , focusedBorderColor = colorFocusedBorder
  120. }
  121. --}}}
  122.  
  123. --Scratchpad {{{
  124. scratchpads = [
  125. NS "transmission" "transmission-qt -r 127.0.0.1 -p 9091 -u login -w pass" (className =? "Transmission-qt") defaultFloating,
  126. --NS "ncmpcppf" "urxvt -e htop" (title =? "htop") defaultFloating,
  127. NS "keepassx" "keepassx" (className =? "Keepassx") defaultFloating ]
  128. -- }}}
  129. -- Hooks {{{
  130. -- ManageHook {{{
  131. manageHook' :: ManageHook
  132. manageHook' = (composeAll . concat $
  133. [ [resource =? r --> doIgnore | r <- myIgnores] -- ignore desktop
  134. , [className =? c --> doShift "3:dev" | c <- myDevs ] -- move devs to 3:dev
  135. , [className =? c --> doShift "2:web" | c <- myWebs ] -- move webs to 2:webs
  136. , [className =? c --> viewShift "4:etc" | c <- myEtc ] -- move etc to 4:etc
  137. , [className =? c --> doF(W.shift "5:IM") | c <- myIM ] -- move wines to wine
  138. , [className =? c --> doCenterFloat | c <- myFloats ] -- float my floats
  139. , [name =? n --> doCenterFloat | n <- myNames ] -- float my names
  140. , [isFullscreen --> myDoFullFloat ]
  141. ]) <+> namedScratchpadManageHook scratchpads
  142.  
  143. where
  144.  
  145. role = stringProperty "WM_WINDOW_ROLE"
  146. name = stringProperty "WM_NAME"
  147. viewShift = doF . liftM2 (.) W.greedyView W.shift
  148. -- classnames
  149. myFloats = ["feh","Nitrogen","ncmpcppf","keepassx","Keepassx","Skype","Lxappearance","Feh","Deluge","MPlayer","mplayer2","Zenity","VirtualBox","Xmessage","Save As...","XFontSel","Downloads","Nm-connection-editor","Vlc"]
  150. myWebs = ["Navigator","Chromium-browser","Shredder","Mail"]
  151. myEtc = ["Eclipse","eclipse","Netbeans","Foxit"]
  152. myIM = ["Pidgin","Skype"]
  153. myDevs = ["subl","Subl"]
  154.  
  155. -- resources
  156. myIgnores = ["trayer","panel"]
  157.  
  158. -- names
  159. myNames = ["Chromium Options","Delicious.com - Discover Yourself!"]
  160.  
  161. -- a trick for fullscreen but stil allow focusing of other WSs
  162. myDoFullFloat :: ManageHook
  163. myDoFullFloat = doF W.focusDown <+> doFullFloat
  164. -- }}}
  165. layoutHook' = customLayout
  166.  
  167. -- Bar
  168. --myLogHook :: Handle -> X ()
  169. myLogHook h = dynamicLogWithPP $ defaultPP
  170. {
  171. ppCurrent = dzenColor "#0099ff" "#0f0f0f" . pad
  172. , ppVisible = dzenColor "#white" "#0f0f0f" . pad
  173. , ppHidden = dzenColor "#b3b3b3" "#0f0f0f" . pad . noScratchPad -- haskell makes it so easy
  174. , ppHiddenNoWindows = dzenColor "#404040" "#0f0f0f" . pad
  175. , ppUrgent = dzenColor "red" "#F0f0f0f" . dzenStrip
  176. , ppWsSep = " "
  177. , ppSep = ""
  178. , ppLayout = dzenColor "#B07CBE" "#0f0f0f" .
  179. (\x -> case x of
  180. "Spacing 2 ResizableTall" -> " RT "
  181. "Mirror Spacing 2 ResizableTall" -> " MT "
  182. "Full" -> " F "
  183. -- "Full" -> "^i(" ++ myBitmapsDir ++ "/full.xbm)"
  184. -- "Simple Float" -> "~"
  185. "grid_named" -> " GN "
  186. _ -> x
  187. )
  188. --, ppTitle = (" " ++) . dzenColor "white" "#161616" . dzenEscape
  189. , ppTitle = \x -> ""
  190. , ppOutput = hPutStrLn h
  191. }
  192. where
  193. noScratchPad ws = if ws == "NSP" then "" else ws
  194. -- Layout
  195. -- gimpLayout = combineTwoP (TwoPane 0.04 0.82) (tabbedLayout) (Full) (Not (Role "gimp-toolbox"))
  196. customLayout = smartBorders $ avoidStruts $ onWorkspace "2:web" Full $ onWorkspace "4:etc" ( Circle ||| spiral (6/7) ||| Full ) $ onWorkspace "5:tabed" ( Full ||| gimpLayout) $ onWorkspace "3:dev" ( tabbedLayout ||| Full ||| Mirror tiled ) $ tiled ||| Mirror tiled ||| Circle ||| named "grid_named" grid
  197. where
  198. grid = spacing 2 $ Grid
  199. tiled = spacing 2 $ ResizableTall nmaster delta ratio []
  200. nmaster = 1
  201. delta = 3/100
  202. ratio = toRational (2/(1+sqrt(5)::Double))
  203. pidginRoster = And (ClassName "Pidgin") (Role "buddy_list")
  204. tabbedLayout = tabbedBottomAlways shrinkText defaultTheme
  205. gimpLayout = tabbedLayout ****||* Full
  206. --}}}
  207. -- Theme {{{
  208. -- Color names are easier to remember:
  209. colorOrange = "#ff7701"
  210. colorDarkGray = "#171717"
  211. colorPink = "#e3008d"
  212. colorGreen = "#0099ff"
  213. colorBlue = "#008dd5"
  214. colorYellow = "#fee100"
  215. colorWhite = "#cfbfad"
  216.  
  217. myBorderWidth = 1
  218. colorNormalBorder = "#0f0f0f"
  219. colorFocusedBorder = "#404040"
  220. barFont = "terminus"
  221. barXFont = "inconsolata:size=14"
  222. xftFont = "xft: terminus-14"
  223. --}}}
  224. -- Prompt Config {{{
  225. mXPConfig :: XPConfig
  226. mXPConfig =
  227. defaultXPConfig { font = barFont
  228. , bgColor = colorDarkGray
  229. , fgColor = colorGreen
  230. , bgHLight = colorGreen
  231. , fgHLight = colorDarkGray
  232. , promptBorderWidth = 0
  233. , height = 20
  234. , historyFilter = deleteConsecutive
  235. }
  236.  
  237. -- Run or Raise Menu
  238. largeXPConfig :: XPConfig
  239. largeXPConfig = mXPConfig
  240. { font = xftFont
  241. , height = 15
  242. }
  243. -- }}}
  244. -- Mouse bindngs {{{
  245. -- myMouse x = [ (0, button3), (\w -> focus w >> kill) ]
  246. -- newMouse x = M.union (mouseBindings defaultConfig x) (M.fromList (myMouse x))
  247. myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
  248. [ ((modMask, button3), (\w -> focus w >> kill)) ] -- kill windows by mouse
  249. -- }}}
  250. -- Key mapping {{{
  251. keys' :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
  252. keys' conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
  253. [ ((modMask, xK_p ), runOrRaisePrompt largeXPConfig)
  254. , ((modMask .|. shiftMask, xK_n ), spawn "nitrogen /home/balalaika/D/Dropbox/gun")
  255. , ((0, xK_Print ), spawn "screenshot scr")
  256.  
  257. -- Programs
  258. , ((modMask, xK_Return ), spawn $ XMonad.terminal conf) -- spawn terminal
  259. , ((modMask, xK_Right ), spawn "ncmpcpp next")
  260. , ((modMask, xK_Left ), spawn "ncmpcpp prev")
  261. , ((modMask, xK_Down ), spawn "ncmpcpp pause")
  262. , ((modMask, xK_Up ), spawn "ncmpcpp play")
  263. , ((modMask, xK_n ), oneShotHook (className =? "URxvt") (doCenterFloat) >> spawn "urxvt -geometry 100x20 -e ncmpcpp")
  264. -- , ((modMask, xK_q ), spawn "urxvt -e ssh ubuntu") -- go ssh conection
  265. , ((modMask, xK_F3 ), spawn "amixer -q set Master toggle")
  266. , ((modMask, xK_F1 ), spawn "amixer set 'Master' 5dB- unmute > /dev/null")
  267. , ((modMask, xK_F2 ), spawn "amixer set 'Master' 5dB+ unmute > /dev/null")
  268. -- , ((modMask, xK_t ), spawn "/home/riso/Dropbox/scripts/translater > /dev/null")
  269. , ((modMask, xK_e ), spawn "urxvt -e mc -S xoria256")
  270. , ((modMask, xK_F4 ), spawn "sudo halt")
  271. -- , ((mod1Mask, xK_F3 ), spawn "sudo reboot")
  272. , ((modMask, xK_w ), runOrRaise "chromium" (className =? "Chromium-browser"))
  273. -- , ((modMask, xK_s ), runOrRaise "skype" (className =? "Skype"))
  274.  
  275. -- layouts
  276. , ((modMask, xK_c), sendMessage $ JumpToLayout "Circle") -- set circle layout
  277. , ((modMask .|. shiftMask, xK_g), sendMessage $ JumpToLayout "grid_named") -- set grid layout
  278. , ((modMask, xK_j), windows W.focusDown) -- move focus to the next window
  279. , ((modMask, xK_k), windows W.focusUp) -- move focus to the previous window
  280. , ((modMask, xK_m), windows W.swapMaster) -- swap the focused window and the master window
  281. , ((modMask, xK_g), goToSelected myGSConfig) -- display grid select and go to selected window
  282. , ((modMask .|. shiftMask, xK_j), windows W.swapDown) -- swap the focused window with the next window
  283. , ((modMask .|. shiftMask, xK_k), windows W.swapUp) -- swap the focused window with the previous window
  284. , ((modMask .|. shiftMask, xK_l), sendMessage Expand) -- expand the master area
  285. , ((modMask .|. shiftMask, xK_h), sendMessage Shrink) -- shrink the master area
  286. , ((modMask, xK_z), sendMessage MirrorExpand)
  287. , ((modMask, xK_a ), sendMessage MirrorShrink)
  288. , ((modMask, xK_space ), sendMessage NextLayout)
  289. , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) -- reset layout on current desktop to default
  290. , ((modMask, xK_b ), sendMessage ToggleStruts)
  291. , ((mod1Mask, xK_Tab ), windows W.focusDown) -- move focus to next window
  292. , ((mod1Mask, xK_x ), kill) -- kill selected window
  293. , ((modMask .|. shiftMask, xK_j ), windows W.swapDown) -- swap the focused window with the next window
  294. , ((modMask .|. shiftMask, xK_k ), windows W.swapUp) -- swap the focused window with the previous window
  295. , ((modMask .|. shiftMask, xK_t ), withFocused $ windows . W.sink) -- Push window back into tiling
  296.  
  297. -- workspaces
  298. , ((mod1Mask .|. controlMask, xK_Right ), nextWS)
  299. , ((mod1Mask .|. shiftMask, xK_Right ), shiftToNext)
  300. , ((mod1Mask .|. controlMask, xK_Left ), prevWS)
  301. , ((mod1Mask .|. shiftMask, xK_Left ), shiftToPrev)
  302. , ((modMask, xK_Escape), myToggle)
  303.  
  304. -- quit
  305. --, ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
  306. , ((modMask .|. shiftMask, xK_q ), spawn "killall trayer && xmonad --restart")
  307. -- MAN
  308. , ((mod1Mask, xK_F1), manPrompt defaultXPConfig)
  309. -- scratchpad
  310. , ((modMask, xK_t ), namedScratchpadAction scratchpads "transmission")
  311. -- , ((modMask, xK_n ), namedScratchpadAction scratchpads "ncmpcppf")
  312. , ((modMask, xK_z ), namedScratchpadAction scratchpads "keepassx")
  313. ]
  314. ++
  315. [((m .|. modMask, k), windows $ f i)
  316. | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  317. , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
  318.  
  319. where
  320. myToggle = windows $ W.view =<< W.tag . head . filter
  321. ((\x -> x /= "NSP" && x /= "SP") . W.tag) . W.hidden
  322.  
  323. --}}}
  324. -- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement