Hacker News 中文摘要

RSS订阅

macOS 配置文件不应存放在 ~/Library/Application Support -- macOS dotfiles should not go in –/Library/Application Support

文章摘要

文章指出,macOS上的命令行工具不应将用户配置文件存储在~/Library/Application Support中,这种做法不仅用户体验不佳,且与相关文档不符。作者建议遵循XDG Base Directory规范,将配置文件默认存储在$XDG_CONFIG_HOME(通常为~/.config)中。当前许多工具使用~/Library/Application Support作为默认配置目录,主要是由于依赖的库(如Python的platformdirs、JavaScript的env-paths等)默认行为所致,而非开发者有意设计。

文章总结

macOS 命令行工具的配置文件不应放在 ~/Library/Application Support

在 macOS 上,许多命令行工具会在 ~/Library/Application Support 目录中查找用户配置文件,这种做法不仅不符合用户习惯,而且与相关文档的指导原则相悖。根据 XDG Base Directory Specification,命令行工具应将配置文件存放在 $XDG_CONFIG_HOME 目录下,默认路径为 ~/.config

通常,程序将配置文件放在 ~/Library/Application Support 并不是出于设计意图,而是因为开发者依赖了一些库,而这些库默认将 macOS 的配置文件目录设置为 ~/Library/Application Support。例如,Python 的 platformdirs、JavaScript 的 env-paths、Rust 的 dirs 和 Go 的 adrg/xdg 等库都采用了这一默认设置。虽然 ~/Library/Application Support 可能是 GUI 应用的合适配置目录,但对于大多数命令行工具来说,配置文件应存放在 ~/.config

将配置文件放在 ~/Library/Application Support 的主要问题是它不符合用户预期。用户通常期望命令行工具在 ~/.config 中查找配置文件,因为这是大多数其他程序的做法。正如 Ashlin Eldridge 在 GitHub 上所述,现代工具如 nu 将配置文件放在 ~/Library/Application Support 是令人惊讶的,尤其是当许多工具已经支持 XDG 标准时。

此外,许多工程师使用或维护 dotfile 管理器来管理配置文件。如果配置文件确实应该放在 ~/Library/Application Support,那么 dotfile 管理器在 macOS 上默认会将配置文件放在该目录下。然而,像 chezmoidotbotyadmrcmGNU Stow 等流行的 dotfile 管理器都没有默认支持 ~/Library/Application Support,这表明用户通常不希望配置文件存放在该目录。

尽管有人认为程序应遵循平台指南,但 macOS 的 Standard Directories 文档明确指出,~/Library/Application Support 是为 GUI 应用设计的,而不是命令行工具。命令行工具没有应用特定的数据,也不应自动管理用户配置文件。

因此,命令行工具的配置文件应遵循 XDG 标准,存放在 ~/.config 目录下。这种做法不仅符合用户预期,也与大多数其他工具保持一致。除非你的工具是安装在 /Applications 中的 GUI 应用,否则没有理由将配置文件放在 ~/Library/Application Support

总结:用户不期望 macOS 命令行工具在 ~/Library/Application Support 中查找配置文件,dotfile 管理器也不默认将配置文件放在该目录。请遵循 XDG Base Directory Specification,将配置文件存放在 ~/.config

评论总结

评论总结:

  1. 关于配置文件位置的争议

    • 支持XDG规范:部分评论者认为应遵循XDG规范,将配置文件放在~/.config目录下,以避免在用户主目录中产生混乱。例如,评论3提到:“I really like the new era of CLI tools that’s trying to be excellent in every dimension.”(我非常喜欢那些在各个维度都力求卓越的新时代CLI工具。)
    • 支持macOS默认路径:另一些评论者认为macOS应使用其默认的~/Library/Application Support~/Library/Preferences路径。评论4指出:“My configurations are preferences, stored in ~/Library/Preferences.”(我的配置是偏好设置,存储在~/Library/Preferences中。)
  2. 关于跨平台兼容性的讨论

    • 跨平台解决方案:部分评论者提出了跨平台的解决方案,如使用符号链接或结合不同的库(如xdgknown-folders)来处理不同操作系统的配置路径。评论1建议:“put the files in ~/.config/yourprogram, and symlink that to ~/Library/Application Support/org.example.yourprogram.”(将文件放在~/.config/yourprogram,并符号链接到~/Library/Application Support/org.example.yourprogram。)
    • 对现有库的不满:评论2提到与dirs库维护者的沟通不畅,表示对现有解决方案的失望:“It’s very frustrating.”(这非常令人沮丧。)
  3. 关于XDG规范的适用性

    • XDG的局限性:部分评论者指出XDG规范主要针对Linux,并不适用于所有Unix系统,尤其是macOS。评论17表示:“XDG is a Linux-centric spec.”(XDG是一个以Linux为中心的规范。)
    • 对macOS的特别处理:评论13认为,如果用户明确设置了XDG_CONFIG_HOME,macOS应尊重这一设置,但不应默认使用~/.config:“Deferring to XDGCONFIGHOME on MacOS if it exists makes a lot of sense.”(如果存在XDG_CONFIG_HOME,macOS应尊重这一设置,这很有意义。)
  4. 关于工具和技术的使用

    • 使用stow管理配置文件:评论16提到使用stow工具来管理配置文件,通过符号链接将文件放置在应用程序期望的位置:“I put them in a dotfiles directory and use stow to symlink the contents.”(我将它们放在一个dotfiles目录中,并使用stow符号链接内容。)
    • 对现有工具的不满:评论6询问是否有替代dirs的Rust库,表明对现有工具的不满:“Is anyone aware of an alternative to dirs in the rust universe which follows XDG?”(有人知道Rust生态中遵循XDG的dirs替代品吗?)

总结:

评论中主要围绕配置文件的位置、跨平台兼容性以及XDG规范的适用性展开讨论。支持XDG规范的人认为它有助于保持一致性,而支持macOS默认路径的人则认为应遵循苹果的规范。跨平台解决方案和工具的使用也成为讨论的焦点,部分评论者对现有工具表示不满,并提出了替代方案。