about summary refs log tree commit diff
path: root/src/lib/XMonad/Custom/Layout.hs
blob: 8ed7d0840e156df555d47d5060e30293842bc78a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# OPTIONS_GHC -Wno-missing-signatures #-}

-- |
-- Module                  : XMonad.Custom.Layout
-- Description             : Layouts and such
-- Copyright               : (c) Azat Bahawi 2018-2021
-- SPDX-License-Identifier : GPL-3.0-or-later
-- Maintainer              : azahi@teknik.io
-- Stability               : experimental
-- Portability             : non-portable
--

module XMonad.Custom.Layout
  ( layoutHook
  , CustomTransformers(..)
  ) where

import           XMonad                  hiding ( layoutHook )
import           XMonad.Custom.Theme
import           XMonad.Hooks.ManageDocks
import           XMonad.Layout.Accordion
import           XMonad.Layout.BinarySpacePartition
import           XMonad.Layout.Fullscreen
import           XMonad.Layout.Hidden
import           XMonad.Layout.LayoutModifier
import           XMonad.Layout.MultiToggle
import           XMonad.Layout.MultiToggle.Instances
import           XMonad.Layout.NoBorders
import           XMonad.Layout.Reflect
import           XMonad.Layout.Simplest
import           XMonad.Layout.Spacing
import           XMonad.Layout.SubLayouts
import           XMonad.Layout.Tabbed
import           XMonad.Layout.WindowNavigation

applySpacing :: l a -> ModifiedLayout Spacing l a
applySpacing = spacingRaw False (Border 6 6 6 6) True (Border 6 6 6 6) True

data CustomTransformers = GAPS
  deriving (Read, Show, Eq, Typeable)

instance Transformer CustomTransformers Window where
  transform GAPS x k = k (avoidStruts $ applySpacing x) (const x)

layoutHook =
  fullscreenFloat
    $ lessBorders OnlyLayoutFloat
    $ mkToggle (single NBFULL)
    $ avoidStruts
    $ applySpacing
    $ mkToggle (single GAPS)
    $ mkToggle (single REFLECTX)
    $ mkToggle (single REFLECTY)
    $ windowNavigation
    $ addTabs shrinkText tabTheme
    $ hiddenWindows
    $ subLayout [] (Simplest ||| Accordion) emptyBSP

Consider giving Nix/NixOS a try! <3