kveras

Untitled

May 9th, 2011
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 12.46 KB | None | 0 0
  1. -- ~/.xmonad/xmonad.hs
  2. -- Imports {{{
  3. import XMonad
  4. -- Prompt
  5. import XMonad.Prompt
  6. import XMonad.Prompt.RunOrRaise (runOrRaisePrompt)
  7. import XMonad.Prompt.AppendFile (appendFilePrompt)
  8. -- Hooks
  9. import XMonad.Operations
  10.  
  11. import System.IO
  12. import System.Exit
  13.  
  14. import XMonad.Util.Run
  15.  
  16.  
  17. import XMonad.Actions.CycleWS
  18.  
  19. import XMonad.Hooks.ManageDocks
  20. import XMonad.Hooks.ManageHelpers
  21. import XMonad.Hooks.SetWMName
  22. import XMonad.Hooks.DynamicLog
  23. import XMonad.Hooks.UrgencyHook
  24. import XMonad.Hooks.FadeInactive
  25. import XMonad.Hooks.EwmhDesktops
  26. import XMonad.Hooks.SetWMName
  27.  
  28. import XMonad.Layout.NoBorders (smartBorders, noBorders)
  29. import XMonad.Layout.PerWorkspace (onWorkspace, onWorkspaces)
  30. import XMonad.Layout.Reflect (reflectHoriz)
  31. import XMonad.Layout.IM
  32. import XMonad.Layout.SimpleFloat
  33. import XMonad.Layout.Spacing
  34. import XMonad.Layout.ResizableTile
  35. import XMonad.Layout.NoBorders
  36. -- import XMonad.Layout.Gaps
  37. import XMonad.Layout.LayoutHints
  38. import XMonad.Layout.LayoutModifier
  39. import XMonad.Layout.Reflect
  40. import XMonad.Layout.Grid
  41.  
  42. import Data.Ratio ((%))
  43.  
  44. import qualified XMonad.StackSet as W
  45. import qualified Data.Map as M
  46.  
  47. --}}}
  48.  
  49. -- Config {{{
  50. -- Define Terminal
  51. myTerminal      = "urxvt"
  52. -- Define modMask
  53. modMask' :: KeyMask
  54. modMask' = mod1Mask
  55. -- Define workspaces
  56. myWorkspaces    = ["1:main","2:web","3:movie","4:work","5:gimp","6:chat"]
  57. -- Dzen config
  58. myStatusBar = "dzen2 -x '0' -y '0' -h '24' -w '1920' -ta 'l' -fg '#FFFFFF' -bg '#1B1D1E' -fn '-*-bitstream vera sans-medium-r-normal-*-11-*-*-*-*-*-*-*'"
  59. myBtmStatusBar = "conky -c ~/.conky_bottom_dzen | dzen2 -x '0' -w '1920' -h '24' -ta 'c' -bg '#1B1D1E' -fg '#FFFFFF' -fn '-*-bitstream vera sans-medium-r-normal-*-11-*-*-*-*-*-*-*' -y '1176'"
  60. myBitmapsDir = "~/.xmonad/dzen"
  61. --}}}
  62. -- Main {{{
  63. main = do
  64.     dzenTopBar <- spawnPipe myStatusBar
  65.     dzenBtmBar <- spawnPipe myBtmStatusBar
  66.     spawn "sh ~/.xmonad/autostart.sh"
  67.     xmonad $ defaultConfig
  68.       { terminal            = myTerminal
  69.       , workspaces          = myWorkspaces
  70.       , keys                = keys'
  71.      , modMask             = modMask'
  72.       , startupHook         = ewmhDesktopsStartup >> setWMName "LG3D"
  73.       , layoutHook          = layoutHook'
  74.      , manageHook          = manageHook'
  75.       , logHook             = myLogHook dzenTopBar >> fadeInactiveLogHook 0xdddddddd  >> setWMName "LG3D"
  76.       , normalBorderColor   = colorNormalBorder
  77.       , focusedBorderColor  = colorFocusedBorder
  78.       , borderWidth   = 3
  79. }
  80. --}}}
  81.  
  82.  
  83. -- Hooks {{{
  84. -- ManageHook {{{
  85. manageHook' :: ManageHook
  86. manageHook' = (composeAll . concat $
  87.     [ [resource     =? r            --> doIgnore            |   r   <- myIgnores] -- ignore desktop
  88.     , [className    =? c            --> doShift  "2:web"    |   c   <- myWebs   ] -- move webs to main
  89.     , [className    =? c            --> doShift  "1:main"   |   c   <- myDev   ] -- move dev to main
  90.     , [className    =? c            --> doShift  "3:movie"  |   c   <- myMovie   ] -- move movie to movie
  91.     , [className    =? c            --> doShift  "4:work"  |   c   <- myWork   ] -- move work to work
  92.     , [className    =? c            --> doShift  "5:gimp"    |   c   <- myWork   ] -- move img to div
  93.     , [className    =? c            --> doShift  "6:chat"   |   c   <- myChat  ] -- move chat to chat
  94. --    , [name         =? "ncmpcpp"      --> doShift  "4:work"]
  95.     , [className    =? c            --> doCenterFloat       |   c   <- myFloats ] -- float my floats
  96.     , [name         =? n            --> doCenterFloat       |   n   <- myNames  ] -- float my names
  97.     , [isFullscreen                 --> myDoFullFloat                           ]
  98.     ])
  99.  
  100.     where
  101.  
  102.         role      = stringProperty "WM_WINDOW_ROLE"
  103.         name      = stringProperty "WM_NAME"
  104.  
  105.         -- classnames
  106.         myFloats  = ["Vlc","Smplayer","MPlayer","VirtualBox","Xmessage","XFontSel","Downloads","Nm-connection-editor"]
  107.         myWebs    = ["Navigator","Shiretoko","Firefox","Uzbl","uzbl","Uzbl-core","uzbl-core","Google-chrome","Chromium","Shredder","Mail"]
  108.         myMovie   = ["Boxee","Trine","openshot"]
  109. --  myMusic   = ["Rhythmbox","Tomahawk","Banshee","Banshee Media Player","banshee-1","Exaile","Spotify"]
  110.     myChat    = ["Pidgin","Buddy List"]
  111.     myWork    = ["Texmaker"]
  112.     myDev     = ["urxvt"]
  113.  
  114.         -- resources
  115.         myIgnores = ["desktop","desktop_window","notify-osd","stalonetray","trayer"]
  116.  
  117.         -- names
  118.         myNames   = ["bashrun","Google Chrome Options","Chromium Options","XVidCap"]
  119.  
  120. -- a trick for fullscreen but stil allow focusing of other WSs
  121. myDoFullFloat :: ManageHook
  122. myDoFullFloat = doF W.focusDown <+> doFullFloat
  123. -- }}}
  124. -- layoutHook' = customLayout
  125. layoutHook'  =  onWorkspaces ["1:main","4:work"] customLayout $ onWorkspaces ["5:gimp"] gimpLayout $ onWorkspaces ["6:chat"] imLayout $
  126.                customLayout2
  127. -- Bar
  128. myLogHook :: Handle -> X ()
  129. myLogHook h = dynamicLogWithPP $ defaultPP
  130.    {
  131.        ppCurrent           =   dzenColor "#ebac54" "#1B1D1E" . pad
  132.      , ppVisible           =   dzenColor "white" "#1B1D1E" . pad
  133.      , ppHidden            =   dzenColor "white" "#1B1D1E" . pad
  134.      , ppHiddenNoWindows   =   dzenColor "#7b7b7b" "#1B1D1E" . pad
  135.      , ppUrgent            =   dzenColor "red" "#1B1D1E" . pad
  136.      , ppWsSep             =   " "
  137.      , ppSep               =   "  |  "
  138.      , ppLayout            =   dzenColor "#ebac54" "#1B1D1E" .
  139.                                (\x -> case x of
  140.                                    "ResizableTall"             ->      "^i(" ++ myBitmapsDir ++ "/tall.xbm)"
  141.                                    "Mirror ResizableTall"      ->      "^i(" ++ myBitmapsDir ++ "/mtall.xbm)"
  142.                                    "Full"                      ->      "^i(" ++ myBitmapsDir ++ "/full.xbm)"
  143.                                    "Simple Float"              ->      "~"
  144.                                    _                           ->      x
  145.                                )
  146.      , ppTitle             =   (" " ++) . dzenColor "white" "#1B1D1E" . dzenEscape
  147.      , ppOutput            =   hPutStrLn h
  148.    }
  149. -- Layout
  150. customLayout = avoidStruts $ smartBorders tiled ||| smartBorders (Mirror tiled) ||| noBorders Full ||| smartBorders simpleFloat
  151.  where
  152.    --tiled = ResizableTall 1 (2/100) (1/2) []
  153.    tiled   = spacing pxl $ ResizableTall 1 (2/100) (1/2) []
  154. --    nmaster = 1  
  155. --    delta   = 2/100
  156. --    ratio   = 1/2
  157.    pxl     = 5
  158.  
  159. customLayout2 = avoidStruts $ noBorders Full ||| smartBorders tiled ||| smartBorders (Mirror tiled) ||| smartBorders simpleFloat
  160.  where
  161.    --tiled = ResizableTall 1 (2/100) (1/2) []
  162.    tiled   = spacing pxl $ ResizableTall 1 (2/100) (1/2) []
  163. --    nmaster = 1  
  164. --    delta   = 2/100
  165. --    ratio   = 1/2
  166.    pxl     = 5
  167.  
  168. gimpLayout  = avoidStruts $ withIM (0.11) (Role "gimp-toolbox") $
  169.              reflectHoriz $
  170.              withIM (0.15) (Role "gimp-dock") Full
  171.  
  172. imLayout    = avoidStruts $ withIM (1%5) (And (ClassName "Pidgin") (Role "buddy_list")) Grid
  173. --  where
  174. --    tiled   = spacing pxl $ ResizableTall 1 (2/100) (1/2) []
  175. --    nmaster = 1
  176. --    delta   = 2/100
  177. --    ratio   = 1/2
  178. --    pxl     = 5
  179. --}}}
  180. -- Theme {{{
  181. -- Color names are easier to remember:
  182. --colorOrange          = "#ff7701"
  183. colorOrange         = "#FD971F"
  184. --colorDarkGray        = "#171717"
  185. colorDarkGray       = "#1B1D1E"
  186. --colorPink            = "#e3008d"
  187. colorPink           = "#F92672"
  188. --colorGreen           = "#00aa4a"
  189. colorGreen          = "#A6E22E"
  190. --colorBlue            = "#008dd5"
  191. colorBlue           = "#66D9EF"
  192. --colorYellow          = "#fee100"
  193. colorYellow         = "#E6DB74"
  194. --colorWhite           = "#cfbfad"
  195. colorWhite          = "#CCCCC6"
  196.  
  197. --colorNormalBorder    = "#1c2636"
  198. colorNormalBorder   = "#CCCCC6"
  199. --colorFocusedBorder   = "#ebac54"
  200. colorFocusedBorder  = "#fd971f"
  201.  
  202.  
  203. barFont  = "terminus"
  204. barXFont = "inconsolata:size=14"
  205. xftFont = "xft: inconsolata-14"
  206. --}}}
  207.  
  208. -- Prompt Config {{{
  209. mXPConfig :: XPConfig
  210. mXPConfig =
  211.    defaultXPConfig { font                  = barFont
  212.                    , bgColor               = colorDarkGray
  213.                    , fgColor               = colorGreen
  214.                    , bgHLight              = colorGreen
  215.                    , fgHLight              = colorDarkGray
  216.                    , promptBorderWidth     = 0
  217.                    , height                = 14
  218.                    , historyFilter         = deleteConsecutive
  219.                    }
  220.  
  221. -- Run or Raise Menu
  222. largeXPConfig :: XPConfig
  223. largeXPConfig = mXPConfig
  224.                { font = xftFont
  225.                , height = 22
  226.                }
  227. -- }}}
  228. -- Key mapping {{{
  229. keys' :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
  230. keys' conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
  231.    [ ((modMask,                    xK_p        ), runOrRaisePrompt largeXPConfig)
  232.    , ((mod1Mask,                   xK_F2       ), spawn "gmrun")
  233.    -- Programs
  234.    , ((0,                          xK_Print    ), spawn "scrot -e 'mv $f ~/bilder/screenshots/'")
  235.    , ((modMask,                    xK_r        ), spawn $ XMonad.terminal conf) -- spawn terminal
  236.    , ((modMask .|. shiftMask,      xK_g        ), spawn "gimp")
  237. --    , ((modMask,                  xK_w        ), spawn "firefox")
  238.     , ((modMask,                    xK_w        ), spawn "chromium")
  239.     , ((modMask .|. shiftMask,      xK_i        ), spawn "urxvt -T irssi -e 'irssi'")
  240. --    , ((modMask .|. shiftMask,        xK_m        ), spawn "exaile")
  241.    , ((modMask .|. shiftMask,      xK_m        ), spawn "urxvt -T ncmpcpp -e 'ncmpcpp'")
  242.    , ((modMask .|. shiftMask,      xK_o        ), spawn "texmaker")
  243.    , ((modMask .|. shiftMask,      xK_p        ), spawn "gthumb")
  244.    , ((modMask,                    xK_e        ), spawn "nautilus") --no-desktop --browser")
  245.     , ((modMask .|. shiftMask,      xK_b    ), spawn "/opt/boxee/Boxee")
  246.    -- Media Keys
  247.    , ((0,                          0x1008ff12  ), spawn "amixer -q sset Master toggle") -- XF86AudioMute
  248.    , ((0,                          0x1008ff11  ), spawn "amixer -q sset Master 655- unmute") -- XF86AudioLowerVolume
  249.    , ((0,                          0x1008ff13  ), spawn "amixer -q sset Master 655+ unmute") -- XF86AudioRaiseVolume
  250.    , ((0,                          0x1008ff14  ), spawn "ncmpcpp toggle")
  251.    , ((0,                          0x1008ff17  ), spawn "ncmpcpp next")
  252.    , ((0,                          0x1008ff16  ), spawn "ncmpcpp prev")
  253.  
  254.    -- layouts
  255.    , ((modMask,                    xK_space    ), sendMessage NextLayout)
  256.    , ((modMask .|. shiftMask,      xK_space    ), setLayout $ XMonad.layoutHook conf) -- reset layout on current desktop to default
  257.    , ((modMask,                    xK_b        ), sendMessage ToggleStruts)
  258.    , ((mod1Mask,                   xK_Tab      ), windows W.focusDown) -- move focus to next window
  259.    , ((modMask,                    xK_q        ), kill) -- kill selected window
  260.    , ((modMask .|. shiftMask,      xK_j        ), windows W.swapDown) -- swap the focused window with the next window
  261.    , ((modMask .|. shiftMask,      xK_k        ), windows W.swapUp)  -- swap the focused window with the previous window
  262.    , ((modMask .|. shiftMask,      xK_t        ), withFocused $ windows . W.sink) -- Push window back into tiling
  263.    , ((modMask,                    xK_u        ), sendMessage Shrink) -- %! Shrink a master area
  264.    , ((modMask,                    xK_i        ), sendMessage Expand) -- %! Expand a master area
  265.    , ((modMask,                    xK_j        ), sendMessage MirrorShrink) -- %! Shrink a slave area
  266.    , ((modMask,                    xK_k        ), sendMessage MirrorExpand) -- %! Expand a slave area
  267.  
  268.  
  269.    -- workspaces
  270.    , ((mod1Mask .|. controlMask,   xK_Right    ), nextWS)
  271.    , ((mod1Mask .|. shiftMask,     xK_Right    ), shiftToNext)
  272.    , ((mod1Mask .|. controlMask,   xK_Left     ), prevWS)
  273.    , ((mod1Mask .|. shiftMask,     xK_Left     ), shiftToPrev)
  274.    
  275.    -- quit, or restart
  276.    , ((modMask .|. shiftMask,      xK_q        ), io (exitWith ExitSuccess))
  277.    , ((modMask .|. shiftMask,      xK_r        ), spawn "killall conky dzen2 && xmonad --recompile && xmonad --restart")
  278.    ]
  279.    ++
  280.    -- mod-[1..9] %! Switch to workspace N
  281.    -- mod-shift-[1..9] %! Move client to workspace N
  282.    [((m .|. modMask, k), windows $ f i)
  283.        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  284.        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
  285.  
  286. --}}}
  287. -- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap
Advertisement
Add Comment
Please, Sign In to add comment