Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --
  2. -- xmonad config file.
  3. --
  4.  
  5. import XMonad hiding ( (|||) )
  6. import Data.Monoid
  7. import System.IO
  8. import System.Exit
  9.  
  10. import qualified XMonad.StackSet as W
  11. import qualified Data.Map        as M
  12.  
  13. import Data.Ratio ((%))
  14. import XMonad.Actions.CopyWindow
  15. import XMonad.Actions.CycleRecentWS
  16. import XMonad.Actions.CycleWS
  17. import XMonad.Actions.NoBorders
  18. import XMonad.Actions.WindowGo
  19. import XMonad.Config.Kde
  20. import XMonad.Config.Desktop
  21. import XMonad.Hooks.DynamicLog
  22. import XMonad.Hooks.EwmhDesktops
  23. import XMonad.Hooks.ManageDocks
  24. import XMonad.Hooks.SetWMName
  25. import XMonad.Hooks.UrgencyHook
  26. import XMonad.Layout.Grid
  27. import XMonad.Layout.IM
  28. import XMonad.Layout.LayoutCombinators
  29. import XMonad.Layout.LayoutHints
  30. import XMonad.Layout.LayoutModifier
  31. import XMonad.Layout.MultiToggle.Instances
  32. import XMonad.Layout.NoBorders
  33. import XMonad.Layout.PerWorkspace
  34. import XMonad.Layout.Reflect
  35. import XMonad.Layout.ResizableTile
  36. import XMonad.Layout.Spacing
  37. import XMonad.Util.Dzen
  38. import XMonad.Util.Run (spawnPipe)
  39. import XMonad.Util.Scratchpad
  40. import qualified XMonad.Layout.MultiToggle as MT
  41.  
  42. myTerminal      = "/usr/bin/urxvt -e tmux -2 new-session"
  43.  
  44. myFocusFollowsMouse :: Bool
  45. myFocusFollowsMouse = True
  46. myBorderWidth   = 1
  47. myModMask       = mod1Mask
  48. myNumlockMask   = mod2Mask
  49. myWorkspaces    = ["1","2","3","4","5","6","7:web","8:sys","9:im"]
  50.  
  51. myNormalBorderColor  = "white"
  52. myFocusedBorderColor = "red"
  53.  
  54. myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
  55.     [ ((modm,                 xK_t     ), spawn $ XMonad.terminal conf)
  56.     -- , ((modm,                 xK_p     ), spawn myDmenu)
  57.     , ((modm,                 xK_p     ), spawn "krunner")
  58.     -- , ((modm .|. shiftMask,   xK_p     ), spawn "gmrun")
  59.     , ((modm,                 xK_F4    ), kill)
  60.     , ((modm,                 xK_space ), sendMessage NextLayout)
  61.     , ((modm .|. shiftMask,   xK_space ), setLayout $ XMonad.layoutHook conf)
  62.     , ((modm,                 xK_n     ), refresh)
  63.     , ((modm,                 xK_Tab   ), windows W.focusDown)
  64.     , ((modm,                 xK_j     ), windows W.focusDown)
  65.     , ((modm,                 xK_k     ), windows W.focusUp  )
  66.     , ((modm .|. shiftMask,   xK_m     ), windows W.focusMaster  )
  67.     , ((modm,                 xK_Return), windows W.swapMaster)
  68.     , ((modm,                 xK_z     ), sendMessage MirrorShrink  )
  69.     , ((modm,                 xK_a     ), sendMessage MirrorExpand  )
  70.     , ((modm,                 xK_h     ), sendMessage Shrink)
  71.     , ((modm,                 xK_l     ), sendMessage Expand)
  72.     , ((modm,                 xK_u     ), focusUrgent)
  73.     , ((modm,                 xK_y     ), withFocused $ windows . W.sink)
  74.     , ((modm,                 xK_g     ), withFocused toggleBorder)
  75.     , ((modm              ,   xK_comma ), sendMessage (IncMasterN 1))
  76.     , ((modm              ,   xK_period), sendMessage (IncMasterN (-1)))
  77.     , ((modm .|. shiftMask,   xK_q     ), io (exitWith ExitSuccess))
  78.     , ((modm,                 xK_m     ), sendMessage $ MT.Toggle FULL )
  79.     , ((modm,                 xK_Escape), toggleWS )
  80.     , ((modm,                 xK_s     ), moveTo Next EmptyWS  )
  81.     , ((modm,                 xK_d     ), moveTo Prev EmptyWS  )
  82.     , ((modm .|. controlMask, xK_Right ), moveTo Next NonEmptyWS )
  83.     , ((modm .|. controlMask, xK_Left  ), moveTo Prev NonEmptyWS )
  84.     , ((modm,                 xK_F12   ), scratchpadSpawnAction defaultConfig {terminal = "/usr/bin/urxvt"} )
  85.     , ((modm,                 xK_v     ), spawn "/usr/bin/gvim" )
  86.     , ((modm .|. shiftMask,   xK_h     ), spawn "/usr/bin/dolphin" )
  87.     , ((modm,                 xK_f     ), runOrRaise "firefox" (className =? "Firefox") )
  88.     , ((modm,                 xK_q     ), spawn "xmonad --recompile; xmonad --restart")
  89.     ]
  90.     ++
  91.     [((m .|. modm, k), windows $ f i)
  92.         | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  93.         , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask), (copy, shiftMask .|. controlMask)]]
  94.     ++
  95.     [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
  96.         | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
  97.         , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
  98.  
  99. myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $
  100.     [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w
  101.                                        >> windows W.shiftMaster))
  102.     , ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
  103.     , ((modm, button3), (\w -> focus w >> mouseResizeWindow w
  104.                                        >> windows W.shiftMaster))
  105.     , ((modm, button4), (\_ -> prevWS)) -- switch to previous workspace
  106.     , ((modm, button5), (\_ -> nextWS)) -- switch to next workspace
  107.     ]
  108.  
  109. myLayout = onWorkspace "7:web" full $ onWorkspace "8:sys" grid $ onWorkspace "9:im" imLayout $ avoidStruts $ smartBorders $ MT.mkToggle(MT.single FULL) $ (defaultLayout)
  110.   where
  111.      defaultLayout = layoutHints (tiled) ||| layoutHints(Mirror tiled) ||| layoutHints(full) ||| layoutHints(grid)
  112.      -- defaultLayout = tiled ||| Mirror tiled ||| full ||| grid
  113.      tiled   = ResizableTall nmaster delta ratio []
  114.      nmaster = 1
  115.      ratio   = 1/2
  116.      delta   = 2/100
  117.      full    = avoidStruts $ smartBorders $ Full
  118.      grid    = avoidStruts $ Grid
  119.      imLayout = avoidStruts $ smartBorders $ withIM ratio kopeteRoster $ reflectHoriz $ withIM skypeRatio skypeRoster Grid
  120.       where
  121.         chatLayout      = Grid
  122.         ratio           = (2%8)
  123.         skypeRatio      = (3%8)
  124.         --pidginRoster    = And (ClassName "Pidgin") (Role "buddy_list")
  125.         kopeteRoster    = (ClassName "Kopete") `And` (Role "MainWindow#1")
  126.         skypeRoster     = (ClassName "Skype") `And` (Not (Title "Options")) `And` (Not (Role "Chats")) `And` (Not (Role "CallWindowForm"))
  127.  
  128. myManageHook = scratchpadManageHook (W.RationalRect 0.0 0.5 1.0 0.45) <+> ( composeAll . concat $
  129.     [[ className =? "MPlayer"        --> doFloat
  130.     , className =? "Gimp"           --> doFloat
  131.     , className =? "Kopete"         --> (doShift "9:im") -- <+> doFloat)
  132.     , className =? "kopete"         --> (doShift "9:im") -- <+> doFloat)
  133.     , className =? "Skype"          --> (doShift "9:im") -- <+> doFloat)
  134.     , className =? "skype"          --> (doShift "9:im") -- <+> doFloat)
  135.     , className =? "Pidgin"         --> (doShift "9:im") -- <+> doFloat)
  136.     , className =? "pidgin"         --> (doShift "9:im") -- <+> doFloat)
  137.     , className =? "Firefox"        --> doShift "7:web"
  138.     , resource  =? "desktop_window" --> doIgnore
  139.     , resource  =? "plasma-desktop" --> doFloat
  140.     , resource  =? "kdesktop"       --> doIgnore ]] ) <+> manageDocks
  141.  
  142. myEventHook = ewmhDesktopsEventHook
  143.  
  144. myStartupHook = setWMName "LG3D"
  145.  
  146. myLogHook = ewmhDesktopsLogHookCustom $ filter $ \w -> W.tag w /= "NSP"
  147.  
  148. main = do
  149.   xmonad $ withUrgencyHook FocusHook $ kde4Config {  -- use kde4Config for KDE
  150.       -- simple stuff
  151.         terminal           = myTerminal,
  152.         focusFollowsMouse  = myFocusFollowsMouse,
  153.         borderWidth        = myBorderWidth,
  154.         modMask            = myModMask,
  155.         numlockMask        = myNumlockMask,
  156.         workspaces         = myWorkspaces,
  157.         normalBorderColor  = myNormalBorderColor,
  158.         focusedBorderColor = myFocusedBorderColor,
  159.  
  160.       -- key bindings
  161.         keys               = myKeys,
  162.         mouseBindings      = myMouseBindings,
  163.  
  164.       -- hooks, layouts
  165.         layoutHook         = myLayout,
  166.         manageHook         = manageHook kde4Config <+> myManageHook,  -- use kde4Config for KDE
  167.         handleEventHook    = myEventHook,
  168.         logHook            = myLogHook,
  169.         startupHook        = myStartupHook
  170.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement