将所有点文件移动到 XDG 目录的步骤是什么?

psy*_*ave 24 xdg

XDG基本目录规范提供了一组目录中的一个可用于所使用去在所谓的点文件/目录中的用户文件夹存储数据。这篇文章旨在帮助希望尽可能多地使用此目录的用户。

psy*_*ave 20

事实上,目前对这个问题的简短回答是你不能,因为某些应用程序对路径进行了硬编码。尽管如此,许多不专门支持 XDG 目录的应用程序允许通过环境变量设置其他目录。有时您需要能够更改系统范围的配置,例如使用 shell,但大多数时候,您应该能够以非特权用户的身份执行该步骤。

设置你的外壳

# Setting bash to use $XDG_CONFIG_HOME/bash, defaults to ~/.config/bash
confdir=${XDG_CONFIG_HOME:-$HOME/.config}/bash

### Moving existing files
mkdir -p -- "$confdir"
for file in "$HOME"/.bash*; do
    dest=$confdir/$(basename "${file:1}") 
    mv -i -- "$file" "$dest" # don't overwrite without permission
done

### Sourcing and setting variables
sudo sh -c 'cat >>/etc/profile.d/bash_in_xdg_config_home.sh <<CONF
# Make bash follow the XDG_CONFIG_HOME convention
_confdir=\${XDG_CONFIG_HOME:-\$HOME/.config}/bash
if [ -d "$_confdir" ] &&  [ "\$0" = "bash" ]
then
    . "\$_confdir"/bash_profile
    . "\$_confdir"/bashrc
    HISTFILE=\$_confdir/bash_history
fi
unset _confdir
CONF
'

sudo sh -c 'cat >>/etc/bash.bash_logout <<CONF
if [ -s "\${XDG_CONFIG_HOME:-\$HOME/.config}/bash/bash_logout" ]
then
    . "\${XDG_CONFIG_HOME:-\$HOME/.config}/bash/bash_logout"
fi
CONF
'

# Setting zsh
## System wide configuration (using xdg directories)
sudo sh -c 'cat >>/etc/zshenv <<CONF
if [[ -d "\${XDG_CONFIG_HOME:-\$HOME/.config}"/zsh ]]
then
        export ZDOTDIR=\${XDG_CONFIG_HOME:-\$HOME/.config}/zsh
fi
CONF
'
Run Code Online (Sandbox Code Playgroud)

如果您使用多个 shell,例如 zsh 用于交互式 shell,但另一个用于脚本编写,您可能需要$XDG_CONFIG_HOME/profile文件,您将在相关的 shell 初始化脚本中获取该文件。

设置环境变量

# bazaar
export BZRPATH=$XDG_CONFIG_HOME/bazaar
export BZR_PLUGIN_PATH=$XDG_DATA_HOME/bazaar
export BZR_HOME=$XDG_CACHE_HOME/bazaar

# gnupg
export GNUPGHOME=${XDG_CONFIG_HOME}/gnupg

# ICEauthority
export ICEAUTHORITY=${XDG_CACHE_HOME}/ICEauthority

#  less
export LESSHISTFILE="${XDG_CONFIG_HOME}/less/history"
export LESSKEY="${XDG_CONFIG_HOME}/less/keys"



# mplayer
export MPLAYER_HOME=$XDG_CONFIG_HOME/mplayer

# subversion
export SUBVERSION_HOME=$XDG_CONFIG_HOME/subversion


# vim
export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC'
export VIMDOTDIR="$XDG_CONFIG_HOME/vim"
Run Code Online (Sandbox Code Playgroud)

解决

SSH

SSH 确实提供了一种更改客户端配置文件的方法,但是——据我所知——只能通过命令行。因此,始终使用无默认位置调用客户端的一种解决方案可能是:

if [ -s "${XDG_CONFIG_HOME}/ssh/config" ]
then
    SSH_CONFIG="-F ${XDG_CONFIG_HOME}/ssh/config"
fi
if [ -s "${XDG_CONFIG_HOME}/ssh/id_dsa" ]
then
    SSH_ID="-i ${XDG_CONFIG_HOME}/ssh/id_dsa"
