Xmonad/Config archive/deifl's xmonad.hs

From HaskellWiki
import XMonad
import Graphics.X11.Xlib
import XMonad.Operations
import XMonad.Layouts
import XMonad.Layout.Tabbed
import XMonad.Layout.ResizableTile
import qualified XMonad.StackSet as W
import qualified Data.Map as M
import Data.Bits
import XMonad.Hooks.DynamicLog
import XMonad.Util.Run (spawnPipe)
import System.IO (hPutStrLn)
import XMonad.Actions.WindowBringer
import XMonad.Actions.CycleWS
import XMonad.Actions.CopyWindow
import qualified XMonad.StackSet as W

main =  xmonad $ defaultConfig
       { borderWidth        = 1
       , terminal           = "urxvt"
       , normalBorderColor  = "#333333"
       , modMask            = mod4Mask 
       , defaultGaps        = [(15,15,0,0)]
       , focusedBorderColor = "#fedb73" 
       , logHook            = dynamicLogWithPP deiflPP
       , keys = \c -> mykeys c `M.union` keys defaultConfig c
       , layoutHook         = tiled ||| Mirror tiled ||| Full ||| tabbed shrinkText myTabConfig
       } 
    where
      -- default tiling algorithm partitions the screen into two panes
      -- tiled   = Tall nmaster delta ratio
      tiled   = ResizableTall nmaster delta ratio []
          
      -- The default number of windows in the master pane
      nmaster = 2
                                 
      -- Default proportion of screen occupied by master pane
      ratio   = 0.618034
                                           
      -- Percent of screen to increment by when resizing panes
      delta   = 3/100 
                
      -- Additional keybindings
      mykeys c@(XConfig {modMask = modm}) = M.fromList $
                                            [ ((modm,               xK_x     ), sendMessage MirrorShrink)
                                            , ((modm,               xK_s     ), sendMessage MirrorExpand)
                                            , ((modm .|. shiftMask, xK_g     ), gotoMenu)
                                            , ((modm .|. shiftMask, xK_b     ), bringMenu)
                                            , ((modm,               xK_p), spawn "exe=`dmenu_path | dmenu -b -p 'Launch:' -fn '-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-*'  -nb '#333' -nf '#888' -sb black -sf '#a8a8ff'` && eval \"exec $exe\"")
                                            , ((modm .|. shiftMask, xK_Right), shiftToNext >> nextWS)
                                            , ((modm .|. shiftMask, xK_Left),  shiftToPrev >> prevWS)
                                            , ((modm,               xK_Up),    toggleWS)
                                            , ((modm,               xK_Right), prevWS)
                                            , ((modm,               xK_Left),  nextWS)
                                            , ((modm .|. shiftMask, xK_c), kill1)
                                            ]
                                            -- CopyWindow (still don't work
                                            ++
                                            -- mod-[1..9] @@ Switch to workspace N
                                            -- mod-shift-[1..9] @@ Move client to workspace N
                                            -- mod-control-shift-[1..9] @@ Copy client to workspace N
                                            [((m .|. modm, k), windows $ f i)
                                                | (i, k) <- zip (workspaces c) [xK_1 ..]
                                                , (f, m) <- [(W.view, 0), (W.shift, shiftMask), (copy, shiftMask .|. controlMask)]]

myTabConfig :: TConf
myTabConfig = defaultTConf { inactiveBorderColor = "#708090"
                           , activeBorderColor = "#5f9ea0"
                           , activeColor = "#000000"
                           , inactiveColor = "#333333"
                           , inactiveTextColor = "#888888"
                           , activeTextColor = "#87cefa"
                           , fontName = "-xos4-terminus-*-*-*-*-12-*-*-*-*-*-*-*"
                           , tabSize = 15
                           }

deiflPP :: PP
deiflPP = defaultPP { ppCurrent = wrap "^bg(#000)^fg(#a8a8ff) " " ^fg(#fedb73)^bg(#333)" 
                    , ppSep     = ""
                    , ppWsSep = "|"
                    , ppVisible = wrap "^bg(#000)^fg(#888) " " ^bg(#333)"
                    , ppLayout = (\_ -> "")
                    , ppHidden = wrap "^bg(#333)^fg(#888) " " "
                    }