Guest User

Untitled

a guest
Dec 16th, 2011
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 24.38 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         = 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. colorBlackAlt        = "#1c1c1c" --Black Xdefaults
  172.  
  173. colorGray            = "#444444" --Gray       (Dzen_FG2)
  174.  
  175. colorGrayAlt         = "#161616" --Gray dark
  176.  
  177. colorWhite           = "#a9a6af" --Foreground (Shell_FG)
  178.  
  179. colorWhiteAlt        = "#9d9d9d" --White dark (Dzen_FG)
  180.  
  181. colorMagenta         = "#8e82a2"
  182.  
  183. colorCyan               = "#04c6c6"
  184.  
  185. colorBlue            = "#0087cb"
  186.  
  187. colorRed             = "#d74b73"
  188.  
  189. colorGreen           = "#99cc66"
  190.  
  191. --myArrow              = "^fg(" ++ colorWhiteAlt ++ ")>^fg(" ++ colorBlue ++ ")>^fg(" ++ colorGray ++ ")>"
  192.  
  193. myArrow                 = ""
  194.  
  195. myNormalBorderColor  = "#161616"
  196.  
  197. myFocusedBorderColor = "#0f0f0f"
  198.  
  199.  
  200.  
  201. -- Tab theme
  202.  
  203. myTabTheme = defaultTheme
  204.  
  205.     { fontName            = myFont
  206.  
  207.     , inactiveBorderColor = colorBlackAlt
  208.  
  209.     , inactiveColor       = colorBlack
  210.  
  211.     , inactiveTextColor   = colorGray
  212.  
  213.     , activeBorderColor   = colorGray
  214.  
  215.     , activeColor         = colorBlackAlt
  216.  
  217.     , activeTextColor     = colorWhiteAlt
  218.  
  219.     , urgentBorderColor   = colorGray
  220.  
  221.     , urgentTextColor     = colorGreen
  222.  
  223.     , decoHeight          = 14
  224.  
  225.     }
  226.  
  227.  
  228.  
  229. -- Prompt theme
  230.  
  231. myXPConfig = defaultXPConfig
  232.  
  233.     { font                = myFont
  234.  
  235.     , bgColor             = colorBlack
  236.  
  237.     , fgColor             = colorWhite
  238.  
  239.     , bgHLight            = colorBlue
  240.  
  241.     , fgHLight            = colorWhite
  242.  
  243.     , borderColor         = colorGrayAlt
  244.  
  245.     , promptBorderWidth   = 1
  246.  
  247.     , height              = 16
  248.  
  249.     , position            = Top
  250.  
  251.     , historySize         = 100
  252.  
  253.     , historyFilter       = deleteConsecutive
  254.  
  255.     , autoComplete        = Nothing
  256.  
  257.     }
  258.  
  259.  
  260.  
  261. -- GridSelect color scheme
  262.  
  263. myColorizer = colorRangeFromClassName
  264.  
  265.     (0x00,0x00,0x00) -- lowest inactive bg
  266.  
  267.     (0x60,0xA0,0xC0) -- highest inactive bg
  268.  
  269.     (0x34,0x75,0xAA) -- active bg
  270.  
  271.     (0xBB,0xBB,0xBB) -- inactive fg
  272.  
  273.     (0x00,0x00,0x00) -- active fg
  274.  
  275.     where
  276.  
  277.         black = minBound
  278.  
  279.         white = maxBound
  280.  
  281.  
  282.  
  283. -- GridSelect theme
  284.  
  285. myGSConfig colorizer = (buildDefaultGSConfig myColorizer)
  286.  
  287.     { gs_cellheight  = 50
  288.  
  289.     , gs_cellwidth   = 200
  290.  
  291.     , gs_cellpadding = 10
  292.  
  293.     , gs_font        = myFont
  294.  
  295.     }
  296.  
  297.  
  298.  
  299. -- Scratchpad (Alt+º)
  300.  
  301. manageScratchPad :: ManageHook
  302.  
  303. manageScratchPad = scratchpadManageHook (W.RationalRect (0) (1/50) (1) (3/4))
  304.  
  305. scratchPad = scratchpadSpawnActionCustom "urxvt -name scratchpad"
  306.  
  307.  
  308.  
  309. -- Transformers (Ctrl+f)
  310.  
  311. data TABBED = TABBED deriving (Read, Show, Eq, Typeable)
  312.  
  313. instance Transformer TABBED Window where
  314.  
  315.     transform TABBED x k = k (named "TS" (smartBorders (tabbedAlways shrinkText myTabTheme))) (\_ -> x)
  316.  
  317.  
  318.  
  319. -- StartupHook
  320.  
  321. myStartupHook = setWMName "LG3D" >> setDefaultCursor xC_left_ptr
  322.  
  323.  
  324.  
  325. -- LogHook (needed for running java apps)
  326.  
  327. myLogHook = ewmhDesktopsLogHook >> setWMName "LG3D"
  328.  
  329.  
  330.  
  331. -- UrgencyHook
  332.  
  333. myUrgencyHook = withUrgencyHook dzenUrgencyHook
  334.  
  335.     { args = ["-fn", dzenFont, "-bg", colorBlack, "-fg", colorGreen] }
  336.  
  337.  
  338.  
  339. -- StatusBars
  340.  
  341. --myWorkspaceBar, myBottomStatusBar, myTopStatusBar :: String
  342.  
  343. myWorkspaceBar, myStatusBar :: String
  344.  
  345. myWorkspaceBar    = "dzen2 -x '0' -y '0' -h '16' -w '890' -ta 'l' -fg '" ++ colorWhiteAlt ++ "' -bg '" ++ colorBlack ++ "' -fn '" ++ dzenFont ++ "' -p -e ''"
  346.  
  347. --myBottomStatusBar = "/home/zeus/.bin/bottomstatusbar.sh"
  348.  
  349. --myTopStatusBar    = "/home/zeus/.bin/topstatusbar.sh"
  350.  
  351. myStatusBar = "/home/zeus/.bin/bar.sh"
  352.  
  353.  
  354.  
  355. -- Workspaces
  356.  
  357. myWorkspaces :: [WorkspaceId]
  358.  
  359. myWorkspaces = --clickable $ --clickable workspaces now declared in myDzenPP
  360.  
  361.     ["1:MAIN"  --0
  362.  
  363.     ,"2:WEB"  --1
  364.  
  365.     ,"3:CODE"  --2
  366.  
  367.     ,"4:READ"  --3
  368.  
  369.     ,"5"  --4
  370.  
  371.     ,"6"  --5
  372.  
  373.     ,"7"  --6
  374.  
  375.     ]
  376.  
  377. --  where clickable l = [ "^ca(1,xdotool key super+" ++ show (n) ++ ")" ++ ws ++ "^ca()" |
  378.  
  379. --      (i,ws) <- zip [1..] l,
  380.  
  381. --      let n = if i == 10 then 0 else i ]
  382.  
  383.  
  384.  
  385. -- Layout hook
  386.  
  387. myLayoutHook = id
  388.  
  389.     $ gaps [(U,16), (D,0), (L,0), (R,0)]
  390.  
  391.     $ avoidStruts
  392.  
  393.     $ minimize
  394.  
  395.     $ mkToggle (single TABBED)
  396.  
  397.     $ mkToggle (single MIRROR)
  398.  
  399.     $ mkToggle (single REFLECTX)
  400.  
  401.     $ mkToggle (single REFLECTY)
  402.  
  403.     $ onWorkspace (myWorkspaces !! 1) allLayouts  --Workspace 1 layouts
  404.  
  405.     $ onWorkspace (myWorkspaces !! 2) webLayouts --Workspace 2 layouts
  406.  
  407.     $ onWorkspace (myWorkspaces !! 3) codeLayouts --Workspace 3 layouts
  408.  
  409. --  $ onWorkspace (myWorkspaces !! 5) chatLayouts --Workspace 4 layouts
  410.  
  411.     $ allLayouts
  412.  
  413.     where
  414.  
  415.         allLayouts  = myTile ||| myObig ||| myMirr ||| myMosA ||| myTabM
  416.  
  417.         webLayouts  = myTabs ||| myTabM ||| myObig
  418.  
  419.         codeLayouts = myTabM ||| myTile
  420.  
  421. --      chatLayouts = myChat
  422.  
  423.         --Layouts
  424.  
  425.         myTile = named "T"  (smartBorders (ResizableTall 1 0.03 0.5 []))
  426.  
  427.         myMirr = named "MT" (smartBorders (Mirror myTile))
  428.  
  429.         myMosA = named "M"  (smartBorders (MosaicAlt M.empty))
  430.  
  431.         myObig = named "O"  (smartBorders (OneBig 0.75 0.65))
  432.  
  433.         myTabs = named "TS" (smartBorders (tabbed shrinkText myTabTheme))
  434.  
  435.         myTabM = named "TM" (smartBorders (mastered 0.01 0.4 $ (tabbed shrinkText myTabTheme)))
  436.  
  437. --      myChat = named "C"  (withIM (0.20) (Title "Buddy List") $ Mirror myTile)
  438.  
  439.  
  440.  
  441. -- Manage hook
  442.  
  443. myManageHook :: ManageHook
  444.  
  445. myManageHook = (composeAll . concat $
  446.  
  447.     [ [resource     =? r     --> doIgnore                             | r <- myIgnores] --ignore desktop
  448.  
  449.     , [className    =? c     --> doShift (myWorkspaces !! 1)          | c <- myWebS   ] --move myWebS windows to workspace 1 by classname
  450.  
  451. --  , [className    =? c     --> doShift (myWorkspaces !! 5)          | c <- myChatS  ] --move myChatS windows to workspace 4 by classname
  452.  
  453.     , [className    =? c     --> doShift (myWorkspaces !! 3)          | c <- myGfxS   ] --move myGfxS windows to workspace 4 by classname
  454.  
  455.     , [className     =? c        --> doShift (myWorkspaces !! 3)                | c <- myReadS   ] -- move myReadS windows to workspace 5 by classname
  456.  
  457.     , [className    =? c     --> doShiftAndGo (myWorkspaces !! 5)     | c <- myGameS  ] --move myGameS windows to workspace 5 by classname
  458.  
  459.     , [className    =? c     --> doCenterFloat                        | c <- myFloatCC] --float center geometry by classname
  460.  
  461.     , [name         =? n     --> doCenterFloat                        | n <- myFloatCN] --float center geometry by name
  462.  
  463.     , [name         =? n     --> doSideFloat NW                       | n <- myFloatSN] --float side NW geometry by name
  464.  
  465.     , [className    =? c     --> doF W.focusDown                      | c <- myFocusDC] --dont focus on launching by classname
  466.  
  467.     , [isFullscreen          --> doF W.focusDown <+> doFullFloat]
  468.  
  469.     ]) <+> manageScratchPad
  470.  
  471.     where
  472.  
  473.         doShiftAndGo ws = doF (W.greedyView ws) <+> doShift ws
  474.  
  475.         role            = stringProperty "WM_WINDOW_ROLE"
  476.  
  477.         name            = stringProperty "WM_NAME"
  478.  
  479.         myIgnores       = ["desktop","desktop_window"]
  480.  
  481.         myWebS          = ["Chrome","Firefox", "Luakit" ]
  482.  
  483.         myGfxS          = ["gimp-2.6", "Gimp-2.6", "Gimp", "gimp", "GIMP"]
  484.  
  485.         myChatS         = ["Pidgin", "Xchat", "weechat 0.3.6" ]
  486.  
  487.         myGameS         = ["zsnes", "jpcsp-MainGUI", "Desmume"]
  488.  
  489.         myReadS          = ["Zathura", "Epdfview" ]
  490.  
  491.         myFloatCC       = ["MPlayer", "XFontSel", "XCalc", "XClock"]
  492.  
  493.         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", ""]
  494.  
  495.         myFloatSN       = ["Event Tester"]
  496.  
  497.         myFocusDC       = ["Event Tester", "Notify-osd"]
  498.  
  499.  
  500.  
  501. -- myWorkspaceBar config
  502.  
  503. myDzenPP h = defaultPP
  504.  
  505.     { ppOutput          = hPutStrLn h
  506.  
  507.     , ppSort            = fmap (namedScratchpadFilterOutWorkspace.) (ppSort defaultPP) -- hide "NSP" from workspace list
  508.  
  509.     , ppOrder           = \(ws:l:t:_) -> [ws,l,t]
  510.  
  511.     , ppExtras          = []
  512.  
  513.     , ppSep             = "^fg(" ++ colorGray ++ ")|"
  514.  
  515.     , ppWsSep           = ""
  516.  
  517.     , ppCurrent         = dzenColor colorBlue     colorBlack . pad
  518.  
  519.     , ppUrgent          = dzenColor colorGreen    colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  520.  
  521.     , ppVisible         = dzenColor colorGray     colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  522.  
  523.     , ppHidden          = dzenColor colorWhiteAlt colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  524.  
  525.     , ppHiddenNoWindows = dzenColor colorGray     colorBlack . pad . wrapClickWorkSpace . (\a -> (a,a))
  526.  
  527.     , ppTitle           = dzenColor colorWhiteAlt colorBlack . pad . wrapClickTitle .
  528.  
  529.         (\x -> if null x
  530.  
  531.             then "HI THERE! " ++ myArrow ++ ""
  532.  
  533.             else "" ++ shorten 85 x ++ " " ++ myArrow ++ ""
  534.  
  535.         ) . dzenEscape
  536.  
  537.     , ppLayout          = dzenColor colorCyan     colorBlack . pad . wrapClickLayout .
  538.  
  539.         (\x -> case x of
  540.  
  541.             "Minimize T"                    -> "ReTall"
  542.  
  543.             "Minimize O"                    -> "OneBig"
  544.  
  545.             "Minimize TS"                   -> "Tabbed"
  546.  
  547.             "Minimize TM"                   -> "Master"
  548.  
  549.             "Minimize M"                    -> "Mosaic"
  550.  
  551.             "Minimize MT"                   -> "Mirror"
  552.  
  553.             "Minimize G"                    -> "Mosaic"
  554.  
  555.             "Minimize C"                    -> "Mirror"
  556.  
  557.             "Minimize ReflectX T"           -> "^fg(" ++ colorGreen ++ ")ReTall X^fg()"
  558.  
  559.             "Minimize ReflectX O"           -> "^fg(" ++ colorGreen ++ ")OneBig X^fg()"
  560.  
  561.             "Minimize ReflectX TS"          -> "^fg(" ++ colorGreen ++ ")Tabbed X^fg()"
  562.  
  563.             "Minimize ReflectX TM"          -> "^fg(" ++ colorGreen ++ ")Master X^fg()"
  564.  
  565.             "Minimize ReflectX M"           -> "^fg(" ++ colorGreen ++ ")Mosaic X^fg()"
  566.  
  567.             "Minimize ReflectX MT"          -> "^fg(" ++ colorGreen ++ ")Mirror X^fg()"
  568.  
  569.             "Minimize ReflectX G"           -> "^fg(" ++ colorGreen ++ ")Mosaic X^fg()"
  570.  
  571.             "Minimize ReflectX C"           -> "^fg(" ++ colorGreen ++ ")Mirror X^fg()"
  572.  
  573.             "Minimize ReflectY T"           -> "^fg(" ++ colorGreen ++ ")ReTall Y^fg()"
  574.  
  575.             "Minimize ReflectY O"           -> "^fg(" ++ colorGreen ++ ")OneBig Y^fg()"
  576.  
  577.             "Minimize ReflectY MT"          -> "^fg(" ++ colorGreen ++ ")Tabbed Y^fg()"
  578.  
  579.             "Minimize ReflectY TM"          -> "^fg(" ++ colorGreen ++ ")Master Y^fg()"
  580.  
  581.             "Minimize ReflectY M"           -> "^fg(" ++ colorGreen ++ ")Mosaic Y^fg()"
  582.  
  583.             "Minimize ReflectY MT"          -> "^fg(" ++ colorGreen ++ ")Mirror Y^fg()"
  584.  
  585.             "Minimize ReflectY G"           -> "^fg(" ++ colorGreen ++ ")Mosaic Y^fg()"
  586.  
  587.             "Minimize ReflectY C"           -> "^fg(" ++ colorGreen ++ ")Mirror Y^fg()"
  588.  
  589.             "Minimize ReflectX ReflectY T"  -> "^fg(" ++ colorGreen ++ ")ReTall XY^fg()"
  590.  
  591.             "Minimize ReflectX ReflectY O"  -> "^fg(" ++ colorGreen ++ ")OneBig XY^fg()"
  592.  
  593.             "Minimize ReflectX ReflectY TS" -> "^fg(" ++ colorGreen ++ ")Tabbed XY^fg()"
  594.  
  595.             "Minimize ReflectX ReflectY TM" -> "^fg(" ++ colorGreen ++ ")Master XY^fg()"
  596.  
  597.             "Minimize ReflectX ReflectY M"  -> "^fg(" ++ colorGreen ++ ")Mosaic XY^fg()"
  598.  
  599.             "Minimize ReflectX ReflectY MT" -> "^fg(" ++ colorGreen ++ ")Mirror XY^fg()"
  600.  
  601.             "Minimize ReflectX ReflectY G"  -> "^fg(" ++ colorGreen ++ ")Mosaic XY^fg()"
  602.  
  603.             "Minimize ReflectX ReflectY C"  -> "^fg(" ++ colorGreen ++ ")Mirror XY^fg()"
  604.  
  605.             _                               -> "^fg(" ++ colorGreen ++ ")" ++ x ++ "^fg()" --Only for Mirror
  606.  
  607.         )
  608.  
  609.     }
  610.  
  611.     where
  612.  
  613.         --clickable workspaces, layout and title (thanks to count-corrupt). Carefull, tabulations will be evaluated
  614.  
  615.         wrapClickLayout content = "^ca(1,xdotool key super+space)" ++ content ++ "^ca()"
  616.  
  617.         wrapClickTitle content = "^ca(1,xdotool key super+j)" ++ content ++ "^ca()"
  618.  
  619.         currentWsIndex w = case (elemIndex w myWorkspaces) of
  620.  
  621.             Nothing -> "1"
  622.  
  623.             Just n -> show (n+1)
  624.  
  625.         wrapClickWorkSpace (idx,str) = "^ca(1," ++ xdo "w;" ++ xdo index ++ ")" ++ "^ca(3," ++ xdo "e;" ++ xdo index ++ ")" ++ str ++ "^ca()^ca()"
  626.  
  627.             where
  628.  
  629.                 index = currentWsIndex idx
  630.  
  631.                 xdo key = "xdotool key super+" ++ key
  632.  
  633.  
  634.  
  635. -- Key bindings
  636.  
  637. myKeys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
  638.  
  639. myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
  640.  
  641.     [ ((mod1Mask, xK_Return), spawn $ XMonad.terminal conf)                       --Launch a terminal
  642.  
  643.     , ((mod1Mask, xK_p), shellPrompt myXPConfig)                                              --Launch Xmonad shell prompt
  644.  
  645. --  , ((modMask, xK_p), xmonadPrompt myXPConfig)                                              --Launch Xmonad prompt
  646.  
  647.     , ((modMask, xK_g), goToSelected $ myGSConfig myColorizer)                                 --Launch GridSelect
  648.  
  649.     , ((modMask, xK_masculine), scratchPad)                                                    --Scratchpad
  650.  
  651.     --, ((modMask, xK_o), spawn "gksu halt")                                                     --Power off
  652.  
  653.     --, ((modMask .|. shiftMask, xK_o), spawn "gksu reboot")                                     --Reboot
  654.  
  655.     , ((mod1Mask, xK_f), spawn "firefox")                                                    --Launch chromium
  656.  
  657.     , ((modMask .|. shiftMask, xK_q), kill)                                                                  --Close focused window
  658.  
  659.     , ((mod1Mask, xK_F4), kill)
  660.  
  661.     , ((modMask, xK_space), sendMessage NextLayout)                                            --Rotate through the available layout algorithms
  662.  
  663.     , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)                 --Reset the layouts on the current workspace to default
  664.  
  665.     , ((modMask, xK_n), refresh)                                                               --Resize viewed windows to the correct size
  666.  
  667.     , ((modMask, xK_Tab), windows W.focusDown)                                                 --Move focus to the next window
  668.  
  669.     , ((modMask, xK_j), windows W.focusDown)
  670.  
  671.     , ((mod1Mask, xK_Tab), windows W.focusDown)
  672.  
  673.     , ((modMask, xK_k), windows W.focusUp)                                                     --Move focus to the previous window
  674.  
  675.     , ((mod1Mask, xK_a), windows W.focusMaster)                                                 --Move focus to the master window
  676.  
  677.     , ((mod1Mask .|. shiftMask, xK_Return), windows W.swapMaster)                                    --Swap the focused window and the master window
  678.  
  679.     , ((modMask .|. shiftMask, xK_j), windows W.swapDown  )                                    --Swap the focused window with the next window
  680.  
  681.     , ((modMask .|. shiftMask, xK_k), windows W.swapUp    )                                    --Swap the focused window with the previous window
  682.  
  683.     , ((modMask, xK_h), sendMessage Shrink)                                                    --Shrink the master area
  684.  
  685.     , ((modMask .|. shiftMask, xK_Left), sendMessage Shrink)
  686.  
  687.     , ((modMask, xK_l), sendMessage Expand)                                                    --Expand the master area
  688.  
  689.     , ((modMask .|. shiftMask, xK_Right), sendMessage Expand)
  690.  
  691.     , ((modMask .|. shiftMask, xK_h), sendMessage MirrorShrink)                                --MirrorShrink the master area
  692.  
  693.     , ((modMask .|. shiftMask, xK_Down), sendMessage MirrorShrink)
  694.  
  695.     , ((modMask .|. shiftMask, xK_l), sendMessage MirrorExpand)                                --MirrorExpand the master area
  696.  
  697.     , ((modMask .|. shiftMask, xK_Up), sendMessage MirrorExpand)
  698.  
  699.     , ((modMask .|. controlMask, xK_Left), withFocused (keysResizeWindow (-30,0) (0,0)))       --Shrink floated window horizontally by 50 pixels
  700.  
  701.     , ((modMask .|. controlMask, xK_Right), withFocused (keysResizeWindow (30,0) (0,0)))       --Expand floated window horizontally by 50 pixels
  702.  
  703.     , ((modMask .|. controlMask, xK_Up), withFocused (keysResizeWindow (0,-30) (0,0)))         --Shrink floated window verticaly by 50 pixels
  704.  
  705.     , ((modMask .|. controlMask, xK_Down), withFocused (keysResizeWindow (0,30) (0,0)))        --Expand floated window verticaly by 50 pixels
  706.  
  707.     , ((modMask, xK_t), withFocused $ windows . W.sink)                                        --Push window back into tiling
  708.  
  709.     , ((modMask .|. shiftMask, xK_t), rectFloatFocused)                                        --Push window into float
  710.  
  711.     , ((modMask, xK_f), sendMessage $ XMonad.Layout.MultiToggle.Toggle TABBED)                 --Push layout into tabbed
  712.  
  713.     , ((modMask .|. shiftMask, xK_z), sendMessage $ Toggle MIRROR)                             --Push layout into mirror
  714.  
  715.     , ((modMask .|. shiftMask, xK_x), sendMessage $ XMonad.Layout.MultiToggle.Toggle REFLECTX) --Reflect layout by X
  716.  
  717.     , ((modMask .|. shiftMask, xK_y), sendMessage $ XMonad.Layout.MultiToggle.Toggle REFLECTY) --Reflect layout by Y
  718.  
  719.     , ((modMask, xK_m), withFocused minimizeWindow)                                            --Minimize window
  720.  
  721.     , ((modMask .|. shiftMask, xK_m), sendMessage RestoreNextMinimizedWin)                     --Restore window
  722.  
  723.     , ((modMask .|. shiftMask, xK_f), fullFloatFocused)                                        --Push window into full screen
  724.  
  725.     , ((modMask, xK_comma), sendMessage (IncMasterN 1))                                        --Increment the number of windows in the master area
  726.  
  727.     , ((modMask, xK_period), sendMessage (IncMasterN (-1)))                                    --Deincrement the number of windows in the master area
  728.  
  729.     , ((modMask , xK_d), spawn "killall dzen2 trayer")                                         --Kill dzen2 and trayer
  730.  
  731.     , ((modMask , xK_F1), spawn "xscreensaver-command -lock && xset dmps force off")                                   --Lock screen
  732.  
  733. --  , ((modMask .|. shiftMask, xK_q), io (exitWith ExitSuccess))                               --Quit xmonad
  734.  
  735.     , ((modMask, xK_q), restart "xmonad" True)                                                 --Restart xmonad
  736.  
  737.     , ((modMask, xK_comma), toggleWS)                                                          --Toggle to the workspace displayed previously
  738.  
  739.     , ((mod1Mask, xK_masculine), toggleOrView (myWorkspaces !! 0))                             --if ws != 0 then move to workspace 0, else move to latest ws I was
  740.  
  741.     , ((mod1Mask .|. controlMask, xK_Left),  prevWS)                                           --Move to previous Workspace
  742.  
  743.     , ((modMask, xK_Left), prevWS)
  744.  
  745.     , ((modMask, xK_Right), nextWS)                                                            --Move to next Workspace
  746.  
  747.     , ((mod1Mask .|. controlMask, xK_Right), nextWS)
  748.  
  749.     , ((0, xF86XK_AudioMute), spawn "amixer -c0 set Master toggle")                      --Mute/unmute volume
  750.  
  751.     , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -c0 set Master 2%+ unmute")                 --Raise volume
  752.  
  753.     , ((0, xF86XK_AudioLowerVolume), spawn "amixer -c0 set Master 2%- unmute")               --Lower volume
  754.  
  755.     , ((0, xF86XK_AudioNext), spawn "ncmpcpp next")                                            --next song
  756.  
  757.     , ((0, xF86XK_AudioPrev), spawn "ncmpcpp prev")                                            --prev song
  758.  
  759.     , ((0, xF86XK_AudioPlay), spawn "ncmpcpp toggle")                                          --toggle song
  760.  
  761.     , ((0, xF86XK_AudioStop), spawn "ncmpcpp stop")                                            --stop song
  762.  
  763.     , ((0, xF86XK_MonBrightnessUp), spawn "sh /home/nnoell/bin/briosd.sh")                     --Raise brightness
  764.  
  765.     , ((0, xF86XK_MonBrightnessDown), spawn "sh /home/nnoell/bin/briosd.sh")                   --Lower brightness
  766.  
  767.     , ((0, xF86XK_ScreenSaver), spawn "xscreensaver-command -lock")                            --Lock screen
  768.  
  769.     , ((0, xK_Print), spawn "scrot '%Y-%m-%d_$wx$h.png'")                                      --Take a screenshot
  770.  
  771.     ]
  772.  
  773.     ++
  774.  
  775.     [((m .|. modMask, k), windows $ f i)                                                       --Switch to n workspaces and send client to n workspaces
  776.  
  777.         | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  778.  
  779.         , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
  780.  
  781.     ++
  782.  
  783.     [((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))                --Switch to n screens and send client to n screens
  784.  
  785.         | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
  786.  
  787.         , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
  788.  
  789.     where
  790.  
  791.         fullFloatFocused = withFocused $ \f -> windows =<< appEndo `fmap` runQuery doFullFloat f
  792.  
  793.         rectFloatFocused = withFocused $ \f -> windows =<< appEndo `fmap` runQuery (doRectFloat $ RationalRect 0.05 0.05 0.9 0.9) f
  794.  
  795.  
  796.  
  797. -- Mouse bindings
  798.  
  799. myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
  800.  
  801.     [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w >> windows W.shiftMaster)) -- set the window to floating mode and move by dragging
  802.  
  803.     , ((modMask, button2), (\w -> focus w >> windows W.shiftMaster))                      -- raise the window to the top of the stack
  804.  
  805.     , ((modMask, button3), (\w -> focus w >> Flex.mouseResizeWindow w))                   -- set the window to floating mode and resize by dragging
  806.  
  807.     , ((modMask, button4), (\_ -> prevWS))                                                -- switch to previous workspace
  808.  
  809.     , ((modMask, button5), (\_ -> nextWS))                                                -- switch to next workspace
  810.  
  811.     ]
Advertisement
Add Comment
Please, Sign In to add comment