本当はカスタマイズなどしない方が良いのだけど、長年使い続けた結果としてxmonad.hsが少し大きくなってしまった。
Haskellは勉強したけど、考え方が根本的に違っているのか頭に入ってこない。勉強した動機が、xmonadのためだけ*1なので、みようみまねで誤魔化している。
カスタマイズのポイントは、
- ワークスペースを3つだけにする。
- 自動起動させたいアプリを横着してxmonadからさせている
- フローティングウィンドウは定義しているが使っていない。
- タスクバーはいらないときはキーボード・ショートカットで見えなくする
- 間違ってmod-shift-qで終了したことがあるので、mod-ctrl-alt-qで終了するようにする
- ディスプレイとワークスペースの割り振りが分からなくなったときに、決め打ちで戻す設定をした。どこかのブログからコピペさせてもらった。
import System.Exit
import XMonad
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.SetWMName
import qualified XMonad.StackSet as W
import XMonad.Util.EZConfig
import XMonad.Util.Run
import XMonad.Util.SpawnOnce
main = do
xmonad $
ewmh $
docks $
def
{ terminal = "urxvt",
modMask = myMod,
borderWidth = 3,
workspaces = myWorkspaces,
startupHook = myStartupHook,
manageHook =
myManageHookFloat
<+> manageHook def
<+> manageDocks,
layoutHook = avoidStruts $ layoutHook def
}
`removeKeysP` ["M-S-q"]
`additionalKeysP` myKeys
myKeys =
[ ("M-S-p", spawn "xfce4-appfinder"),
("M-S-b", sendMessage ToggleStruts),
("M-C-M1-q", io (exitWith ExitSuccess)),
( "M-S-r",
do
screenWorkspace 0 >>= flip whenJust (windows . W.view)
(windows . W.greedyView) "1"
screenWorkspace 1 >>= flip whenJust (windows . W.view)
(windows . W.greedyView) "2"
)
]
myMod = mod4Mask
myWorkspaces = ["1", "2", "3"]
myStartupHook = do
spawnOnce "tint2"
spawnOnce "copyq"
spawnOnce "fcitx5"
spawnOnce "pasystray"
sendMessage $ SetStruts [] [minBound .. maxBound]
myManageHookFloat =
composeAll
[ className =? "Gimp" --> doFloat,
className =? "xfce4-appfinder" --> doFloat,
className =? "Pomodoro" --> doFloat
]