Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Imports {{{
- import XMonad hiding ( (|||) )
- import Control.Monad (liftM2)
- -- Prompt
- import XMonad.Prompt
- import XMonad.Prompt.RunOrRaise (runOrRaisePrompt)
- import XMonad.Prompt.AppendFile (appendFilePrompt)
- import XMonad.Prompt.Man
- -- Hooks
- import XMonad.Operations
- import System.IO
- import System.Exit
- import XMonad.Util.Run
- --Actions
- import XMonad.Actions.GridSelect
- import XMonad.Actions.WindowGo
- import XMonad.Actions.CycleWS
- --Hooks
- import XMonad.Hooks.ManageDocks
- import XMonad.Hooks.ManageHelpers
- import XMonad.Hooks.SetWMName
- import XMonad.Hooks.DynamicLog
- import XMonad.Hooks.UrgencyHook
- import XMonad.Hooks.FadeInactive
- import XMonad.Hooks.EwmhDesktops
- import XMonad.Hooks.SetWMName
- import XMonad.Hooks.DynamicHooks
- --Layouts
- import XMonad.Layout.NoBorders (smartBorders, noBorders)
- import XMonad.Layout.PerWorkspace (onWorkspace)
- import XMonad.Layout.Reflect (reflectHoriz)
- import XMonad.Layout.IM
- import XMonad.Layout.SimpleFloat
- import XMonad.Layout.Spacing
- import XMonad.Layout.Grid
- import XMonad.Layout.ResizableTile
- import XMonad.Layout.NoBorders
- import XMonad.Layout.Gaps
- import XMonad.Layout.Circle
- import XMonad.Layout.LayoutCombinators
- import XMonad.Layout.Tabbed
- import XMonad.Layout.Named
- import XMonad.Layout.Spiral
- import XMonad.Layout.DragPane
- import qualified XMonad.StackSet as W
- import qualified Data.Map as M
- import XMonad.Util.NamedScratchpad
- import Data.Ratio ((%))
- import qualified Data.Map as M
- --}}}
- -- Config {{{
- -- Define Terminal
- myTerminal = "urxvt"
- -- Define modMask
- modMask' :: KeyMask
- modMask' = mod4Mask
- myFont = "-*-montecarlo-medium-r-normal-*-11-*-*-*-c-*-*-*"
- myDzenFGColor = "#555555"
- myDzenBGColor = "#222222"
- myNormalFGColor = "#ffffff"
- myNormalBGColor = "#0f0f0f"
- myFocusedFGColor = "#f0f0f0"
- myFocusedBGColor = "#333333"
- myUrgentFGColor = "#0099ff"
- myUrgentBGColor = "#0077ff"
- myIconFGColor = "#777777"
- myIconBGColor = "#0f0f0f"
- myPatternColor = "#1f1f1f"
- mySeperatorColor = "#555555"
- separatorColor = "#444444"
- -- GSConfig options:
- myGSConfig = defaultGSConfig
- { gs_cellheight = 50
- , gs_cellwidth = 250
- , gs_cellpadding = 10
- --, gs_colorizer = ""
- , gs_font = "" ++ myFont ++ ""
- --, gs_navigate = ""
- --, gs_originFractX = ""
- --, gs_originFractY = ""
- }
- -- Define workspaces
- myWorkspaces = ["1:main","2:web","3:dev","4:etc","5:tabed"]
- -- Dzen config
- myStatusBar = "dzen2 -x '0' -y '0' -w '300' -h '16' -ta 'l' -fg '#FFFFFF' -bg '#0f0f0f' -fn '-*-montecarlo-medium-r-normal-*-11-*-*-*-*-*-*-*'"
- myTopStatusBar = "conky -c /home/balalaika/conkydzen | dzen2 -x '300' -w '1380' -h '16' -ta 'r' -bg '#0f0f0f' -fg '#FFFFFF' -fn '-*-montecarlo-medium-r-normal-*-11-*-*-*-*-*-*-*' -y '0'"
- myBitmapsDir = "/home/balalaika/.xmonad/dzen"
- --}}}
- -- Main {{{
- main = do
- dzenTopBar <- spawnPipe myStatusBar
- dzenBar <- spawnPipe myTopStatusBar
- spawn "sh /home/balalaika/.xmonad/autostart.sh"
- xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig
- { terminal = myTerminal
- , workspaces = myWorkspaces
- , borderWidth = myBorderWidth
- , keys = keys'
- , modMask = modMask'
- -- , mouseBindings = newMouse
- , startupHook = ewmhDesktopsStartup >> setWMName "LG3D"
- , layoutHook = layoutHook'
- , manageHook = manageHook' <+> dynamicMasterHook
- , logHook = myLogHook dzenTopBar
- , normalBorderColor = colorNormalBorder
- , focusedBorderColor = colorFocusedBorder
- }
- --}}}
- --Scratchpad {{{
- scratchpads = [
- NS "transmission" "transmission-qt -r 127.0.0.1 -p 9091 -u login -w pass" (className =? "Transmission-qt") defaultFloating,
- --NS "ncmpcppf" "urxvt -e htop" (title =? "htop") defaultFloating,
- NS "keepassx" "keepassx" (className =? "Keepassx") defaultFloating ]
- -- }}}
- -- Hooks {{{
- -- ManageHook {{{
- manageHook' :: ManageHook
- manageHook' = (composeAll . concat $
- [ [resource =? r --> doIgnore | r <- myIgnores] -- ignore desktop
- , [className =? c --> doShift "3:dev" | c <- myDevs ] -- move devs to 3:dev
- , [className =? c --> doShift "2:web" | c <- myWebs ] -- move webs to 2:webs
- , [className =? c --> viewShift "4:etc" | c <- myEtc ] -- move etc to 4:etc
- , [className =? c --> doF(W.shift "5:IM") | c <- myIM ] -- move wines to wine
- , [className =? c --> doCenterFloat | c <- myFloats ] -- float my floats
- , [name =? n --> doCenterFloat | n <- myNames ] -- float my names
- , [isFullscreen --> myDoFullFloat ]
- ]) <+> namedScratchpadManageHook scratchpads
- where
- role = stringProperty "WM_WINDOW_ROLE"
- name = stringProperty "WM_NAME"
- viewShift = doF . liftM2 (.) W.greedyView W.shift
- -- classnames
- myFloats = ["feh","Nitrogen","ncmpcppf","keepassx","Keepassx","Skype","Lxappearance","Feh","Deluge","MPlayer","mplayer2","Zenity","VirtualBox","Xmessage","Save As...","XFontSel","Downloads","Nm-connection-editor","Vlc"]
- myWebs = ["Navigator","Chromium-browser","Shredder","Mail"]
- myEtc = ["Eclipse","eclipse","Netbeans","Foxit"]
- myIM = ["Pidgin","Skype"]
- myDevs = ["subl","Subl"]
- -- resources
- myIgnores = ["trayer","panel"]
- -- names
- myNames = ["Chromium Options","Delicious.com - Discover Yourself!"]
- -- a trick for fullscreen but stil allow focusing of other WSs
- myDoFullFloat :: ManageHook
- myDoFullFloat = doF W.focusDown <+> doFullFloat
- -- }}}
- layoutHook' = customLayout
- -- Bar
- --myLogHook :: Handle -> X ()
- myLogHook h = dynamicLogWithPP $ defaultPP
- {
- ppCurrent = dzenColor "#0099ff" "#0f0f0f" . pad
- , ppVisible = dzenColor "#white" "#0f0f0f" . pad
- , ppHidden = dzenColor "#b3b3b3" "#0f0f0f" . pad . noScratchPad -- haskell makes it so easy
- , ppHiddenNoWindows = dzenColor "#404040" "#0f0f0f" . pad
- , ppUrgent = dzenColor "red" "#F0f0f0f" . dzenStrip
- , ppWsSep = " "
- , ppSep = ""
- , ppLayout = dzenColor "#B07CBE" "#0f0f0f" .
- (\x -> case x of
- "Spacing 2 ResizableTall" -> " RT "
- "Mirror Spacing 2 ResizableTall" -> " MT "
- "Full" -> " F "
- -- "Full" -> "^i(" ++ myBitmapsDir ++ "/full.xbm)"
- -- "Simple Float" -> "~"
- "grid_named" -> " GN "
- _ -> x
- )
- --, ppTitle = (" " ++) . dzenColor "white" "#161616" . dzenEscape
- , ppTitle = \x -> ""
- , ppOutput = hPutStrLn h
- }
- where
- noScratchPad ws = if ws == "NSP" then "" else ws
- -- Layout
- -- gimpLayout = combineTwoP (TwoPane 0.04 0.82) (tabbedLayout) (Full) (Not (Role "gimp-toolbox"))
- customLayout = smartBorders $ avoidStruts $ onWorkspace "2:web" Full $ onWorkspace "4:etc" ( Circle ||| spiral (6/7) ||| Full ) $ onWorkspace "5:tabed" ( Full ||| gimpLayout) $ onWorkspace "3:dev" ( tabbedLayout ||| Full ||| Mirror tiled ) $ tiled ||| Mirror tiled ||| Circle ||| named "grid_named" grid
- where
- grid = spacing 2 $ Grid
- tiled = spacing 2 $ ResizableTall nmaster delta ratio []
- nmaster = 1
- delta = 3/100
- ratio = toRational (2/(1+sqrt(5)::Double))
- pidginRoster = And (ClassName "Pidgin") (Role "buddy_list")
- tabbedLayout = tabbedBottomAlways shrinkText defaultTheme
- gimpLayout = tabbedLayout ****||* Full
- --}}}
- -- Theme {{{
- -- Color names are easier to remember:
- colorOrange = "#ff7701"
- colorDarkGray = "#171717"
- colorPink = "#e3008d"
- colorGreen = "#0099ff"
- colorBlue = "#008dd5"
- colorYellow = "#fee100"
- colorWhite = "#cfbfad"
- myBorderWidth = 1
- colorNormalBorder = "#0f0f0f"
- colorFocusedBorder = "#404040"
- barFont = "terminus"
- barXFont = "inconsolata:size=14"
- xftFont = "xft: terminus-14"
- --}}}
- -- Prompt Config {{{
- mXPConfig :: XPConfig
- mXPConfig =
- defaultXPConfig { font = barFont
- , bgColor = colorDarkGray
- , fgColor = colorGreen
- , bgHLight = colorGreen
- , fgHLight = colorDarkGray
- , promptBorderWidth = 0
- , height = 20
- , historyFilter = deleteConsecutive
- }
- -- Run or Raise Menu
- largeXPConfig :: XPConfig
- largeXPConfig = mXPConfig
- { font = xftFont
- , height = 15
- }
- -- }}}
- -- Mouse bindngs {{{
- -- myMouse x = [ (0, button3), (\w -> focus w >> kill) ]
- -- newMouse x = M.union (mouseBindings defaultConfig x) (M.fromList (myMouse x))
- myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
- [ ((modMask, button3), (\w -> focus w >> kill)) ] -- kill windows by mouse
- -- }}}
- -- Key mapping {{{
- keys' :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
- keys' conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
- [ ((modMask, xK_p ), runOrRaisePrompt largeXPConfig)
- , ((modMask .|. shiftMask, xK_n ), spawn "nitrogen /home/balalaika/D/Dropbox/gun")
- , ((0, xK_Print ), spawn "screenshot scr")
- -- Programs
- , ((modMask, xK_Return ), spawn $ XMonad.terminal conf) -- spawn terminal
- , ((modMask, xK_Right ), spawn "ncmpcpp next")
- , ((modMask, xK_Left ), spawn "ncmpcpp prev")
- , ((modMask, xK_Down ), spawn "ncmpcpp pause")
- , ((modMask, xK_Up ), spawn "ncmpcpp play")
- , ((modMask, xK_n ), oneShotHook (className =? "URxvt") (doCenterFloat) >> spawn "urxvt -geometry 100x20 -e ncmpcpp")
- -- , ((modMask, xK_q ), spawn "urxvt -e ssh ubuntu") -- go ssh conection
- , ((modMask, xK_F3 ), spawn "amixer -q set Master toggle")
- , ((modMask, xK_F1 ), spawn "amixer set 'Master' 5dB- unmute > /dev/null")
- , ((modMask, xK_F2 ), spawn "amixer set 'Master' 5dB+ unmute > /dev/null")
- -- , ((modMask, xK_t ), spawn "/home/riso/Dropbox/scripts/translater > /dev/null")
- , ((modMask, xK_e ), spawn "urxvt -e mc -S xoria256")
- , ((modMask, xK_F4 ), spawn "sudo halt")
- -- , ((mod1Mask, xK_F3 ), spawn "sudo reboot")
- , ((modMask, xK_w ), runOrRaise "chromium" (className =? "Chromium-browser"))
- -- , ((modMask, xK_s ), runOrRaise "skype" (className =? "Skype"))
- -- layouts
- , ((modMask, xK_c), sendMessage $ JumpToLayout "Circle") -- set circle layout
- , ((modMask .|. shiftMask, xK_g), sendMessage $ JumpToLayout "grid_named") -- set grid layout
- , ((modMask, xK_j), windows W.focusDown) -- move focus to the next window
- , ((modMask, xK_k), windows W.focusUp) -- move focus to the previous window
- , ((modMask, xK_m), windows W.swapMaster) -- swap the focused window and the master window
- , ((modMask, xK_g), goToSelected myGSConfig) -- display grid select and go to selected window
- , ((modMask .|. shiftMask, xK_j), windows W.swapDown) -- swap the focused window with the next window
- , ((modMask .|. shiftMask, xK_k), windows W.swapUp) -- swap the focused window with the previous window
- , ((modMask .|. shiftMask, xK_l), sendMessage Expand) -- expand the master area
- , ((modMask .|. shiftMask, xK_h), sendMessage Shrink) -- shrink the master area
- , ((modMask, xK_z), sendMessage MirrorExpand)
- , ((modMask, xK_a ), sendMessage MirrorShrink)
- , ((modMask, xK_space ), sendMessage NextLayout)
- , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) -- reset layout on current desktop to default
- , ((modMask, xK_b ), sendMessage ToggleStruts)
- , ((mod1Mask, xK_Tab ), windows W.focusDown) -- move focus to next window
- , ((mod1Mask, xK_x ), kill) -- kill selected window
- , ((modMask .|. shiftMask, xK_j ), windows W.swapDown) -- swap the focused window with the next window
- , ((modMask .|. shiftMask, xK_k ), windows W.swapUp) -- swap the focused window with the previous window
- , ((modMask .|. shiftMask, xK_t ), withFocused $ windows . W.sink) -- Push window back into tiling
- -- workspaces
- , ((mod1Mask .|. controlMask, xK_Right ), nextWS)
- , ((mod1Mask .|. shiftMask, xK_Right ), shiftToNext)
- , ((mod1Mask .|. controlMask, xK_Left ), prevWS)
- , ((mod1Mask .|. shiftMask, xK_Left ), shiftToPrev)
- , ((modMask, xK_Escape), myToggle)
- -- quit
- --, ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
- , ((modMask .|. shiftMask, xK_q ), spawn "killall trayer && xmonad --restart")
- -- MAN
- , ((mod1Mask, xK_F1), manPrompt defaultXPConfig)
- -- scratchpad
- , ((modMask, xK_t ), namedScratchpadAction scratchpads "transmission")
- -- , ((modMask, xK_n ), namedScratchpadAction scratchpads "ncmpcppf")
- , ((modMask, xK_z ), namedScratchpadAction scratchpads "keepassx")
- ]
- ++
- [((m .|. modMask, k), windows $ f i)
- | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
- where
- myToggle = windows $ W.view =<< W.tag . head . filter
- ((\x -> x /= "NSP" && x /= "SP") . W.tag) . W.hidden
- --}}}
- -- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement