-----------------------------------------------------------------------------
-- |
-- Module      :  XMonad.Util.Themes
-- Description :  A collection of themes for decorated layouts.
-- Copyright   :  (C) 2007 Andrea Rossato
-- License     :  BSD3
--
-- Maintainer  :  andrea.rossato@unibz.it
-- Stability   :  unstable
-- Portability :  unportable
--
-- A (hopefully) growing collection of themes for decorated layouts.
--
-----------------------------------------------------------------------------

module XMonad.Util.Themes
    ( -- * Usage
      -- $usage
      listOfThemes
    , ppThemeInfo
    , xmonadTheme
    , smallClean
    , adwaitaTheme
    , adwaitaDarkTheme
    , robertTheme
    , darkTheme
    , deiflTheme
    , oxymor00nTheme
    , donaldTheme
    , wfarrTheme
    , kavonForestTheme
    , kavonLakeTheme
    , kavonPeacockTheme
    , kavonVioGreenTheme
    , kavonBluesTheme
    , kavonAutumnTheme
    , kavonFireTheme
    , kavonChristmasTheme
    , ThemeInfo (..)
    ) where

import XMonad.Layout.Decoration

-- $usage
-- This module stores some user contributed themes which can be used
-- with decorated layouts (such as Tabbed).  (Note that these themes
-- only apply to decorated layouts, such as those found in
-- "XMonad.Layout.Tabbed" and "XMonad.Layout.DecorationMadness"; they
-- do not apply to xmonad as a whole.)
--
-- If you want to use one of them with one of your decorated layouts,
-- you need to substitute def with, for instance, (theme smallClean).
--
-- Here is an example:
--
-- > import XMonad
-- > import XMonad.Util.Themes
-- > import XMonad.Layout.Tabbed
-- >
-- > myLayout = tabbed shrinkText (theme smallClean)
-- >
-- > main = xmonad def {layoutHook = myLayout}
--
-- If you have a theme you would like to share, adding it to this
-- module is very easy.
--
-- You can use 'xmonadTheme' or 'smallClean' as a template.
--
-- At the present time only the 'themeName' field is used. But please
-- provide all the other information, which will be used at a later
-- time.
--
-- Please, remember to add your theme to the list of exported
-- functions, and to the 'listOfThemes'.
--
-- Thanks for your contribution!

data ThemeInfo =
    TI { ThemeInfo -> String
themeName        :: String
       , ThemeInfo -> String
themeAuthor      :: String
       , ThemeInfo -> String
themeDescription :: String
       , ThemeInfo -> Theme
theme            :: Theme
       }

newTheme :: ThemeInfo
newTheme :: ThemeInfo
newTheme = String -> String -> String -> Theme -> ThemeInfo
TI String
"" String
"" String
"" forall a. Default a => a
def

ppThemeInfo :: ThemeInfo -> String
ppThemeInfo :: ThemeInfo -> String
ppThemeInfo ThemeInfo
t = ThemeInfo -> String
themeName ThemeInfo
t String -> String -> String
`add` ThemeInfo -> String
themeDescription ThemeInfo
t String -> String -> String
`add` String
"by" String -> String -> String
`add` ThemeInfo -> String
themeAuthor ThemeInfo
t
    where String
"" add :: String -> String -> String
`add` String
x = String
x
          String
x `add` String
y = String
x forall a. [a] -> [a] -> [a]
++ String
" - " forall a. [a] -> [a] -> [a]
++ String
y


listOfThemes :: [ThemeInfo]
listOfThemes :: [ThemeInfo]
listOfThemes = [ ThemeInfo
xmonadTheme
               , ThemeInfo
smallClean
               , ThemeInfo
adwaitaTheme
               , ThemeInfo
adwaitaDarkTheme
               , ThemeInfo
darkTheme
               , ThemeInfo
deiflTheme
               , ThemeInfo
oxymor00nTheme
               , ThemeInfo
robertTheme
               , ThemeInfo
donaldTheme
               , ThemeInfo
wfarrTheme
               , ThemeInfo
kavonForestTheme
               , ThemeInfo
kavonLakeTheme
               , ThemeInfo
kavonPeacockTheme
               , ThemeInfo
kavonVioGreenTheme
               , ThemeInfo
kavonBluesTheme
               , ThemeInfo
kavonAutumnTheme
               , ThemeInfo
kavonFireTheme
               , ThemeInfo
kavonChristmasTheme
               ]

-- | The default xmonad theme, by David Roundy.
xmonadTheme :: ThemeInfo
xmonadTheme :: ThemeInfo
xmonadTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"xmonadTheme"
             , themeAuthor :: String
themeAuthor      = String
"David Roundy"
             , themeDescription :: String
themeDescription = String
"The default xmonad theme"
             , theme :: Theme
theme            = forall a. Default a => a
def
             }

-- | Small decorations with a Ion3 remembrance, by Andrea Rossato.
smallClean :: ThemeInfo
smallClean :: ThemeInfo
smallClean =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"smallClean"
             , themeAuthor :: String
themeAuthor      = String
"Andrea Rossato"
             , themeDescription :: String
themeDescription = String
"Small decorations with a Ion3 remembrance"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#8a999e"
                                      , inactiveColor :: String
inactiveColor       = String
"#545d75"
                                      , activeBorderColor :: String
activeBorderColor   = String
"white"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"grey"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"grey"
                                      , decoHeight :: Dimension
decoHeight          = Dimension
14
                                      }
             }

-- | Matching decorations for Adwaita GTK theme
adwaitaTheme :: ThemeInfo
adwaitaTheme :: ThemeInfo
adwaitaTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"adwaitaTheme"
             , themeAuthor :: String
themeAuthor      = String
"Alex Griffin"
             , themeDescription :: String
themeDescription = String
"Matching decorations for Adwaita GTK theme"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#dfdcd8"
                                      , inactiveColor :: String
inactiveColor       = String
"#f6f5f4"
                                      , urgentColor :: String
urgentColor         = String
"#3584e4"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#bfb8b1"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#cdc7c2"
                                      , urgentBorderColor :: String
urgentBorderColor   = String
"#1658a7"
                                      , activeTextColor :: String
activeTextColor     = String
"#2e3436"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#929595"
                                      , urgentTextColor :: String
urgentTextColor     = String
"#ffffff"
                                      , fontName :: String
fontName            = String
"xft:Cantarell:bold:size=11"
                                      , decoWidth :: Dimension
decoWidth           = Dimension
400
                                      , decoHeight :: Dimension
decoHeight          = Dimension
35
                                      }
             }

-- | Matching decorations for Adwaita-dark GTK theme
adwaitaDarkTheme :: ThemeInfo
adwaitaDarkTheme :: ThemeInfo
adwaitaDarkTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"adwaitaDarkTheme"
             , themeAuthor :: String
themeAuthor      = String
"Alex Griffin"
             , themeDescription :: String
themeDescription = String
"Matching decorations for Adwaita-dark GTK theme"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#2d2d2d"
                                      , inactiveColor :: String
inactiveColor       = String
"#353535"
                                      , urgentColor :: String
urgentColor         = String
"#15539e"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#070707"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#1c1c1c"
                                      , urgentBorderColor :: String
urgentBorderColor   = String
"#030c17"
                                      , activeTextColor :: String
activeTextColor     = String
"#eeeeec"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#929291"
                                      , urgentTextColor :: String
urgentTextColor     = String
"#ffffff"
                                      , fontName :: String
fontName            = String
"xft:Cantarell:bold:size=11"
                                      , decoWidth :: Dimension
decoWidth           = Dimension
400
                                      , decoHeight :: Dimension
decoHeight          = Dimension
35
                                      }
             }

-- | Don's preferred colors - from DynamicLog...;)
donaldTheme  :: ThemeInfo
donaldTheme :: ThemeInfo
donaldTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"donaldTheme"
             , themeAuthor :: String
themeAuthor      = String
"Andrea Rossato"
             , themeDescription :: String
