{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS -fno-warn-missing-signatures #-}
----------------------------------------------------------------------------
-- |
-- Module      :  XMonad.Config.Bluetile
-- Description :  Default configuration of [Bluetile](http://projects.haskell.org/bluetile/).
-- Copyright   :  (c) Jan Vornberger 2009
-- License     :  BSD3-style (see LICENSE)
--
-- Maintainer  :  jan.vornberger@informatik.uni-oldenburg.de
-- Stability   :  unstable
-- Portability :  not portable
--
-- This is the default configuration of Bluetile
-- (<http://projects.haskell.org/bluetile/>). If you
-- are migrating from Bluetile to xmonad or want to create
-- a similar setup, then this will give you pretty much
-- the same thing, except for Bluetile's helper applications
-- such as the dock.
--
-----------------------------------------------------------------------------

module XMonad.Config.Bluetile (
    -- * Usage
    -- $usage
    bluetileConfig
    ) where

import XMonad

import XMonad.Layout.BorderResize
import XMonad.Layout.BoringWindows hiding (Replace)
import XMonad.Layout.ButtonDecoration
import XMonad.Layout.Decoration
import XMonad.Layout.DecorationAddons
import XMonad.Layout.DraggingVisualizer
import XMonad.Layout.Maximize
import XMonad.Layout.Minimize
import XMonad.Layout.MouseResizableTile
import XMonad.Layout.Renamed
import XMonad.Layout.NoBorders
import XMonad.Layout.PositionStoreFloat
import XMonad.Layout.WindowSwitcherDecoration

import XMonad.Actions.BluetileCommands
import XMonad.Actions.CycleWS
import XMonad.Actions.Minimize
import XMonad.Actions.WindowMenu

import XMonad.Hooks.CurrentWorkspaceOnTop
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.PositionStoreHooks
import XMonad.Hooks.Minimize
import XMonad.Hooks.ServerMode
import XMonad.Hooks.WorkspaceByPos

import XMonad.Config.Gnome

import qualified XMonad.StackSet as W
import qualified Data.Map as M

import System.Exit
import XMonad.Prelude(when)

-- $usage
-- To use this module, start with the following @xmonad.hs@:
--
-- > import XMonad
-- > import XMonad.Config.Bluetile
-- > import XMonad.Util.Replace
-- >
-- > main = replace >> xmonad bluetileConfig
--
-- The invocation of 'replace' will replace a currently running
-- window manager. This is the default behaviour of Bluetile as well.
-- See "XMonad.Util.Replace" for more information.

bluetileWorkspaces :: [String]
bluetileWorkspaces :: [String]
bluetileWorkspaces = [String
"1",String
"2",String
"3",String
"4",String
"5",String
"6",String
"7",String
"8",String
"9",String
"0"]

bluetileKeys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
bluetileKeys :: XConfig Layout -> Map (KeyMask, Window) (X ())
bluetileKeys conf :: XConfig Layout
conf@XConfig{modMask :: forall (l :: * -> *). XConfig l -> KeyMask
XMonad.modMask = KeyMask
modMask'} = [((KeyMask, Window), X ())] -> Map (KeyMask, Window) (X ())
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([((KeyMask, Window), X ())] -> Map (KeyMask, Window) (X ()))
-> [((KeyMask, Window), X ())] -> Map (KeyMask, Window) (X ())
forall a b. (a -> b) -> a -> b
$
    -- launching and killing programs
    [ ((KeyMask
modMask'              , Window
xK_Return), String -> X ()
forall (m :: * -> *). MonadIO m => String -> m ()
spawn (String -> X ()) -> String -> X ()
forall a b. (a -> b) -> a -> b
$ XConfig Layout -> String
forall (l :: * -> *). XConfig l -> String
XMonad.terminal XConfig Layout
conf) -- %! Launch terminal
    , ((KeyMask
modMask',               Window
xK_p     ), X ()
gnomeRun)    --  %! Launch Gnome "Run application" dialog
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_c     ), X ()
kill) -- %! Close the focused window

    , ((KeyMask
modMask',               Window
xK_F5 ), X ()
refresh) -- %! Resize viewed windows to the correct size
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_F5 ), Layout Window -> X ()
setLayout (Layout Window -> X ()) -> Layout Window -> X ()
forall a b. (a -> b) -> a -> b
$ XConfig Layout -> Layout Window
forall (l :: * -> *). XConfig l -> l Window
XMonad.layoutHook XConfig Layout
conf) -- %!  Reset the layouts on the current workspace to default

    , ((KeyMask
modMask',               Window
xK_o ), X ()
windowMenu)

    -- move focus up or down the window stack
    , ((KeyMask
modMask',               Window
xK_Tab   ), X ()
focusDown) -- %! Move focus to the next window
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_Tab   ), X ()
focusUp) -- %! Move focus to the previous window
    , ((KeyMask
modMask',               Window
xK_j     ), X ()
focusDown) -- %! Move focus to the next window
    , ((KeyMask
modMask',               Window
xK_k     ), X ()
focusUp) -- %! Move focus to the previous window
    , ((KeyMask
modMask',               Window
xK_space ), X ()
focusMaster) -- %! Move focus to the master window

    -- modifying the window order
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_space ), (WindowSet -> WindowSet) -> X ()
windows WindowSet -> WindowSet
forall i l a s sd. StackSet i l a s sd -> StackSet i l a s sd
W.swapMaster) -- %! Swap the focused window and the master window
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_j     ), (WindowSet -> WindowSet) -> X ()
windows WindowSet -> WindowSet
forall i l a s sd. StackSet i l a s sd -> StackSet i l a s sd
W.swapDown  ) -- %! Swap the focused window with the next window
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_k     ), (WindowSet -> WindowSet) -> X ()
windows WindowSet -> WindowSet
forall i l a s sd. StackSet i l a s sd -> StackSet i l a s sd
W.swapUp    ) -- %! Swap the focused window with the previous window

    -- resizing the master/slave ratio
    , ((KeyMask
modMask',               Window
xK_h     ), Resize -> X ()
forall a. Message a => a -> X ()
sendMessage Resize
Shrink) -- %! Shrink the master area
    , ((KeyMask
modMask',               Window
xK_l     ), Resize -> X ()
forall a. Message a => a -> X ()
sendMessage Resize
Expand) -- %! Expand the master area
    , ((KeyMask
modMask',               Window
xK_u     ), MRTMessage -> X ()
forall a. Message a => a -> X ()
sendMessage MRTMessage
ShrinkSlave) -- %! Shrink a slave area
    , ((KeyMask
modMask',               Window
xK_i     ), MRTMessage -> X ()
forall a. Message a => a -> X ()
sendMessage MRTMessage
ExpandSlave) -- %! Expand a slave area

    -- floating layer support
    , ((KeyMask
modMask',               Window
xK_t     ), (Window -> X ()) -> X ()
withFocused ((Window -> X ()) -> X ()) -> (Window -> X ()) -> X ()
forall a b. (a -> b) -> a -> b
$ (WindowSet -> WindowSet) -> X ()
windows ((WindowSet -> WindowSet) -> X ())
-> (Window -> WindowSet -> WindowSet) -> Window -> X ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Window -> WindowSet -> WindowSet
forall a i l s sd.
Ord a =>
a -> StackSet i l a s sd -> StackSet i l a s sd
W.sink) -- %! Push window back into tiling
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_t     ), (Window -> X ()) -> X ()
withFocused Window -> X ()
float ) -- %! Float window

    -- increase or decrease number of windows in the master area
    , ((KeyMask
modMask'              , Window
xK_comma ), IncMasterN -> X ()
forall a. Message a => a -> X ()
sendMessage (Int -> IncMasterN
IncMasterN Int
1)) -- %! Increment the number of windows in the master area
    , ((KeyMask
modMask'              , Window
xK_period), IncMasterN -> X ()
forall a. Message a => a -> X ()
sendMessage (Int -> IncMasterN
IncMasterN (-Int
1))) -- %! Deincrement the number of windows in the master area

    -- quit, or restart
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_q     ), IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io IO ()
forall a. IO a
exitSuccess) -- %! Quit
    , ((KeyMask
modMask'              , Window
xK_q     ), String -> Bool -> X ()
restart String
"xmonad" Bool
True) -- %! Restart

    -- Metacity-like workspace switching
    , ((KeyMask
mod1Mask KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
controlMask, Window
xK_Left), X ()
prevWS)
    , ((KeyMask
mod1Mask KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
controlMask, Window
xK_Right), X ()
nextWS)
    , ((KeyMask
mod1Mask KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
controlMask KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask,   Window
xK_Left), X ()
shiftToPrev X () -> X () -> X ()
forall a b. X a -> X b -> X b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> X ()
prevWS)
    , ((KeyMask
mod1Mask KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
controlMask KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask,   Window
xK_Right), X ()
shiftToNext X () -> X () -> X ()
forall a b. X a -> X b -> X b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> X ()
nextWS)

    -- more Metacity keys
    , ((KeyMask
mod1Mask             , Window
xK_F2), X ()
gnomeRun)
    , ((KeyMask
mod1Mask             , Window
xK_F4), X ()
kill)

    -- Switching to layouts
    , ((KeyMask
modMask'              , Window
xK_a), JumpToLayout -> X ()
forall a. Message a => a -> X ()
sendMessage (JumpToLayout -> X ()) -> JumpToLayout -> X ()
forall a b. (a -> b) -> a -> b
$ String -> JumpToLayout
JumpToLayout String
"Floating")
    , ((KeyMask
modMask'              , Window
xK_s), JumpToLayout -> X ()
forall a. Message a => a -> X ()
sendMessage (JumpToLayout -> X ()) -> JumpToLayout -> X ()
forall a b. (a -> b) -> a -> b
$ String -> JumpToLayout
JumpToLayout String
"Tiled1")
    , ((KeyMask
modMask'              , Window
xK_d), JumpToLayout -> X ()
forall a. Message a => a -> X ()
sendMessage (JumpToLayout -> X ()) -> JumpToLayout -> X ()
forall a b. (a -> b) -> a -> b
$ String -> JumpToLayout
JumpToLayout String
"Tiled2")
    , ((KeyMask
modMask'              , Window
xK_f), JumpToLayout -> X ()
forall a. Message a => a -> X ()
sendMessage (JumpToLayout -> X ()) -> JumpToLayout -> X ()
forall a b. (a -> b) -> a -> b
$ String -> JumpToLayout
JumpToLayout String
"Fullscreen")

    -- Maximizing
    , ((KeyMask
modMask'              , Window
xK_z), (Window -> X ()) -> X ()
withFocused (MaximizeRestore -> X ()
forall a. Message a => a -> X ()
sendMessage (MaximizeRestore -> X ())
-> (Window -> MaximizeRestore) -> Window -> X ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Window -> MaximizeRestore
maximizeRestore))

    -- Minimizing
    , ((KeyMask
modMask',               Window
xK_m     ), (Window -> X ()) -> X ()
withFocused Window -> X ()
minimizeWindow)
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Window
xK_m     ), (Window -> X ()) -> X ()
withLastMinimized Window -> X ()
maximizeWindow)
    ]
    [((KeyMask, Window), X ())]
-> [((KeyMask, Window), X ())] -> [((KeyMask, Window), X ())]
forall a. [a] -> [a] -> [a]
++
    -- mod-[1..9] ++ [0] %! Switch to workspace N
    -- mod-shift-[1..9] ++ [0] %! Move client to workspace N
    [((KeyMask
m KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
modMask', Window
k), (WindowSet -> WindowSet) -> X ()
windows ((WindowSet -> WindowSet) -> X ())
-> (WindowSet -> WindowSet) -> X ()
forall a b. (a -> b) -> a -> b
$ String -> WindowSet -> WindowSet
f String
i)
        | (String
i, Window
k) <- [String] -> [Window] -> [(String, Window)]
forall a b. [a] -> [b] -> [(a, b)]
zip (XConfig Layout -> [String]
forall (l :: * -> *). XConfig l -> [String]
XMonad.workspaces XConfig Layout
conf) ([Window
xK_1 .. Window
xK_9] [Window] -> [Window] -> [Window]
forall a. [a] -> [a] -> [a]
++ [Window
xK_0])
        , (String -> WindowSet -> WindowSet
f, KeyMask
m) <- [(String -> WindowSet -> WindowSet
forall s i l a sd.
(Eq s, Eq i) =>
i -> StackSet i l a s sd -> StackSet i l a s sd
W.greedyView, KeyMask
0), (String -> WindowSet -> WindowSet
forall a s i l sd.
(Ord a, Eq s, Eq i) =>
i -> StackSet i l a s sd -> StackSet i l a s sd
W.shift, KeyMask
shiftMask)]]
    [((KeyMask, Window), X ())]
-> [((KeyMask, Window), X ())] -> [((KeyMask, Window), X ())]
forall a. [a] -> [a] -> [a]
++
    -- 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
    [((KeyMask
m KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
modMask', Window
key), ScreenId -> X (Maybe String)
screenWorkspace ScreenId
sc X (Maybe String) -> (Maybe String -> X ()) -> X ()
forall a b. X a -> (a -> X b) -> X b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Maybe String -> (String -> X ()) -> X ())
-> (String -> X ()) -> Maybe String -> X ()
forall a b c. (a -> b -> c) -> b -> a -> c
flip Maybe String -> (String -> X ()) -> X ()
forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust ((WindowSet -> WindowSet) -> X ()
windows ((WindowSet -> WindowSet) -> X ())
-> (String -> WindowSet -> WindowSet) -> String -> X ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> WindowSet -> WindowSet
f))
        | (Window
key, ScreenId
sc) <- [Window] -> [ScreenId] -> [(Window, ScreenId)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Window
xK_w, Window
xK_e, Window
xK_r] [ScreenId
0..]
        , (String -> WindowSet -> WindowSet
f, KeyMask
m) <- [(String -> WindowSet -> WindowSet
forall s i l a sd.
(Eq s, Eq i) =>
i -> StackSet i l a s sd -> StackSet i l a s sd
W.view, KeyMask
0), (String -> WindowSet -> WindowSet
forall a s i l sd.
(Ord a, Eq s, Eq i) =>
i -> StackSet i l a s sd -> StackSet i l a s sd
W.shift, KeyMask
shiftMask)]]

bluetileMouseBindings :: XConfig Layout -> M.Map (KeyMask, Button) (Window -> X ())
bluetileMouseBindings :: XConfig Layout -> Map (KeyMask, Button) (Window -> X ())
bluetileMouseBindings XConfig{modMask :: forall (l :: * -> *). XConfig l -> KeyMask
XMonad.modMask = KeyMask
modMask'} = [((KeyMask, Button), Window -> X ())]
-> Map (KeyMask, Button) (Window -> X ())
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList
    -- mod-button1 %! Move a floated window by dragging
    [ ((KeyMask
modMask', Button
button1), \Window
w -> Window -> X Bool
isFloating Window
w X Bool -> (Bool -> X ()) -> X ()
forall a b. X a -> (a -> X b) -> X b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Bool
isF -> Bool -> X () -> X ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
isF (X () -> X ()) -> X () -> X ()
forall a b. (a -> b) -> a -> b
$
                                Window -> X ()
focus Window
w X () -> X () -> X ()
forall a b. X a -> X b -> X b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Window -> X ()
mouseMoveWindow Window
w X () -> X () -> X ()
forall a b. X a -> X b -> X b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (WindowSet -> WindowSet) -> X ()
windows WindowSet -> WindowSet
forall i l a s sd. StackSet i l a s sd -> StackSet i l a s sd
W.shiftMaster)
    -- mod-button2 %! Switch to next and first layout
    , ((KeyMask
modMask', Button
button2), \Window
_ -> ChangeLayout -> X ()
forall a. Message a => a -> X ()
sendMessage ChangeLayout
NextLayout)
    , ((KeyMask
modMask' KeyMask -> KeyMask -> KeyMask
forall a. Bits a => a -> a -> a
.|. KeyMask
shiftMask, Button
button2), \Window
_ -> JumpToLayout -> X ()
forall a. Message a => a -> X ()
sendMessage (JumpToLayout -> X ()) -> JumpToLayout -> X ()
forall a b. (a -> b) -> a -> b
$ String -> JumpToLayout
JumpToLayout String
"Floating")
    -- mod-button3 %! Resize a floated window by dragging
    , ((KeyMask
modMask', Button
button3), \Window
w -> Window -> X Bool
isFloating Window
w X Bool -> (Bool -> X ()) -> X ()
forall a b. X a -> (a -> X b) -> X b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Bool
isF -> Bool -> X () -> X ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
isF (X () -> X ()) -> X () -> X ()
forall a b. (a -> b) -> a -> b
$
                                Window -> X ()
focus Window
w X () -> X () -> X ()
forall a b. X a -> X b -> X b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Window -> X ()
mouseResizeWindow Window
w X () -> X () -> X ()
forall a b. X a -> X b -> X b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (WindowSet -> WindowSet) -> X ()
windows WindowSet -> WindowSet
forall i l a s sd. StackSet i l a s sd -> StackSet i l a s sd
W.shiftMaster)
    ]

isFloating :: Window -> X Bool
isFloating :: Window -> X Bool
isFloating Window
w = do
    WindowSet
ws <- (XState -> WindowSet) -> X WindowSet
forall s (m :: * -> *) a. MonadState s m => (s -> a) -> m a
gets XState -> WindowSet
windowset
    Bool -> X Bool
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (Bool -> X Bool) -> Bool -> X Bool
forall a b. (a -> b) -> a -> b
$ Window -> Map Window RationalRect -> Bool
forall k a. Ord k => k -> Map k a -> Bool
M.member Window
w (WindowSet -> Map Window RationalRect
forall i l a sid sd. StackSet i l a sid sd -> Map a RationalRect
W.floating WindowSet
ws)

bluetileManageHook :: ManageHook
bluetileManageHook :: ManageHook
bluetileManageHook = [ManageHook] -> ManageHook
forall m. Monoid m => [m] -> m
composeAll
               [ ManageHook
workspaceByPos, Maybe Theme -> ManageHook
positionStoreManageHook (Theme -> Maybe Theme
forall a. a -> Maybe a
Just Theme
defaultThemeWithButtons)
                , Query String
className Query String -> String -> Query Bool
forall a. Eq a => Query a -> a -> Query Bool
=? String
"MPlayer" Query Bool -> ManageHook -> ManageHook
forall (m :: * -> *) a. (Monad m, Monoid a) => m Bool -> m a -> m a
--> ManageHook
doFloat
                , Query Bool
isFullscreen Query Bool -> ManageHook -> ManageHook
forall (m :: * -> *) a. (Monad m, Monoid a) => m Bool -> m a -> m a
--> ManageHook
doFullFloat]

bluetileLayoutHook :: ModifiedLayout
  AvoidStruts
  (ModifiedLayout
     Minimize
     (ModifiedLayout
        BoringWindows
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration ButtonDecoration DefaultShrinker)
                 (ModifiedLayout
                    Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer
                          (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))))
  Window
bluetileLayoutHook = ModifiedLayout
  Minimize
  (ModifiedLayout
     BoringWindows
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration ButtonDecoration DefaultShrinker)
              (ModifiedLayout
                 Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer
                       (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))))
  Window
-> ModifiedLayout
     AvoidStruts
     (ModifiedLayout
        Minimize
        (ModifiedLayout
           BoringWindows
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration ButtonDecoration DefaultShrinker)
                    (ModifiedLayout
                       Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer
                             (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))))
     Window
forall (l :: * -> *) a.
LayoutClass l a =>
l a -> ModifiedLayout AvoidStruts l a
avoidStruts (ModifiedLayout
   Minimize
   (ModifiedLayout
      BoringWindows
      (Choose
         (ModifiedLayout
            Rename
            (ModifiedLayout
               (Decoration ButtonDecoration DefaultShrinker)
               (ModifiedLayout
                  Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
         (Choose
            (ModifiedLayout
               Rename
               (ModifiedLayout
                  (Decoration WindowSwitcherDecoration DefaultShrinker)
                  (ModifiedLayout
                     DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
            (Choose
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration WindowSwitcherDecoration DefaultShrinker)
                     (ModifiedLayout
                        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration WindowSwitcherDecoration DefaultShrinker)
                     (ModifiedLayout
                        DraggingVisualizer
                        (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))))
   Window
 -> ModifiedLayout
      AvoidStruts
      (ModifiedLayout
         Minimize
         (ModifiedLayout
            BoringWindows
            (Choose
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration ButtonDecoration DefaultShrinker)
                     (ModifiedLayout
                        Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration WindowSwitcherDecoration DefaultShrinker)
                        (ModifiedLayout
                           DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer
                              (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))))
      Window)
-> ModifiedLayout
     Minimize
     (ModifiedLayout
        BoringWindows
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration ButtonDecoration DefaultShrinker)
                 (ModifiedLayout
                    Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer
                          (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))))
     Window
-> ModifiedLayout
     AvoidStruts
     (ModifiedLayout
        Minimize
        (ModifiedLayout
           BoringWindows
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration ButtonDecoration DefaultShrinker)
                    (ModifiedLayout
                       Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer
                             (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))))
     Window
forall a b. (a -> b) -> a -> b
$ ModifiedLayout
  BoringWindows
  (Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration ButtonDecoration DefaultShrinker)
           (ModifiedLayout
              Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer
                    (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))
  Window
-> ModifiedLayout
     Minimize
     (ModifiedLayout
        BoringWindows
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration ButtonDecoration DefaultShrinker)
                 (ModifiedLayout
                    Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer
                          (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))))
     Window
forall (l :: * -> *). l Window -> ModifiedLayout Minimize l Window
minimize (ModifiedLayout
   BoringWindows
   (Choose
      (ModifiedLayout
         Rename
         (ModifiedLayout
            (Decoration ButtonDecoration DefaultShrinker)
            (ModifiedLayout
               Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
      (Choose
         (ModifiedLayout
            Rename
            (ModifiedLayout
               (Decoration WindowSwitcherDecoration DefaultShrinker)
               (ModifiedLayout
                  DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
         (Choose
            (ModifiedLayout
               Rename
               (ModifiedLayout
                  (Decoration WindowSwitcherDecoration DefaultShrinker)
                  (ModifiedLayout
                     DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
            (ModifiedLayout
               Rename
               (ModifiedLayout
                  (Decoration WindowSwitcherDecoration DefaultShrinker)
                  (ModifiedLayout
                     DraggingVisualizer
                     (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))
   Window
 -> ModifiedLayout
      Minimize
      (ModifiedLayout
         BoringWindows
         (Choose
            (ModifiedLayout
               Rename
               (ModifiedLayout
                  (Decoration ButtonDecoration DefaultShrinker)
                  (ModifiedLayout
                     Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
            (Choose
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration WindowSwitcherDecoration DefaultShrinker)
                     (ModifiedLayout
                        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration WindowSwitcherDecoration DefaultShrinker)
                        (ModifiedLayout
                           DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration WindowSwitcherDecoration DefaultShrinker)
                        (ModifiedLayout
                           DraggingVisualizer
                           (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))))
      Window)
-> ModifiedLayout
     BoringWindows
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration ButtonDecoration DefaultShrinker)
              (ModifiedLayout
                 Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer
                       (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))
     Window
-> ModifiedLayout
     Minimize
     (ModifiedLayout
        BoringWindows
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration ButtonDecoration DefaultShrinker)
                 (ModifiedLayout
                    Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer
                          (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))))
     Window
forall a b. (a -> b) -> a -> b
$ Choose
  (ModifiedLayout
     Rename
     (ModifiedLayout
        (Decoration ButtonDecoration DefaultShrinker)
        (ModifiedLayout
           Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
  (Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration WindowSwitcherDecoration DefaultShrinker)
           (ModifiedLayout
              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer
                 (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))
  Window
-> ModifiedLayout
     BoringWindows
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration ButtonDecoration DefaultShrinker)
              (ModifiedLayout
                 Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer
                       (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))
     Window
forall (l :: * -> *) a.
(LayoutClass l a, Eq a) =>
l a -> ModifiedLayout BoringWindows l a
boringWindows (Choose
   (ModifiedLayout
      Rename
      (ModifiedLayout
         (Decoration ButtonDecoration DefaultShrinker)
         (ModifiedLayout
            Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
   (Choose
      (ModifiedLayout
         Rename
         (ModifiedLayout
            (Decoration WindowSwitcherDecoration DefaultShrinker)
            (ModifiedLayout
               DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
      (Choose
         (ModifiedLayout
            Rename
            (ModifiedLayout
               (Decoration WindowSwitcherDecoration DefaultShrinker)
               (ModifiedLayout
                  DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
         (ModifiedLayout
            Rename
            (ModifiedLayout
               (Decoration WindowSwitcherDecoration DefaultShrinker)
               (ModifiedLayout
                  DraggingVisualizer
                  (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))
   Window
 -> ModifiedLayout
      BoringWindows
      (Choose
         (ModifiedLayout
            Rename
            (ModifiedLayout
               (Decoration ButtonDecoration DefaultShrinker)
               (ModifiedLayout
                  Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
         (Choose
            (ModifiedLayout
               Rename
               (ModifiedLayout
                  (Decoration WindowSwitcherDecoration DefaultShrinker)
                  (ModifiedLayout
                     DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
            (Choose
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration WindowSwitcherDecoration DefaultShrinker)
                     (ModifiedLayout
                        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration WindowSwitcherDecoration DefaultShrinker)
                     (ModifiedLayout
                        DraggingVisualizer
                        (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))
      Window)
-> Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration ButtonDecoration DefaultShrinker)
           (ModifiedLayout
              Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer
                    (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))
     Window
-> ModifiedLayout
     BoringWindows
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration ButtonDecoration DefaultShrinker)
              (ModifiedLayout
                 Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration WindowSwitcherDecoration DefaultShrinker)
                    (ModifiedLayout
                       DraggingVisualizer
                       (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))))
     Window
forall a b. (a -> b) -> a -> b
$
                        [Rename Window]
-> ModifiedLayout
     (Decoration ButtonDecoration DefaultShrinker)
     (ModifiedLayout
        Maximize (ModifiedLayout BorderResize PositionStoreFloat))
     Window
-> ModifiedLayout
     Rename
     (ModifiedLayout
        (Decoration ButtonDecoration DefaultShrinker)
        (ModifiedLayout
           Maximize (ModifiedLayout BorderResize PositionStoreFloat)))
     Window
forall a (l :: * -> *).
[Rename a] -> l a -> ModifiedLayout Rename l a
renamed [String -> Rename Window
forall a. String -> Rename a
Replace String
"Floating"] ModifiedLayout
  (Decoration ButtonDecoration DefaultShrinker)
  (ModifiedLayout
     Maximize (ModifiedLayout BorderResize PositionStoreFloat))
  Window
floating ModifiedLayout
  Rename
  (ModifiedLayout
     (Decoration ButtonDecoration DefaultShrinker)
     (ModifiedLayout
        Maximize (ModifiedLayout BorderResize PositionStoreFloat)))
  Window
-> Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration WindowSwitcherDecoration DefaultShrinker)
           (ModifiedLayout
              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer
                 (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))
     Window
-> Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration ButtonDecoration DefaultShrinker)
           (ModifiedLayout
              Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
        (Choose
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
           (ModifiedLayout
              Rename
              (ModifiedLayout
                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                 (ModifiedLayout
                    DraggingVisualizer
                    (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))))
     Window
forall (l :: * -> *) a (r :: * -> *). l a -> r a -> Choose l r a
|||
                        [Rename Window]
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
     Window
-> ModifiedLayout
     Rename
     (ModifiedLayout
        (Decoration WindowSwitcherDecoration DefaultShrinker)
        (ModifiedLayout
           DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile)))
     Window
forall a (l :: * -> *).
[Rename a] -> l a -> ModifiedLayout Rename l a
renamed [String -> Rename Window
forall a. String -> Rename a
Replace String
"Tiled1"] ModifiedLayout
  (Decoration WindowSwitcherDecoration DefaultShrinker)
  (ModifiedLayout
     DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
  Window
tiled1 ModifiedLayout
  Rename
  (ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile)))
  Window
-> Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration WindowSwitcherDecoration DefaultShrinker)
           (ModifiedLayout
              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration WindowSwitcherDecoration DefaultShrinker)
           (ModifiedLayout
              DraggingVisualizer
              (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))
     Window
-> Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration WindowSwitcherDecoration DefaultShrinker)
           (ModifiedLayout
              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
     (Choose
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
        (ModifiedLayout
           Rename
           (ModifiedLayout
              (Decoration WindowSwitcherDecoration DefaultShrinker)
              (ModifiedLayout
                 DraggingVisualizer
                 (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))))
     Window
forall (l :: * -> *) a (r :: * -> *). l a -> r a -> Choose l r a
|||
                        [Rename Window]
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
     Window
-> ModifiedLayout
     Rename
     (ModifiedLayout
        (Decoration WindowSwitcherDecoration DefaultShrinker)
        (ModifiedLayout
           DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile)))
     Window
forall a (l :: * -> *).
[Rename a] -> l a -> ModifiedLayout Rename l a
renamed [String -> Rename Window
forall a. String -> Rename a
Replace String
"Tiled2"] ModifiedLayout
  (Decoration WindowSwitcherDecoration DefaultShrinker)
  (ModifiedLayout
     DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
  Window
tiled2 ModifiedLayout
  Rename
  (ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile)))
  Window
-> ModifiedLayout
     Rename
     (ModifiedLayout
        (Decoration WindowSwitcherDecoration DefaultShrinker)
        (ModifiedLayout
           DraggingVisualizer
           (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))
     Window
-> Choose
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration WindowSwitcherDecoration DefaultShrinker)
           (ModifiedLayout
              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
     (ModifiedLayout
        Rename
        (ModifiedLayout
           (Decoration WindowSwitcherDecoration DefaultShrinker)
           (ModifiedLayout
              DraggingVisualizer
              (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))))
     Window
forall (l :: * -> *) a (r :: * -> *). l a -> r a -> Choose l r a
|||
                        [Rename Window]
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer
        (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))
     Window
-> ModifiedLayout
     Rename
     (ModifiedLayout
        (Decoration WindowSwitcherDecoration DefaultShrinker)
        (ModifiedLayout
           DraggingVisualizer
           (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full))))
     Window
forall a (l :: * -> *).
[Rename a] -> l a -> ModifiedLayout Rename l a
renamed [String -> Rename Window
forall a. String -> Rename a
Replace String
"Fullscreen"] ModifiedLayout
  (Decoration WindowSwitcherDecoration DefaultShrinker)
  (ModifiedLayout
     DraggingVisualizer
     (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))
  Window
fullscreen
        where
            floating :: ModifiedLayout
  (Decoration ButtonDecoration DefaultShrinker)
  (ModifiedLayout
     Maximize (ModifiedLayout BorderResize PositionStoreFloat))
  Window
floating = ModifiedLayout
  Maximize (ModifiedLayout BorderResize PositionStoreFloat) Window
-> ModifiedLayout
     (Decoration ButtonDecoration DefaultShrinker)
     (ModifiedLayout
        Maximize (ModifiedLayout BorderResize PositionStoreFloat))
     Window
forall {l :: * -> *}.
l Window
-> ModifiedLayout
     (Decoration ButtonDecoration DefaultShrinker) l Window
floatingDeco (ModifiedLayout
   Maximize (ModifiedLayout BorderResize PositionStoreFloat) Window
 -> ModifiedLayout
      (Decoration ButtonDecoration DefaultShrinker)
      (ModifiedLayout
         Maximize (ModifiedLayout BorderResize PositionStoreFloat))
      Window)
-> ModifiedLayout
     Maximize (ModifiedLayout BorderResize PositionStoreFloat) Window
-> ModifiedLayout
     (Decoration ButtonDecoration DefaultShrinker)
     (ModifiedLayout
        Maximize (ModifiedLayout BorderResize PositionStoreFloat))
     Window
forall a b. (a -> b) -> a -> b
$ ModifiedLayout BorderResize PositionStoreFloat Window
-> ModifiedLayout
     Maximize (ModifiedLayout BorderResize PositionStoreFloat) Window
forall (l :: * -> *).
LayoutClass l Window =>
l Window -> ModifiedLayout Maximize l Window
maximize (ModifiedLayout BorderResize PositionStoreFloat Window
 -> ModifiedLayout
      Maximize (ModifiedLayout BorderResize PositionStoreFloat) Window)
-> ModifiedLayout BorderResize PositionStoreFloat Window
-> ModifiedLayout
     Maximize (ModifiedLayout BorderResize PositionStoreFloat) Window
forall a b. (a -> b) -> a -> b
$ PositionStoreFloat Window
-> ModifiedLayout BorderResize PositionStoreFloat Window
forall (l :: * -> *) a. l a -> ModifiedLayout BorderResize l a
borderResize PositionStoreFloat Window
forall a. PositionStoreFloat a
positionStoreFloat
            tiled1 :: ModifiedLayout
  (Decoration WindowSwitcherDecoration DefaultShrinker)
  (ModifiedLayout
     DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
  Window
tiled1 = ModifiedLayout Maximize MouseResizableTile Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
     Window
forall {l :: * -> *}.
LayoutClass l Window =>
l Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout DraggingVisualizer l)
     Window
tilingDeco (ModifiedLayout Maximize MouseResizableTile Window
 -> ModifiedLayout
      (Decoration WindowSwitcherDecoration DefaultShrinker)
      (ModifiedLayout
         DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
      Window)
-> ModifiedLayout Maximize MouseResizableTile Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
     Window
forall a b. (a -> b) -> a -> b
$ MouseResizableTile Window
-> ModifiedLayout Maximize MouseResizableTile Window
forall (l :: * -> *).
LayoutClass l Window =>
l Window -> ModifiedLayout Maximize l Window
maximize MouseResizableTile Window
forall a. MouseResizableTile a
mouseResizableTileMirrored
            tiled2 :: ModifiedLayout
  (Decoration WindowSwitcherDecoration DefaultShrinker)
  (ModifiedLayout
     DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
  Window
tiled2 = ModifiedLayout Maximize MouseResizableTile Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
     Window
forall {l :: * -> *}.
LayoutClass l Window =>
l Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout DraggingVisualizer l)
     Window
tilingDeco (ModifiedLayout Maximize MouseResizableTile Window
 -> ModifiedLayout
      (Decoration WindowSwitcherDecoration DefaultShrinker)
      (ModifiedLayout
         DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
      Window)
-> ModifiedLayout Maximize MouseResizableTile Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))
     Window
forall a b. (a -> b) -> a -> b
$ MouseResizableTile Window
-> ModifiedLayout Maximize MouseResizableTile Window
forall (l :: * -> *).
LayoutClass l Window =>
l Window -> ModifiedLayout Maximize l Window
maximize MouseResizableTile Window
forall a. MouseResizableTile a
mouseResizableTile
            fullscreen :: ModifiedLayout
  (Decoration WindowSwitcherDecoration DefaultShrinker)
  (ModifiedLayout
     DraggingVisualizer
     (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))
  Window
fullscreen = ModifiedLayout Maximize (ModifiedLayout SmartBorder Full) Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer
        (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))
     Window
forall {l :: * -> *}.
LayoutClass l Window =>
l Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout DraggingVisualizer l)
     Window
tilingDeco (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full) Window
 -> ModifiedLayout
      (Decoration WindowSwitcherDecoration DefaultShrinker)
      (ModifiedLayout
         DraggingVisualizer
         (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))
      Window)
-> ModifiedLayout Maximize (ModifiedLayout SmartBorder Full) Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout
        DraggingVisualizer
        (ModifiedLayout Maximize (ModifiedLayout SmartBorder Full)))
     Window
forall a b. (a -> b) -> a -> b
$ ModifiedLayout SmartBorder Full Window
-> ModifiedLayout Maximize (ModifiedLayout SmartBorder Full) Window
forall (l :: * -> *).
LayoutClass l Window =>
l Window -> ModifiedLayout Maximize l Window
maximize (ModifiedLayout SmartBorder Full Window
 -> ModifiedLayout
      Maximize (ModifiedLayout SmartBorder Full) Window)
-> ModifiedLayout SmartBorder Full Window
-> ModifiedLayout Maximize (ModifiedLayout SmartBorder Full) Window
forall a b. (a -> b) -> a -> b
$ Full Window -> ModifiedLayout SmartBorder Full Window
forall (l :: * -> *) a.
LayoutClass l a =>
l a -> ModifiedLayout SmartBorder l a
smartBorders Full Window
forall a. Full a
Full

            tilingDeco :: l Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout DraggingVisualizer l)
     Window
tilingDeco l Window
l = DefaultShrinker
-> Theme
-> ModifiedLayout DraggingVisualizer l Window
-> ModifiedLayout
     (Decoration WindowSwitcherDecoration DefaultShrinker)
     (ModifiedLayout DraggingVisualizer l)
     Window
forall a s (l :: * -> *).
(Eq a, Shrinker s) =>
s
-> Theme
-> l a
-> ModifiedLayout (Decoration WindowSwitcherDecoration s) l a
windowSwitcherDecorationWithButtons DefaultShrinker
shrinkText Theme
defaultThemeWithButtons (l Window -> ModifiedLayout DraggingVisualizer l Window
forall (l :: * -> *).
LayoutClass l Window =>
l Window -> ModifiedLayout DraggingVisualizer l Window
draggingVisualizer l Window
l)
            floatingDeco :: l Window
-> ModifiedLayout
     (Decoration ButtonDecoration DefaultShrinker) l Window
floatingDeco = DefaultShrinker
-> Theme
-> l Window
-> ModifiedLayout
     (Decoration ButtonDecoration DefaultShrinker) l Window
forall a s (l :: * -> *).
(Eq a, Shrinker s) =>
s
-> Theme
-> l a
-> ModifiedLayout (Decoration ButtonDecoration s) l a
buttonDeco DefaultShrinker
shrinkText Theme
defaultThemeWithButtons

bluetileConfig :: XConfig
  (ModifiedLayout
     AvoidStruts
     (ModifiedLayout
        Minimize
        (ModifiedLayout
           BoringWindows
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration ButtonDecoration DefaultShrinker)
                    (ModifiedLayout
                       Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer
                             (ModifiedLayout
                                Maximize (ModifiedLayout SmartBorder Full)))))))))))
bluetileConfig =
    XConfig
  (ModifiedLayout
     AvoidStruts
     (ModifiedLayout
        Minimize
        (ModifiedLayout
           BoringWindows
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration ButtonDecoration DefaultShrinker)
                    (ModifiedLayout
                       Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer
                             (ModifiedLayout
                                Maximize (ModifiedLayout SmartBorder Full)))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
forall (a :: * -> *). XConfig a -> XConfig a
docks (XConfig
   (ModifiedLayout
      AvoidStruts
      (ModifiedLayout
         Minimize
         (ModifiedLayout
            BoringWindows
            (Choose
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration ButtonDecoration DefaultShrinker)
                     (ModifiedLayout
                        Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration WindowSwitcherDecoration DefaultShrinker)
                        (ModifiedLayout
                           DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer
                              (ModifiedLayout
                                 Maximize (ModifiedLayout SmartBorder Full)))))))))))
 -> XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            Minimize
            (ModifiedLayout
               BoringWindows
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration ButtonDecoration DefaultShrinker)
                        (ModifiedLayout
                           Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (Choose
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer
                                 (ModifiedLayout
                                    Maximize (ModifiedLayout SmartBorder Full))))))))))))
-> (XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            Minimize
            (ModifiedLayout
               BoringWindows
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration ButtonDecoration DefaultShrinker)
                        (ModifiedLayout
                           Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (Choose
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer
                                 (ModifiedLayout
                                    Maximize (ModifiedLayout SmartBorder Full)))))))))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               Minimize
               (ModifiedLayout
                  BoringWindows
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration ButtonDecoration DefaultShrinker)
                           (ModifiedLayout
                              Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                     (Choose
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                        (Choose
                           (ModifiedLayout
                              Rename
                              (ModifiedLayout
                                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                                 (ModifiedLayout
                                    DraggingVisualizer
                                    (ModifiedLayout Maximize MouseResizableTile))))
                           (ModifiedLayout
                              Rename
                              (ModifiedLayout
                                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                                 (ModifiedLayout
                                    DraggingVisualizer
                                    (ModifiedLayout
                                       Maximize (ModifiedLayout SmartBorder Full))))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XConfig
  (ModifiedLayout
     AvoidStruts
     (ModifiedLayout
        Minimize
        (ModifiedLayout
           BoringWindows
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration ButtonDecoration DefaultShrinker)
                    (ModifiedLayout
                       Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer
                             (ModifiedLayout
                                Maximize (ModifiedLayout SmartBorder Full)))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
forall (a :: * -> *). XConfig a -> XConfig a
ewmhFullscreen (XConfig
   (ModifiedLayout
      AvoidStruts
      (ModifiedLayout
         Minimize
         (ModifiedLayout
            BoringWindows
            (Choose
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration ButtonDecoration DefaultShrinker)
                     (ModifiedLayout
                        Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration WindowSwitcherDecoration DefaultShrinker)
                        (ModifiedLayout
                           DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer
                              (ModifiedLayout
                                 Maximize (ModifiedLayout SmartBorder Full)))))))))))
 -> XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            Minimize
            (ModifiedLayout
               BoringWindows
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration ButtonDecoration DefaultShrinker)
                        (ModifiedLayout
                           Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (Choose
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer
                                 (ModifiedLayout
                                    Maximize (ModifiedLayout SmartBorder Full))))))))))))
-> (XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            Minimize
            (ModifiedLayout
               BoringWindows
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration ButtonDecoration DefaultShrinker)
                        (ModifiedLayout
                           Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (Choose
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer
                                 (ModifiedLayout
                                    Maximize (ModifiedLayout SmartBorder Full)))))))))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               Minimize
               (ModifiedLayout
                  BoringWindows
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration ButtonDecoration DefaultShrinker)
                           (ModifiedLayout
                              Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                     (Choose
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                        (Choose
                           (ModifiedLayout
                              Rename
                              (ModifiedLayout
                                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                                 (ModifiedLayout
                                    DraggingVisualizer
                                    (ModifiedLayout Maximize MouseResizableTile))))
                           (ModifiedLayout
                              Rename
                              (ModifiedLayout
                                 (Decoration WindowSwitcherDecoration DefaultShrinker)
                                 (ModifiedLayout
                                    DraggingVisualizer
                                    (ModifiedLayout
                                       Maximize (ModifiedLayout SmartBorder Full))))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XConfig
  (ModifiedLayout
     AvoidStruts
     (ModifiedLayout
        Minimize
        (ModifiedLayout
           BoringWindows
           (Choose
              (ModifiedLayout
                 Rename
                 (ModifiedLayout
                    (Decoration ButtonDecoration DefaultShrinker)
                    (ModifiedLayout
                       Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration WindowSwitcherDecoration DefaultShrinker)
                       (ModifiedLayout
                          DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer
                             (ModifiedLayout
                                Maximize (ModifiedLayout SmartBorder Full)))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
forall (a :: * -> *). XConfig a -> XConfig a
ewmh (XConfig
   (ModifiedLayout
      AvoidStruts
      (ModifiedLayout
         Minimize
         (ModifiedLayout
            BoringWindows
            (Choose
               (ModifiedLayout
                  Rename
                  (ModifiedLayout
                     (Decoration ButtonDecoration DefaultShrinker)
                     (ModifiedLayout
                        Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration WindowSwitcherDecoration DefaultShrinker)
                        (ModifiedLayout
                           DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer
                              (ModifiedLayout
                                 Maximize (ModifiedLayout SmartBorder Full)))))))))))
 -> XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            Minimize
            (ModifiedLayout
               BoringWindows
               (Choose
                  (ModifiedLayout
                     Rename
                     (ModifiedLayout
                        (Decoration ButtonDecoration DefaultShrinker)
                        (ModifiedLayout
                           Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                  (Choose
                     (ModifiedLayout
                        Rename
                        (ModifiedLayout
                           (Decoration WindowSwitcherDecoration DefaultShrinker)
                           (ModifiedLayout
                              DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                     (Choose
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                        (ModifiedLayout
                           Rename
                           (ModifiedLayout
                              (Decoration WindowSwitcherDecoration DefaultShrinker)
                              (ModifiedLayout
                                 DraggingVisualizer
                                 (ModifiedLayout
                                    Maximize (ModifiedLayout SmartBorder Full))))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
-> XConfig
     (ModifiedLayout
        AvoidStruts
        (ModifiedLayout
           Minimize
           (ModifiedLayout
              BoringWindows
              (Choose
                 (ModifiedLayout
                    Rename
                    (ModifiedLayout
                       (Decoration ButtonDecoration DefaultShrinker)
                       (ModifiedLayout
                          Maximize (ModifiedLayout BorderResize PositionStoreFloat))))
                 (Choose
                    (ModifiedLayout
                       Rename
                       (ModifiedLayout
                          (Decoration WindowSwitcherDecoration DefaultShrinker)
                          (ModifiedLayout
                             DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                    (Choose
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer (ModifiedLayout Maximize MouseResizableTile))))
                       (ModifiedLayout
                          Rename
                          (ModifiedLayout
                             (Decoration WindowSwitcherDecoration DefaultShrinker)
                             (ModifiedLayout
                                DraggingVisualizer
                                (ModifiedLayout
                                   Maximize (ModifiedLayout SmartBorder Full)))))))))))
forall a b. (a -> b) -> a -> b
$
    XConfig (Choose Tall (Choose (Mirror Tall) Full))
forall a. Default a => a
def
        { modMask = mod4Mask,   -- logo key
          manageHook = bluetileManageHook,
          layoutHook = bluetileLayoutHook,
          logHook = currentWorkspaceOnTop,
          handleEventHook = minimizeEventHook
                                `mappend` serverModeEventHook' bluetileCommands
                                `mappend` positionStoreEventHook,
          workspaces = bluetileWorkspaces,
          keys = bluetileKeys,
          mouseBindings = bluetileMouseBindings,
          focusFollowsMouse = False,
          focusedBorderColor = "#000000",
          terminal = "gnome-terminal"
        }