fi

alias ssh="ssh $SSH_CONFIG $SSH_ID "
alias ssh-copy-id="ssh-copy-id $SSH_ID"
Run Code Online (Sandbox Code Playgroud)

${XDG_CONFIG_HOME}/ssh/config应该包含类似的内容:

Host *
    IdentityFile /home/user/.config/ssh/id_dsa
    UserKnownHostsFile /home/user/.config/ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

什么还不行

尽管GNUPGHOME是一个文档化的变量,但在 Fedora 21 下,~/.gnupg当您启动新会话时,您最终会创建一个新目录。

虽然ICEauthority是一个文档变量,但在 Fedora 21 下,当您启动新会话时,您最终会创建一个新 cookie。

点文件~/.swt内容可能应该直接存储到 中${XDG_DATA_HOME},因为两者都有lib目录。如果可能的话,没有找到关于如何做到这一点的文档。

Mozilla产品不支持适当的环境变量,请参阅Mozilla 产品不允许使用自定义用户配置目录支持 Freedesktop.org XDG 基本目录规范

其他有用的来源


Ben*_*asy 7

我建议咨询不断更新的 Arch Linux wiki 页面XDG 基础目录支持

通用电气

我刚搬到我.gitconfigXDG_CONFIG_HOME在OSX。根据 git-config 文档(由于声誉而省略链接)。

Second user-specific configuration file. If $XDG_CONFIG_HOME is not set or
empty, $HOME/.config/git/config will be used. Any single-valued variable 
set in this file will be overwritten by whatever is in ~/.gitconfig. It is
a good idea not to create this file if you sometimes use older versions of
Git, as support for this file was added fairly recently.
Run Code Online (Sandbox Code Playgroud)

我使用在 Mavericks设置系统范围的 PATH 环境变量中的说明设置了环境变量。请注意,您需要自己创建该文件XDG_CONFIG_HOME/git/config,如果~/.gitconfig存在,它将优先。

虚拟机

我使用了 Tom Vincent 2011 年的文章Vim 尊重 XDG,它似乎有效。我不确定上面的答案;VIMDOTDIR似乎不是一回事。


mat*_*mc3 5

Zsh 比 bash 做得稍微好一点,让你可以使用变量来整理你的家$ZDOTDIR。要将 zsh 移开,您需要将以下内容添加到您的~/.zshenv文件中:

# ~/.zshenv contents
# this is the bare bones setup to move everything to XDG dir
ZDOTDIR=$HOME/.config/zsh
Run Code Online (Sandbox Code Playgroud)

如果您有 root 权限,您可以将其添加到/etc/zsh/zshenv$HOME 中,从而避免需要任何 zsh 点文件。从这里,所有其他 zsh 点文件都可以移动到~/.config/zsh,例如.zshrc. 我还建议将您的 zsh 历史记录添加到以下$XDG_DATA_HOME位置:HISTFILE=$XDG_DATA_HOME/zsh/zsh_history

有些应用程序会默认查找 XDG 位置,您甚至可能没有意识到这一点,因为您的 $HOME 目录中仍然有一个旧的点文件。Git 就是一个很好的例子 - 如果您有~/.gitconfig,请尝试将其移至~/.config/git/config. 我个人最喜欢的Fish Shell也默认使用 ~/.config 。

另外,请检查其他应用程序是否有自己的 re-$HOME-ing 变量版本。许多人通过变量支持它 XDG:

  • 原子:export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • 通行证:export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa/z 有一个:export _Z_DATA=$XDG_DATA_HOME/z/z.txt

但 XDG 仍然存在相当大的耻辱墙。Tmux 一直积极反对支持清理 $HOME。与 pylint 相同还有朱莉娅。而这样的例子不胜枚举。Arch 在这里保留了一份很好的 XDG 支持列表

老实说,我无法理解支持它的阻力。用户需要清楚地传达一个明确的信息:应用程序不应在其 $HOME 上粗暴地运行。已经不行了。现代系统使用数百个污染 $HOME 的应用程序,而不是像 20 年前那样使用数十个应用程序。