themeDescription = String
"Don's preferred colors - from DynamicLog...;)"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#2b4f98"
                                      , inactiveColor :: String
inactiveColor       = String
"#cccccc"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#2b4f98"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#cccccc"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"black"
                                      , decoHeight :: Dimension
decoHeight          = Dimension
16
                                      }
             }

-- | Ffrom Robert Manea's prompt theme.
robertTheme  :: ThemeInfo
robertTheme :: ThemeInfo
robertTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"robertTheme"
             , themeAuthor :: String
themeAuthor      = String
"Andrea Rossato"
             , themeDescription :: String
themeDescription = String
"From Robert Manea's prompt theme"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#aecf96"
                                      , inactiveColor :: String
inactiveColor       = String
"#111111"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#aecf96"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#111111"
                                      , activeTextColor :: String
activeTextColor     = String
"black"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#d5d3a7"
                                      , fontName :: String
fontName            = String
"-*-profont-*-*-*-*-11-*-*-*-*-*-iso8859"
                                      , decoHeight :: Dimension
decoHeight          = Dimension
16
                                      }
             }

-- | Dark Theme, by Lucian Poston.
darkTheme :: ThemeInfo
darkTheme :: ThemeInfo
darkTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"darkTheme"
             , themeAuthor :: String
themeAuthor      = String
"Lucian Poston"
             , themeDescription :: String
themeDescription = String
"Dark Theme"
             , theme :: Theme
theme            = forall a. Default a => a
def { inactiveBorderColor :: String
inactiveBorderColor = String
"#202030"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#a0a0d0"
                                      , inactiveColor :: String
inactiveColor       = String
"#000000"
                                      , activeColor :: String
activeColor         = String
"#000000"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#607070"
                                      , activeTextColor :: String
activeTextColor     = String
"#a0d0d0"
                                      , decoHeight :: Dimension
decoHeight          = Dimension
15
                                      }
             }

-- | deifl\'s Theme, by deifl.
deiflTheme :: ThemeInfo
deiflTheme :: ThemeInfo
deiflTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"deiflTheme"
             , themeAuthor :: String
themeAuthor      = String
"deifl"
             , themeDescription :: String
themeDescription = String
"deifl's Theme"
             , theme :: Theme
theme            = forall a. Default a => a
def { inactiveBorderColor :: String
inactiveBorderColor = String
"#708090"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#5f9ea0"
                                      , activeColor :: String
activeColor         = String
"#000000"
                                      , inactiveColor :: String
inactiveColor       = String
"#333333"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#888888"
                                      , activeTextColor :: String
activeTextColor     = String
"#87cefa"
                                      , fontName :: String
fontName            = String
"-xos4-terminus-*-*-*-*-12-*-*-*-*-*-*-*"
                                      , decoHeight :: Dimension
decoHeight          = Dimension
15
                                      }
             }

-- | oxymor00n\'s theme, by Tom Rauchenwald.
oxymor00nTheme :: ThemeInfo
oxymor00nTheme :: ThemeInfo
oxymor00nTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"oxymor00nTheme"
             , themeAuthor :: String
themeAuthor      = String
"Tom Rauchenwald"
             , themeDescription :: String
themeDescription = String
"oxymor00n's theme"
             , theme :: Theme
theme            = forall a. Default a => a
def { inactiveBorderColor :: String
inactiveBorderColor = String
"#000"
                                      , activeBorderColor :: String
activeBorderColor = String
"aquamarine3"
                                      , activeColor :: String
activeColor = String
"aquamarine3"
                                      , inactiveColor :: String
inactiveColor = String
"DarkSlateGray4"
                                      , inactiveTextColor :: String
inactiveTextColor = String
"#222"
                                      , activeTextColor :: String
activeTextColor = String
"#222"
                                      -- This font can be found in the package ttf-alee
                                      -- on debian-systems
                                      , fontName :: String
fontName = String
"-*-Bandal-*-*-*-*-12-*-*-*-*-*-*-*"
                                      , decoHeight :: Dimension
decoHeight = Dimension
15
                                      , urgentColor :: String
urgentColor = String
"#000"
                                      , urgentTextColor :: String
urgentTextColor = String
"#63b8ff"
                                      }
             }

