对杂乱的$HOME的不彻底妥协

本人第一次发帖,多多包涵。 :smiling_face_with_three_hearts:

前提提要:鄙人是一个不完全的极简主义爱好者,还有点强迫症。除了每天纠结于代码命名,最令我头疼的就是这个杂乱的 $HOME 目录。尽管考虑到 GNU/Linux 的自由性和一些历史原因,这种情况无可厚非。当然也会有人说,眼不见为净/事物的发展不随人的意识转移/…… 当然有时过于规范也会令人头疼,例如 Windows 软件总想在我的C盘里拉:poop:

当然,话说回来,和我有同样想法的人肯定也不想每次在 $HOME 输入 ls -la 时看到那么一托点文件吧,特别对于我重度终端用户,而且这会让我管理点文件很麻烦,总感觉不够一致。不过所幸在 Linux 也有了那么一个规范,即 XDG Base Directory Specification 。而且现在几乎所有比较新的软件安装都默认遵循这个 XDG 规范。甚至一些比较大型的软件,例如 firefox 最近也支持了这个规范。这是一个好兆头。

当然,还存在一些软件并不支持该协议。据我所知有以下几个原因:

  1. 开发者不完全了解Linux,并不知道该协议。这在一些跨平台软件比较常见。
  2. 开发者不愿或不屑于为此去修改,并且可能在早期开发时硬编码路径而难以适配。 这在一些大型软件,尤其是商业闭源软件尤为突出, 因为没有任何收益。
  3. 出于安全或顾及下游。这可能是一些Linux核心软件,例如 ssh,bash。像路径更改会触发连锁破坏反应,几乎不会适配。
  4. 诞生于 XDG Base Directory Specification 发布之前,在设计之初当然就不可能遵循, 对该协议的支持的态度可能与上述提到的1, 2, 3 相似。
  5. ……

目前我所知的一些软件保持 XDG-compat 的方法:

  • 通过搜索路径支持:例如 vimemacs, git, conda 等。兼容性最好,不会破坏原先的配置,并且可手动 mv 至对应的XDG目录。
  • 支持通过环境变量修改:例如 lessgnupg 等。灵活性最好,你甚至可以指定任意路径, 当然最好还是使用规范的XDG路径。
  • 通过命令行参数读取:例如 yarn , svn 等。这通常仅适用于指定配置文件的路径,可通过别名的方法持久化。

那么,对于那些未提供任何方式来保持 XDG-compat 的软件,一个比较取巧的方式是使用沙盒版本,例如安装其flatpak版本。尽管这并不遵循 XDG 规范,但从某种意义上达到了其效果 (仅多了个 .var/ 目录)。

不同的软件的迁移方式有所不同,而且修复程度也有所不同。主要就是围绕我提到的那几个方法来解决,我主要是通过Arch Linux wiki: XDG Base Directory#Hardcoded 记录的方法来进行的,也有一些相关的工具能辅助你完成这项工作:

当然,这只能尽可能减少,一些软件到目前为止依旧没有解决方案。不过就算这样我已经很满足了,附上一张我目前的 $HOME 目录

这是我的与之相关的 shell 文件,感兴趣的可以参考一下:

不过最后我要提醒一下,任何的迁移都存在一定风险。一般情况下我不建议在你常用的用户家目录进行迁移,因为考虑到使用习惯和可能存在的硬编码路径问题,除非你了解迁移过程。对于新用户,考虑到大部分软件默认都遵循 XDG 规范,因此需要的迁移工作量就不是很多。

2 Likes

为什么你的markdown格式不对劲啊?你是不是在所见即所得模式下粘贴了markdown源码?

另外Vim最近支持了XDG,你可以翻一下文档来了解迁移方法。

我直接在这个编辑框写的,不知道上传的时候怎么在链接这里多了转义符号’\’,刚刚编辑了一下,这下没问题了吧

还有很多行内代码格式没有问题。Discourse的编辑器默认是所见即所得模式,会自动帮你转义;你可以点左上角切换成源码编辑模式,就可以直接敲源码同时在右侧预览效果啦。

感谢,确实是这样。

已经对一大堆~/下的乱七八糟的点文件夹无感了……:new_moon_face:

话说firefox不是147就开始支持XDG了吗,为啥我现在升到148了还在用`~/.mozilla`目录

因为跟Vim一样,需要手动迁移的啦。

原来如此

我的还有救吗?, :sob:

没事,至少他们是隐藏文件。