-- imports
import XMonad
import XMonad.Util.EZConfig
import XMonad.Config.Kde
import XMonad.Layout.SubLayouts
import XMonad.Layout.PerWorkspace
import XMonad.Layout.LayoutModifier
import XMonad.Layout.Magnifier
import XMonad.Layout.Master
import XMonad.Layout.Mosaic
import XMonad.Layout.MosaicAlt
import XMonad.Layout.Spacing
import XMonad.Layout.WindowArranger
import XMonad.Layout.WindowNavigation as N
import XMonad.Layout.Hidden
import XMonad.Layout.Groups.Wmii
import XMonad.Actions.Submap
import XMonad.Hooks.ManageDocks
import qualified Data.Map as M
import qualified XMonad.Layout.Groups as G
import XMonad.Layout.Master
import qualified XMonad.Layout.BinarySpacePartition as BSP
import XMonad.Hooks.DynamicLog
import XMonad.Layout.Hidden
import XMonad.Layout.Stoppable
import XMonad.Hooks.EwmhDesktops
import XMonad.Layout.Spacing
import qualified XMonad.StackSet as W
import XMonad.Actions.CopyWindow
import Data.Monoid
import System.Exit
import Data.List
import XMonad.Layout.ToggleLayouts
import XMonad.Layout.LayoutScreens
import XMonad.Layout.TwoPane
import XMonad.Layout.ZoomRow
import XMonad.Layout.Combo
import XMonad.Layout.Groups.Examples
import XMonad.Layout.BinaryColumn
import qualified XMonad.Layout.GridVariants as GV
import XMonad.Layout.AutoMaster
import XMonad.Layout.Master
import qualified XMonad.Layout.MultiToggle as MT
import XMonad.Prompt
import XMonad.Prompt.RunOrRaise
import XMonad.Prompt.Shell
import XMonad.Layout.Groups.Helpers
import XMonad.Actions.FocusNth
import XMonad.Layout.ResizableTile
import XMonad.Layout.DwmStyle
import XMonad.Layout.Spacing
import XMonad.Layout.Maximize
import XMonad.Actions.DynamicWorkspaces
import XMonad.Actions.Navigation2D
import XMonad.Actions.CycleWS
import Data.Tree
import XMonad.Actions.TreeSelect
import XMonad.Hooks.WorkspaceHistory
import XMonad.Actions.TagWindows
import XMonad.Actions.LinkWorkspaces

myLayouts =
  -- subLayout [] (ResizableTall 0 (3/100) (1/2) []) $ (Mirror $ ResizableTall 0 (3/100) (1/2) []) |||
  BSP.emptyBSP |||
  rowOfColumns |||
  Mirror rowOfColumns |||
  mastered (1/100) (1/2) rowOfColumns

  -- |||  Tall 1 (3/100) (1/2) ||| mosaic 2 [3,2]

myWorkspaces :: Forest String
myWorkspaces = [ Node "Home"       -- for everyday activity's
                   [ Node "1" []   --  with 4 extra sub-workspaces, for even more activity's
                   , Node "2" []
                   , Node "3" []
                   , Node "4" []
                   ]
               , Node "Browser"
                 [ Node "1" []
                 , Node "2" []
                 , Node "3" []
                 ]
               , Node "Programming" -- for all your programming needs
                   [ Node "Intelij" []
                   , Node "Docs"    [] -- documentation
                   , Node "1"    []
                   , Node "2"    []
                   ]
               , Node "Mail" []
               , Node "Media"
                 [ Node "1" []
                 , Node "2" []
                 ]
               ]

myTsConfig = TSConfig { ts_hidechildren = True
                           , ts_background   = 0x00000000
                           , ts_font         = "xft:Sans-14"
                           , ts_node         = (0xff000000, 0xff50d0db)
                           , ts_nodealt      = (0xff000000, 0xff10b8d6)
                           , ts_highlight    = (0xffffffff, 0xffff0000)
                           , ts_extra        = 0xff000000
                           , ts_node_width   = 200
                           , ts_node_height  = 30
                           , ts_originX      = 0
                           , ts_originY      = 0
                           , ts_indent       = 80
                           , ts_navigate     = defaultNavigation
                           }

