diff options
Diffstat (limited to 'XMonad')
-rw-r--r-- | XMonad/Config/Monad.hs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/XMonad/Config/Monad.hs b/XMonad/Config/Monad.hs new file mode 100644 index 0000000..db29097 --- /dev/null +++ b/XMonad/Config/Monad.hs @@ -0,0 +1,49 @@ +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +-- experimental, not expected to work + +{- our goal: +config = do + add layout Full + set terminal "urxvt" + add keys [blah blah blah] +-} + +{- +ideas: + composability! + "only once" features like avoidStruts, ewmhDesktops +-} + +module XMonad.Config.Monad where + +import XMonad hiding (terminal, keys) +import qualified XMonad as X +import Control.Monad.Writer +import Data.Monoid +import Data.Accessor +import Data.Accessor.Basic hiding (set) + +-- Ugly! To fix this we'll need to change the kind of XConfig. +newtype LayoutList a = LL [Layout a] deriving Monoid + +type W = Dual (Endo (XConfig LayoutList)) +mkW = Dual . Endo + +newtype Config a = C (WriterT W IO a) + deriving (Functor, Monad, MonadWriter W) + +-- references: +layout = fromSetGet (\x c -> c { layoutHook = x }) layoutHook +terminal = fromSetGet (\x c -> c { X.terminal = x }) X.terminal +keys = fromSetGet (\x c -> c { X.keys = x }) X.keys + +set :: Accessor (XConfig LayoutList) a -> a -> Config () +set r x = tell (mkW $ r ^= x) +add r x = tell (mkW (r ^: mappend x)) + +-- +example :: Config () +example = do + add layout $ LL [Layout $ Full] -- make this better + set terminal "urxvt" |