ymonad-0.1.0.0: src/YMonad/Config.hs
module YMonad.Config (
YAction (..),
YConfig (..),
def,
defaultKeys,
) where
import Data.Bits ((.|.))
import Data.Map.Strict qualified as M
import YMonad.Core.Common (Dimension (..), TitleBarMode (..))
import YMonad.Core.Layout (Layout, full, mirror, tall, (|||))
import YMonad.Keys
import YMonad.Prompt (YPConfig)
data YAction
= Spawn String
| ToggleFullscreen
| ViewWorkspace String
| MoveFocusedTo String
| FocusNext
| FocusPrev
| SwapNext
| SwapPrev
| KillFocused
| CycleLayout
| ShrinkMaster
| ExpandMaster
| IncMasterNBy Int
| ExitSession
| RecompileRestart
| ShellPrompt YPConfig
| SafePrompt FilePath YPConfig
| UnsafePrompt FilePath YPConfig
| SshPrompt YPConfig
| ManPrompt YPConfig
deriving stock (Eq, Ord, Show)
data YConfig = YConfig
{ terminal :: String
, modMask :: KeyMask
, workspaces :: [String]
, layoutHook :: Layout
, borderWidth :: Dimension
, normalBorderColor :: String
, focusedBorderColor :: String
, titleBarMode :: TitleBarMode
, keys :: YConfig -> Map (KeyMask, KeySym) YAction
}
def :: YConfig
def =
YConfig
{ terminal = "foot"
, modMask = mod1Mask
, workspaces = map show [(1 :: Int) .. 9]
, layoutHook = tall ||| mirror tall ||| full
, borderWidth = 1
, normalBorderColor = "#dddddd"
, focusedBorderColor = "#ff0000"
, titleBarMode = NoTitleBar
, keys = defaultKeys
}
defaultKeys :: YConfig -> Map (KeyMask, KeySym) YAction
defaultKeys conf =
M.fromList (baseBindings ++ workspaceBindings)
where
modm = modMask conf
baseBindings =
[ ((modm .|. shiftMask, xK_Return), Spawn (terminal conf))
, ((modm, xK_Return), ToggleFullscreen)
, ((modm, xK_space), CycleLayout)
, ((modm, xK_Tab), FocusPrev)
, ((modm, xK_j), FocusPrev)
, ((modm .|. shiftMask, xK_Tab), FocusNext)
, ((modm, xK_ISO_Left_Tab), FocusNext)
, ((modm .|. shiftMask, xK_ISO_Left_Tab), FocusNext)
, ((modm, xK_k), FocusNext)
, ((modm .|. shiftMask, xK_j), SwapPrev)
, ((modm .|. shiftMask, xK_k), SwapNext)
, ((modm, xK_h), ShrinkMaster)
, ((modm, xK_l), ExpandMaster)
, ((modm, xK_comma), IncMasterNBy 1)
, ((modm, xK_period), IncMasterNBy (-1))
, ((modm .|. shiftMask, xK_c), KillFocused)
, ((modm, xK_q), ExitSession)
, ((modm .|. shiftMask, xK_q), RecompileRestart)
]
workspaceBindings = concatMap mkWorkspaceBinding (zip workspaceKeys (workspaces conf))
mkWorkspaceBinding (key, workspaceName) =
[ ((modm, key), ViewWorkspace workspaceName)
, ((modm .|. shiftMask, key), MoveFocusedTo workspaceName)
]
workspaceKeys = [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_9]