mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 03:20:21 -07:00
Sketch of XMonad.Config.Monad
This commit is contained in:
parent
10be813bd7
commit
026fdf71be
49
XMonad/Config/Monad.hs
Normal file
49
XMonad/Config/Monad.hs
Normal file
@ -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"
|
Loading…
x
Reference in New Issue
Block a user