wfarrTheme :: ThemeInfo
wfarrTheme :: ThemeInfo
wfarrTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"wfarrTheme"
             , themeAuthor :: String
themeAuthor      = String
"Will Farrington"
             , themeDescription :: String
themeDescription = String
"A nice blue/black theme."
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#4c7899"
                                      , inactiveColor :: String
inactiveColor       = String
"#333333"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#285577"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#222222"
                                      , activeTextColor :: String
activeTextColor     = String
"#ffffff"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#888888"
                                      , fontName :: String
fontName            = String
"-*-fixed-medium-r-*--10-*-*-*-*-*-iso8859-1"
                                      , decoHeight :: Dimension
decoHeight          = Dimension
12
                                      }
             }

-- | Forest colours, by Kathryn Andersen
kavonForestTheme :: ThemeInfo
kavonForestTheme :: ThemeInfo
kavonForestTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonForestTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Forest colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#115422"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#1a8033"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#543211"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#804c19"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#ffcc33"
                                      }
             }

-- | Lake (blue/green) colours, by Kathryn Andersen
kavonLakeTheme :: ThemeInfo
kavonLakeTheme :: ThemeInfo
kavonLakeTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonLakeTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Lake (blue/green) colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#001166"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#1f3999"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#09592a"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#198044"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#73e6a3"
                                      }
             }

-- | Peacock colours, by Kathryn Andersen
kavonPeacockTheme :: ThemeInfo
kavonPeacockTheme :: ThemeInfo
kavonPeacockTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonPeacockTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Peacock colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#190f4c"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#2b1980"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#225173"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#2a638c"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#8fb2cc"
                                      }
             }

-- | Violet-Green colours, by Kathryn Andersen
kavonVioGreenTheme :: ThemeInfo
kavonVioGreenTheme :: ThemeInfo
kavonVioGreenTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonVioGreenTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Violet-Green colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#37174c"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#333399"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#174c17"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#336633"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#aaccaa"
                                      }
             }

-- | Blue colours, by Kathryn Andersen
kavonBluesTheme :: ThemeInfo
kavonBluesTheme :: ThemeInfo
kavonBluesTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonBluesTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Blue colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#000066"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#111199"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#9999ee"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#6666cc"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"black"
                                      }
             }

-- | Christmas colours, by Kathryn Andersen
kavonChristmasTheme :: ThemeInfo
kavonChristmasTheme :: ThemeInfo
kavonChristmasTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonChristmasTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Christmas (green + red) colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#660000"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#990000"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#006600"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#003300"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#99bb99"
                                      }
             }

-- | Autumn colours, by Kathryn Andersen
kavonAutumnTheme :: ThemeInfo
kavonAutumnTheme :: ThemeInfo
kavonAutumnTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonAutumnTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Autumn (brown + red) colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#660000"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#990000"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#542d11"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#804d1A"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"#ffcc33"
                                      }
             }

-- | Fire colours, by Kathryn Andersen
kavonFireTheme :: ThemeInfo
kavonFireTheme :: ThemeInfo
kavonFireTheme =
    ThemeInfo
newTheme { themeName :: String
themeName        = String
"kavonFireTheme"
             , themeAuthor :: String
themeAuthor      = String
"Kathryn Andersen"
             , themeDescription :: String
themeDescription = String
"Fire (orange + red) colours"
             , theme :: Theme
theme            = forall a. Default a => a
def { activeColor :: String
activeColor         = String
"#660000"
                                      , activeBorderColor :: String
activeBorderColor   = String
"#990000"
                                      , activeTextColor :: String
activeTextColor     = String
"white"
                                      , inactiveColor :: String
inactiveColor       = String
"#ff8000"
                                      , inactiveBorderColor :: String
inactiveBorderColor = String
"#d9b162"
                                      , inactiveTextColor :: String
inactiveTextColor   = String
"black"
                                      }
             }