本当はカスタマイズなどしない方が良いのだけど、長年使い続けた結果として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)), -- ディスプレイ0にワークスペース1を出力し,ディスプレイ1にワークスペース2を出力 ( "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 ]
*1:Emacs Lispを勉強したときと同じ動機だ