入坑 Xmonad,请推荐一个适合初学者的配置

没错,准备从白板开始用起,现在的困难是怎样把xfce下的自启动程序给迁移到 xmonad 下,用 xsession?有没有好的 xsession 模板参考?

import XMonad
import XMonad.Actions.CycleWS
import XMonad.Actions.GridSelect
import XMonad.Actions.SpawnOn
import XMonad.Config.Desktop
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageDocks
import XMonad.Layout.Minimize
import XMonad.Layout.Maximize
import XMonad.Layout.Named
import XMonad.Layout.NoBorders
import XMonad.Util.EZConfig
import XMonad.Util.Run(spawnPipe)
import System.IO
trayer = "trayer --edge top --align right --SetDockType true --SetPartialStrut true " ++
         "--expand true --width 7 --transparent true --tint 0x0c1014 --alpha 0 --height 15"
myStatusBar = "conky | dzen2 -w 1580 -ta r -h 16 -x 210 -fn \"WenQuanYi Zen Hei:size=10\""
myXmonadBar = "dzen2 -w 210 -ta l -h 16 -fn \"WenQuanYi Zen Hei:size=10\""
myManageHook = composeAll
    [ className =? "mpv"    --> doFloat
    , className =? "Gimp"   --> doFloat
    , className =? "Steam"  --> doFloat
    ]
myStartupHook = do
  spawnOn "1" "termite"
  spawnOn "4" "telegram-desktop"
myKeys = [ ("M-c", spawn "chromium")
         , ("M-z", spawn "amixer set Master 3%-")
         , ("M-x", spawn "amixer set Master 3%+")
         , ("M-u", spawn "mpc prev")
         , ("M-i", spawn "mpc next")
         , ("M-o", spawn "mpc toggle")
         , ("M-s", spawn "scrot")
         , ("M-S-s", spawn "sleep 0.5 && scrot -s")
         , ("M-p", spawn "rofi -show run")
         , ("M-q", spawn "pkill trayer; pkill dzen2; xmonad --recompile; xmonad --restart")
         , ("M-g", goToSelected def)
         , ("M-v", withFocused minimizeWindow)
         , ("M-f", withFocused (sendMessage . maximizeRestore))
         , ("M-S-v", sendMessage RestoreNextMinimizedWin)
         , ("M-b", sendMessage ToggleStruts)
         , ("M-<Tab>", moveTo Next NonEmptyWS)
         , ("M-S-<Tab>", moveTo Prev NonEmptyWS)
         ] 
main = do
    spawn trayer
    spawn myStatusBar
    dzproc <- spawnPipe myXmonadBar
    xmonad $ ewmh desktopConfig
        { manageHook = manageDocks <+> manageSpawn <+> myManageHook <+> manageHook desktopConfig
        , layoutHook = nameTail $ nameTail $ desktopLayoutModifiers $ smartBorders $ maximizeWithPadding 0 $ minimize $ layoutHook desktopConfig
        , startupHook = myStartupHook
        , handleEventHook = handleEventHook desktopConfig <+> fullscreenEventHook
        , logHook = dynamicLogWithPP $ def
                        { ppOutput  = hPutStrLn dzproc
                        , ppLayout  = dzenColor "#edb443" ""
                        , ppCurrent = dzenColor "#66d9ef" "" . wrap "[" "]"
                        , ppTitle   = (\s -> "")
                        }
        , modMask = mod4Mask
        , terminal = "termite"
        , focusedBorderColor = "#599cab"
        , borderWidth = 1
        } `additionalKeysP` myKeys

我以前的配置是这样,spawn和spawnOn可以自启,托盘用的trayer,bar用的是conky和dzen2,启动了两次dzen2,一个是给conky输出,一个是给xmonad输出什么workspace之类的信息

1 个赞
$ echo "exec xmonad" > .xintrc
startx

现在最痛的痛点是两个显示器时,每次切换工作区,我的窗口随机在两个显示器的其中一个出现 :joy:,完全没有规律可循,我快疯掉了

这得看你的鼠标在哪里。准确地说应该是当前窗口聚焦。

如果你不喜欢窗口聚焦随鼠标改变,应该可以修改 focusFollowsMouse 之类的

1 个赞

我靠,真的,跟鼠标位置有关 :joy:,大写的服。。。

现在的痛点是 xmobar 和 stalonetray 组成的 bar 中间会有空隙

手动调整要不就是重叠,要不就有空隙

xmobar对tray并不友好,像ss这种,建议使用systemd管理,尽量使用tui

  • nmtui: 管理无线连接
  • chromium --app=“wx.qq.com” 封装微信
  • 使用syncthing代替dropbox
  • rss: elfeed
  • mail: mu4e

初学xmonad的话,建议从default设置入手,再慢慢添加自己喜欢的功能

可以在hackage搜索xmonad-contrib,来寻找自己喜欢的功能

用hoogle来辅助完成配置

2 个赞

v2ray 按照官方配置倒腾了一下没成功…

为啥不用i3啊, 感觉i3资料多一些

因为 Haskell

可以用来装逼,尤其是(随便能搜到的)“资料少的”

这个和 i3相比有什么优势呢?

  1. 支持的 DE 比 i3 多。
  2. 性能。
  3. Workspace 功能更丰富。
  4. 扩展性。
  5. 有自动平铺布局的算法。

谢谢 :grin: