Bước để di chuyển tất cả các dotfiles của bạn vào các thư mục XDG là gì?


14

Các Thông số kỹ thuật thư mục cơ sở XDG cung cấp một tập hợp thư mục người ta có thể sử dụng để lưu trữ dữ liệu được sử dụng để gọi là thư mục / tập tin dấu chấm trong thư mục người dùng. Bài đăng này nhằm mục đích giúp người dùng mong muốn sử dụng thư mục này càng nhiều càng tốt.

Câu trả lời:


13

Thật vậy, câu trả lời ngắn hiện tại cho câu hỏi là bạn không thể , như một số ứng dụng mã hóa đường dẫn. Không ít, nhiều ứng dụng không hỗ trợ cụ thể các thư mục XDG cho phép đặt các thư mục khác thông qua các biến môi trường. Đôi khi bạn cần có thể thay đổi cấu hình toàn hệ thống, ví dụ như với shell, nhưng hầu hết thời gian, bạn sẽ có thể thực hiện bước này với tư cách là người dùng không có quyền.

Đặt vỏ của bạn

# Setting bash to use $XDG_CONFIG_HOME/bash 

### Moving existing files
mkdir -p $XDG_CONFIG_HOME/bash
for file in ~/.bash*;do  
    dest=${XDG_CONFIG_HOME}/bash/$(basename $file|cut -d\. -f2) 
    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
if [ -d "\$XDG_CONFIG_HOME/bash" ] &&  [ "\$0" = "bash" ]
then
    . "\${XDG_CONFIG_HOME}/bash/bash_profile"
    . "\${XDG_CONFIG_HOME}/bash/bashrc"
    HISTFILE="\${XDG_CONFIG_HOME}/bash/bash_history"
fi
CONF
'

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

# Setting zsh
## System wide configuration (using xdg directories)
sudo sh -c 'cat >>/etc/zshenv <<CONF
if [[ -z "\$XDG_CONFIG_HOME" ]]
then
        export XDG_CONFIG_HOME="\$HOME/.config"
fi

if [[ -d "\$XDG_CONFIG_HOME/zsh" ]]
then
        export ZDOTDIR="\$XDG_CONFIG_HOME/zsh"
fi
CONF
'

Nếu bạn sử dụng nhiều shell, ví dụ zsh cho shell tương tác, nhưng một shell khác để tạo script, bạn có thể muốn $XDG_CONFIG_HOME/profile tập tin mà bạn sẽ lấy trong tập lệnh khởi tạo shell có liên quan.

Đặt biến môi trường

# 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"

Làm việc xung quanh

SSH

SSH không cung cấp cách thay đổi tệp cấu hình máy khách, nhưng - theo như tôi tìm thấy - chỉ thông qua dòng lệnh. Vì vậy, một giải pháp để luôn gọi các máy khách không có vị trí mặc định nào có thể là:

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"

Và của bạn ${XDG_CONFIG_HOME}/ssh/config nên chứa một cái gì đó như:

Host *
    IdentityFile /home/user/.config/ssh/id_dsa

Những gì chưa làm việc

Mặc dầu GNUPGHOME là một biến được ghi lại, theo Fedora 21, bạn sẽ kết thúc bằng việc tạo ra một biến mới ~/.gnupg thư mục khi bạn khởi chạy một phiên mới.

Mặc dầu ICEauthority là một biến tài liệu, theo Fedora 21, bạn sẽ kết thúc với việc tạo cookie mới khi bạn khởi chạy một phiên mới.

Dấu chấm ~/.swt nội dung có lẽ nên được lưu trữ trực tiếp vào ${XDG_DATA_HOME}, vì cả hai đều có lib thư mục. Không có tài liệu nào được tìm thấy về cách làm điều đó nếu có thể.

Mozilla sản phẩm không hỗ trợ một biến môi trường thích hợp, xem Các sản phẩm Mozilla không cho phép sử dụng thư mục cấu hình người dùng tùy chỉnh Hỗ trợ cho Đặc tả thư mục cơ sở XDG của Freedesktop.org .

Các nguồn hữu ích khác


1
Khi sử dụng bash làm vỏ không đăng nhập tương tác (sử dụng thiết bị đầu cuối bình thường), không nên đọc / etc / profile? Các định nghĩa của chúng ta sẽ không được thiết lập sau đó?
Hashken

1
Theo trang web trên hệ thống của tôi, bạn đã đúng. Bây giờ những gì tôi muốn đề nghị bạn chỉ đơn giản là kiểm tra, vì nó có thể phụ thuộc vào cấu hình mặc định hệ thống của bạn. Xin vui lòng cho ăn trở lại, cảm ơn bạn.
psychoslave

1
Tôi có thể xác nhận rằng / etc / profile không được đọc cho các shell không đăng nhập. Nhưng, nếu bạn mở tmux, hồ sơ / etc / của bạn sẽ được đọc. Điều này là do tmux mở tất cả các shell của nó dưới dạng shell đăng nhập.
Hashken

1
những thứ như tập tin lịch sử nên được lưu trữ dưới $XDG_CACHE_HOME

1) Thêm: export XAUTHORITY="$XDG_CACHE_HOME/Xauthority" 2) Hãy trích dẫn các biến của bạn! (xem (1) để biết ví dụ) 3) Dành cho tôi bash, Tôi cần thiết để: export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Tom Hale

5

Tôi khuyên bạn nên tham khảo trang wiki Arch Linux Hỗ trợ thư mục cơ sở XDG được cập nhật liên tục.

GIT

Tôi mới chuyển .gitconfig đến XDG_CONFIG_HOME trên OSX. Theo tài liệu git-config (liên kết bị bỏ qua do danh tiếng).

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.

Tôi đặt biến môi trường bằng cách sử dụng các hướng dẫn trong Đặt biến môi trường PATH trên toàn hệ thống trong Mavericks . Lưu ý rằng bạn sẽ cần phải tạo tệp XDG_CONFIG_HOME/git/config chính bạn và nếu ~/.gitconfig tồn tại nó sẽ được ưu tiên.

VIM

Tôi đã sử dụng bài viết năm 2011 của Tom Vincent Vim tôn trọng XDG và nó dường như làm việc Tôi không chắc về câu trả lời trên; VIMDOTDIR dường như không phải là một điều.


Lưu ý: Tôi đang chuyển sang sử dụng nixos.org Điều này cho phép kiểm soát hoàn toàn mọi cấu hình một cách tao nhã
Ben Creasy

0

Zsh thực hiện công việc tốt hơn một chút so với bash cho phép bạn khử lộn xộn nhà của bạn bằng cách sử dụng $ZDOTDIR biến. Để di chuyển zsh ra khỏi đường đi, bạn cần thêm phần sau vào ~/.zshenv tập tin:

# ~/.zshenv contents
# this is the bare bones setup to move everything to XDG dir
ZDOTDIR=$HOME/.config/zsh

Nếu bạn có quyền root, bạn có thể sử dụng quyền này thay thế để /etc/zsh/zshenv và tránh sự cần thiết cho bất kỳ dotfiles zsh nào trong $ HOME của bạn. Từ đây, tất cả các dotfiles zsh khác của bạn có thể được chuyển đến ~/.config/zsh, như .zshrc. Tôi cũng khuyên bạn nên thêm lịch sử zsh của bạn vào $XDG_DATA_HOME vị trí: HISTFILE=$XDG_DATA_HOME/zsh/zsh_history.

Một số ứng dụng sẽ tìm các vị trí XDG theo mặc định và bạn thậm chí có thể không nhận ra vì bạn vẫn có một dấu chấm kế thừa trong thư mục $ HOME của bạn. Git là một ví dụ tốt về điều này - nếu bạn có một ~/.gitconfig, hãy thử chuyển nó đến ~/.config/git/config. Yêu thích cá nhân của tôi, Vỏ cá , sử dụng ~ / .config theo mặc định quá.

Ngoài ra, hãy kiểm tra các ứng dụng khác của bạn để biết phiên bản riêng của biến số $ HOME-ing. Nhiều người hỗ trợ nó XDG thông qua một biến:

  • Nguyên tử: export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • vượt qua: export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa / z có một: export _Z_DATA=$XDG_DATA_HOME/z/z.txt

Nhưng vẫn còn một bức tường xấu hổ XDG rộng lớn. Tmux đã tích cực thù địch để hỗ trợ khử lộn xộn $ HOME của bạn. Tương tự với môn vị . Và Julia . Và danh sách được tiếp tục. Arch giữ một danh sách hoạt động tốt về hỗ trợ XDG tại đây .

Thành thật mà nói, tôi không thể hiểu được sự kháng cự để hỗ trợ nó. Người dùng cần gửi một thông điệp rõ ràng rằng các ứng dụng không nên chạy thô trên $ HOME của họ. Không còn ổn nữa. Một hệ thống hiện đại sử dụng hàng trăm ứng dụng gây ô nhiễm $ HOME, chứ không phải hàng chục như trước đây 20 năm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.