关于我的 Writerdeck 写作设备
- #Linux
- #写作工具
- #DIY
- #tmux
- #neovim
我一直有注意力不集中的问题。几周前,我决定把旧笔记本电脑改造成一台 writerdeck——一个专门用来写作、不受现代互联网干扰的设备。很多人为此打造了非常精巧的离线设备,我也很想这么做……总有一天吧。但现在我手上的项目已经够多了,关键是先写起来,所以我利用手头现有的东西:一台六年前的笔记本,它运行依然流畅,性能也够用,但已经不怎么用了。关键的是,这台笔记本的键盘手感极佳,还有一块雾面屏,长时间打字非常舒适,在户外阳光下也能看清(我喜欢带着狗坐在外面写作)。它还是一台 System76 Galago Pro(不是赞助),这意味着它天生对 Linux 友好,内核支持也很好。
用 tty 替代桌面 当然,你也可以直接使用普通的桌面操作系统并保持离线,但这说起来容易做起来难。我觉得你无法完全从现代 Mac 或 Windows PC 上移除浏览器,至少没法以官方支持的方式做到。当然,我是 Linux 用户,有很多选择。我本可以装个简单的桌面或窗口管理器,然后不装浏览器,但我想要的是能打破桌面操作系统的肌肉记忆,强迫我专注思考文字。所以我选择了基于 tty 的设置,使用 Debian(写作时为 Trixie 版本)。只有控制台——没有 X11 或 Wayland,没有桌面挡道。安装 Debian 很简单。我使用文本安装模式,对于这台 writerdeck,我跳过了全盘加密(反正这台设备上没什么不公开的内容)。很多人告诉我他们在设置 Debian 的 sudo 时卡住了。如果你是从 Mint 或 Ubuntu 或其他桌面发行版转过来的,这可能会绊倒你。如果你想用 sudo 执行管理任务,就不要设置 root 密码。这样会禁用 root 而把你设为 sudo 用户。如果想用 sudo 用户,就留空!很多人不了解这个细节,从其他发行版转过来时会遇到麻烦。在桌面设置界面,我选择移除所有桌面组件,因为再次强调,我要的是极简设备。只有我和文字,没有 GUI 挡道。我取消了“Debian 桌面环境”和“GNOME”的勾选。这样它就只是一个 tty 了。安装完成后,你会看到一个朴素的控制台登录界面。完美的起点。它很无聊,但正好。
安装 network-manager 首次登录并确保系统最新(sudo apt update && sudo apt upgrade)之后,我选择用 network-manager 替换默认的网络栈。主要是为了用上那个非常好用的 curses 工具 nm-tui 来连接网络。nm-tui 比编辑配置文件来设置网络设备简单了一千倍。虽然这台设备在远离家时我主要离线使用,但我还是希望能联网备份文件,以防万一。用 sudo apt install network-manager 安装完成后,就可以用 nm-tui 扫描可用的 Wi-Fi 网络并连接。根据硬件不同,你可能还能用上移动网络。挺酷的。拥有一个 TUI 的网络管理工具是一种生活质量改善。
安装 neovim 和 kmscon 我迫不及待,赶紧用 sudo apt install neovim 装了 neovim。我可不想用 nano 编辑。不是针对谁,我现在完全是个 vim 用户了。平时我用传统 vim,但这次选了 neovim,因为想多了解它一些。然后我安装了 kmscon,对于 Debian Trixie,它需要从 backports 添加。首先,我编辑 /etc/apt/sources.list 文件,添加以下两行来更新 Debian 源列表:
deb http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware
接着 sudo apt update,然后直接运行 sudo apt install -t trixie-backports kmscon。这会从 backports 安装 kmscon 及其依赖,并设置为开机自启。下次重启,你会看到熟悉的 tty,但现在它可以用 Ctrl+和 Ctrl-来缩放,就像大多数现代浏览器那样。至此,我有了一个完全可用的 writerdeck。我可以就此打住,对离线、舒适的写作体验还算满意。但我还想要一些我已经习惯的额外便利。
tmux 实现多窗口和漂亮的状态栏 接下来,我安装了 tmux 来实现基本的终端分屏和漂亮的状态栏。Debian(以及几乎其他所有发行版)都有这个包,用 sudo apt install tmux 安装。我还安装了 acpi 来查看电池信息,以及 light 来控制屏幕背光。可以用 sudo apt install acpi light 一次性安装。我在家目录的 .tmux.conf 文件中配置它们。下面是具体用法。
利用 ACPI 显示电池电量 安装 acpi 后,可以用 acpi -b 查看电池(假设笔记本有电池且能被 acpi 检测到,我在家里的每台笔记本上测试都能用)。要只显示电量百分比,可以这样使用 grep 管道:
acpi -b | grep -m1 -o -P '.{0,2}%'
这个 grep 有点难理解,我们来拆解一下:
-m1表示匹配后停止读取文件。我这样做是因为有些笔记本有多块电池,而我只关心主电池。如果 acpi -b 只返回一行,你可以去掉这个参数。-o只打印匹配的部分。我不想看到剩余时间等大段输出,你可能需要!-P将模式解释为 Perl 兼容的正则表达式。然后'.{0,2}%'会匹配百分号以及它前面的最多两位数字(不会显示“100%”,但我能接受,因为这台笔记本已经充不到 100% 了)。我想用电池电量替换 tmux 状态栏中的默认信息,所以在 .tmux.conf 中添加如下内容:
# 用电池电量替代时间
set-window-option -g status-right "#(acpi -b | grep -m1 -o -P '.{0,2}%')"
用 light 控制亮度
接下来,我们可以用之前安装的非常简单的 light 命令来控制亮度。在我的笔记本上,F8 和 F9 键上印有亮度图标,所以完美契合。light -U 10 降低 10% 亮度,light -A 10 增加 10% 亮度。所以,要绑定 F8 和 F9 来降低/增加亮度,只需在 .tmux.conf 中添加:
# 亮度快捷键
bind -n F8 run-shell 'light -U 10' # 降低
bind -n F9 run-shell 'light -A 10' # 增加
现在,下次启动 tmux 时,我就有了亮度控制。非常整洁!
额外的 tmux 定制
最后,我喜欢把 tmux 的状态栏放在屏幕顶部,因为 neovim 会把它的状态栏放在底部。这可以通过在 .tmux.conf 中添加 set -g status-position top 实现。另外,我有指定颜色的习惯。默认是绿色,但我还是设置了(以后可能会改,谁知道呢),用 set -g status-style bg=green。所以我的最终 tmux.conf 如下:
# 栏位置和颜色
set -g status-position top
set -g status-style bg=green
# 亮度快捷键
bind -n F8 run-shell 'light -U 10' # 降低
bind -n F9 run-shell 'light -A 10' # 增加
# 用电池电量替代时间
set-window-option -g status-right "#(acpi -b | grep -m1 -o -P '.{0,2}%')"
这不是 tmux 教程,但默认情况下,分屏操作是:按 Ctrl-B 进入 tmux 命令模式,然后按 % 垂直分屏,或按 " 水平分屏。Ctrl-B 后按方向键可以在窗格之间移动焦点。以后我会写一个正式的 tmux 教程。继续!
neovim 和 vimwiki
我知道很多人不想用 neovim 或 vim,而是用 emacs、helix、micro、nano 或某个我没想到的编辑器(但马上会有人提)。那也很好。我为你高兴。但我是一个 vim 用户,所以我就按这个设置。neovim 包含一些相当不错的配色方案,可以用 :colorscheme 命令试试。我选择了 blue,很符合我的复古风格,但你可以选任何你喜欢的,甚至从头写一个。我把这个添加到 .config/nvim/init.vim 文件中:colorscheme blue,还加了 set linebreak 以便自动换行(我平时在桌面上不会这样做,但这台设备唯一的工作就是写作)。最后,我设置了 vimwiki,这我已经在另一篇博客文章中介绍过了。唯一的变化是,在 Trixie 上 vimwiki 被打包了,所以你可以直接用 sudo apt install vim-vimwiki 安装。
安装 Syncthing 我按照 Syncthing 文档(写得很好,我在此不再重复)设置了 Syncthing。我将 writerdeck 上的 vimwiki 文件夹与服务器上的 writing 文件夹同步,这个文件夹是另一个更私密的 vimwiki 配置的子目录。这样,如果桌面版的 vimwiki 里有敏感笔记,它们就不会同步到 writerdeck。不过如果这台设备有加密,我倒也不介意,我可能会设置基于密码的 LUKS 加密,以便在 writerdeck 上访问我的 vimwiki 日记。我的 Syncthing 设置与默认配置有一处不同:因为我没有带传统浏览器的桌面,所以我将 Syncthing Web 界面的监听地址从 127.0.0.1 改为所有地址。我不太喜欢这种做法,但同样,这台设备上没有任何私有内容。更好的方法是设置 SOCKS 代理再连接,但那是未来文章的话题了。
设置自动登录 为了让这台 writerdeck 完全属于我,最后一件事是设置自动登录。我希望打开就能快速开始写作——自动登录是一个简单的方法。
通过 kmscon 实现自动登录 因为我安装了 kmscon,所以这很简单,只需(惊讶吧)用 sudo systemctl edit kmsconvt@tty1.service 编辑 systemd 服务。然后添加如下内容:
[Service]
ExecStart=
ExecStart=/usr/bin/kmscon --login -- /bin/login -f my_username_goes_here
这告诉 kmscon 在 --login 之后启动 -- 后面的内容。在我的情况下,是使用参数 -f 和我的用户名调用默认的 /bin/login 程序。
启动时自动启动 tmux kmscon 登录后,我希望 tmux 自动启动并进入 vimwiki,但仅限于主 tty(默认虚拟终端)。我可以通过在 .bashrc 中添加一个小的 bash if/then 来实现:
# 如果尚未运行 tmux 并且在默认 tty 中,则启动 tmux
if [ -z "${TMUX}" ] && [ $(tty) == "/dev/pts/0" ]; then
exec tmux new-session -d 'vim -c VimwikiIndex' \; attach
fi
这会检查是否已经处于 tmux 中(否则会递归,不好),同时确保我们在第一个虚拟 tty 中。如果这两个条件都满足,则启动一个新的 tmux 会话,执行 vim -c VimwikiIndex(告诉 vim 连接到 Vimwiki 索引),然后附加到该会话。
使用后的感受 我已经用它写了一周左右,用它写了这篇博客文章、配套视频的脚本,以及我目前正在写的另一个未来脚本。感觉太棒了。我可能会扩展这个想法,加入拼写检查器,或者在我的工作区用一台旧的 486 电脑搭建一个“writerdeck 终端”,让自己真正回到更有意图的写作体验(还能用上更好的键盘!)。重点是写更多,而且不受干扰。我一直都在挣扎……
评论