Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [code]
- {-# LANGUAGE NoMonomorphismRestriction #-}
- -------------------------------------------------------
- import XMonad hiding ( (|||) )
- import qualified XMonad.StackSet as W -- Keys
- import qualified Data.Map as M -- Keys
- -------------------------------------------------------
- --import Text.Regex.Posix
- import Data.List
- import Data.Monoid
- import Data.Ratio ((%))
- import System.IO
- import Control.Applicative ((<$>))
- import Control.Arrow ((&&&))
- ------------------------------------------------------------------
- import XMonad.Hooks.DynamicLog -- Xmobar
- import XMonad.Hooks.UrgencyHook -- Urgent
- import XMonad.Hooks.DynamicHooks
- import XMonad.Hooks.ManageHelpers -- Helper functions
- import XMonad.Hooks.ManageDocks -- App workspace
- import XMonad.Hooks.EwmhDesktops
- import XMonad.Hooks.FadeInactive(setOpacity)
- import XMonad.Hooks.SetWMName -- Java GUI programs in non-reparenting WMs
- import XMonad.Hooks.XPropManage
- import XMonad.Layout.MultiToggle.Instances
- import XMonad.Layout.LayoutScreens
- import XMonad.Layout.ResizableTile -- Rezise
- import XMonad.Layout.Tabbed -- Tab
- import XMonad.Layout.Named -- Named
- import XMonad.Layout.SubLayouts -- Sub layouts
- import XMonad.Layout.Simplest -- Simple Layout
- import XMonad.Layout.SimplestFloat
- import XMonad.Layout.WindowNavigation -- Windows navigator
- import XMonad.Layout.Spacing
- import XMonad.Layout.Reflect
- import XMonad.Layout.ComboP
- import XMonad.Layout.TwoPane
- import XMonad.Layout.LayoutCombinators
- import XMonad.Layout.PerWorkspace
- import XMonad.Layout.LayoutBuilderP
- import XMonad.Layout.TrackFloating
- import qualified XMonad.Layout.WindowNavigation as Nav
- import XMonad.Layout.TrackFloating
- --import XMonad.Layout.MagicFocus
- -----------------------------------------------------------------
- import XMonad.Actions.CopyWindow -- Copy window to workspace
- import XMonad.Actions.WindowGo -- RunOrRaise, etc
- import XMonad.Actions.Commands
- import XMonad.Actions.UpdatePointer
- import XMonad.Actions.UpdateFocus
- import XMonad.Actions.TagWindows
- import XMonad.Actions.Submap
- import XMonad.Actions.DwmPromote
- -----------------------------------------------------------------
- import XMonad.Prompt
- -----------------------------------------------------------------
- import XMonad.Util.Run hiding (hPutStrLn)
- import XMonad.Util.WindowProperties
- import XMonad.Util.NamedScratchpad
- import XMonad.Util.NamedActions
- import XMonad.Util.EZConfig
- --import XMonad.Util.Stack
- import XMonad.Layout.WindowArranger
- import XMonad.Util.WindowPropertiesRE
- import XMonad.Layout.Groups
- import XMonad.Layout.Groups.Wmii
- import XMonad.Layout.Groups.Examples
- import XMonad.Layout.NoFrillsDecoration
- --import qualified XMonad.Layout.TabbedModifier as Tab
- import App
- import BorderColors
- import MyApps
- import Utils
- import Workspace
- -----------------------------------------------------------------
- --q ~? x = fmap (=~ x) q
- chooseLayout name = sendMessage $ JumpToLayout name
- spawnMany lst = foldr1 (>>) (map spawn lst)
- --myPlacement = withGaps (22, 0, 0, 0) $ smart (0.5,0.5)
- fromX :: X () -> ManageHook
- fromX op = fromWindowOp $ const op
- fromWindowOp :: (Window -> X()) -> ManageHook
- fromWindowOp fn = ask >>= \w -> liftX (fn w) >> doF id
- -- Avoid changing master on new window creation
- avoidMaster :: W.StackSet i l a s sd -> W.StackSet i l a s sd
- avoidMaster = W.modify' $ \c -> case c of
- W.Stack t [] (r:rs) -> W.Stack t [r] rs
- otherwise -> c
- -----------------------------------------------------------------
- showtag name = withTaggedGlobalP name shiftHere
- -- вкл/выкл тег name для текущего окна
- toggletag name = withFocused $ \w -> hasTag name w >>=
- (\b -> if b then delTag name w else addTag name w)
- -- снять тег name
- remtag name = withFocused (delTag name)
- -- перейти к следующему окну, помеченному тегом name
- nexttagged name = focusDownTaggedGlobal name
- -- переместить окна с тегом name с текущего workspace на "T"
- shiftoff name = withTaggedP name (W.shiftWin "T")
- --copyWin = ask >>= \w -> doF (\ws -> copyWindow w (W.currentTag ws) ws)
- --copyWins' = ask >>= doF . \w -> (copyWindow w "2:web")
- -- Объявить сочетания клавиш для тега tag с клавишей tag
- tagkeys mask key tag = [
- ((mod1Mask, key), showtag tag)
- ,((mod4Mask, key), toggletag tag)
- ,((mod3Mask, key), nexttagged tag)
- ,((mod4Mask .|. controlMask, key), shiftoff tag)
- ]
- -----------------------------------------------------------------
- addKeys = [
- "M-l" ~> sendMessage $ Go R
- , "M-h" ~> sendMessage $ Go L
- , "M-k" ~> sendMessage $ Go U
- , "M-j" ~> sendMessage $ Go D
- -- ,"`" ~> dwmpromote
- -- ,"<KP_Enter>" ~> withFocused $ windows . W.sink
- , "M-u" ~> swapOrRaise
- , "M-S-u" ~> swapOrLower
- , "M1-C-l" ~> hideSummonWindows apps
- -- , "M-<Home>" ~> spawn "vim ~/.xmonad/xmonad.hs"
- -- , "M-<Home>" ~> spawn "gvim ~/.xmonad/xmonad.hs"
- , "M-w" ~> runOrRaiseNext "firefox" (className =? "Firefox")
- , "M-S-p" ~> runOrRaiseNext "ktorrent" (className =? "Ktorrent")
- -- , "M-w" ~> runOrRaiseNext "conkeror" (className =? "Conkeror")
- -- , "M-e" ~> runOrRaiseNext "kopete" (className =? "Kopete")
- -- , "M-C-e" ~> runOrCopy "kopete" (className =? "Kopete")
- -- , "M-e" ~> ifWindow (matchclass "Kopete") copyWin (spawn "kopete")
- , "M-o" ~> runOrRaiseNext "okular" (className =? "Okular")
- , "M-x" ~> runOrRaise "/home/neg/bin/urxvt" (resource =? "MainTerminal")
- , "M-<Home>" ~> namedScratchpadAction scratchpads "XmndConf"
- , "M-e" ~> namedScratchpadAction scratchpads "finch"
- , "M-r" ~> namedScratchpadAction scratchpads "weechat"
- , "M-s" ~> namedScratchpadAction scratchpads "music"
- , "M-p" ~> namedScratchpadAction scratchpads "torrent"
- , "M-b" ~> namedScratchpadAction scratchpads "alsamixer"
- , "M4-<Space>" ~> showtag "scratchpad"
- , "M4-f" ~> onGroup W.focusUp'
- , "M4-v" ~> onGroup W.focusDown'
- , "M-C-t" ~> withFocused $ windows . W.sink
- , "M-<F1>" ~> sendMessage (IncMasterN 1)
- , "M-<F2>" ~> sendMessage (IncMasterN (-1))
- -- Sub Layout ------------------------------------------------------------
- , "M-C-h" ~> sendMessage $ pullGroup L
- , "M-C-l" ~> sendMessage $ pullGroup R
- , "M-C-k" ~> sendMessage $ pullGroup U
- , "M-C-j" ~> sendMessage $ pullGroup D
- , "M-C-m" ~> withFocused (sendMessage . MergeAll)
- , "M-C-u" ~> withFocused (sendMessage . UnMerge)
- , "M-n" ~> refresh
- , "M-<Return>" ~> windows W.swapMaster
- , "M-<L>" ~> sendMessage Shrink
- , "M-<R>" ~> sendMessage Expand
- , "M-<D>" ~> sendMessage MirrorShrink
- , "M-<U>" ~> sendMessage MirrorExpand
- , "M-S-<R>" ~> sendMessage $ Swap R
- , "M-S-<L>" ~> sendMessage $ Swap L
- , "M-S-<U>" ~> sendMessage $ Swap U
- , "M-S-<D>" ~> sendMessage $ Swap D
- , "M--" ~> zoomWindowOut
- , "M-/" ~> spawn "gmrun"
- , "M-S-e" ~> spawn "sudo eject"
- , "M-C-q" ~> kill1 -- @@ Close the focused window
- -- , "M-S-r" ~> spawn "xmonad --recompile; xmonad --restart"
- , "M-S-r" ~> spawn "pkill xmobar; xmonad --recompile; xmonad --restart"
- , "M-C-i" ~> spawn "env GTK2_RC_FILES=$HOME/.themes/Clearlooks-DarkBlue/gtk-2.0/gtkrc inkscape"
- , "M-C-o" ~> spawn "libreoffice"
- , "M-C-g" ~> spawn "gimp"
- , "M-C-a" ~> spawn "$HOME/bin/virt.sh"
- , "M-<Print>" ~> spawn "scrot screen_%Y-%m-%d.png -d 1" -- take screenshot
- -- Mpd -----------------------------------------------------------------
- , "<XF86AudioPlay>" ~> spawn "mpc toggle"
- , "<XF86AudioNext>" ~> spawn "mpc next"
- , "<XF86AudioPrev>" ~> spawn "mpc prev"
- , "M1-C-z" ~> spawn "mpc volume -5"
- , "M1-C-x" ~> spawn "mpc volume +5"
- -- Volume --------------------------------------------------------------
- , "<XF86AudioRaiseVolume>"
- ~> spawn "amixer sset Master 5%+"
- , "<XF86AudioLowerVolume>"
- ~> spawn "amixer sset Master 5%-"
- , "<Print>" ~> spawn "ksnapshot"
- -- Rotate windows list
- , "M4-C-n" ~> rotateWindows'
- , "M4-M1-C-U" ~> spawn "sudo /usr/sbin/hibernate-ram"
- -- Пометить текущее окно произвольным тегом
- -- , "M1-/" ~> tagPrompt defaultXPConfig (\s -> withFocused (addTag s))
- -- Снять произвольный тег
- , "M-S-/" ~> tagDelPrompt defaultXPConfig
- -- Переместить окна, помеченные произвольным тегом, на текущий workspace
- -- , "M1-w" ~> tagPrompt defaultXPConfig (\s -> withTaggedGlobalP s shiftHere)
- ]
- where
- focusAnd job1 job2 w = focus w >> windows W.swapMaster >> job1 w >> job2 w
- -- W.RationalRect x-gap y-gap width height
- hideScratchpad ws = if ws == "NSP" then "" else pad ws
- scratchpads =
- [
- NS "scratchpad" spawnScratchpad findScratchpad (customFloating$rr 0.42 0.08 0.50 0.33)
- , NS "stardict" "stardict" findDict (customFloating$rr 0.50 0.00 0.25 1.00)
- , NS "mutt" spawnMutt findMutt (customFloating$rr 0.26 0.30 0.66 0.66)
- , NS "finch" spawnFinch findFinch (customFloating$rr 0.26 0.30 0.66 0.66)
- , NS "weechat" spawnWeechat findWeechat (customFloating$rr 0.26 0.30 0.66 0.66)
- , NS "XmndConf" spawnXmndConf findXmndConf (customFloating$rr 0.26 0.30 0.66 0.66)
- , NS "torrent" "ktorrent" findTorrent (customFloating$rr 0.24 0.24 0.66 0.66)
- , NS "alsamixer" spawnMixer findMixer (customFloating$rr 0.42 0.08 0.50 0.33)
- , NS "music" spawnMusic findMusic (customFloating$rr 0.42 0.08 0.50 0.33)
- ]
- where
- role = stringProperty "WM_WINDOW_ROLE"
- rr = W.RationalRect
- findMixer = resource =? "Alsamixer"
- findMutt = resource =? "mutt"
- findScratchpad = resource =? "scratchpad"
- findDict = className =? "Stardict"
- findTorrent = className =? "Ktorrent"
- findMusic = resource =? "mpd_music"
- findWeechat = resource =? "uWeechat"
- findFinch = resource =? "uFinch"
- findXmndConf = resource =? "XmonadConfig"
- spawnMixer = "urxvt -fn xft:snap -name Alsamixer -e alsamixer"
- spawnScratchpad = "urxvt -fn \"xft:terminus:pixelsize=14\" -name scratchpad"
- spawnMusic = "urxvt -fn \"xft:terminus:pixelsize=14\" -name mpd_music -e ncmpcpp"
- spawnMutt = "urxvt -fn -fontforge-proggyopticyr-medium-r-normal--11-80-96-96-p-70-iso10646-1 -name uMutt -e mutt"
- spawnXmndConf = "urxvt -fn \"xft:terminus:pixelsize=14\" -name XmonadConfig -e vim ~/.xmonad/xmonad.hs"
- spawnWeechat = "urxvt -fn \"xft:terminus:pixelsize=14\" -name uWeechat -e weechat-curses"
- spawnFinch = "urxvt -fn \"xft:terminus:pixelsize=14\" -name uFinch -e finch"
- dzenFont = "-hell-monobook-bold-r-normal--24-240-72-72-m-120-iso10646-1"
- myFont = "-misc-fixed-medium-r-semicondensed-*-12-110-75-75-c-60-koi8-r"
- myIconDir = "/home/neg/.dzen"
- myDzenFGColor = "#555555"
- myDzenBGColor = "#000000"
- myNormalFGColor = "#ffffff"
- myNormalBGColor = "#000000"
- myNormalBorderColor = "#202020"
- myFocusedBorderColor = "#404040"
- myFocusedFGColor = "#f0f0f0"
- myFocusedBGColor = "#8536C9"
- myUrgentFGColor = "#0099ff"
- myUrgentBGColor = "#0077ff"
- myIconFGColor = "#777777"
- myIconBGColor = "#0f0f0f"
- mySeperatorColor = "#555555"
- ------------------------------------------------------------------
- -- XPConfig conf ----------------------------------------
- myXPConfig = defaultXPConfig
- {
- font = "-*-*-*-*-*--12-*-*-*-*-*-*-*"
- , bgColor = "#000000"
- , fgColor = "#ffffff"
- , fgHLight = "#ffffff"
- , bgHLight = "#00ffff"
- , borderColor = "#000000"
- , promptBorderWidth = 1
- , height = 32
- , historySize = 100
- }
- -- Window tags
- stackPlus s1 s2 = Just W.Stack {W.focus = W.focus s1,
- W.up = (W.up s1) ++ (W.up s2),
- W.down = (W.down s1) ++ (W.down s2) ++ [W.focus s2]}
- stackPlus' Nothing st = Just st
- stackPlus' (Just s1) s2 = stackPlus s1 s2
- modifyWs i d f s = W.modify d f (W.view i s)
- emptyCurrentWs = W.modify Nothing (const Nothing)
- addStackToTarget target st = modifyWs target st (stackPlus' st)
- returnToCurrent c s = W.view curtag s
- where curtag = W.currentTag c
- curstack s = W.stack $ W.workspace $ W.current s
- currentList :: X [Window]
- currentList = withWindowSet (\s -> return $ W.integrate' $ curstack s)
- --- [Workspaces] -------------------------------------------------
- myWorkspaces = [ "1:term", "2:web", "3:docs", "4:media", "5:dev"
- , "6:vm", "emacs", "nethack", "hack", "inspection", "T" ]
- ++ [hiddenWorkspaceTag, summonWorkspaceTag]
- -- | Workspace containing "hidden" windows. Treated specially by workspace handling commands.
- hiddenWorkspaceTag :: String
- hiddenWorkspaceTag = "H"
- -- | Workspace containing "summoned" windows. Treated specially by workspace handling commands.
- summonWorkspaceTag :: String
- summonWorkspaceTag = "S"
- -----------------------------------------------------------------
- programmingChats = ClassName "Okular" `Or` Title "haskell"
- miscChats = ClassName "URxvt" `Or` Title "Online"
- --proglay = ( (layoutP (RE programmingChats) (relBox 0 0 0.55 1) (Just $ relBox 0 0 1 1) tall)
- -- $ (layoutP (RE miscChats) (relBox 0.55 0 1 0.6) (Just $ relBox 0.55 0 1 1) tall)
- -- $ (layoutAll (relBox 0.55 0.6 1 1) tall)
- -- )
- rt = ResizableTall 1 (3/100) (1/2) []
- rt2 = ResizableTall 1 (3/100) (1/4) []
- tall = named "Tall" $ subLayout [0,1,2] Simplest $ rt
- mtall = named "Mirror" $ subLayout [0,1,2] Simplest $ Mirror rt
- imlike = named "imlike" $ reflectHoriz $ combineTwoP (TwoPane 0.03 0.2) mtall mtall (ClassName "Kopete")
- imlike2 = named "imlike2" $ reflectHoriz $ combineTwoP (TwoPane 0.03 0.2) Simplest mtall (ClassName "Kopete")
- imlike_mtall = named "imlike" $ reflectHoriz $ combineTwoP (rt2) (mtall) (mtall) (ClassName "Kopete")
- --fullscreenLayout = named "fullscreen" $ noBorders Full
- tiled = Tall 1 (1/20) (1/4)
- dwmtile = named "dwm" tiled
- mix = named "mix" $ Tall 1 (1/100) (2/3)
- mirrored = named "mirror" $ Mirror tiled
- books = named "books" (Tall 1 (1/100) (2/3))
- myLayout = avoidStruts
- $ trackFloating
- -- $ magicFocus
- $ windowNavigation
- -- $ spacing 4
- $ addTabs shrinkText myTheme
- $ onWorkspace "1:term" (tall ||| imlike)
- $ onWorkspace "2:web" (tall ||| imlike)
- $ tall ||| mtall
- myManage = composeOne
- [
- transience
- , isFullscreen -?> doFullFloat
- , resource =? "MainTerminal" -?> doShift "1:term"
- , cl =? "Conky" -?> doShift "inspection"
- -- ,(cl =? "Xmessage" -?> doCenterFloat <+> doF W.shiftMaster <+> (ask >>= \w -> =liftX (setOpacity w 0.7) >> idHook))
- --, className =? "Gimp" --> fromX (spawn "...")
- , cl =? "Firefox" -?> doShift "2:web"
- , cl =? "Google-chrome" -?> doShift "2:web"
- , cl =? "Okular" -?> doShift "3:docs"
- , cl =? "Zathura" -?> doShift "3:docs"
- , ("Gimp" `isPrefixOf`) <$> cl -?> doShift "4:media"
- , isMPlayerFull -?> doShift "4:media"
- , cl =? "gmpc" -?> doShift "4:media"
- , cl =? "VirtualBox" -?> doShift "6:vm"
- , resource =? "desktop_window" -?> doIgnore
- , resource =? "kdesktop" -?> doIgnore
- , cl =? "XFontSel" -?> doF W.shiftMaster <+> doCenterFloat
- , isDialog -?> doF W.shiftMaster <+> doFloat
- -- , return True -?> doF W.swapDown
- ]
- -- <+> composeOne [className =? c -?> doShift "4:docs" | c <- ["Xpdf","Zathura"]]
- -- <+> composeOne [className =? c -?> (ask >>= doF . \w -> copyWindow w "2:web") | c <- [ "Conkeror" ,"Dillo" , "Firefox" ]]
- -- <+> composeOne [className =? myFloats -?> doFloat
- -- | myFloats <- [ "Thunar" ,"Gimp-2.6" ,"MPlayer", "", "feh", "Qjackctl" ]]
- -- <+> composeOne
- -- [ sp =? "gimp-image-window" -?> doCenterFloat
- -- , sp =? "gimp-image-new" -?> doCenterFloat
- -- , sp =? "gimp-dock" -?> doTopRightFloat
- -- , sp =? "gimp-toolbox" -?> doTopLeftFloat
- -- , sp =? "gimp-toolbox-color-dialog" -?> doBottomRightFloat
- -- ]
- <+> composeOne [ className =? c -?> (ask >>= \w -> liftX (chooseLayout "imlike") >> idHook ) | c <- [ "Kopete" ]]
- -- <+> doFloat
- where isMPlayerFull = (className =? "MPlayer" <&&> appName =? "gl2")
- <||> title =? "Gnome MPlayer Fullscreen"
- name = stringProperty "WM_NAME"
- sp = stringProperty "WM_WINDOW_ROLE"
- cl = className
- xPropMatches :: [XPropMatch]
- xPropMatches = tagclasses ["Epiphany-browser", "Kontact", "Liferea-bin", "Conkeror", "Firefox"] "web"
- ++ tagclasses ["gimp", "f-spot", "Inkscape", "Eog"] "gfx"
- ++ tagclasses ["gnome-terminal","URxvt"] "term"
- ++ tagclasses ["Gedit", "Leafpad", "Gvim", "Emacs"] "text"
- ++ tagclasses ["Nautilus", "pcmanfm"] "files"
- ++ tagclasses ["Amarok", "Rhythmbox", "Totem", "gmpc"] "media"
- ++ tagclasses ["Kopete"] "kopete"
- ++ tagclasses ["Wxmaxima"] "math"
- ++ tagclasses ["scratchpad"] "scratchpad"
- where
- ckClass cls = [(wM_CLASS, any (cls==))]
- -- добавить тег окну
- tag name = pmX (addTag name)
- -- добавить тег и переместить окно
- moveAndTag name = (\w -> addTag name w >> return (W.shift name))
- mkfloat = pmX float
- -- пометить тегом все окна с данным классом
- tagclasses clss name = [ (ckClass cls, tag name) | cls <- clss ]
- -- переместить окна с данным классом на воркспейс ws
- floatPlasma = composeAll
- [ className =? "Qt-subapplication" --> doFloat,
- title =? "Qt-subapplication" --> doFloat,
- className ~? "[pP]lasma-desktop" --> doFloat
- ]
- myTheme = defaultTheme
- { activeColor = "#000000"
- , inactiveColor = "#000000"
- , urgentColor = "#110000"
- , activeBorderColor = "#222222"
- , inactiveBorderColor = "#000000"
- , urgentBorderColor = "#000000"
- , activeTextColor = "#aaaaaa"
- , inactiveTextColor = "#888888"
- , urgentTextColor = "#cc0000"
- , fontName = "" ++ myFont ++ ""
- , decoHeight = 12
- }
- myUrgencyHook = withUrgencyHook dzenUrgencyHook
- { args = ["-x", "0", "-y", "1084", "-h", "16", "-w", "1366", "-ta", "r", "-expand", "l", "-fg", "" ++ myUrgentFGColor ++ "", "-bg", "" ++ myNormalBGColor ++ "", "-fn", "" ++ myFont ++ ""] }
- -------------------- menuhook --------------------
- checkDialog = checkAtom "_NET_WM_WINDOW_TYPE" "_NET_WM_WINDOW_TYPE_DIALOG"
- checkMenu = checkAtom "_NET_WM_WINDOW_TYPE" "_NET_WM_WINDOW_TYPE_MENU"
- checkDesktop = checkAtom "_NET_WM_WINDOW_TYPE" "_NET_WM_WINDOW_TYPE_DESKTOP"
- checkDockAtom = checkAtom "_NET_WM_WINDOW_TYPE" "_NET_WM_WINDOW_TYPE_DOCK"
- checkOverride = checkAtom "_NET_WM_WINDOW_TYPE" "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE"
- checkFullscreen = checkAtom "_NET_WM_STATE" "_NET_WM_STATE_FULLSCREEN"
- manageMenus = checkMenu --> doFloat
- manageDialogs = checkDialog --> doFloat
- -- Keys ------------------------------------------------------------
- toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)
- myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
- [((m .|. modm, k), windows $ f i)
- | (i, k) <- zip (workspaces conf) [xK_1 .. ]
- , (f, m) <- [(W.view, 0), (W.shift, shiftMask), (copy, controlMask)]]
- ++ makeKeys apps
- ++ (tagkeys modMask xK_exclam "web")
- ++ (tagkeys modMask xK_numbersign "text")
- ++ (tagkeys modMask xK_slash "gfx")
- ++ (tagkeys modMask xK_semicolon "office")
- -- ++ (tagkeys modMask xK_colon "docs")
- ++ (tagkeys modMask xK_question "math")
- ++ (tagkeys modMask xK_asterisk "files")
- ++ (tagkeys modMask xK_percent "im")
- -- ++ [((0, xK_Menu), submap . M.fromList $
- -- [ ((0, xK_n), spawn "mpc next")
- -- , ((0, xK_p), spawn "mpc prev")
- -- , ((0, xK_z), spawn "mpc random")
- -- , ((0, xK_space), spawn "mpc toggle")
- -- , ((0, xK_period), spawn "xdotool key F20")
- -- ])]
- -- | Match a string against any one of a window's class, title, name or
- -- role.
- matchclass :: String -> Query Bool
- matchclass x = foldr ((<||>) . (=? x)) (return False) [className]
- myDzenPP h = defaultPP
- {
- ppCurrent = wrap "2 ^fg(#00aaff)^bg(#000000)^fg(white)" "^bg()^fg()" . wrap "^fg(#007b8c)[ ^fg()" " ^fg(#007b8c)]^fg()" . \wsId -> dropIx wsId
- , ppVisible = \w -> ""
- , ppSep = ""
- , ppHidden = \w -> ""
- , ppHiddenNoWindows = \w -> ""
- , ppTitle = \w -> ""
- , ppLayout = \w -> ""
- , ppOutput = hPutStrLn h
- }
- where
- dropIx wsId = wsId
- staticWs = ["1:term", "2:web", "3:docs", "4:media", "5:dev" ]
- myStatusBar = "dzen2 -x '396' -y '-0' -h '20' -w '80' -ta 'l' -fg '" ++ myNormalFGColor ++ "' -bg '" ++ myNormalBGColor ++ "' -fn '" ++ dzenFont ++ "'"
- test = "cat >> ~/dmpipe"
- conkywlan = "conky >> ~/dmpipe"
- zdzen = "~/bin/zdzen.sh"
- conkympd = "conky -c /home/neg/.conkyrc.bck|dzen2 -x '0' -ta 'r' -expand 'l' -y '-1' -h '22' -fn \"-hell-monobook-bold-r-normal--20-20-72-72-m-100-iso10646-1\""
- getdzen = "tail -f ~/dmpipe |dmplex|dzen2 -x '0' -y '-1' -w '768' -h '22' -expand 'r' -fn \"-hell-monobook-bold-r-normal--20-20-72-72-m-100-iso10646-1\""
- myBar = "xmobar"
- main :: IO ()
- main = do
- xmobar <- spawnPipe myBar
- xmonad $ ewmh defaultConfig {
- terminal = "urxvt -e tmux"
- , borderWidth = 1
- , modMask = mod4Mask
- , normalBorderColor = myNormalBorderColor
- , focusedBorderColor = myFocusedBorderColor
- , focusFollowsMouse = False
- , keys = myKeys
- , layoutHook = myLayout
- , manageHook = foldr1 (<+>)
- [ myManage
- , (xPropManageHook xPropMatches)
- , manageMenus
- , manageDialogs
- , floatPlasma
- , namedScratchpadManageHook scratchpads
- , manageDocks, raiseHook
- -- , (fmap not isDialog --> doF avoidMaster)
- -- , doF W.swapDown
- -- , doFloat
- ]
- , workspaces = myWorkspaces
- , logHook = updatePointer (Relative 0.5 0.5)
- -- , logHook = (dynamicLogWithPP $ myDzenPP test)
- -- >> updatePointer (Relative 0.5 0.5)
- -- >> colorWhen (matchclass "dzen2") "#ff00ff"
- , startupHook = setWMName "LG3D" >> adjustEventInput
- } `additionalKeysP` addKeys
- -- | Get a list of tuples (tag, [Window]) for each workspace.
- taggedWindows :: [W.Workspace i l a] -> [(i, [a])]
- taggedWindows = map $ W.tag &&& W.integrate' . W.stack
- -- | Get tags with copies of the focused window (if present.)
- copiesOfOn :: (Eq a) => Maybe a -> [(i, [a])] -> [i]
- copiesOfOn foc tw = maybe [] hasCopyOf foc
- where hasCopyOf f = map fst $ filter ((f `elem` ) . snd) tw
- runOrDont q act = ifWindows q (const . return $ ()) act
- spawnOrDont q cmd = runOrDont q (spawn cmd)
- [/code]
Advertisement
Add Comment
Please, Sign In to add comment