前段时间,工位机子上的Arch系统已经稳定下来,由于没有游戏需求,且看了一些dotfile的效果十分震撼,于是打算换成tiling wm以完全摆脱鼠标,提高“效率”。

DWM

  首先尝试的是处于鄙视链顶端底端的 dwm (dynamic window manager)。dwm 由 Suckless 组织出品,他们的项目还有 st、dmenu。所有的项目的配置都是放在源码里,每次修改配置都要重新编译;此外一些拓展的功能需要通过给源码打 patch 的方式 不得不说 Suckless 的哲学是真的很纯粹,甚至于有一些原始。

  dwm 一个突出的特点是配置的灵活度极高,且这个灵活度根据用户能力成正比。但是正是这种 自由度 往往增加了使用者的负担,尤其是第一次使用的用户,需要决定大量的配置项以实现一些功能。不过 dwm 的一些设计思想确实很 cool,比如窗口之间 master 和 slave 关系。

  Suckless 追求的纯粹的软件构建方式在现代需求的背景下却显得十分 Suck,比如 st 不支持 ASCII 字符以外的编码字符显示,以至于 CJK 的用户体验极差,同时 dwm 不支持通用的 fontconfig,导致字体的管理十分困难,添加字体甚至需要重新编译。编译是 dwm 使用的唯一方法,幸运的是,dwm 源码只有两千多行,完全编译一次只需要几秒。

  使用 dwm 的体验可以作为一类想要摆脱臃肿庞大的DE系统,十分适合满足那些因为在开源社区呆久了产生的精神洁癖;但是代价就是你需要自己构建一套满足你使用需求的"DE",对于只做文字工作的Coding需求来说还算可以接受,但是一旦涉及到多样化的需求,比如图片编辑、视就很折腾,需要趟很多坑。一些相关的吐槽文章:

Why Tiling Window Manager Sucks

At some point, I switched from i3 to Gnome simply because I grew tired of configuration breaking. I had to have scripts for altering volume, for switching external displays, for printing, for running applications, for locking screen, notification daemons, etc. Then you take a look at modern Gnome. Desktop environment where things are out of your way and they just let you work. All the things are seamless. From color management, to printing, DBus and everything else. And more to the point it allows you to tile windows and assign them to workspaces, something that is normally associated with tiling window managers.

Bismuth on KDE

  Bismuth 的前身是 khronkite,也是一种 kwin 的插件脚本,类似的还有 kwin-tiling 等等。尝试着去配置了一下,预览效果看起来很不错,可是实际配起来的过程很是折磨。

  首先需要修改 kde 的主题,去除边框等等;其次 kwin 是自带混成器,透明效果不是很好;再次就是需要修改或者全局去除kwin的快捷键,并自己配置插件脚本的快捷键。这一系列的 tweek 都是在 KDE/Plasma 内进行设置,破坏了原有的 DE 环境,由于 KDE 复杂而不友好的配置系统设计,还原到之前的样式成本很高。

i3wm/i3gaps on KDE

  这个方案也是我最后选择的,Plasma 支持将默认的 kwin 换成指定的 wm,只需要在 plasma-workspace/env 下使用 shell 脚本指定 KDEWM 环境变量。这个方案既能保留 kwin 的设置,并随时能切换回来,又能很方便得使用 KDE 的组件,以及一些 DE 的功能节约生命。同时也能体验到完整的 tiling wm,i3 提供一套很友好的 User Guide,可以最大化定制自由度。利用 i3 的机制,可以使用 picom 进行混成,获得更好的透明效果和控制。

一些其他的折腾

SurfingKeys

  SurfingKeys 是一个使用 typescript 编写的浏览器插件,可以使用类 Vim 的操作控制页面行为。目前,个人觉得最有用的是 f 跳转链接,可以在很大程度上摆脱鼠标。此外 SurfingKeys 还提供许多其他的功能,如文本选择、标签页管理等。

Keyboard layout

  键盘作为日常使用最多的外设,有很多地方值得折腾。尤其是使用了 Anne Pro II 后,magic key 直接把效率拉高了一个等级。随后就想着能不能在 Xorg 层面实现 magic key 功能,从而实现功能移植。

  捣鼓了一会,发现了很多有趣的东西。首先是 Xorg 自己的按键映射机制,xmondmap,可以实现较为底层的按键映射,但是缺点是需要配置且不太稳定,不适用所有场景。其次,是 DE 环境进行的按键映射管理,这层抽象还是很方便的,只需要进行一些小设置,由于改动较小,配置的鲁棒性很强,使用也比较稳定。最后,DE 还提供了额外的两层按键抽象,以及 Compose Key 功能,不过这些只适用于输入字符的场景。

Ranger

  Ranger 是一个基于 console 的文件管理器,提供很 terminal 友好的交互方式以及预览。由于 ranger 提供类 Vim 的快捷键,ranger 的配置也值得不错的折腾。

  其他还有很多值得折腾的东西,比如 Tmux、不同 Terminal 等等。

思考——从CISC到RISC

  dotfile 的形成,绝非静态的一蹴而就的,而是动态的随时变化的。各种配置习惯,是因人而异的,而同时每个人的状态又是随时间变化的。如果将Windows下所见即所得的工作方式比做CISC,即由一系列不固定且繁杂的行为去实现需求,那么经过通用化分割和重新组装的所谓的“极客的方式”就是RISC。需要注意的是如何做到最舒适的分割和熟练的组装恰恰就是一个折腾的过程。当这分割和组装的方式都稳定下来了,那么相比较与CISC,RISC方式的工作流将变得十分的高效。

  然而问题是,当我们利用快捷键可以迅速的完成一些操作的时候,我们的思维速度是否还能跟上。有的时候往往看似我们在做一些无效操作,比如乱拖窗口、无意义打字,其实这是大脑的思考时间,这段产出决策的时间是要比实际执行动作要更加重要。

  因此,当我们在追求极致的效率的时候,不妨也要想一想,你的大脑跟的上吗?