Open terminal on X startup

452640c907694e4a7f80cf462df1c82db660ce2c
Alexis Sellier committed ago 1 parent 015eab84
.xmonad/xmonad.hs +16 -1
2 2
import XMonad.Config.Desktop
3 3
import XMonad.Hooks.DynamicLog
4 4
import XMonad.Hooks.ManageDocks
5 5
import XMonad.Util.Run
6 6
import XMonad.Layout.Spacing
7 +
import XMonad.StackSet
8 +
import XMonad.ManageHook
7 9
8 10
import System.Directory
9 11
import System.IO
10 12
import Text.Printf
11 13
import Data.Map (Map)
12 14
import qualified Data.Map as Map
15 +
import Control.Monad
16 +
17 +
termName :: FilePath
18 +
termName = "st"
13 19
14 20
main :: IO ()
15 21
main = do
16 22
    home <- getHomeDirectory
17 23
    xmproc <- spawnPipe "xmobar"
18 24
    xmonad $ desktopConfig
19 -
        { terminal           = "st"
25 +
        { terminal           = termName
20 26
        , focusedBorderColor = "#555"
21 27
        , normalBorderColor  = "#1F1F1F"
22 28
        , borderWidth        = 2
23 29
        , handleEventHook    = mconcat [docksEventHook, handleEventHook def]
24 30
        , keys               = myKeys home
25 31
        , logHook            = dynamicLogWithPP (barConfig xmproc)
26 32
        , layoutHook         = smartSpacing 8 $ avoidStruts $ layoutHook def
27 33
        , manageHook         = manageDocks <+> manageHook def
34 +
        , startupHook        = startup
28 35
        }
29 36
37 +
startup :: X ()
38 +
startup = do
39 +
    -- Open a terminal if none are open.
40 +
    withWindowSet $ \wins -> do
41 +
        result <- filterM (runQuery (title =? termName)) (allWindows wins)
42 +
        when (null result) $
43 +
            safeSpawnProg termName
44 +
30 45
barConfig :: Handle -> PP
31 46
barConfig h = xmobarPP
32 47
    { ppCurrent         = xmobarColor white   black  . wrap " " " "
33 48
    , ppHiddenNoWindows = xmobarColor black   dark   . wrap " " " "
34 49
    , ppHidden          = xmobarColor light   dark   . wrap " " " "