    {-# OPTIONS_GHC -fno-warn-missing-signatures #-}
    module XMonad.Config.Sjanssen (sjanssenConfig) where

    import XMonad hiding (Tall(..))
    import qualified XMonad.StackSet as W
    import XMonad.Actions.CopyWindow
    import XMonad.Layout.Tabbed
    import XMonad.Layout.HintedTile
    import XMonad.Layout.NoBorders
    import XMonad.Hooks.DynamicLog
    import XMonad.Hooks.ManageDocks
    import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat)
    import XMonad.Hooks.EwmhDesktops
    import XMonad.Prompt
    import XMonad.Actions.SpawnOn
    import XMonad.Util.SpawnOnce

    import XMonad.Layout.LayoutScreens
    import XMonad.Layout.TwoPane

    import qualified Data.Map as M

    sjanssenConfig :: XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            SmartBorder
            (Choose
               (Choose HintedTile (Choose HintedTile Full))
               (ModifiedLayout
                  (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    sjanssenConfig =
        XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            SmartBorder
            (Choose
               (Choose HintedTile (Choose HintedTile Full))
               (ModifiedLayout
                  (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               SmartBorder
               (Choose
                  (Choose HintedTile (Choose HintedTile Full))
                  (ModifiedLayout
                     (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    forall (a :: * -> *). XConfig a -> XConfig a
    docks (XConfig
       (ModifiedLayout
          AvoidStruts
          (ModifiedLayout
             SmartBorder
             (Choose
                (Choose HintedTile (Choose HintedTile Full))
                (ModifiedLayout
                   (Decoration TabbedDecoration DefaultShrinker) Simplest))))
     -> XConfig
          (ModifiedLayout
             AvoidStruts
             (ModifiedLayout
                SmartBorder
                (Choose
                   (Choose HintedTile (Choose HintedTile Full))
                   (ModifiedLayout
                      (Decoration TabbedDecoration DefaultShrinker) Simplest)))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               SmartBorder
               (Choose
                  (Choose HintedTile (Choose HintedTile Full))
                  (ModifiedLayout
                     (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               SmartBorder
               (Choose
                  (Choose HintedTile (Choose HintedTile Full))
                  (ModifiedLayout
                     (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    forall a b. (a -> b) -> a -> b
    $ XConfig
      (ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            SmartBorder
            (Choose
               (Choose HintedTile (Choose HintedTile Full))
               (ModifiedLayout
                  (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               SmartBorder
               (Choose
                  (Choose HintedTile (Choose HintedTile Full))
                  (ModifiedLayout
                     (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    forall (a :: * -> *). XConfig a -> XConfig a
    ewmh (XConfig
       (ModifiedLayout
          AvoidStruts
          (ModifiedLayout
             SmartBorder
             (Choose
                (Choose HintedTile (Choose HintedTile Full))
                (ModifiedLayout
                   (Decoration TabbedDecoration DefaultShrinker) Simplest))))
     -> XConfig
          (ModifiedLayout
             AvoidStruts
             (ModifiedLayout
                SmartBorder
                (Choose
                   (Choose HintedTile (Choose HintedTile Full))
                   (ModifiedLayout
                      (Decoration TabbedDecoration DefaultShrinker) Simplest)))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               SmartBorder
               (Choose
                  (Choose HintedTile (Choose HintedTile Full))
                  (ModifiedLayout
                     (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    -> XConfig
         (ModifiedLayout
            AvoidStruts
            (ModifiedLayout
               SmartBorder
               (Choose
                  (Choose HintedTile (Choose HintedTile Full))
                  (ModifiedLayout
                     (Decoration TabbedDecoration DefaultShrinker) Simplest))))
    forall a b. (a -> b) -> a -> b
    $ XConfig (Choose Tall (Choose (Mirror Tall) Full))
    forall a. Default a => a
    def
            { terminal :: String
    terminal = "exec urxvt"
            , workspaces :: [String]
    workspaces = ["irc", "web"] [String] -> [String] -> [String]
    forall a. [a] -> [a] -> [a]
    ++ (Int -> String) -> [Int] -> [String]
    forall a b. (a -> b) -> [a] -> [b]
    map Int -> String
    forall a. Show a => a -> String
    show [3 .. 9 :: Int]
            , mouseBindings :: XConfig Layout -> Map (ButtonMask, Button) (Window -> X ())
    mouseBindings = \(XConfig {modMask :: forall (l :: * -> *). XConfig l -> ButtonMask
    modMask = ButtonMask
    modm}) -> [((ButtonMask, Button), Window -> X ())]
    -> Map (ButtonMask, Button) (Window -> X ())
    forall k a. Ord k => [(k, a)] -> Map k a
    M.fromList ([((ButtonMask, Button), Window -> X ())]
     -> Map (ButtonMask, Button) (Window -> X ()))
    -> [((ButtonMask, Button), Window -> X ())]
    -> Map (ButtonMask, Button) (Window -> X ())
    forall a b. (a -> b) -> a -> b
    $
                    [ ((ButtonMask
    modm, Button
    button1), (\w :: Window
    w -> Window -> X ()
    focus Window
    w X () -> X () -> X ()
    forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
    >> Window -> X ()
    mouseMoveWindow Window
    w))
                    , ((ButtonMask
    modm, Button
    button2), (\w :: Window
    w -> Window -> X ()
    focus Window
    w X () -> X () -> X ()
    forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
    >> (WindowSet -> WindowSet) -> X ()
    windows WindowSet -> WindowSet
    forall i l a s sd. StackSet i l a s sd -> StackSet i l a s sd
    W.swapMaster))
                    , ((ButtonMask
    modmButtonMask -> ButtonMask -> ButtonMask
    forall a. Bits a => a -> a -> a
    .|. ButtonMask
    shiftMask, Button
    button1), (\w :: Window
    w -> Window -> X ()
    focus Window
    w X () -> X () -> X ()
    forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
    >> Window -> X ()
    mouseResizeWindow Window
    w)) ]
            , keys :: XConfig Layout -> Map (ButtonMask, Window) (X ())
    keys = \c :: XConfig Layout
    c -> XConfig Layout -> Map (ButtonMask, Window) (X ())
    forall (l :: * -> *). XConfig l -> Map (ButtonMask, Window) (X ())
    mykeys XConfig Layout
    c Map (ButtonMask, Window) (X ())
    -> Map (ButtonMask, Window) (X ())
    -> Map (ButtonMask, Window) (X ())
    forall k a. Ord k => Map k a -> Map k a -> Map k a
    `M.union` XConfig (Choose Tall (Choose (Mirror Tall) Full))
    -> XConfig Layout -> Map (ButtonMask, Window) (X ())
    forall (l :: * -> *).
    XConfig l -> XConfig Layout -> Map (ButtonMask, Window) (X ())
    keys XConfig (Choose Tall (Choose (Mirror Tall) Full))
    forall a. Default a => a
    def XConfig Layout
    c
            , logHook :: X ()
    logHook = PP -> X String
    dynamicLogString PP
    sjanssenPP X String -> (String -> X ()) -> X ()
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= String -> X ()
    xmonadPropLog
            , layoutHook :: ModifiedLayout
      AvoidStruts
      (ModifiedLayout
         SmartBorder
         (Choose
            (Choose HintedTile (Choose HintedTile Full))
            (ModifiedLayout
               (Decoration TabbedDecoration DefaultShrinker) Simplest)))
      Window
    layoutHook  = Choose
      (Choose HintedTile (Choose HintedTile Full))
      (ModifiedLayout
         (Decoration TabbedDecoration DefaultShrinker) Simplest)
      Window
    -> ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            SmartBorder
            (Choose
               (Choose HintedTile (Choose HintedTile Full))
               (ModifiedLayout
                  (Decoration TabbedDecoration DefaultShrinker) Simplest)))
         Window
    modifiers Choose
      (Choose HintedTile (Choose HintedTile Full))
      (ModifiedLayout
         (Decoration TabbedDecoration DefaultShrinker) Simplest)
      Window
    layouts
            , manageHook :: ManageHook
    manageHook  = [ManageHook] -> ManageHook
    forall m. Monoid m => [m] -> m
    composeAll [Query String
    className Query String -> String -> Query Bool
    forall a. Eq a => Query a -> a -> Query Bool
    =? String
    x Query Bool -> ManageHook -> ManageHook
    forall (m :: * -> *) a. (Monad m, Monoid a) => m Bool -> m a -> m a
    --> String -> ManageHook
    doShift String
    w
                                        | (x :: String
    x, w :: String
    w) <- [ ("Firefox", "web")
                                                    , ("Ktorrent", "7")
                                                    , ("Amarokapp", "7")]]
                            ManageHook -> ManageHook -> ManageHook
    forall m. Monoid m => m -> m -> m
    <+> XConfig (Choose Tall (Choose (Mirror Tall) Full)) -> ManageHook
    forall (l :: * -> *). XConfig l -> ManageHook
    manageHook XConfig (Choose Tall (Choose (Mirror Tall) Full))
    forall a. Default a => a
    def ManageHook -> ManageHook -> ManageHook
    forall m. Monoid m => m -> m -> m
    <+> ManageHook
    manageSpawn
                            ManageHook -> ManageHook -> ManageHook
    forall m. Monoid m => m -> m -> m
    <+> (Query Bool
    isFullscreen Query Bool -> ManageHook -> ManageHook
    forall (m :: * -> *) a. (Monad m, Monoid a) => m Bool -> m a -> m a
    --> ManageHook
    doFullFloat)
            , startupHook :: X ()
    startupHook = (String -> X ()) -> [String] -> X ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ String -> X ()
    spawnOnce [String]
    spawns
            }
     where
        tiled :: Orientation -> HintedTile a
    tiled     = Int
    -> Rational -> Rational -> Alignment -> Orientation -> HintedTile a
    forall a.
    Int
    -> Rational -> Rational -> Alignment -> Orientation -> HintedTile a
    HintedTile 1 0.03 0.5 Alignment
    TopLeft
        layouts :: Choose
      (Choose HintedTile (Choose HintedTile Full))
      (ModifiedLayout
         (Decoration TabbedDecoration DefaultShrinker) Simplest)
      Window
    layouts   = (Orientation -> HintedTile Window
    forall a. Orientation -> HintedTile a
    tiled Orientation
    Tall HintedTile Window
    -> Choose HintedTile Full Window
    -> Choose HintedTile (Choose HintedTile Full) Window
    forall (l :: * -> *) a (r :: * -> *). l a -> r a -> Choose l r a
    ||| (Orientation -> HintedTile Window
    forall a. Orientation -> HintedTile a
    tiled Orientation
    Wide HintedTile Window -> Full Window -> Choose HintedTile Full Window
    forall (l :: * -> *) a (r :: * -> *). l a -> r a -> Choose l r a
    ||| Full Window
    forall a. Full a
    Full)) Choose HintedTile (Choose HintedTile Full) Window
    -> ModifiedLayout
         (Decoration TabbedDecoration DefaultShrinker) Simplest Window
    -> Choose
         (Choose HintedTile (Choose HintedTile Full))
         (ModifiedLayout
            (Decoration TabbedDecoration DefaultShrinker) Simplest)
         Window
    forall (l :: * -> *) a (r :: * -> *). l a -> r a -> Choose l r a
    ||| DefaultShrinker
    -> Theme
    -> ModifiedLayout
         (Decoration TabbedDecoration DefaultShrinker) Simplest Window
    forall a s.
    (Eq a, Shrinker s) =>
    s
    -> Theme
    -> ModifiedLayout (Decoration TabbedDecoration s) Simplest a
    tabbed DefaultShrinker
    shrinkText Theme
    myTheme
        modifiers :: Choose
      (Choose HintedTile (Choose HintedTile Full))
      (ModifiedLayout
         (Decoration TabbedDecoration DefaultShrinker) Simplest)
      Window
    -> ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            SmartBorder
            (Choose
               (Choose HintedTile (Choose HintedTile Full))
               (ModifiedLayout
                  (Decoration TabbedDecoration DefaultShrinker) Simplest)))
         Window
    modifiers = ModifiedLayout
      SmartBorder
      (Choose
         (Choose HintedTile (Choose HintedTile Full))
         (ModifiedLayout
            (Decoration TabbedDecoration DefaultShrinker) Simplest))
      Window
    -> ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            SmartBorder
            (Choose
               (Choose HintedTile (Choose HintedTile Full))
               (ModifiedLayout
                  (Decoration TabbedDecoration DefaultShrinker) Simplest)))
         Window
    forall (l :: * -> *) a.
    LayoutClass l a =>
    l a -> ModifiedLayout AvoidStruts l a
    avoidStruts (ModifiedLayout
       SmartBorder
       (Choose
          (Choose HintedTile (Choose HintedTile Full))
          (ModifiedLayout
             (Decoration TabbedDecoration DefaultShrinker) Simplest))
       Window
     -> ModifiedLayout
          AvoidStruts
          (ModifiedLayout
             SmartBorder
             (Choose
                (Choose HintedTile (Choose HintedTile Full))
                (ModifiedLayout
                   (Decoration TabbedDecoration DefaultShrinker) Simplest)))
          Window)
    -> (Choose
          (Choose HintedTile (Choose HintedTile Full))
          (ModifiedLayout
             (Decoration TabbedDecoration DefaultShrinker) Simplest)
          Window
        -> ModifiedLayout
             SmartBorder
             (Choose
                (Choose HintedTile (Choose HintedTile Full))
                (ModifiedLayout
                   (Decoration TabbedDecoration DefaultShrinker) Simplest))
             Window)
    -> Choose
         (Choose HintedTile (Choose HintedTile Full))
         (ModifiedLayout
            (Decoration TabbedDecoration DefaultShrinker) Simplest)
         Window
    -> ModifiedLayout
         AvoidStruts
         (ModifiedLayout
            SmartBorder
            (Choose
               (Choose HintedTile (Choose HintedTile Full))
               (ModifiedLayout
                  (Decoration TabbedDecoration DefaultShrinker) Simplest)))
         Window
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Choose
      (Choose HintedTile (Choose HintedTile Full))
      (ModifiedLayout
         (Decoration TabbedDecoration DefaultShrinker) Simplest)
      Window
    -> ModifiedLayout
         SmartBorder
         (Choose
            (Choose HintedTile (Choose HintedTile Full))
            (ModifiedLayout
               (Decoration TabbedDecoration DefaultShrinker) Simplest))
         Window
    forall (l :: * -> *) a.
    LayoutClass l a =>
    l a -> ModifiedLayout SmartBorder l a
    smartBorders

        spawns :: [String]
    spawns = [ "xmobar"
                 , "xset -b", "xset s off", "xset dpms 0 600 1200"
                 , "nitrogen --set-tiled wallpaper/wallpaper.jpg"
                 , "trayer --transparent true --expand true --align right "
                   String -> String -> String
    forall a. [a] -> [a] -> [a]
    ++ "--edge bottom --widthtype request" ]

        mykeys :: XConfig l -> Map (ButtonMask, Window) (X ())
    mykeys (XConfig {modMask :: forall (l :: * -> *). XConfig l -> ButtonMask
    modMask = ButtonMask
    modm}) = [((ButtonMask, Window), X ())] -> Map (ButtonMask, Window) (X ())
    forall k a. Ord k => [(k, a)] -> Map k a
    M.fromList ([((ButtonMask, Window), X ())] -> Map (ButtonMask, Window) (X ()))
    -> [((ButtonMask, Window), X ())]
    -> Map (ButtonMask, Window) (X ())
    forall a b. (a -> b) -> a -> b
    $
            [((ButtonMask
    modm,               Window
    xK_p     ), XPConfig -> X ()
    shellPromptHere XPConfig
    myPromptConfig)
            ,((ButtonMask
    modm ButtonMask -> ButtonMask -> ButtonMask
    forall a. Bits a => a -> a -> a
    .|. ButtonMask
    shiftMask, Window
    xK_Return), String -> X ()
    spawnHere (String -> X ()) -> X String -> X ()
    forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
    =<< (XConf -> String) -> X String
    forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
    asks (XConfig Layout -> String
    forall (l :: * -> *). XConfig l -> String
    terminal (XConfig Layout -> String)
    -> (XConf -> XConfig Layout) -> XConf -> String
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . XConf -> XConfig Layout
    config))
            ,((ButtonMask
    modm ButtonMask -> ButtonMask -> ButtonMask
    forall a. Bits a => a -> a -> a
    .|. ButtonMask
    shiftMask, Window
    xK_c     ), X ()
    kill1)
            ,((ButtonMask
    modm ButtonMask -> ButtonMask -> ButtonMask
    forall a. Bits a => a -> a -> a
    .|. ButtonMask
    shiftMask ButtonMask -> ButtonMask -> ButtonMask
    forall a. Bits a => a -> a -> a
    .|. ButtonMask
    controlMask, Window
    xK_c     ), X ()
    kill)
            ,((ButtonMask
    modm ButtonMask -> ButtonMask -> ButtonMask
    forall a. Bits a => a -> a -> a
    .|. ButtonMask
    shiftMask, Window
    xK_0     ), (WindowSet -> WindowSet) -> X ()
    windows ((WindowSet -> WindowSet) -> X ())
    -> (WindowSet -> WindowSet) -> X ()
    forall a b. (a -> b) -> a -> b
    $ WindowSet -> WindowSet
    forall s i a l sd.
    (Eq s, Eq i, Eq a) =>
    StackSet i l a s sd -> StackSet i l a s sd
    copyToAll)
            ,((ButtonMask
    modm,               Window
    xK_z     ), Int -> TwoPane Int -> X ()
    forall (l :: * -> *). LayoutClass l Int => Int -> l Int -> X ()
    layoutScreens 2 (TwoPane Int -> X ()) -> TwoPane Int -> X ()
    forall a b. (a -> b) -> a -> b
    $ Rational -> Rational -> TwoPane Int
    forall a. Rational -> Rational -> TwoPane a
    TwoPane 0.5 0.5)
            ,((ButtonMask
    modm ButtonMask -> ButtonMask -> ButtonMask
    forall a. Bits a => a -> a -> a
    .|. ButtonMask
    shiftMask, Window
    xK_z     ), X ()
    rescreen)
            , ((ButtonMask
    modm             , Window
    xK_b     ), ToggleStruts -> X ()
    forall a. Message a => a -> X ()
    sendMessage ToggleStruts
    ToggleStruts)
            ]

        myFont :: String
    myFont = "xft:Bitstream Vera Sans Mono:pixelsize=10"
        myTheme :: Theme
    myTheme = Theme
    forall a. Default a => a
    def { fontName :: String
    fontName = String
    myFont }
        myPromptConfig :: XPConfig
    myPromptConfig = XPConfig
    forall a. Default a => a
    def
                            { position :: XPPosition
    position = XPPosition
    Top
                            , font :: String
    font = String
    myFont
                            , showCompletionOnTab :: Bool
    showCompletionOnTab = Bool
    True
                            , historyFilter :: [String] -> [String]
    historyFilter = [String] -> [String]
    deleteConsecutive
                            , promptBorderWidth :: Button
    promptBorderWidth = 0 }