XMonadを使い続けた結果

本当はカスタマイズなどしない方が良いのだけど、長年使い続けた結果として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を勉強したときと同じ動機だ