import XMonad import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Hooks.EwmhDesktops import XMonad.Util.Run(spawnPipe) import XMonad.Util.EZConfig import XMonad.Layout.NoBorders import XMonad.Config.Gnome import System.IO import XMonad.Actions.CycleWS import XMonad.Layout.IM import XMonad.Layout.PerWorkspace import XMonad.Layout.Reflect import XMonad.Util.Scratchpad import qualified XMonad.StackSet as W import XMonad.Layout.Circle import XMonad.Layout.DecorationMadness import XMonad.Layout.HintedGrid import XMonad.Layout.LayoutScreens import XMonad.Layout.ComboP import XMonad.Layout.Named import XMonad.Layout.TwoPane import XMonad.Layout.WindowNavigation -- directionally import XMonad.Layout.MultiToggle -- (14) apply layout modifiers dynamically import XMonad.Layout.MultiToggle.Instances -- (15) ability to magnify the focused import XMonad.Layout.ToggleLayouts import XMonad.Layout.Tabbed import XMonad.Layout.Accordion import XMonad.Hooks.SetWMName import qualified XMonad.Layout.Grid as G import XMonad.Prompt import XMonad.Prompt.Shell import XMonad.Hooks.UrgencyHook import XMonad.Hooks.ManageHelpers import Data.List import Data.Ratio modm = mod4Mask -- win key for mod myManageHook :: ManageHook myManageHook = composeAll [ className =? "MPlayer" --> doFloat , className =? "Gitk" --> doFloat , className =? "Emacs" --> doShift "2:emacs" , className =? "Epiphany" --> doShift "3:web" , className =? "Chrome" --> doShift "3:web" , className =? "Firefox" --> doShift "3:web" , className =? "Pidgin" --> doShift "4:im" , className =? "Skype" --> doShift "4:im" , className =? "Quodlibet" --> doShift "5:audio" , className =? "Deluge" --> doShift "6:torrent" , className =? "Gimp" --> doShift "7:gimp" , className =? "Paman" --> doFloat , className =? "Pavucontrol" --> doFloat , className =? "Xmessage" --> doFloat , className =? "Do" --> doIgnore , isDialog --> doCenterFloat , isFullscreen --> doFullFloat , resource =? "desktop_window" --> doIgnore , resource =? "kdesktop" --> doIgnore , scratchpadManageHook (W.RationalRect 0.25 0.2 0.5 0.5) ] -- shell prompt theme mySP = defaultXPConfig { font = "xft:DejaVu Sans Mono:pixelsize=10" , bgColor = "#000000" , fgColor = "#f8f8f8" , fgHLight = "#f8f8f8" , bgHLight = "steelblue3" , borderColor = "Red" , promptBorderWidth = 1 , position = Top , height = 20 , defaultText = [] } -- | Strip xmobar markup. Useful to remove ppHidden color from ppUrgent -- field. For example: -- -- > , ppHidden = xmobarColor "gray20" "" . wrap "<" ">" -- > , ppUrgent = xmobarColor "dark orange" "" . xmobarStrip xmobarStrip :: String -> String xmobarStrip = strip [] where strip keep x | null x = keep | "') $ x) | "" `isPrefixOf` x = strip keep (drop 5 x) | '<' == head x = strip (keep ++ "<") (tail x) | otherwise = let (good,x') = span (/= '<') x in strip (keep ++ good) x' myLayouts = (layoutHook gnomeConfig ||| G.Grid) -- Grid True ||| Grid False; Meh, not that great myLayout = toggle $ navkey $ tiled ||| Mirror tiled ||| Accordion ||| twoPane where -- default tiling algorithm partitions the screen into two panes tiled = Tall nmaster delta ratio twoPane = named "2P" $ TwoPane (3/100) (1/2) full = named "F" $ noBorders Full im = named "I" $ IM (2%7) (Title "Buddy List") split x = combineTwoP (TwoPane 0.03 x) -- The default number of windows in the master pane nmaster = 1 -- Default proportion of screen occupied by master pane ratio = 1/2 -- Percent of screen to increment by when resizing panes delta = 3/100 -- hooks for navigation and full-screen keys toggle = toggleLayouts (noBorders Full) navkey = configurableNavigation (navigateColor "#111111") usualL l = smartBorders $ avoidStruts $ l gimpL = usualL $ withIM (0.11) (Role "gimp-toolbox") $ reflectHoriz $ withIM (0.15) (Role "gimp-dock") myLayouts imL = usualL $ withIM (1%7) skype $ reflectHoriz $ withIM (1%7) pidgin myLayouts where pidgin = And (ClassName "Pidgin") (Role "buddy_list") skype = (ClassName "Skype") `And` (Not (Title "Options")) `And` (Not (Role "Chats")) `And` (Not (Role "CallWindowForm")) main = do -- xmproc <- spawnPipe "xmobar ~/.xmobarrc" -- dzen <- spawnPipe "dzen2" xmonad $ withUrgencyHook NoUrgencyHook gnomeConfig { modMask = mod4Mask , workspaces = ["1:terminals", "2:emacs", "3:web", "4:im", "5:audio", "6:torrent", "7:gimp","8","9"] , logHook = (dynamicLogWithPP $ xmobarPP { -- ppOutput = hPutStrLn xmproc ppTitle = xmobarColor "lightblue" "" . shorten 100 , ppUrgent = xmobarColor "yellow" "red" . Main.xmobarStrip }) >> ewmhDesktopsLogHook >> setWMName "LG3D" -- , logHook = dynamicLogWithPP $ dzenPP { ppOutput = hPutStrLn dzen } , layoutHook = onWorkspace "8" myLayout $ onWorkspace "7:gimp" gimpL $ onWorkspace "4:im" imL $ usualL myLayouts , borderWidth = 1 , manageHook = myManageHook <+> manageDocks } `additionalKeys` [ ((modm, xK_p), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"") ] `additionalKeysP` [ ("M-`", scratchpadSpawnActionTerminal "xterm") -- scratch , ("M-C-n", spawn "killall -1 nautilus") -- restart nautilus , ("M-C-l", spawn "samsung_off") -- xrandr to panel , ("M-C-o", spawn "office_on") -- xrandr to the office , ("M-C-O", spawn "office_off") -- xrandr to panel , ("M-C-h", spawn "samsung_on") -- xrandr to samsung , ("M-C-H", spawn "samsung_off") -- xrandr to panel , ("M-", prevWS ) -- left workspace , ("M-", nextWS ) -- right workspace , ("M-C-", shiftToPrev >> prevWS ) -- schlep left workspace , ("M-C-", shiftToNext >> nextWS ) -- schlep right workspace , ("M-s", shellPrompt mySP) -- shell , ("M-C--", spawn "transset-df -a --dec .1") , ("M-C-+", spawn "transset-df -a --inc .1") , ("M-z", toggleWS) , ("M-g d", layoutScreens 2 (TwoPane 0.5 0.5)) , ("M-g u", rescreen) , ("M-C-", sendMessage $ NextLayout) , ("M-S-", sendMessage $ Go R) , ("M-S-", sendMessage $ Go L) , ("M-S-", sendMessage $ Go U) , ("M-S-", sendMessage $ Go D) ]