aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Config/Arossato.hs
blob: fbd31b2d4ce6c877a0b77a46769f50257bf365f1 (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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  XMonad.Config.Arossato
-- Copyright   :  (c) Andrea Rossato 2007
-- License     :  BSD3-style (see LICENSE)
--
-- Maintainer  :  andrea.rossato@unibz.it
-- Stability   :  stable
-- Portability :  portable
--
-- This module specifies my xmonad defaults.
--
------------------------------------------------------------------------

module XMonad.Config.Arossato 
    ( -- * Usage
      -- $usage
      arossatoConfig
    , arossatoTabbedConfig
    ) where

import qualified Data.Map as M
import Graphics.X11.Xlib

import XMonad
import XMonad.Layouts
import XMonad.Operations
import qualified XMonad.StackSet as W

import XMonad.Actions.CycleWS
import XMonad.Hooks.DynamicLog
import XMonad.Layout.Accordion
import XMonad.Layout.NoBorders
import XMonad.Layout.Tabbed
import XMonad.Prompt
import XMonad.Prompt.Shell
import XMonad.Prompt.Ssh
import XMonad.Prompt.Window
import XMonad.Prompt.XMonad

-- $usage 
-- The simplest way to use this configuration module is to use an
-- @~\/.xmonad\/xmonad.hs@ like this:
--
-- > module Main (main) where
-- >  
-- > import XMonad
-- > import XMonad.Config.Arossato (arossatoConfig)
-- >  
-- > main :: IO ()
-- > main = xmonad arossatoConfig
--
--
-- You can use this module also as a starting point for writing your
-- own configuration module from scratch. Save it as your
-- @~\/.xmonad\/xmonad.hs@ and:
--
-- 1. Change the module name from
--
-- > module XMonad.Config.Arossato 
-- >     ( -- * Usage
-- >       -- $usage
-- >       arossatoConfig
-- >     , arossatoTabbedConfig
-- >     ) where
--
-- to
--
-- > module Main where
--
-- 2. Add a line like:
--
-- > main = xmonad arossatoConfig
--
-- 3. Start playing with the configuration options...;)

-- | My configuration for the Tabbed Layout. Basically this is the
-- Ion3 clean style.
arossatoTabbedConfig :: TConf
arossatoTabbedConfig =
    defaultTConf { activeColor         = "#8a999e" 
                 , inactiveColor       = "#545d75"
                 , activeBorderColor   = "white"
                 , inactiveBorderColor = "grey"
                 , activeTextColor     = "white"
                 , inactiveTextColor   = "grey"
                 , tabSize             = 15
                 }

arossatoConfig = defaultConfig
         { workspaces         = ["1", "2"] ++
                                ["dev","mail","web"] ++
                                map show [6 .. 9 :: Int]
         , logHook            = dynamicLogWithPP myPP
         , layoutHook         = noBorders mytab |||
                                noBorders Full  |||
                                tiled           ||| 
                                Mirror tiled    ||| 
                                Accordion
         , terminal           = "urxvt -fg white -bg black +sb"
         , normalBorderColor  = "white"
         , focusedBorderColor = "black"
         , keys               = newKeys
         , defaultGaps        = [(15,0,0,0)]
         }
    where 
      -- layouts
      mytab = tabbed shrinkText arossatoTabbedConfig
      tiled = Tall 1 0.03 0.5
      
      -- the logHook pretty-printer
      myPP  = defaultPP { ppCurrent = xmobarColor "yellow" "" . wrap "[" "]"
                        , ppTitle   = xmobarColor "green"  "" . shorten 80
                        }

      -- key bindings stuff
      defKeys    = keys defaultConfig
      delKeys x  = foldr M.delete           (defKeys x) (toRemove x)
      newKeys x  = foldr (uncurry M.insert) (delKeys x) (toAdd    x)
      -- remove some of the default key bindings
      toRemove x = 
          [ (modMask x              , xK_j     )
          , (modMask x              , xK_k     )
          , (modMask x              , xK_p     )
          , (modMask x .|. shiftMask, xK_p     )
          , (modMask x .|. shiftMask, xK_q     )
          , (modMask x              , xK_q     )
          ] ++
          -- I want modMask .|. shiftMask 1-9 to be free!
          [(shiftMask .|. modMask x, k) | k <- [xK_1 .. xK_9]]
      -- These are my personal key bindings
      toAdd x   = 
          [ ((modMask x              , xK_F12   ), xmonadPrompt      defaultXPConfig    )
          , ((modMask x              , xK_F3    ), shellPrompt       defaultXPConfig    )
          , ((modMask x              , xK_F4    ), sshPrompt         defaultXPConfig    )
          , ((modMask x              , xK_F5    ), windowPromptGoto  defaultXPConfig    )
          , ((modMask x .|. shiftMask, xK_F5    ), windowPromptBring defaultXPConfig    )
          , ((modMask x              , xK_comma ), prevWS                               )
          , ((modMask x              , xK_period), nextWS                               )
          , ((modMask x              , xK_Right ), windows W.focusDown                  )
          , ((modMask x              , xK_Left  ), windows W.focusUp                    )
          -- other stuff: launch some useful utilities
          , ((modMask x              , xK_F2    ), spawn "urxvt -fg white -bg black +sb")
          , ((modMask x .|. shiftMask, xK_F4    ), spawn "~/bin/dict.sh"                )
          , ((modMask x .|. shiftMask, xK_F5    ), spawn "~/bin/urlOpen.sh"             )
          , ((modMask x              , xK_c     ), kill                                 )
          , ((modMask x .|. shiftMask, xK_comma ), sendMessage (IncMasterN   1 )        )
          , ((modMask x .|. shiftMask, xK_period), sendMessage (IncMasterN (-1))        )
          ] ++
          -- Use modMask .|. shiftMask .|. controlMask 1-9 instead
          [( (m .|. modMask x, k), windows $ f i)
           | (i, k) <- zip (workspaces x) [xK_1 .. xK_9]
          ,  (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask .|. controlMask)]
          ]