Advertisement
Guest User

xmonad.hs

a guest
Dec 21st, 2011
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 19.83 KB | None | 0 0
  1. --------------------------------------------------------------------------------------------
  2.  
  3. -- ~/.xmonad/xmonad.hs                                                                    --
  4.  
  5. -- validate syntax: xmonad --recompile                                                    --
  6.  
  7. --------------------------------------------------------------------------------------------
  8.  
  9. -- author: nnoell <nnoell3[at]gmail.com>                                                  --
  10.  
  11. -- credit: milomouse     -> copied about 60% of his xmonad.hs. Too many thanks to mention --
  12.  
  13. --         and1          -> config used as my starting grounds                            --
  14.  
  15. --         count-corrupt -> copied clickable workspaces and clickable layout swithcher    --
  16.  
  17. --------------------------------------------------------------------------------------------
  18.  
  19.  
  20.  
  21. -- Misc
  22.  
  23. {-# LANGUAGE DeriveDataTypeable, NoMonomorphismRestriction, TypeSynonymInstances, MultiParamTypeClasses #-}
  24.  
  25.  
  26.  
  27. -- Imported libraries
  28.  
  29. import XMonad
  30.  
  31. import XMonad.Core
  32.  
  33. import XMonad.Layout
  34.  
  35. import XMonad.Layout.IM
  36.  
  37. import XMonad.Layout.Gaps
  38.  
  39. import XMonad.Layout.Named
  40.  
  41. import XMonad.Layout.Tabbed
  42.  
  43. import XMonad.Layout.OneBig
  44.  
  45. import XMonad.Layout.Master
  46.  
  47. import XMonad.Layout.Reflect
  48.  
  49. import XMonad.Layout.MosaicAlt
  50.  
  51. import XMonad.Layout.NoBorders (noBorders,smartBorders,withBorder)
  52.  
  53. import XMonad.Layout.ResizableTile
  54.  
  55. import XMonad.Layout.MultiToggle
  56.  
  57. import XMonad.Layout.MultiToggle.Instances
  58.  
  59. import XMonad.Layout.PerWorkspace (onWorkspace)
  60.  
  61. import XMonad.Layout.Minimize
  62.  
  63. import XMonad.StackSet (RationalRect (..), currentTag)
  64.  
  65. import XMonad.Hooks.DynamicLog
  66.  
  67. import XMonad.Hooks.ManageDocks (avoidStruts,avoidStrutsOn,manageDocks)
  68.  
  69. import XMonad.Hooks.ManageHelpers
  70.  
  71. import XMonad.Hooks.UrgencyHook
  72.  
  73. import XMonad.Hooks.EwmhDesktops
  74.  
  75. import XMonad.Hooks.SetWMName
  76.  
  77. import XMonad.Prompt
  78.  
  79. import XMonad.Prompt.Shell
  80.  
  81. import XMonad.Prompt.XMonad
  82.  
  83. import XMonad.Util.Cursor
  84.  
  85. import XMonad.Util.Run (spawnPipe)
  86.  
  87. import XMonad.Util.Scratchpad (scratchpadManageHook, scratchpadSpawnActionCustom)
  88.  
  89. import XMonad.Util.NamedScratchpad
  90.  
  91. import XMonad.Actions.CycleWS (nextWS, prevWS, toggleWS, toggleOrView)
  92.  
  93. import XMonad.Actions.GridSelect
  94.  
  95. import XMonad.Actions.FloatKeys
  96.  
  97. import Data.Monoid
  98.  
  99. import Data.List
  100.  
  101. import Graphics.X11.ExtraTypes.XF86
  102.  
  103. import System.Exit
  104.  
  105. import System.IO (Handle, hPutStrLn)
  106.  
  107. import qualified XMonad.StackSet as W
  108.  
  109. import qualified Data.Map as M
  110.  
  111. import qualified XMonad.Actions.FlexibleResize as Flex
  112.  
  113.  
  114.  
  115. -- Main
  116.  
  117. main :: IO ()
  118.  
  119. main = do
  120.  
  121.     workspaceBar            <- spawnPipe myWorkspaceBar
  122.  
  123. --  bottomStatusBar         <- spawnPipe myBottomStatusBar
  124.  
  125. --  topStatusBar            <- spawnPipe myTopStatusBar
  126.  
  127.     statusBar                   <- spawnPipe myStatusBar
  128.  
  129.     xmonad $ myUrgencyHook $ ewmh defaultConfig
  130.  
  131.         { terminal           = "urxvt"
  132.  
  133.         , modMask            = mod4Mask
  134.  
  135.         , focusFollowsMouse  = True
  136.  
  137.         , borderWidth        = 2
  138.  
  139.         , normalBorderColor  = myNormalBorderColor
  140.  
  141.         , focusedBorderColor = myFocusedBorderColor
  142.  
  143.         , layoutHook         = smartBorders (myLayoutHook)
  144.  
  145.         , workspaces         = myWorkspaces
  146.  
  147.         , manageHook         = manageDocks <+> myManageHook
  148.  
  149.         , logHook            = myLogHook >> (dynamicLogWithPP $ myDzenPP workspaceBar)
  150.  
  151.         , handleEventHook    = fullscreenEventHook
  152.  
  153.         , keys               = myKeys
  154.  
  155.         , mouseBindings      = myMouseBindings
  156.  
  157.         , startupHook        = myStartupHook
  158.  
  159.         }
  160.  
  161.  
  162.  
  163. -- Colors and fonts
  164.  
  165. myFont               = "-xos4-terminus-medium-r-normal-*-12-120-72-72-c-60-*-*"
  166.  
  167. dzenFont             = "-*-montecarlo-medium-r-normal-*-11-*-*-*-*-*-*-*"
  168.  
  169. --colorBlack           = "#161616" --Background (Dzen_BG)
  170.  
  171. colorBlack              = "#00181f"
  172.  
  173. colorBlackAlt        = "#005a74" --Black Xdefaults
  174.  
  175. colorGray            = "#444444" --Gray       (Dzen_FG2)
  176.  
  177. colorGrayAlt         = "#161616" --Gray dark
  178.  
  179. colorWhite           = "#a9a6af" --Foreground (Shell_FG)
  180.  
  181. colorWhiteAlt        = "#9d9d9d" --White dark (Dzen_FG)
  182.  
  183. colorMagenta         = "#8e82a2"
  184.  
  185. colorCyan               = "#04c6c6"
  186.  
  187. colorBlue            = "#0087cb"
  188.  
  189. colorRed             = "#d74b73"
  190.  
  191. colorGreen           = "#99cc66"
  192.  
  193. colorYellow             = "#b58900"
  194.  
  195. --myArrow              = "^fg(" ++ colorWhiteAlt ++ ")>^fg(" ++ colorBlue ++ ")>^fg(" ++ colorGray ++ ")>"
  196.  
  197. myArrow                 = ""
  198.  
  199. --myNormalBorderColor  = "#161616"
  200.  
  201. --myFocusedBorderColor = "#0f0f0f"
  202.  
  203. myNormalBorderColor  = "#002b37"
  204.  
  205. myFocusedBorderColor = "#102226"
  206.  
  207.  
  208.  
  209. -- Tab theme
  210.  
  211. myTabTheme = defaultTheme
  212.  
  213.     { fontName            = myFont
  214.  
  215.     , inactiveBorderColor = colorBlackAlt
  216.  
  217.     , inactiveColor       = colorBlack
  218.  
  219.     , inactiveTextColor   = colorGray
  220.  
  221.     , activeBorderColor   = colorGray
  222.  
  223.     , activeColor         = colorBlackAlt
  224.  
  225.     , activeTextColor     = colorWhiteAlt
  226.  
  227.     , urgentBorderColor   = colorGray
  228.  
  229.     , urgentTextColor     = colorGreen
  230.  
  231.     , decoHeight          = 14
  232.  
  233.     }
  234.  
  235.  
  236.  
  237. myXPConfig = defaultXPConfig
  238.  
  239.     { font                = myFont
  240.  
  241.     , bgColor             = colorBlack
  242.  
  243.     , fgColor             = colorWhite
  244.  
  245.     , bgHLight            = colorBlue
  246.  
  247.     , fgHLight            = colorWhite
  248.  
  249.     , borderColor         = colorGrayAlt
  250.  
  251.     , promptBorderWidth   = 1
  252.  
  253.     , height              = 16
  254.  
  255.     , position            = Top
  256.  
  257.     , historySize         = 100
  258.  
  259.     , historyFilter       = deleteConsecutive
  260.  
  261. --  , autoComplete           = Everything
  262.  
  263. --  , autoComplete        = Nothing
  264.  
  265.     }
  266.  
  267.  
  268.  
  269. -- GridSelect color scheme
  270.  
  271. myColorizer = colorRangeFromClassName
  272.  
  273.     (0x00,0x00,0x00) -- lowest inactive bg
  274.  
  275.     (0x60,0xA0,0xC0) -- highest inactive bg
  276.  
  277.     (0x34,0x75,0xAA) -- active bg
  278.  
  279.     (0xBB,0xBB,0xBB) -- inactive fg
  280.  
  281.     (0x00,0x00,0x00) -- active fg
  282.  
  283.     where
  284.  
  285.         black = minBound
  286.  
  287.         white = maxBound
  288.  
  289.  
  290.  
  291. -- GridSelect theme
  292.  
  293. myGSConfig colorizer = (buildDefaultGSConfig myColorizer)
  294.  
  295.     { gs_cellheight  = 50
  296.  
  297.     , gs_cellwidth   = 200
  298.  
  299.     , gs_cellpadding = 10
  300.  
  301.     , gs_font        = myFont
  302.  
  303.     }
  304.  
  305.  
  306.  
  307. -- Scratchpad (Alt+º)
  308.  
  309. manageScratchPad :: ManageHook
  310.  
  311. manageScratchPad = scratchpadManageHook (W.RationalRect (0) (1/50) (1) (3/4))
  312.  
  313. scratchPad = scratchpadSpawnActionCustom "urxvt -name scratchpad"
  314.  
  315.  
  316.  
  317. -- Transformers (Ctrl+f)
  318.  
  319. data TABBED = TABBED deriving (Read, Show, Eq, Typeable)
  320.  
  321. instance Transformer TABBED Window where
  322.  
  323.     transform TABBED x k = k (named "TS" (smartBorders (tabbedAlways shrinkText myTabTheme))) (\_ -> x)
  324.  
  325.  
  326.  
  327. -- StartupHook
  328.  
  329. myStartupHook = setWMName "LG3D" >> setDefaultCursor xC_left_ptr
  330.  
  331.  
  332.  
  333. -- LogHook (needed for running java apps)
  334.  
  335. myLogHook = ewmhDesktopsLogHook >> setWMName "LG3D"
  336.  
  337.  
  338.  
  339. -- UrgencyHook
  340.  
  341. myUrgencyHook = withUrgencyHook dzenUrgencyHook
  342.  
  343.     { args = ["-fn", dzenFont, "-bg", colorBlack, "-fg", colorGreen] }
  344.  
  345.  
  346.  
  347. -- StatusBars
  348.  
  349. --myWorkspaceBar, myBottomStatusBar, myTopStatusBar :: String
  350.  
  351. myWorkspaceBar, myStatusBar :: String
  352.  
  353. myWorkspaceBar    = "dzen2 -x '0' -y '0' -h '16' -w '890' -ta 'l' -fg '" ++ colorWhiteAlt ++ "' -bg '" ++ colorBlack ++ "' -fn '" ++ dzenFont ++ "' -p -e ''"
  354.  
  355. --myBottomStatusBar = "/home/zeus/.bin/bottomstatusbar.sh"
  356.  
  357. --myTopStatusBar    = "/home/zeus/.bin/topstatusbar.sh"
  358.  
  359. myStatusBar = "/home/zeus/.bin/bar.sh"
  360.  
  361.  
  362.  
  363. -- Workspaces
  364.  
  365. myWorkspaces :: [WorkspaceId]
  366.  
  367. myWorkspaces = --clickable $ --clickable workspaces now declared in myDzenPP
  368.  
  369.     ["1:MAIN"  --0
  370.  
  371.     ,"2:WEB"  --1
  372.  
  373.     ,"3:CODE"  --2
  374.  
  375.     ,"4:READ"  --3
  376.  
  377.     ,"5"  --4
  378.  
  379.     ,"6"  --5
  380.  
  381.     ,"7"  --6
  382.  
  383.     ]
  384.  
  385. --  where clickable l = [ "^ca(1,xdotool key super+" ++ show (n) ++ ")" ++ ws ++ "^ca()" |
  386.  
  387. --      (i,ws) <- zip [1..] l,
  388.  
  389. --      let n = if i == 10 then 0 else i ]
  390.  
  391.  
  392.  
  393. -- Layout hook
  394.  
  395. myLayoutHook = id
  396.  
  397.     $ gaps [(U,16), (D,0), (L,0), (R,0)]
  398.  
  399.     $ avoidStruts
  400.  
  401.     $ minimize
  402.  
  403.     $ mkToggle (single TABBED)
  404.  
  405.     $ mkToggle (single MIRROR)
  406.  
  407.     $ mkToggle (single REFLECTX)
  408.  
  409.     $ mkToggle (single REFLECTY)
  410.  
  411.     $ onWorkspace (myWorkspaces !! 1) allLayouts  --Workspace 1 layouts
  412.  
  413.     $ onWorkspace (myWorkspaces !! 2) webLayouts --Workspace 2 layouts
  414.  
  415.     $ onWorkspace (myWorkspaces !! 3) codeLayouts --Workspace 3 layouts
  416.  
  417. --  $ onWorkspace (myWorkspaces !! 5) chatLayouts --Workspace 4 layouts
  418.  
  419.     $ allLayouts
  420.  
  421.     where
  422.  
  423.         allLayouts  = myTile ||| myObig ||| myMirr ||| myMosA ||| myTabM
  424.  
  425.         webLayouts  = myTabs ||| myTabM ||| myObig
  426.  
  427.         codeLayouts = myTabM ||| myTile
  428.  
  429. --      chatLayouts = myChat
  430.  
  431.         --Layouts
  432.  
  433.         myTile = named "T"  (smartBorders (ResizableTall 1 0.03 0.5 []))
  434.  
  435.         myMirr = named "MT" (smartBorders (Mirror myTile))
  436.  
  437.         myMosA = named "M"  (smartBorders (MosaicAlt M.empty))
  438.  
  439.         myObig = named "O"  (smartBorders (OneBig 0.75 0.65))
  440.  
  441.         myTabs = named "TS" (smartBorders (tabbed shrinkText myTabTheme))
  442.  
  443.         myTabM = named "TM" (smartBorders (mastered 0.01 0.4 $ (tabbed shrinkText myTabTheme)))
  444.  
  445. --      myChat = named "C"  (withIM (0.20) (Title "Buddy List") $ Mirror myTile)
  446.  
  447.  
  448.  
  449. -- Manage hook
  450.  
  451. myManageHook :: ManageHook
  452.  
  453. myManageHook = (composeAll . concat $
  454.  
  455.     [ [resource     =? r     --> doIgnore                             | r <- myIgnores] --ignore desktop
  456.  
  457.     , [className    =? c     --> doShift (myWorkspaces !! 1)          | c <- myWebS   ] --move myWebS windows to workspace 1 by classname
  458.  
  459. --  , [className    =? c     --> doShift (myWorkspaces !! 5)          | c <- myChatS  ] --move myChatS windows to workspace 4 by classname
  460.  
  461.     , [className    =? c     --> doShift (myWorkspaces !! 3)          | c <- myGfxS   ] --move myGfxS windows to workspace 4 by classname
  462.  
  463.     , [className     =? c        --> doShift (myWorkspaces !! 3)                | c <- myReadS   ] -- move myReadS windows to workspace 5 by classname
  464.  
  465.     , [className    =? c     --> doShiftAndGo (myWorkspaces !! 5)     | c <- myGameS  ] --move myGameS windows to workspace 5 by classname
  466.  
  467.     , [className    =? c     --> doCenterFloat                        | c <- myFloatCC] --float center geometry by classname
  468.  
  469.     , [name         =? n     --> doCenterFloat                        | n <- myFloatCN] --float center geometry by name
  470.  
  471.     , [name         =? n     --> doSideFloat NW                       | n <- myFloatSN] --float side NW geometry by name
  472.  
  473.     , [className    =? c     --> doF W.focusDown                      | c <- myFocusDC] --dont focus on launching by classname
  474.  
  475. --  , [isFullscreen          --> doF W.focusDown <+> doFullFloat]
  476.  
  477.     , [isFullscreen          --> doFullFloat]
  478.  
  479. --  , [isFullscreen -?> doFullFloat ]
  480.  
  481.     ]) <+> manageScratchPad
  482.  
  483.     where
  484.  
  485.         doShiftAndGo ws = doF (W.greedyView ws) <+> doShift ws
  486.  
  487.         role            = stringProperty "WM_WINDOW_ROLE"
  488.  
  489.         name            = stringProperty "WM_NAME"
  490.  
  491.         myIgnores       = ["desktop","desktop_window"]
  492.  
  493.         myWebS          = ["Chrome","Firefox", "Luakit" ]
  494.  
  495.         myGfxS          = ["gimp-2.6", "Gimp-2.6", "Gimp", "gimp", "GIMP"]
  496.  
  497.         myChatS         = ["Pidgin", "Xchat", "weechat 0.3.6" ]
  498.  
  499.         myGameS         = ["zsnes", "jpcsp-MainGUI", "Desmume"]
  500.  
  501.         myReadS          = ["Zathura", "Epdfview" ]
  502.  
  503.         myFloatCC       = ["MPlayer", "XFontSel", "XCalc", "XClock", "Nitrogen", "Downloads"]
  504.  
  505.         myFloatCN       = ["ePSXe - Enhanced PSX emulator", "Seleccione Archivo", "Config Video", "Testing plugin", "Config Sound", "Config Cdrom", "Config Bios", "Config Netplay", "Config Memcards", "About ePSXe", "Config Controller", "Config Gamepads", "Select one or more files to open", "Add media", "Choose a file", "Open Image", "File Operation Progress", "Firefox Preferences", "Preferences", "Search Engines", "Set up sync", "Passwords and Exceptions", "Autofill Options", "Rename File", "Copying files", "Moving files", "File Properties", "Replace", ""]
  506.  
  507.         myFloatSN       = ["Event Tester"]
  508.  
  509.         myFocusDC       = ["Event Tester", "Notify-osd"]
  510.  
  511.  
  512.  
  513. -- myWorkspaceBar config
  514.  
  515. myDzenPP h = defaultPP
  516.  
  517.     { ppOutput          = hPutStrLn h
  518.  
  519.     , ppSort            = fmap (namedScratchpadFilterOutWorkspace.) (ppSort defaultPP) -- hide "NSP" from workspace list
  520.  
  521.     , ppOrder           = \(ws:l:t:_) -> [ws,l,t]
  522.  
  523.     , ppExtras          = []
  524.  
  525.     , ppSep             = "^fg(" ++ colorGray ++ ")|"
  526.  
  527.     , ppWsSep           = ""
  528.  
  529.     , ppCurrent         = dzenColor colorYellow     colorBlack . pad
  530.  
  531. --  , ppUrgent          = dzenColor colorGreen    colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  532.  
  533.     , ppUrgent          = dzenColor colorGreen    colorBlack . pad
  534.  
  535. --  , ppVisible         = dzenColor colorGray     colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  536.  
  537.     , ppVisible         = dzenColor colorBlackAlt     colorBlack . pad
  538.  
  539. --  , ppHidden          = dzenColor colorWhiteAlt colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  540.  
  541.     , ppHidden          = dzenColor colorBlackAlt colorBlack . pad
  542.  
  543. --  , ppHiddenNoWindows = dzenColor colorGray     colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  544.  
  545.     , ppHiddenNoWindows = dzenColor colorGray     colorBlack . pad
  546.  
  547.     , ppTitle             = dzenColor colorWhiteAlt colorBlack . pad .
  548.  
  549. --  , ppTitle           = dzenColor colorWhiteAlt colorBlack . pad . wrapClickTitle .
  550.  
  551.         (\x -> if null x
  552.  
  553.             then "HI THERE! " ++ myArrow ++ ""
  554.  
  555.             else "" ++ shorten 85 x ++ " " ++ myArrow ++ ""
  556.  
  557.         ) . dzenEscape
  558.  
  559.     , ppLayout          = dzenColor colorCyan     colorBlack . pad . wrapClickLayout .
  560.  
  561.         (\x -> case x of
  562.  
  563.             "Minimize T"                    -> "ReTall"
  564.  
  565.             "Minimize O"                    -> "OneBig"
  566.  
  567.             "Minimize TS"                   -> "Tabbed"
  568.  
  569.             "Minimize TM"                   -> "Master"
  570.  
  571.             "Minimize M"                    -> "Mosaic"
  572.  
  573.             "Minimize MT"                   -> "Mirror"
  574.  
  575.             "Minimize G"                    -> "Mosaic"
  576.  
  577.             "Minimize C"                    -> "Mirror"
  578.  
  579.             "Minimize ReflectX T"           -> "^fg(" ++ colorGreen ++ ")ReTall X^fg()"
  580.  
  581.             "Minimize ReflectX O"           -> "^fg(" ++ colorGreen ++ ")OneBig X^fg()"
  582.  
  583.             "Minimize ReflectX TS"          -> "^fg(" ++ colorGreen ++ ")Tabbed X^fg()"
  584.  
  585.             "Minimize ReflectX TM"          -> "^fg(" ++ colorGreen ++ ")Master X^fg()"
  586.  
  587.             "Minimize ReflectX M"           -> "^fg(" ++ colorGreen ++ ")Mosaic X^fg()"
  588.  
  589.             "Minimize ReflectX MT"          -> "^fg(" ++ colorGreen ++ ")Mirror X^fg()"
  590.  
  591.             "Minimize ReflectX G"           -> "^fg(" ++ colorGreen ++ ")Mosaic X^fg()"
  592.  
  593.             "Minimize ReflectX C"           -> "^fg(" ++ colorGreen ++ ")Mirror X^fg()"
  594.  
  595.             "Minimize ReflectY T"           -> "^fg(" ++ colorGreen ++ ")ReTall Y^fg()"
  596.  
  597.             "Minimize ReflectY O"           -> "^fg(" ++ colorGreen ++ ")OneBig Y^fg()"
  598.  
  599.             "Minimize ReflectY MT"          -> "^fg(" ++ colorGreen ++ ")Tabbed Y^fg()"
  600.  
  601.             "Minimize ReflectY TM"          -> "^fg(" ++ colorGreen ++ ")Master Y^fg()"
  602.  
  603.             "Minimize ReflectY M"           -> "^fg(" ++ colorGreen ++ ")Mosaic Y^fg()"
  604.  
  605.             "Minimize ReflectY MT"          -> "^fg(" ++ colorGreen ++ ")Mirror Y^fg()"
  606.  
  607.             "Minimize ReflectY G"           -> "^fg(" ++ colorGreen ++ ")Mosaic Y^fg()"
  608.  
  609.             "Minimize ReflectY C"           -> "^fg(" ++ colorGreen ++ ")Mirror Y^fg()"
  610.  
  611.             "Minimize ReflectX ReflectY T"  -> "^fg(" ++ colorGreen ++ ")ReTall XY^fg()"
  612.  
  613.             "Minimize ReflectX ReflectY O"  -> "^fg(" ++ colorGreen ++ ")OneBig XY^fg()"
  614.  
  615.             "Minimize ReflectX ReflectY TS" -> "^fg(" ++ colorGreen ++ ")Tabbed XY^fg()"
  616.  
  617.             "Minimize ReflectX ReflectY TM" -> "^fg(" ++ colorGreen ++ ")Master XY^fg()"
  618.  
  619.             "Minimize ReflectX ReflectY M"  -> "^fg(" ++ colorGreen ++ ")Mosaic XY^fg()"
  620.  
  621.             "Minimize ReflectX ReflectY MT" -> "^fg(" ++ colorGreen ++ ")Mirror XY^fg()"
  622.  
  623.             "Minimize ReflectX ReflectY G"  -> "^fg(" ++ colorGreen ++ ")Mosaic XY^fg()"
  624.  
  625.             "Minimize ReflectX ReflectY C"  -> "^fg(" ++ colorGreen ++ ")Mirror XY^fg()"
  626.  
  627.             _                               -> "^fg(" ++ colorGreen ++ ")" ++ x ++ "^fg()" --Only for Mirror
  628.  
  629.         )
  630.  
  631.     }
  632.  
  633.     where
  634.  
  635.         --clickable workspaces, layout and title (thanks to count-corrupt). Carefull, tabulations will be evaluated
  636.  
  637.         wrapClickLayout content = "^ca(1,xdotool key super+space)" ++ content ++ "^ca()"
  638.  
  639.         wrapClickTitle content = "^ca(1,xdotool key super+j)" ++ content ++ "^ca()"
  640.  
  641.         currentWsIndex w = case (elemIndex w myWorkspaces) of
  642.  
  643.             Nothing -> "1"
  644.  
  645.             Just n -> show (n+1)
  646.  
  647.         wrapClickWorkSpace (idx,str) = "^ca(1," ++ xdo "w;" ++ xdo index ++ ")" ++ "^ca(3," ++ xdo "e;" ++ xdo index ++ ")" ++ str ++ "^ca()^ca()"
  648.  
  649.             where
  650.  
  651.                 index = currentWsIndex idx
  652.  
  653.                 xdo key = "xdotool key super+" ++ key
  654.  
  655.  
  656.  
  657.  
  658.  
  659. -- {{{ Key bindings
  660.  
  661.  
  662.  
  663. myKeys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
  664.  
  665. myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
  666.  
  667.     [ ((mod1Mask, xK_space), spawn $ XMonad.terminal conf)
  668.  
  669. --  , ((mod1Mask, xK_p), shellPrompt myXPConfig)
  670.  
  671.     , ((mod1Mask, xK_p), spawn ("dmenu_run -fn " ++ dzenFont ++ " -nb '" ++ colorBlack ++ "' -nf '" ++ colorWhite ++ "' -sb '" ++ colorBlack ++ "' -sf '" ++ colorCyan ++ "'"))
  672.  
  673. --  , ((mod1Mask, xK_p), spawn ("dmenu_run -fn " ++ dzenFont ++ " -nb '#000000'"))
  674.  
  675.     , ((modMask, xK_g), goToSelected $ myGSConfig myColorizer)
  676.  
  677.     , ((mod1Mask, xK_f), spawn "firefox")
  678.  
  679.     , ((modMask, xK_q), kill)
  680.  
  681.     , ((modMask, xK_space), sendMessage NextLayout)
  682.  
  683.     , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) --Reset to default
  684.  
  685.     , ((modMask, xK_Tab), windows W.focusDown)
  686.  
  687.     , ((mod1Mask, xK_Tab), windows W.focusDown)
  688.  
  689.     , ((mod1Mask, xK_a), windows W.focusMaster)
  690.  
  691.     , ((modMask, xK_Return), windows W.swapMaster)
  692.  
  693.     , ((modMask, xK_Down), windows W.swapDown)
  694.  
  695.     , ((modMask, xK_Up), windows W.swapUp)
  696.  
  697.     , ((modMask .|. shiftMask, xK_Left), sendMessage Shrink)
  698.  
  699.     , ((modMask .|. shiftMask, xK_Right), sendMessage Expand)
  700.  
  701.     , ((modMask, xK_t), withFocused $ windows . W.sink) --Push window back into tiling
  702.  
  703.     , ((modMask .|. shiftMask, xK_t), rectFloatFocused) --Push window into float
  704.  
  705.     , ((modMask .|. shiftMask, xK_f), fullFloatFocused)                                        --Push window into full screen
  706.  
  707.     , ((modMask, xK_comma), sendMessage (IncMasterN 1)) --Increment the number of windows in the master area
  708.  
  709.     , ((modMask, xK_period), sendMessage (IncMasterN (-1))) --Deincrement the number of windows in the master area
  710.  
  711.     , ((modMask , xK_F1), spawn "xscreensaver-command -lock && xset dmps force off")                                   --Lock screen
  712.  
  713.     , ((modMask, xK_comma), toggleWS)--Toggle to the workspace displayed previously
  714.  
  715.     , ((mod1Mask .|. controlMask, xK_Left),  prevWS)--Move to previous Workspace
  716.  
  717.     , ((modMask, xK_Left), prevWS)
  718.  
  719.     , ((modMask, xK_Right), nextWS) --Move to next Workspace
  720.  
  721.     , ((mod1Mask .|. controlMask, xK_Right), nextWS)
  722.  
  723.    
  724.  
  725.     , ((0, xF86XK_AudioMute), spawn "amixer -c0 set Master toggle")                      --Mute/unmute volume
  726.  
  727.     , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -c0 set Master 2%+ unmute")                 --Raise volume
  728.  
  729.     , ((0, xF86XK_AudioLowerVolume), spawn "amixer -c0 set Master 2%- unmute")               --Lower volume
  730.  
  731.     ]
  732.  
  733.     ++
  734.  
  735.     [((m .|. modMask, k), windows $ f i)                                                       --Switch to n workspaces and send client to n workspaces
  736.  
  737.         | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  738.  
  739.         , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
  740.  
  741.     ++
  742.  
  743.     [((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))                --Switch to n screens and send client to n screens
  744.  
  745.         | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
  746.  
  747.         , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
  748.  
  749.     where
  750.  
  751.         fullFloatFocused = withFocused $ \f -> windows =<< appEndo `fmap` runQuery doFullFloat f
  752.  
  753.         rectFloatFocused = withFocused $ \f -> windows =<< appEndo `fmap` runQuery (doRectFloat $ RationalRect 0.05 0.05 0.9 0.9) f
  754.  
  755.  
  756.  
  757. -- Mouse bindings
  758.  
  759. myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
  760.  
  761.     [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w >> windows W.shiftMaster)) -- set the window to floating mode and move by dragging
  762.  
  763.     , ((modMask, button2), (\w -> focus w >> windows W.shiftMaster))                      -- raise the window to the top of the stack
  764.  
  765.     , ((modMask, button3), (\w -> focus w >> Flex.mouseResizeWindow w))                   -- set the window to floating mode and resize by dragging
  766.  
  767.     ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement