From c489419b7219949a0e985c7d74c01b3aae0b9905 Mon Sep 17 00:00:00 2001 From: Sravan Balaji Date: Sat, 8 May 2021 23:01:58 -0400 Subject: [PATCH] Re-Write Config based on NapoleonWils0n's Config - Figured out "true" fullscreen - Played around with xmobar colors and settings a bit - Removed some unnecessary layouts --- README.org | 284 ++++++++++++++++++++++++++------------------------ xmobar.config | 14 ++- xmonad.hs | 238 ++++++++++++++++++++++++------------------ 3 files changed, 296 insertions(+), 240 deletions(-) diff --git a/README.org b/README.org index 8812ed6..ba870e3 100644 --- a/README.org +++ b/README.org @@ -18,21 +18,35 @@ #+begin_src haskell import XMonad - + import XMonad.Config.Desktop + import Data.Monoid + import System.Exit import qualified XMonad.StackSet as W import qualified Data.Map as M - import Data.Monoid + -- system + import System.IO (hPutStrLn) - import XMonad.Util.Run -- spawnPipe + -- util + import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) import XMonad.Util.SpawnOnce - import XMonad.Util.EZConfig + import XMonad.Util.EZConfig (additionalKeysP, additionalMouseBindings) - import XMonad.Hooks.ManageDocks -- manage dock type programs like xmobar + -- hooks import XMonad.Hooks.DynamicLog + import XMonad.Hooks.ManageDocks + import XMonad.Hooks.EwmhDesktops + import XMonad.Hooks.ManageHelpers (isFullscreen, isDialog, doFullFloat, doCenterFloat, doRectFloat) + import XMonad.Hooks.Place (placeHook, withGaps, smart) - import System.IO - import System.Exit + -- actions + import XMonad.Actions.CopyWindow + + -- layout + import XMonad.Layout.NoBorders + import XMonad.Layout.Spacing (spacing) + import XMonad.Layout.GridVariants (Grid(Grid)) + import XMonad.Layout.ResizableTile #+end_src * Terminal @@ -114,93 +128,104 @@ is mod1Mask ("left alt"). You may also consider using mod3Mask ** General #+begin_src haskell - myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ - -- launch a terminal - [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) + -- myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ + -- -- launch a terminal + -- [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) - -- launch rofi drun - , ((modm, xK_p ), spawn "rofi -show drun") + -- -- launch rofi drun + -- , ((modm, xK_p ), spawn "rofi -show drun") - -- launch rofi clipboard - , ((modm, xK_c ), spawn "rofi -show clipboard") + -- -- launch rofi clipboard + -- , ((modm, xK_c ), spawn "rofi -show clipboard") - -- close focused window - , ((modm .|. shiftMask, xK_c ), kill) + -- -- close focused window + -- , ((modm .|. shiftMask, xK_c ), kill) - -- Rotate through the available layout algorithms - , ((modm, xK_space ), sendMessage NextLayout) + -- -- Rotate through the available layout algorithms + -- , ((modm, xK_space ), sendMessage NextLayout) - -- Reset the layouts on the current workspace to default - , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) + -- -- Reset the layouts on the current workspace to default + -- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) - -- Resize viewed windows to the correct size - , ((modm, xK_n ), refresh) + -- -- Resize viewed windows to the correct size + -- , ((modm, xK_n ), refresh) - -- Move focus to the next window - , ((modm, xK_Tab ), windows W.focusDown) + -- -- Move focus to the next window + -- , ((modm, xK_Tab ), windows W.focusDown) - -- Move focus to the next window - , ((modm, xK_j ), windows W.focusDown) + -- -- Move focus to the next window + -- , ((modm, xK_j ), windows W.focusDown) - -- Move focus to the previous window - , ((modm, xK_k ), windows W.focusUp ) + -- -- Move focus to the previous window + -- , ((modm, xK_k ), windows W.focusUp ) - -- Move focus to the master window - , ((modm, xK_m ), windows W.focusMaster ) + -- -- Move focus to the master window + -- , ((modm, xK_m ), windows W.focusMaster ) - -- Swap the focused window and the master window - , ((modm, xK_Return), windows W.swapMaster) + -- -- Swap the focused window and the master window + -- , ((modm, xK_Return), windows W.swapMaster) - -- Swap the focused window with the next window - , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) + -- -- Swap the focused window with the next window + -- , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) - -- Swap the focused window with the previous window - , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) + -- -- Swap the focused window with the previous window + -- , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) - -- Shrink the master area - , ((modm, xK_h ), sendMessage Shrink) + -- -- Shrink the master area + -- , ((modm, xK_h ), sendMessage Shrink) - -- Expand the master area - , ((modm, xK_l ), sendMessage Expand) + -- -- Expand the master area + -- , ((modm, xK_l ), sendMessage Expand) - -- Push window back into tiling - , ((modm, xK_t ), withFocused $ windows . W.sink) + -- -- Push window back into tiling + -- , ((modm, xK_t ), withFocused $ windows . W.sink) - -- Increment the number of windows in the master area - , ((modm, xK_i ), sendMessage (IncMasterN 1)) + -- -- Increment the number of windows in the master area + -- , ((modm, xK_i ), sendMessage (IncMasterN 1)) - -- Deincrement the number of windows in the master area - , ((modm, xK_d), sendMessage (IncMasterN (-1))) + -- -- Deincrement the number of windows in the master area + -- , ((modm, xK_d), sendMessage (IncMasterN (-1))) - -- Toggle the status bar gap - -- Use this binding with avoidStruts from Hooks.ManageDocks. - -- See also the statusBar function from Hooks.DynamicLog. - -- - -- , ((modm , xK_b ), sendMessage ToggleStruts) + -- -- Toggle the status bar gap + -- -- Use this binding with avoidStruts from Hooks.ManageDocks. + -- -- See also the statusBar function from Hooks.DynamicLog. + -- -- + -- -- , ((modm , xK_b ), sendMessage ToggleStruts) - -- Quit xmonad - , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) + -- -- Quit xmonad + -- , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) - -- Restart xmonad - , ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") + -- -- Restart xmonad + -- , ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") - -- Run xmessage with a summary of the default keybindings (useful for beginners) - , ((modm .|. shiftMask, xK_slash ), spawn ("echo \"" ++ help ++ "\" | xmessage -file -")) - ] - ++ + -- -- Run xmessage with a summary of the default keybindings (useful for beginners) + -- , ((modm .|. shiftMask, xK_slash ), spawn ("echo \"" ++ help ++ "\" | xmessage -file -")) + -- ] + -- ++ - -- mod-[1..9], Switch to workspace N - -- mod-shift-[1..9], Move client to workspace N - [((m .|. modm, k), windows $ f i) - | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] - , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] - ++ + -- -- mod-[1..9], Switch to workspace N + -- -- mod-shift-[1..9], Move client to workspace N + -- [((m .|. modm, k), windows $ f i) + -- | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] + -- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] + -- ++ - -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 - -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 - [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) - | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] - , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] + -- -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 + -- -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 + -- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) + -- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] + -- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] +#+end_src + +** Custom Bindings + +#+begin_src haskell + myKeys = + [ ("S-C-a", windows copyToAll) -- copy window to all workspaces + , ("S-C-z", killAllOtherCopies) -- kill copies of window on other workspaces + , (("M-a"), sendMessage MirrorShrink) -- decrease vertical window size + , (("M-z"), sendMessage MirrorExpand) -- increase vertical window size + ] #+end_src ** Mouse Bindings @@ -235,37 +260,27 @@ defaults, as xmonad preserves your old layout settings by default. The available layouts. Note that each layout is separated by |||, which denotes layout choice. -*Example With Xmobar* -#+begin_example - myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full) - where - -- default tiling algorithm partitions the screen into two panes - tiled = Tall nmaster delta ratio - - -- 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 -#+end_example - #+begin_src haskell - myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full) + myLayout = + avoidStruts ( tiled ||| grid ||| monocle ) ||| fullscreen where -- default tiling algorithm partitions the screen into two panes - tiled = Tall nmaster delta ratio - - -- The default number of windows in the master pane nmaster = 1 + delta = 3/100 + tiled_ratio = 1/2 + tiled_spacing = 10 + tiled = spacing tiled_spacing $ ResizableTall nmaster delta tiled_ratio [] - -- Default proportion of screen occupied by master pane - ratio = 1/2 + -- grid + grid_ratio = 16/9 + grid_spacing = 10 + grid = spacing grid_spacing $ Grid grid_ratio - -- Percent of screen to increment by when resizing panes - delta = 3/100 + -- monocle + monocle = smartBorders (Full) + + -- fullscreen + fullscreen = noBorders (Full) #+end_src * Window Rules @@ -299,7 +314,7 @@ which denotes layout choice. combine event hooks use mappend or mconcat from Data.Monoid. #+begin_src haskell - myEventHook = mempty + -- myEventHook = mempty #+end_src * Status Bars & Logging @@ -319,17 +334,6 @@ See the ~XMonad.Hooks.DynamicLog~ extension for examples. with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize per-workspace layout choices. - *Example* -#+begin_src haskell :tangle no - import XMonad.Util.SpawnOnce - - myStartupHook = do - spawnOnce "nitrogen --restore &" - spawnOnce "picom &" -#+end_src - - By default, do nothing. - #+begin_src haskell myStartupHook = do spawnOnce "nitrogen --restore &" @@ -347,31 +351,33 @@ Run xmonad with the settings you specify. No need to modify this. -- `xmobar -x 0` launches the bar on monitor 0 xmproc <- spawnPipe "xmobar -x 0 /home/sravan/.xmonad/xmobar.config" -- launches xmobar as a dock - xmonad $ docks defaultConfig - { -- simple stuff - terminal = myTerminal, - focusFollowsMouse = myFocusFollowsMouse, - clickJustFocuses = myClickJustFocuses, - borderWidth = myBorderWidth, - modMask = myModMask, - workspaces = myWorkspaces, - normalBorderColor = myNormalBorderColor, - focusedBorderColor = myFocusedBorderColor, - - -- key bindings - keys = myKeys, - mouseBindings = myMouseBindings, - - -- hooks, layouts - layoutHook = myLayout, - manageHook = myManageHook, - handleEventHook = myEventHook, - logHook = dynamicLogWithPP xmobarPP - { ppOutput = hPutStrLn xmproc - , ppTitle = xmobarColor "green" "" . shorten 50 - }, - startupHook = myStartupHook - } + xmonad $ ewmh desktopConfig + { manageHook = manageDocks <+> manageHook desktopConfig + , startupHook = myStartupHook + , layoutHook = myLayout + , borderWidth = myBorderWidth + , terminal = myTerminal + , modMask = myModMask + , normalBorderColor = myNormalBorderColor + , focusedBorderColor = myFocusedBorderColor + , logHook = dynamicLogWithPP xmobarPP + { ppOutput = \x -> hPutStrLn xmproc x + , ppCurrent = xmobarColor "green" "" . wrap "[" "]" -- current workspace in xmobar + , ppVisible = xmobarColor "cyan" "" -- visible but not current workspace + , ppHidden = xmobarColor "yellow" "" . wrap "+" "" -- hidden workspaces in xmobar + , ppHiddenNoWindows = xmobarColor "white" "" -- hidden workspaces (no windows) + , ppTitle = xmobarColor "purple" "" . shorten 80 -- title of active window in xmobar + , ppSep = " | " -- separators in xmobar + , ppUrgent = xmobarColor "red" "" . wrap "!" "!" -- urgent workspace + , ppOrder = \(ws:l:t:ex) -> [ws,l,t] + } + -- focusFollowsMouse = myFocusFollowsMouse, + -- clickJustFocuses = myClickJustFocuses, + -- workspaces = myWorkspaces, + -- keys = myKeys, + -- mouseBindings = myMouseBindings, + -- handleEventHook = myEventHook, + } `additionalKeysP` myKeys #+end_src ** Default Keybindings Reference @@ -434,13 +440,22 @@ Finally, a copy of the default bindings in simple textual tabular format. #+begin_src haskell :tangle ./xmobar.config Config { font = "xft:FiraCode Nerd Font Mono:weight=bold:pixelsize=12:antialias=true:hinting=true" + , additionalFonts = [] + , borderColor = "black" + , border = TopB , bgColor = "black" , fgColor = "white" + , alpha = 255 , position = Top + , textOffset = -1 + , iconOffset = -1 , lowerOnStart = True + , pickBroadest = False + , persistent = False , hideOnStart = False + , iconRoot = "." , allDesktops = True - , persistent = True + , overrideRedirect = True , commands = [ Run Weather "K7D2" ["-t",": F","-L","18","-H","25","--normal","green","--high","red","--low","lightblue"] 36000 , Run Network "wlp0s20f3" ["-L","0","-H","32","--normal","green","--high","red"] 10 , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10 @@ -452,6 +467,7 @@ Finally, a copy of the default bindings in simple textual tabular format. ] , sepChar = "%" , alignSep = "}{" - , template = "%StdinReader% }{ %cpu% | %memory% * %swap% | %wlp0s20f3% | %date%| %uname%" + , template = "%StdinReader% }\ + \{ %cpu% | %memory% * %swap% | %wlp0s20f3% | %date% | %uname%" } #+end_src diff --git a/xmobar.config b/xmobar.config index 6ac490c..14fadd1 100644 --- a/xmobar.config +++ b/xmobar.config @@ -1,11 +1,20 @@ Config { font = "xft:FiraCode Nerd Font Mono:weight=bold:pixelsize=12:antialias=true:hinting=true" + , additionalFonts = [] + , borderColor = "black" + , border = TopB , bgColor = "black" , fgColor = "white" + , alpha = 255 , position = Top + , textOffset = -1 + , iconOffset = -1 , lowerOnStart = True + , pickBroadest = False + , persistent = False , hideOnStart = False + , iconRoot = "." , allDesktops = True - , persistent = True + , overrideRedirect = True , commands = [ Run Weather "K7D2" ["-t",": F","-L","18","-H","25","--normal","green","--high","red","--low","lightblue"] 36000 , Run Network "wlp0s20f3" ["-L","0","-H","32","--normal","green","--high","red"] 10 , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10 @@ -17,5 +26,6 @@ Config { font = "xft:FiraCode Nerd Font Mono:weight=bold:pixelsize=12:antialias= ] , sepChar = "%" , alignSep = "}{" - , template = "%StdinReader% }{ %cpu% | %memory% * %swap% | %wlp0s20f3% | %date%| %uname%" + , template = "%StdinReader% }\ + \{ %cpu% | %memory% * %swap% | %wlp0s20f3% | %date% | %uname%" } diff --git a/xmonad.hs b/xmonad.hs index 8b2d8b5..7e258a9 100644 --- a/xmonad.hs +++ b/xmonad.hs @@ -1,19 +1,33 @@ import XMonad - +import XMonad.Config.Desktop +import Data.Monoid +import System.Exit import qualified XMonad.StackSet as W import qualified Data.Map as M -import Data.Monoid +-- system +import System.IO (hPutStrLn) -import XMonad.Util.Run -- spawnPipe +-- util +import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) import XMonad.Util.SpawnOnce -import XMonad.Util.EZConfig +import XMonad.Util.EZConfig (additionalKeysP, additionalMouseBindings) -import XMonad.Hooks.ManageDocks -- manage dock type programs like xmobar +-- hooks import XMonad.Hooks.DynamicLog +import XMonad.Hooks.ManageDocks +import XMonad.Hooks.EwmhDesktops +import XMonad.Hooks.ManageHelpers (isFullscreen, isDialog, doFullFloat, doCenterFloat, doRectFloat) +import XMonad.Hooks.Place (placeHook, withGaps, smart) -import System.IO -import System.Exit +-- actions +import XMonad.Actions.CopyWindow + +-- layout +import XMonad.Layout.NoBorders +import XMonad.Layout.Spacing (spacing) +import XMonad.Layout.GridVariants (Grid(Grid)) +import XMonad.Layout.ResizableTile myTerminal = "kitty" @@ -34,93 +48,100 @@ myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"] myModMask = mod4Mask -myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ - -- launch a terminal - [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) +-- myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ +-- -- launch a terminal +-- [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) - -- launch rofi drun - , ((modm, xK_p ), spawn "rofi -show drun") +-- -- launch rofi drun +-- , ((modm, xK_p ), spawn "rofi -show drun") - -- launch rofi clipboard - , ((modm, xK_c ), spawn "rofi -show clipboard") +-- -- launch rofi clipboard +-- , ((modm, xK_c ), spawn "rofi -show clipboard") - -- close focused window - , ((modm .|. shiftMask, xK_c ), kill) +-- -- close focused window +-- , ((modm .|. shiftMask, xK_c ), kill) - -- Rotate through the available layout algorithms - , ((modm, xK_space ), sendMessage NextLayout) +-- -- Rotate through the available layout algorithms +-- , ((modm, xK_space ), sendMessage NextLayout) - -- Reset the layouts on the current workspace to default - , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) +-- -- Reset the layouts on the current workspace to default +-- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) - -- Resize viewed windows to the correct size - , ((modm, xK_n ), refresh) +-- -- Resize viewed windows to the correct size +-- , ((modm, xK_n ), refresh) - -- Move focus to the next window - , ((modm, xK_Tab ), windows W.focusDown) +-- -- Move focus to the next window +-- , ((modm, xK_Tab ), windows W.focusDown) - -- Move focus to the next window - , ((modm, xK_j ), windows W.focusDown) +-- -- Move focus to the next window +-- , ((modm, xK_j ), windows W.focusDown) - -- Move focus to the previous window - , ((modm, xK_k ), windows W.focusUp ) +-- -- Move focus to the previous window +-- , ((modm, xK_k ), windows W.focusUp ) - -- Move focus to the master window - , ((modm, xK_m ), windows W.focusMaster ) +-- -- Move focus to the master window +-- , ((modm, xK_m ), windows W.focusMaster ) - -- Swap the focused window and the master window - , ((modm, xK_Return), windows W.swapMaster) +-- -- Swap the focused window and the master window +-- , ((modm, xK_Return), windows W.swapMaster) - -- Swap the focused window with the next window - , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) +-- -- Swap the focused window with the next window +-- , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) - -- Swap the focused window with the previous window - , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) +-- -- Swap the focused window with the previous window +-- , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) - -- Shrink the master area - , ((modm, xK_h ), sendMessage Shrink) +-- -- Shrink the master area +-- , ((modm, xK_h ), sendMessage Shrink) - -- Expand the master area - , ((modm, xK_l ), sendMessage Expand) +-- -- Expand the master area +-- , ((modm, xK_l ), sendMessage Expand) - -- Push window back into tiling - , ((modm, xK_t ), withFocused $ windows . W.sink) +-- -- Push window back into tiling +-- , ((modm, xK_t ), withFocused $ windows . W.sink) - -- Increment the number of windows in the master area - , ((modm, xK_i ), sendMessage (IncMasterN 1)) +-- -- Increment the number of windows in the master area +-- , ((modm, xK_i ), sendMessage (IncMasterN 1)) - -- Deincrement the number of windows in the master area - , ((modm, xK_d), sendMessage (IncMasterN (-1))) +-- -- Deincrement the number of windows in the master area +-- , ((modm, xK_d), sendMessage (IncMasterN (-1))) - -- Toggle the status bar gap - -- Use this binding with avoidStruts from Hooks.ManageDocks. - -- See also the statusBar function from Hooks.DynamicLog. - -- - -- , ((modm , xK_b ), sendMessage ToggleStruts) +-- -- Toggle the status bar gap +-- -- Use this binding with avoidStruts from Hooks.ManageDocks. +-- -- See also the statusBar function from Hooks.DynamicLog. +-- -- +-- -- , ((modm , xK_b ), sendMessage ToggleStruts) - -- Quit xmonad - , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) +-- -- Quit xmonad +-- , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) - -- Restart xmonad - , ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") +-- -- Restart xmonad +-- , ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") - -- Run xmessage with a summary of the default keybindings (useful for beginners) - , ((modm .|. shiftMask, xK_slash ), spawn ("echo \"" ++ help ++ "\" | xmessage -file -")) - ] - ++ +-- -- Run xmessage with a summary of the default keybindings (useful for beginners) +-- , ((modm .|. shiftMask, xK_slash ), spawn ("echo \"" ++ help ++ "\" | xmessage -file -")) +-- ] +-- ++ - -- mod-[1..9], Switch to workspace N - -- mod-shift-[1..9], Move client to workspace N - [((m .|. modm, k), windows $ f i) - | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] - , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] - ++ +-- -- mod-[1..9], Switch to workspace N +-- -- mod-shift-[1..9], Move client to workspace N +-- [((m .|. modm, k), windows $ f i) +-- | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] +-- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] +-- ++ - -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 - -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 - [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) - | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] - , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] +-- -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 +-- -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 +-- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) +-- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] +-- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] + +myKeys = + [ ("S-C-a", windows copyToAll) -- copy window to all workspaces + , ("S-C-z", killAllOtherCopies) -- kill copies of window on other workspaces + , (("M-a"), sendMessage MirrorShrink) -- decrease vertical window size + , (("M-z"), sendMessage MirrorExpand) -- increase vertical window size + ] myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ @@ -138,19 +159,26 @@ myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ -- you may also bind events to the mouse scroll wheel (button4 and button5) ] -myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full) +myLayout = + avoidStruts ( tiled ||| grid ||| monocle ) ||| fullscreen where -- default tiling algorithm partitions the screen into two panes - tiled = Tall nmaster delta ratio - - -- The default number of windows in the master pane nmaster = 1 + delta = 3/100 + tiled_ratio = 1/2 + tiled_spacing = 10 + tiled = spacing tiled_spacing $ ResizableTall nmaster delta tiled_ratio [] - -- Default proportion of screen occupied by master pane - ratio = 1/2 + -- grid + grid_ratio = 16/9 + grid_spacing = 10 + grid = spacing grid_spacing $ Grid grid_ratio - -- Percent of screen to increment by when resizing panes - delta = 3/100 + -- monocle + monocle = smartBorders (Full) + + -- fullscreen + fullscreen = noBorders (Full) myManageHook = composeAll [ className =? "MPlayer" --> doFloat @@ -158,7 +186,7 @@ myManageHook = composeAll , resource =? "desktop_window" --> doIgnore , resource =? "kdesktop" --> doIgnore ] -myEventHook = mempty +-- myEventHook = mempty -- myLogHook = return () @@ -170,31 +198,33 @@ main = do -- `xmobar -x 0` launches the bar on monitor 0 xmproc <- spawnPipe "xmobar -x 0 /home/sravan/.xmonad/xmobar.config" -- launches xmobar as a dock - xmonad $ docks defaultConfig - { -- simple stuff - terminal = myTerminal, - focusFollowsMouse = myFocusFollowsMouse, - clickJustFocuses = myClickJustFocuses, - borderWidth = myBorderWidth, - modMask = myModMask, - workspaces = myWorkspaces, - normalBorderColor = myNormalBorderColor, - focusedBorderColor = myFocusedBorderColor, - - -- key bindings - keys = myKeys, - mouseBindings = myMouseBindings, - - -- hooks, layouts - layoutHook = myLayout, - manageHook = myManageHook, - handleEventHook = myEventHook, - logHook = dynamicLogWithPP xmobarPP - { ppOutput = hPutStrLn xmproc - , ppTitle = xmobarColor "green" "" . shorten 50 - }, - startupHook = myStartupHook - } + xmonad $ ewmh desktopConfig + { manageHook = manageDocks <+> manageHook desktopConfig + , startupHook = myStartupHook + , layoutHook = myLayout + , borderWidth = myBorderWidth + , terminal = myTerminal + , modMask = myModMask + , normalBorderColor = myNormalBorderColor + , focusedBorderColor = myFocusedBorderColor + , logHook = dynamicLogWithPP xmobarPP + { ppOutput = \x -> hPutStrLn xmproc x + , ppCurrent = xmobarColor "green" "" . wrap "[" "]" -- current workspace in xmobar + , ppVisible = xmobarColor "cyan" "" -- visible but not current workspace + , ppHidden = xmobarColor "yellow" "" . wrap "+" "" -- hidden workspaces in xmobar + , ppHiddenNoWindows = xmobarColor "white" "" -- hidden workspaces (no windows) + , ppTitle = xmobarColor "purple" "" . shorten 80 -- title of active window in xmobar + , ppSep = " | " -- separators in xmobar + , ppUrgent = xmobarColor "red" "" . wrap "!" "!" -- urgent workspace + , ppOrder = \(ws:l:t:ex) -> [ws,l,t] + } + -- focusFollowsMouse = myFocusFollowsMouse, + -- clickJustFocuses = myClickJustFocuses, + -- workspaces = myWorkspaces, + -- keys = myKeys, + -- mouseBindings = myMouseBindings, + -- handleEventHook = myEventHook, + } `additionalKeysP` myKeys help :: String help = unlines ["The default modifier key is 'alt'. Default keybindings:",