-- float krunner and plasmashell
myManageHook = composeAll . concat $
  [ [ className   =? c --> doFloat   | c <- myFloats] ]

    where myFloats = ["plasmashell","krunner"]

main =  xmonad $ withNavigation2DConfig def $ myconfig

myconfig = ewmh $ kdeConfig
  { manageHook  = manageHook kdeConfig <+> myManageHook
  , borderWidth = 2
  , workspaces  = toWorkspaces myWorkspaces
  , modMask     = mod4Mask
  -- modifiers for all layouts, avoiding docks, hidding(minimizing) Windows, maximizing windows, window gaps
  , layoutHook  = avoidStruts $ (hiddenWindows $ (maximize $ (spacing 4 $ myLayouts)))
  , logHook     =  workspaceHistoryHook >> dynamicLog
  , terminal    = "alacritty"
  , normalBorderColor  = "#1d252c"
  , focusedBorderColor = "#cd8b00"
  } `removeKeys`
  [(mod1Mask .|. shiftMask, n) | n <- [xK_1 .. xK_9]
  ] `additionalKeysP`
  [ -- ("M-S-<Return>", spawn $ Xmonad.terminal conf)
    ("M-<Space> <Space>", sendMessage NextLayout)
  , ("M-S-C-r", spawn "xmonad --recompile; xmonad --restart > ~/.xmonad/xmonad.status")
  , ("M-q", kill1)
   --groups
  , ("M-<Space> g k", swapUp)
  , ("M-<Space> g j", swapDown)
  , ("M-<Space> g S-k", swapGroupUp)
  , ("M-<Space> g S-j", swapGroupDown)
  , ("M-<Space> g C-k", moveToNewGroupUp)
  , ("M-<Space> g C-j", moveToNewGroupDown)
  , ("M-<Space> g M1-k", (moveToGroupUp True))
  , ("M-<Space> g M1-j", (moveToGroupDown True))
  , ("M-<Space> g i", zoomWindowIn)
  , ("M-<Space> g o", zoomWindowOut)
  , ("M-<Space> g S-i", zoomGroupIn)
  , ("M-<Space> g S-o", zoomGroupOut)
  , ("M-<Space> g S-f", toggleGroupFull)
  , ("M-<Space> g f", toggleWindowFull)
  , ("M-<Space> g r", zoomWindowReset)
  , ("M-<Space> g n", groupToNextLayout)
  , ("M-g k", swapUp)
  , ("M-g j", swapDown)
  , ("M-g S-k", swapGroupUp)
  , ("M-g S-j", swapGroupDown)
  , ("M-g C-k", moveToNewGroupUp)
  , ("M-g C-j", moveToNewGroupDown)
  , ("M-g M1-k", (moveToGroupUp True))
  , ("M-g M1-j", (moveToGroupDown True))
  , ("M-g i", zoomWindowIn)
  , ("M-g o", zoomWindowOut)
  , ("M-g S-i", zoomGroupIn)
  , ("M-g S-o", zoomGroupOut)
  , ("M-g S-f", toggleGroupFull)
  , ("M-g f", toggleWindowFull)
  , ("M-g r", zoomWindowReset)
  , ("M-g n", groupToNextLayout)
  , ("M-i", zoomWindowIn)
  , ("M-o", zoomWindowOut)
  , ("M-S-i", zoomGroupIn)
  , ("M-S-o", zoomGroupOut)
  -- workspaces
  , ("M-<Space> <Tab> w", selectWorkspace def)
  , ("M-<Space> <Tab> <Tab>", selectWorkspace def)
  , ("M-<Space> e", selectWorkspace def)
  , ("M-<Space> <Tab> x", removeWorkspace)
  , ("M-<Space> <Tab> m", withWorkspace def (windows . W.shift))
  , ("M-<Space> <Tab> c", withWorkspace def (windows . copy))
  , ("M-<Space> m", withWorkspace def (windows . W.shift))
  , ("M-<Space> c", withWorkspace def (windows . copy))
  , ("M-<Space> <Tab> s", addWorkspacePrompt def)
  , ("M-<Space> <Tab> r", renameWorkspace def)
  , ("M-<Space> <Tab> j", nextWS)
  , ("M-<Space> <Tab> k", prevWS)
  , ("M-<Space> <Tab> S-j", shiftToNext)
  , ("M-<Space> <Tab> S-k", shiftToPrev)
  , ("M-<Space> <Tab> l", nextScreen)
  , ("M-<Space> <Tab> h", prevScreen)
  , ("M-<Space> <Tab> S-l", shiftNextScreen)
  , ("M-<Space> <Tab> S-h", shiftPrevScreen)
  , ("M-<Space> <Tab> z", toggleWS)
  -- BSP
  , ("M-M1-h", sendMessage $ BSP.ExpandTowards L)
  , ("M-M1-l", sendMessage $ BSP.ExpandTowards R)
  , ("M-M1-j", sendMessage $ BSP.ExpandTowards D)
  , ("M-M1-k", sendMessage $ BSP.ExpandTowards U)
  , ("M-<Space> b M1-j", sendMessage $ BSP.ExpandTowards D)
  , ("M-<Space> b M1-l", sendMessage $ BSP.ShrinkFrom R)
  , ("M-<Space> b M1-k", sendMessage $ BSP.ExpandTowards U)
  , ("M-<Space> b M1-j", sendMessage $ BSP.ShrinkFrom D)
  , ("M-<Space> b M1-C-h",  sendMessage $ BSP.ShrinkFrom L)
  , ("M-<Space> b M1-C-l", sendMessage $ BSP.ExpandTowards R)
  , ("M-<Space> b M1-C-k", sendMessage $ BSP.ShrinkFrom U)
  , ("M-<Space> b M1-C-j", sendMessage $ BSP.ExpandTowards D)
  , ("M-<space> b s", sendMessage $ BSP.Swap)
  , ("M-<Space> b r", sendMessage $ BSP.Rotate)
  , ("M-<Space> b b", sendMessage $ BSP.Balance)
  , ("m-<Space> b e", sendMessage $ BSP.Equalize)
  , ("M-b M1-h", sendMessage $ BSP.ExpandTowards L)
  , ("M-b M1-S-h", sendMessage $ BSP.ShrinkFrom R)
  , ("M-b M1-k", sendMessage $ BSP.ExpandTowards U)
  , ("M-b M1-S-k", sendMessage $ BSP.ShrinkFrom D)
  , ("M-b M1-S-l",  sendMessage $ BSP.ShrinkFrom L)
  , ("M-b M1-l", sendMessage $ BSP.ExpandTowards R)
  , ("M-b M1-S-j", sendMessage $ BSP.ShrinkFrom U)
  , ("M-b M1-j", sendMessage $ BSP.ExpandTowards D)
  , ("M-b s", sendMessage $ BSP.Swap)
  , ("M-b r", sendMessage $ BSP.Rotate)
  , ("M-b b", sendMessage $ BSP.Balance)
  , ("m-b e", sendMessage $ BSP.Equalize)
--run or Copy
  , ("M-<Space> r f", runOrCopy "firefox" (className =? "Firefox"))
  , ("M-<Space> r e", runOrCopy "Doom Emacs" (className =? "Emacs"))
  , ("M-<Space> r t", runOrCopy "Thunderbird" (className =? "Thunderbrid"))
  -- Prompts
  , ("M-p s", shellPrompt def)
 -- subLayouts
 -- navigation
  -- Directional navigation of windows
  , ("M-l", windowGo R False)
  , ("M-h", windowGo L False)
  , ("M-k", windowGo U False)
  , ("M-j", windowGo D False)

  -- -- Swap adjacent windows
  , ("M-C-l", windowSwap R False)
  , ("M-C-h", windowSwap L False)
  , ("M-C-k", windowSwap U False)
  , ("M-C-j", windowSwap D False)
  -- --Arrange Windows
 , ("M-a", sendMessage  Arrange         )
 , ("M-S-a", sendMessage  DeArrange       )
 , ("M-S-h", sendMessage (MoveLeft      1))
 , ("M-S-l", sendMessage (MoveRight     1))
 , ("M-S-j", sendMessage (MoveDown      1))
 , ("M-S-k", sendMessage (MoveUp        1))
 -- , ("M-M1-h", sendMessage (IncreaseLeft  1))
 -- , ("M-M1-l", sendMessage (IncreaseRight 1))
 -- , ("M-M1-j", sendMessage (IncreaseDown  1))
 -- , ("M-M1-k", sendMessage (IncreaseUp    1))
 -- , ("M-M1-S-h", sendMessage (DecreaseLeft  1))
 -- , ("M-M1-S-l", sendMessage (DecreaseRight 1))
 -- , ("M-M1-S-j", sendMessage (DecreaseDown  1))
 -- , ("M-M1-S-k", sendMessage (DecreaseUp    1))
 -- -- window
 , ("M-<Space> w l", windowGo R False)
 , ("M-<Space> w h", windowGo L False)
 , ("M-<Space> w k", windowGo U False)
 , ("M-<Space> w j", windowGo D False)
 , ("M-<Space> w S-l", windowSwap R False)
 , ("M-<Space> w S-h", windowSwap L False)
 , ("M-<Space> w S-k", windowSwap U False)
 , ("M-<Space> w S-j", windowSwap D False)
 , ("M-<Space> w C-h", sendMessage (DecreaseLeft  1))
 , ("M-<Space> w C-l", sendMessage (DecreaseRight 1))
 , ("M-<Space> w C-j", sendMessage (DecreaseDown  1))
 , ("M-<Space> w C-k", sendMessage (DecreaseUp    1))
 , ("M-<Space> w M1-h", sendMessage (IncreaseLeft  1))
 , ("M-<Space> w M1-l", sendMessage (IncreaseRight 1))
 , ("M-<Space> w M1-j", sendMessage (IncreaseDown  1))
 , ("M-<Space> w M1-k", sendMessage (IncreaseUp    1))
 , ("M-<Space> w m", withFocused hideWindow)
 , ("M-<Space> w S-m", popOldestHiddenWindow)
 , ("M-<Space> w C-m", withFocused (sendMessage . maximizeRestore))
 , ("M-<Space> w i", zoomWindowIn)
 , ("M-<Space> w o", zoomWindowOut)
 , ("M-<Space> w S-i", zoomGroupIn)
 , ("M-<Space> w S-o", zoomGroupOut)
 , ("M-<Space> w S-f", toggleGroupFull)
 , ("M-<Space> w f", toggleWindowFull)
 , ("M-<Space> w r", zoomWindowReset)
 -- window
 , ("M-w q", kill1)
 , ("M-w l", windowGo R False)
 , ("M-w h", windowGo L False)
 , ("M-w k", windowGo U False)
 , ("M-w j", windowGo D False)
 , ("M-w S-l", windowSwap R False)
 , ("M-w S-h", windowSwap L False)
 , ("M-w S-k", windowSwap U False)
 , ("M-w S-j", windowSwap D False)
 , ("M-w C-h", sendMessage (DecreaseLeft  1))
 , ("M-w C-l", sendMessage (DecreaseRight 1))
 , ("M-w C-j", sendMessage (DecreaseDown  1))
 , ("M-w C-k", sendMessage (DecreaseUp    1))
 , ("M-w M1-h", sendMessage (IncreaseLeft  1))
 , ("M-w M1-l", sendMessage (IncreaseRight 1))
 , ("M-w M1-j", sendMessage (IncreaseDown  1))
 , ("M-w M1-k", sendMessage (IncreaseUp    1))
 , ("M-w m", withFocused hideWindow)
 , ("M-w S-m", popOldestHiddenWindow)
 , ("M-w C-m", withFocused (sendMessage . maximizeRestore))
 , ("M-w i", zoomWindowIn)
 , ("M-w o", zoomWindowOut)
 , ("M-w S-i", zoomGroupIn)
 , ("M-w S-o", zoomGroupOut)
 , ("M-w S-f", toggleGroupFull)
 , ("M-w f", toggleWindowFull)
 , ("M-w r", zoomWindowReset)
 , ("M-w <Tab> w", selectWorkspace def)
 , ("M-w <Tab> <Tab>", selectWorkspace def)
 , ("M-w e", selectWorkspace def)
 , ("M-e", selectWorkspace def)
 , ("M-w <Tab> x", removeWorkspace)
 , ("M-w <Tab> m", withWorkspace def (windows . W.shift))
 , ("M-w <Tab> c", withWorkspace def (windows . copy))
 , ("M-c m", withWorkspace def (windows . W.shift))
 , ("M-c c", withWorkspace def (windows . copy))
 , ("M-w <Tab> s", addWorkspacePrompt def)
 , ("M-w <Tab> r", renameWorkspace def)
 , ("M-w <Tab> j", nextWS)
 , ("M-w <Tab> k", prevWS)
 , ("M-w <Tab> S-j", shiftToNext)
 , ("M-w <Tab> S-k", shiftToPrev)
 , ("M-w <Tab> l", nextScreen)
 , ("M-w <Tab> h", prevScreen)
 , ("M-w <Tab> S-l", shiftNextScreen)
 , ("M-w <Tab> S-h", shiftPrevScreen)
 , ("M-w <Tab> z", toggleWS)
 , ("M-w b M1-h", sendMessage $ BSP.ExpandTowards L)
 , ("M-w b M1-S-h", sendMessage $ BSP.ShrinkFrom R)
 , ("M-w b M1-k", sendMessage $ BSP.ExpandTowards U)
 , ("M-w b M1-S-k", sendMessage $ BSP.ShrinkFrom D)
 , ("M-w b M1-S-l",  sendMessage $ BSP.ShrinkFrom L)
 , ("M-w b M1-l", sendMessage $ BSP.ExpandTowards R)
 , ("M-w b M1-S-j", sendMessage $ BSP.ShrinkFrom U)
 , ("M-w b M1-j", sendMessage $ BSP.ExpandTowards D)
 -- , ("M-M1-h", sendMessage $ BSP.ExpandTowards L)
 -- , ("M-M1-S-h", sendMessage $ BSP.ShrinkFrom R)
 -- , ("M-M1-k", sendMessage $ BSP.ExpandTowards U)
 -- , ("M-M1-S-k", sendMessage $ BSP.ShrinkFrom D)
 -- , ("M-M1-S-l",  sendMessage $ BSP.ShrinkFrom L)
 -- , ("M-M1-l", sendMessage $ BSP.ExpandTowards R)
 -- , ("M-M1-S-j", sendMessage $ BSP.ShrinkFrom U)
 -- , ("M-M1-j", sendMessage $ BSP.ExpandTowards D)
 -- , ("M-w b s", sendMessage $ BSP.Swap)
 , ("M-w b r", sendMessage $ BSP.Rotate)
 , ("M-w b b", sendMessage $ BSP.Balance)
 , ("m-w b e", sendMessage $ BSP.Equalize)
 -- minimiz/maximize
 , ("M-m", withFocused hideWindow)
 , ("M-S-m", popOldestHiddenWindow)
 , ("M-C-m", withFocused (sendMessage . maximizeRestore))
 , ("M-<F1>", spawn "rofi_run -w")
 , ("M-<F2>", spawn "rofi_run")
 , ("M3-<F1>", spawn "rofi_run -w")
 , ("M3-<F2>", spawn "rofi_run")
 , ("M-f", treeselectWorkspace myTsConfig myWorkspaces W.greedyView)
 , ("M-S-f", treeselectWorkspace myTsConfig myWorkspaces W.shift)
 -- , ("M-C-1", setWorkspaceIndex 1)
 -- , ("M-C-2", setWorkspaceIndex 2)
 -- , ("M-C-3", setWorkspaceIndex 3)
 -- , ("M-C-4", setWorkspaceIndex 4)
 -- , ("M-C-5", setWorkspaceIndex 5)
 -- , ("M-C-6", setWorkspaceIndex 6)
 -- , ("M-C-7", setWorkspaceIndex 7)
 -- , ("M-C-8", setWorkspaceIndex 8)
 -- , ("M-C-9", setWorkspaceIndex 9)
 -- tags
  , ("M-<Space> t t 1", withFocused (addTag "1"))
  , ("M-<Space> t t 2", withFocused (addTag "2"))
  , ("M-<Space> t t 3", withFocused (addTag "3"))
  , ("M-<Space> t t 4", withFocused (addTag "4"))
  , ("M-<Space> t t 5", withFocused (addTag "5"))
  , ("M-<Space> t t 6", withFocused (addTag "6"))
  , ("M-<Space> t t 7", withFocused (addTag "7"))
  , ("M-<Space> t t 8", withFocused (addTag "8"))
  , ("M-<Space> t t 9", withFocused (addTag "9"))
  , ("M-<Space> t t 0", withFocused (addTag "0"))
  , ("M-<Space> t f 1", focusUpTaggedGlobal "1")
  , ("M-<Space> t f 2", focusUpTaggedGlobal "2")
  , ("M-<Space> t f 3", focusUpTaggedGlobal "3")
  , ("M-<Space> t f 4", focusUpTaggedGlobal "4")
  , ("M-<Space> t f 5", focusUpTaggedGlobal "5")
  , ("M-<Space> t f 6", focusUpTaggedGlobal "6")
  , ("M-<Space> t f 7", focusUpTaggedGlobal "7")
  , ("M-<Space> t f 8", focusUpTaggedGlobal "8")
  , ("M-<Space> t f 9", focusUpTaggedGlobal "9")
  , ("M-<Space> t f 0", focusUpTaggedGlobal "0")
  , ("M-<Space> t f C-1", focusDownTaggedGlobal "1")
  , ("M-<Space> t f C-2", focusDownTaggedGlobal "2")
  , ("M-<Space> t f C-3", focusDownTaggedGlobal "3")
  , ("M-<Space> t f C-4", focusDownTaggedGlobal "4")
  , ("M-<Space> t f C-5", focusDownTaggedGlobal "5")
  , ("M-<Space> t f C-6", focusDownTaggedGlobal "6")
  , ("M-<Space> t f C-7", focusDownTaggedGlobal "7")
  , ("M-<Space> t f C-8", focusDownTaggedGlobal "8")
  , ("M-<Space> t f C-9", focusDownTaggedGlobal "9")
  , ("M-<Space> t f C-0", focusDownTaggedGlobal "0")
  , ("M-<Space> t u", withFocused unTag)
  , ("M-<Space> t a", tagPrompt def (\s -> withFocused (addTag s)))
  , ("M-<Space> t x", tagDelPrompt def)
  , ("M-t a 1", withFocused (addTag "1"))
  , ("M-t a 2", withFocused (addTag "2"))
  , ("M-t a 3", withFocused (addTag "3"))
  , ("M-t a 4", withFocused (addTag "4"))
  , ("M-t a 5", withFocused (addTag "5"))
  , ("M-t a 6", withFocused (addTag "6"))
  , ("M-t a 7", withFocused (addTag "7"))
  , ("M-t a 8", withFocused (addTag "8"))
  , ("M-t a 9", withFocused (addTag "9"))
  , ("M-t a 0", withFocused (addTag "0"))
  , ("M-t a q", withFocused (addTag "q"))
  , ("M-t a w", withFocused (addTag "w"))
  , ("M-t a e", withFocused (addTag "e"))
  , ("M-t a r", withFocused (addTag "r"))
  , ("M-t a t", withFocused (addTag "t"))
  , ("M-t a z", withFocused (addTag "z"))
  , ("M-t a u", withFocused (addTag "u"))
  , ("M-t a i", withFocused (addTag "i"))
  , ("M-t a o", withFocused (addTag "o"))
  , ("M-t a p", withFocused (addTag "p"))
  , ("M-t 1", focusUpTaggedGlobal "1")
  , ("M-t 2", focusUpTaggedGlobal "2")
  , ("M-t 3", focusUpTaggedGlobal "3")
  , ("M-t 4", focusUpTaggedGlobal "4")
  , ("M-t 5", focusUpTaggedGlobal "5")
  , ("M-t 6", focusUpTaggedGlobal "6")
  , ("M-t 7", focusUpTaggedGlobal "7")
  , ("M-t 8", focusUpTaggedGlobal "8")
  , ("M-t 9", focusUpTaggedGlobal "9")
  , ("M-t 0", focusUpTaggedGlobal "0")
  , ("M-t q", focusUpTaggedGlobal "q")
  , ("M-t w", focusUpTaggedGlobal "w")
  , ("M-t e", focusUpTaggedGlobal "e")
  , ("M-t r", focusUpTaggedGlobal "r")
  , ("M-t t", focusUpTaggedGlobal "t")
  , ("M-t z", focusUpTaggedGlobal "z")
  , ("M-t u", focusUpTaggedGlobal "u")
  , ("M-t i", focusUpTaggedGlobal "i")
  , ("M-t o", focusUpTaggedGlobal "o")
  , ("M-t p", focusUpTaggedGlobal "p")
  , ("M-t S-1", focusDownTaggedGlobal "1")
  , ("M-t S-2", focusDownTaggedGlobal "2")
  , ("M-t S-3", focusDownTaggedGlobal "3")
  , ("M-t S-4", focusDownTaggedGlobal "4")
  , ("M-t S-5", focusDownTaggedGlobal "5")
  , ("M-t S-6", focusDownTaggedGlobal "6")
  , ("M-t S-7", focusDownTaggedGlobal "7")
  , ("M-t S-8", focusDownTaggedGlobal "8")
  , ("M-t S-9", focusDownTaggedGlobal "9")
  , ("M-t S-0", focusDownTaggedGlobal "0")
  , ("M-t S-q", focusDownTaggedGlobal "q")
  , ("M-t S-w", focusDownTaggedGlobal "w")
  , ("M-t S-e", focusDownTaggedGlobal "e")
  , ("M-t S-r", focusDownTaggedGlobal "r")
  , ("M-t S-t", focusDownTaggedGlobal "t")
  , ("M-t S-z", focusDownTaggedGlobal "z")
  , ("M-t S-u", focusDownTaggedGlobal "u")
  , ("M-t S-i", focusDownTaggedGlobal "i")
  , ("M-t S-o", focusDownTaggedGlobal "o")
  , ("M-t S-p", focusDownTaggedGlobal "p")
  , ("M-<Space> s",withFocused $ windows . W.sink)
  -- , ("M-c 1", copy 1)
  -- , ("M-c 2", copy 2)
  -- , ("M-c 3", copy 3)
  -- , ("M-c 4", copy 4)
  -- , ("M-c 5", copy 5)
  -- , ("M-c 6", copy 6)
  -- , ("M-c 7", copy 7)
  -- , ("M-c 8", copy 8)

 -- , ("M-c 9", copy 9)
  ]
