Advertisement
Guest User

XMonad config

a guest
Sep 28th, 2013
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- xmonad.hs --
  2.  
  3. import XMonad
  4. import XMonad.Actions.CycleWS
  5. import XMonad.Actions.FloatKeys
  6. import XMonad.Hooks.DynamicLog
  7. import XMonad.Hooks.EwmhDesktops
  8. import XMonad.Hooks.FadeInactive
  9. import XMonad.Hooks.ManageDocks
  10. import XMonad.Hooks.ManageHelpers
  11. import XMonad.Hooks.SetWMName
  12. import XMonad.Hooks.UrgencyHook
  13. import XMonad.Util.EZConfig
  14. import XMonad.Util.NamedScratchpad
  15. import XMonad.Util.Run
  16. import XMonad.Layout.Grid
  17. import XMonad.Layout.IM
  18. import XMonad.Layout.NoBorders
  19. import XMonad.Layout.PerWorkspace
  20. import XMonad.Layout.Reflect
  21. import XMonad.ManageHook
  22. import XMonad.Prompt
  23. import XMonad.Prompt.Shell
  24. import XMonad.Prompt.RunOrRaise
  25.  
  26. import qualified XMonad.StackSet as S
  27.  
  28. import Data.Ratio
  29. import System.Directory
  30. import System.FilePath.Posix
  31. import System.IO.Unsafe
  32.  
  33. import Helpers
  34. import Layouts
  35.  
  36. -- Prompt configuration
  37. promptXP = defaultXPConfig {
  38.     font              = "xft:Envy Code R:style=regular:size=8",
  39.     bgColor           = "#1B1D1E",
  40.     defaultText       = "",
  41.     fgColor           = "#F8F8F2",
  42.     bgHLight          = "#66D9EF",
  43.     fgHLight          = "#000000",
  44.     borderColor       = "#202030",
  45.     promptBorderWidth = 2,
  46.     position          = Bottom,
  47.     height            = 19,
  48.     historySize       = 256
  49.  }
  50.  
  51. -- Main config
  52. myWorkspaces = ["1:dev", "2:mail", "3:cal", "4:web", "5:comm", "6:ham", "7:doc", "8:tmp", "9:full"]
  53. myTerminal = "urxvt"
  54.  
  55. myRestart = spawn "pkill dzen2; pkill trayer; xmonad --recompile && xmonad --restart"
  56. myHomeDir = unsafePerformIO getHomeDirectory
  57.  
  58. myDzenCmd = joinPath [myHomeDir, ".xmonad/scripts/dzen.py"] ++ " | /usr/bin/dzen2 -x 1000 -ta r -fn 'Envy Code R-10' -h 16 -p -e 'onstart=lower'"
  59. myInfoCmd = "/usr/bin/dzen2 -w 1000 -ta l -fn 'Envy Code R-10' -h 16 -p -e 'onstart=lower'"
  60. myTrayCmd = "/usr/bin/trayer --edge top --align right --widthtype pixel  --width 102 --heighttype pixel --height 16 --tint \"0x111111\" --alpha 0 --transparent true --distancefrom 1 --distance 64"
  61.  
  62. myBitmapsDir = joinPath [myHomeDir, ".xmonad/dzen2/"]
  63.  
  64. myManageHook = manageDocks <+> composeAll [
  65.         className =? "feh"                              --> doCenterFloat,
  66.         className =? "dosbox"                           --> doCenterFloat,
  67.         className =? "Eclipse" <&&> title =? "Eclipse"  --> doCenterFloat,
  68.         className =? "XMind" <&&> title =? "XMind"      --> doCenterFloat,
  69.         className =? "Dbeaver" <&&> title =? "Dbeaver"  --> doCenterFloat,
  70.         className =? "." <&&> title =? "."              --> doCenterFloat,
  71.         className =? "Wine"                             --> doCenterFloat,
  72.         className =? "Lanikai"                          --> doShift "2:mail",
  73.         className =? "Sunbird-bin"                      --> doShift "3:cal",
  74.         -- className =? "Firefox"                          --> doShift "4:web",
  75.         -- className =? "Opera"                            --> doShift "4:web",
  76.         -- className =? "Chromium"                         --> doShift "4:web",
  77.         className =? "Pidgin"                           --> doShift "5:comm",
  78.         className =? "Skype"                            --> doFloat <+> doShift "5:comm",
  79.         className =? "Gmpc"                             --> doShift "6:ham",
  80.         className =? "Ario"                             --> doShift "6:ham",
  81.         className =? "Minitube"                         --> doShift "6:ham",
  82.         className =? "Xpdf"                             --> doShift "7:doc",
  83.         className =? "Epdfview"                         --> doShift "7:doc",
  84.         className =? "Evince"                           --> doShift "7:doc",
  85.         className =? "Djview4"                          --> doShift "7:doc",
  86.         className =? "Ggv"                              --> doShift "7:doc",
  87.         className =? "Lyx"                              --> doShift "7:doc",
  88.         className =? "Vncviewer"                        --> doCenterFloat,
  89.         className =? "Xfce4-notifyd"                    --> doF S.focusDown,
  90.         isGimp                                          --> doTile <+> doShift "9:full",
  91.         isFullscreen                                    --> doFullFloat,
  92.         isDialog                                        --> doCenterFloat
  93.     ] <+> manageHook defaultConfig
  94.  
  95. -- Key configuration
  96. myKeys = [
  97.         -- Media keys
  98.         ("<XF86ScreenSaver>", spawn "/usr/bin/slock"),
  99.         ("<XF86Sleep>", spawn "/usr/bin/slock"),
  100.         ("<XF86Display>", spawn "/etc/acpi/xrandr-toggle"),
  101.         ("<XF86AudioRaiseVolume>", spawn "/usr/bin/amixer set Master 5%+"),
  102.         ("<XF86AudioLowerVolume>", spawn "/usr/bin/amixer set Master 5%-"),
  103.         ("<XF86AudioMute>", spawn "/usr/bin/amixer set Master toggle"),
  104.         ("<XF86AudioPrev>", spawn "/usr/bin/cmus-remote --prev"),
  105.         ("<XF86AudioNext>", spawn "/usr/bin/cmus-remote --next"),
  106.         ("<XF86AudioPlay>", spawn "/usr/bin/cmus-remote --pause"),
  107.        
  108.         -- Resizing windows
  109.         ("M-S-h", withFocused (keysResizeWindow (-20,0) (0,0))),
  110.         ("M-S-j", withFocused (keysResizeWindow (0,20) (0,0))),
  111.         ("M-S-k", withFocused (keysResizeWindow (0,-20) (0,0))),
  112.         ("M-S-l", withFocused (keysResizeWindow (20,0) (0,0))),
  113.         -- Moving windows
  114.         ("M-C-h", withFocused (keysMoveWindow (-20,0))),
  115.         ("M-C-j", withFocused (keysMoveWindow (0,20))),
  116.         ("M-C-k", withFocused (keysMoveWindow (0,-20))),
  117.         ("M-C-l", withFocused (keysMoveWindow (20,0))),
  118.         -- Moving around workspaces
  119.         ("M-<Left>", moveTo Prev NonEmptyWS),
  120.         ("M-<Right>", moveTo Next NonEmptyWS),
  121.         ("M-u", focusUrgent),
  122.         -- Layout switching
  123.         ("C-S-h", spawn "setxkbmap hu"),
  124.         ("C-S-u", spawn "setxkbmap us"),
  125.         -- System
  126.         ("M-p", shellPrompt promptXP),
  127.         ("M-S-p", runOrRaisePrompt promptXP),
  128.         ("M-q", myRestart)
  129.  
  130.     ]
  131.  
  132. myDzenPP h = dzenPP
  133.     {
  134.         ppCurrent           =   dzenColor "#ebac54" "#1B1D1E" . pad
  135.       , ppVisible           =   dzenColor "white" "#1B1D1E" . pad . wrap "(" ")"
  136.       , ppHidden            =   dzenColor "white" "#1B1D1E" . pad
  137.       , ppUrgent            =   dzenColor "black" "red" . pad
  138.       , ppWsSep             =   " "
  139.       , ppSep               =   " "
  140.       , ppLayout            =   dzenColor "#ebac54" "#1B1D1E" .
  141.                                 (\x -> case x of
  142.                                     "Tall"                      ->      "^i(" ++ myBitmapsDir ++ "/tall.xbm)"
  143.                                     "Mirror Tall"               ->      "^i(" ++ myBitmapsDir ++ "/mtall.xbm)"
  144.                                     "Full"                      ->      "^i(" ++ myBitmapsDir ++ "/full.xbm)"
  145.                                     "Grid"                      ->      "^i(" ++ myBitmapsDir ++ "/grid.xbm)"
  146.                                     "ReflectX IM Grid"          ->      "^i(" ++ myBitmapsDir ++ "/imgrid.xbm)"
  147.                                     "Simple Float"              ->      "~"
  148.                                     _                           ->      x
  149.                                 )
  150.       , ppTitle             =   (" " ++) . dzenColor "white" "#111111" . dzenEscape
  151.       , ppOutput            =   hPutStrLn h
  152.     }
  153.  
  154. myLayoutHook = avoidStruts $ smartBorders $ onWorkspace "5:comm" imLayout $
  155.     onWorkspace "9:full" (Full ||| Grid) $ layoutHook defaultConfig
  156.  
  157. myLogHook h = ewmhDesktopsLogHook >> (dynamicLogWithPP $ myDzenPP h)
  158.  
  159. myUrgencyHook = NoUrgencyHook
  160.  
  161. myConfig h = defaultConfig {
  162.         modMask = mod4Mask, -- set meta to WinKey
  163.         terminal = myTerminal,
  164.         workspaces = myWorkspaces,
  165.         manageHook = myManageHook,
  166.         layoutHook = myLayoutHook,
  167.         logHook = myLogHook h,
  168.         handleEventHook = ewmhDesktopsEventHook,
  169.         startupHook = ewmhDesktopsStartup,
  170.         normalBorderColor="#202030",
  171.         focusedBorderColor="#00ffff",
  172.         borderWidth=1
  173.     } `additionalKeysP` myKeys
  174.  
  175. main = do
  176.     info <- spawnPipe myInfoCmd
  177.     spawn myDzenCmd
  178.     spawn myTrayCmd
  179.     xmonad $ withUrgencyHook myUrgencyHook $ myConfig info
  180.  
  181.  
  182. -- lib/Helpers.hs --
  183.  
  184. module Helpers (
  185.         isGimp, doTile
  186.     ) where
  187.  
  188. import XMonad
  189. import XMonad.Hooks.ManageHelpers
  190.  
  191. import qualified XMonad.StackSet as S
  192.  
  193. -- Helper functions
  194. isGimp = role =? "gimp-toolbox" <||> role =? "gimp-image-window" <||> role =? "gimp-dock"
  195.     where role = stringProperty "WM_WINDOW_ROLE"
  196.  
  197. doTile = ask >>= doF . S.sink
  198.  
  199. -- lib/Layouts.hs --
  200.  
  201. module Layouts (
  202.         imLayout
  203.     ) where
  204.  
  205. import XMonad.Layout.Grid
  206. import XMonad.Layout.IM
  207. import XMonad.Layout.Reflect
  208.  
  209. import Data.Ratio
  210.  
  211. -- Custom layouts
  212. imLayout = reflectHoriz $ withIM size roster $ Grid
  213.     where
  214.         roster = Title "Buddy List"
  215.         size   = 1%7
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement