{-# LANGUAGE FlexibleContexts #-} {-# OPTIONS_GHC -fno-warn-missing-signatures #-} module Layouts (myLayoutHook) where import Text.Printf (printf) import XMonad.Config (def) import XMonad.Core ( LayoutClass ) import XMonad.Hooks.ManageDocks (avoidStruts) import XMonad.Layout ( Mirror (Mirror) , (|||) ) import XMonad.Layout.PerWorkspace ( onWorkspaces ) import XMonad.Layout.LayoutModifier ( ModifiedLayout , LayoutModifier ) import XMonad.Layout.BoringWindows ( boringWindows ) import XMonad.Layout.Decoration ( Theme , DefaultShrinker , Decoration ) import XMonad.Layout.Maximize ( maximizeWithPadding ) import XMonad.Layout.Minimize ( minimize ) import XMonad.Layout.MultiToggle ( mkToggle , single ) import XMonad.Layout.Renamed ( renamed, Rename (Replace) ) import XMonad.Layout.NoBorders ( smartBorders ) import XMonad.Layout.ResizableTile ( ResizableTall (..) ) import XMonad.Layout.Spacing ( Spacing , spacingRaw , Border (..) ) import XMonad.Layout.WindowNavigation ( windowNavigation ) import XMonad.Layout.SubLayouts ( subLayout , Sublayout ) import XMonad.Layout.Simplest ( Simplest(Simplest) ) import XMonad.Layout.Grid ( Grid(Grid) ) import XMonad.Layout.Reflect ( REFLECTX (REFLECTX) , REFLECTY (REFLECTY) ) import XMonad.Layout.Tabbed ( shrinkText , addTabs , TabbedDecoration ) import qualified XMonad.Layout.Tabbed as T ( activeColor , inactiveColor , activeBorderColor , inactiveBorderColor , urgentColor , activeTextColor , inactiveTextColor , urgentTextColor , fontName ) import XMonad.Layout.PositionStoreFloat (positionStoreFloat) import XMonad.Layout.NoFrillsDecoration (noFrillsDeco) import XMonad.Layout.BorderResize (borderResize) import HostConfig ( FontConfig , fontName , fontSize , ColorConfig , fgColor , selFgColor , bgColor , selColor , inactiveColor , inactiveBorderColor , urgentColor , colorConfig , fontConfig ) named :: String -> l a -> ModifiedLayout Rename l a named x = renamed [Replace x] myLayoutHook = commonMods mainLayouts where tileMods = mkToggle (single REFLECTX) . mkToggle (single REFLECTY) . smartBorders . windowNavigation . mySubTabbed theme . spaces commonMods = avoidStruts . maximizeWithPadding 0 . minimize . boringWindows tLayouts = tileMods $ named "tall" tall ||| named "mtall" mtall mainLayouts = tLayouts ||| floating theme floating theme = named "float" . floatingDeco . borderResize $ positionStoreFloat where floatingDeco = noFrillsDeco shrinkText theme mySubTabbed :: (Eq a, LayoutModifier (Sublayout Simplest) a, LayoutClass l a) => Theme -> l a -> ModifiedLayout (Decoration TabbedDecoration DefaultShrinker) (ModifiedLayout (Sublayout Simplest) l) a mySubTabbed theme x = addTabs shrinkText theme $ subLayout [] Simplest x spaces :: l a -> ModifiedLayout Spacing l a spaces = spacingRaw False b False b False where b = Border defSpacing defSpacing defSpacing defSpacing defSpacing = 5 tall :: ResizableTall a tall = ResizableTall 1 (3/100) (1/2) [] mtall :: Mirror ResizableTall a mtall = Mirror tall theme :: Theme theme = def { T.activeColor = selColor colorConfig , T.activeBorderColor = inactiveColor colorConfig , T.activeTextColor = selFgColor colorConfig , T.inactiveColor = bgColor colorConfig , T.inactiveBorderColor = inactiveBorderColor colorConfig , T.inactiveTextColor = fgColor colorConfig , T.urgentColor = urgentColor colorConfig , T.urgentTextColor = urgentColor colorConfig , T.fontName = printf "xft:%s:size=%d" (fontName fontConfig) (fontSize fontConfig) }