デスクトップ環境をxmonadにした。
理由はかっこいいから。名前からしてかっこいい。
スクリーンショット見ても、そのかっこよさが分かる。
www.deviantart.com
見た目だけでなく機能も充実、拡張性も高い。公式サイトには以下のように書かれている。これらのワードを見て脳から何かしら汁が出る人は一度は試すべきである。
xmonad is tiling.
xmonad is minimal.
xmonad is stable.
xmonad is extensible.
xmonad is featureful.
xmonad is easy.
xmonad is friendly.
xmonad | the tiling window manager that rocks
とりあえず、設定ファイルは下のサイトからダウンロードできる。
Xmonad/Config archive - HaskellWiki
なるべくノーマルな設定がいいので、download the latest darcs template xmonad.hs と書かれているリンクからダウンロードした。
これを自分好みの設定に変えていく。
myTerminal = "urxvt"
myFocusFollowsMouse = False
myBorderWidth = 2
myModMask = mod4Mask
ショートカットキーを変える。
File:Xmbindings.png - HaskellWiki
例えば、デフォルトだとMod + (Sfhit) + qに再起動と終了コマンドが割り当てられていて、かなりの頻度で押し間違えるので、エスケープキーとかに変える。
, ((modm .|. shiftMask, xK_Escape ), io (exitWith ExitSuccess))
レイアウトの設定。
xmonadにした理由の一つでもあるウィンドウ間のスペース設定。10ピクセルとかに設定する。(ググる限りではawesomeとかではできないみたい?)
xmobar(ステータスバー)を使うのでavoidStrutsも追加してる。後はrenamedでxmobarに表示されるレイアウトの名前を変えている。
myLayout = avoidStruts standardLayout
where
standardLayout = renamed [Replace "Tall"] tiled
||| renamed [Replace "Mirror Tall"] (Mirror tiled)
||| renamed [Replace "Full"] Full
tiled = spacing 10 $ Tall nmaster delta ratio
nmaster = 1
ratio = 1/2
delta = 3/100
次はフローティングにしたいアプリとかの設定。
起動時に好きなワークスペースに移動できたりする。
ここで変えたかったのが、ウィンドウの作成される位置。デフォルトだと、新しいウィンドウが作成されると、先頭(一つ上の位置?)に追加される。これが直感的でない。例えばWebブラウザとかでも末尾に追加されるじゃん。なので、insertPositionという関数を使うと追加する位置とフォーカスを変更できる。
しかしながら単にinsertPositionを使用するだけだと、フローティングさせてる場合、子ウィンドウを開くと親ウィンドウの背面に行ってしまう。(ボタン押したのに反応してないと思ったら実は背面にあったということが起こる。)なので、isFloatという関数を定義してフローティングのウィンドウが無い場合に限定させてる。hackageとかソースとかgithubとかで他の人の設定見たりして数時間かかった。easy()
myManageHook = composeAll
[ className =? "MPlayer" --> doFloat
, className =? "Gimp" --> doFloat
, resource =? "desktop_window" --> doIgnore
, resource =? "kdesktop" --> doIgnore
, className =? "Mikutter.rb" --> doShift (myWorkspaces !! 0)
, className =? "Firefox-esr" --> doShift (myWorkspaces !! 1)
, className =? "Doublecmd" --> doShift (myWorkspaces !! 2)
, not <$> isFloat --> insertPosition End Newer
]
where
isFloat = liftX $ do
floats <- gets $ W.floating . windowset
ws <- gets $ W.integrate' . W.stack . W.workspace . W.current . windowset
return $ any (flip M.member floats) ws
xmobarの設定。
Arch Wiki 見るとstatusBarというのを使うと良いらしい。
xmonad - ArchWiki
myXmobarPP = xmobarPP
{
ppCurrent = xmobarColor "#e5e5e5" "#1a1a1a" . pad . wrap "[" "]"
, ppVisible = xmobarColor "#e5e5e5" "#1a1a1a" . pad
, ppHidden = xmobarColor "#6D9CBE" "#1a1a1a" . pad
, ppHiddenNoWindows = xmobarColor "#444444" "#1a1a1a" . pad
, ppUrgent = xmobarColor "red" "#1a1a1a" . pad
, ppSep = " "
, ppWsSep = ""
, ppTitle = xmobarColor "#e5e5e5" "#1a1a1a" . shorten 30
, ppLayout = xmobarColor "#6D9CBE" "#1a1a1a"
}
main = do
xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig
where
myBar = "~/.cabal/bin/xmobar"
myPP = myXmobarPP
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)
myConfig = defaults
ちなみに下の設定が無いとxmonad起動時、xmonadとxmobarが重なる。重なり自体はctrl+bで切り替えられるけど。
myEventHook = docksEventHook
xmonad起動時の設定。
comptonで影をつけるとかっこいい。あと、xmonadでJavaアプリが変な表示になるのを防止している。
myStartupHook = do
spawn "compton -c -r 2 -o 0.8 -l -2 -t -2"
setWMName "LG3D"
xmobar本体の設定。(.xmobarrc)
Debianのリポジトリから落とすとVolumeの値が取得できない(依存関係の関係でwith_alsaオプションが付いてない)ため、cabalでインストールして取得できるようにした。したけど、ステータス(on/off)の色の設定(--onc)とかが何故か使えない。ググってみるとボリュームは自分でスクリプト作成して取得・表示している場合が多いようだ。とりあえず、パーセントだけは表示できるので満足。
Config {
font = "xft:MigMix 1P:antialias=true:autohinting=true:size=9"
, additionalFonts = ["xft:MigMix 1M:size=9:antialias=true"]
, bgColor = "#1a1a1a"
, fgColor = "#e5e5e5"
, position = Static { xpos = 1440, ypos = 0, width = 1440, height = 20 }
, lowerOnStart = True
, commands = [
Run StdinReader
, Run MultiCpu ["-t", "<total0>% <total1>%", "-m", "2"] 10
, Run Memory ["-t", "<usedratio>%", "-p", "3"] 10
, Run DynNetwork ["-t" , "<tx>k <rx>k", "-m", "2"] 10
, Run Date "%a.%d %H:%M" "date" 10
, Run Volume "default" "Master" ["-t", "<volume>%"] 10
]
, sepChar = "%"
, alignSep = "}{"
, template = " %StdinReader% } %date% { <fn=1><fn=0><fc=#6D9CBE>Cpu</fc></fn> %multicpu% <fn=0><fc=#6D9CBE>Mem</fc></fn>%memory% <fn=0><fc=#6D9CBE>Net</fc></fn> %dynnetwork% <fn=0><fc=#6D9CBE>Vol</fc></fn> %default:Master%</fn> "
}
設定はGitHubで公開してます。
GitHub - tempxla/dotfiles: dotfiles
以下スクショ。