Was ist der Schritt, um alle Ihre Dotfiles in XDG-Verzeichnisse zu verschieben?

4819
psychoslave

Die XDG-Basisverzeichnisspezifikation enthält eine Reihe von Verzeichnissen, in denen Daten gespeichert werden können, die zuvor im so genannten dot files / -Verzeichnis im Benutzerordner gespeichert wurden. Dieser Beitrag soll Benutzern helfen, die diese Verzeichnisse so gut wie möglich nutzen möchten.

14

3 Antworten auf die Frage

12
psychoslave

In der Tat ist die aktuelle kurze Antwort auf die Frage, dass Sie nicht können, da eine Anwendung den Pfad fest codiert. Viele Anwendungen, die XDG-Verzeichnisse nicht speziell unterstützen, ermöglichen es jedoch, andere Verzeichnisse über Umgebungsvariablen festzulegen. Einige Zeit müssen Sie in der Lage sein, die systemweite Konfiguration zu ändern, z. B. mit der Shell. Meistens sollten Sie den Schritt jedoch als unprivilegierten Benutzer ausführen können.

Setzen Sie Ihre Muschel

# Setting bash to use $XDG_CONFIG_HOME/bash   ### Moving existing files mkdir -p $XDG_CONFIG_HOME/bash for file in ~/.bash*;do  dest=$/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 . "\$/bash/bash_profile" . "\$/bash/bashrc" HISTFILE="\$/bash/bash_history" fi CONF '  sudo sh -c 'cat >>/etc/bash.bash_logout <<CONF if [ -s "\$/bash/bash_logout" ] then . "\$/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 ' 

Wenn Sie mehrere Shell verwenden, z. B. zsh für interaktive Shell, aber eine andere für die Skripterstellung, möchten Sie möglicherweise eine $XDG_CONFIG_HOME/profileDatei erstellen, die Sie in das entsprechende Shell-Initialisierungsskript einbetten.

Umgebungsvariablen setzen

# 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=$/gnupg  # ICEauthority export ICEAUTHORITY=$/ICEauthority  # less export LESSHISTFILE="$/less/history" export LESSKEY="$/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" 

Umgehen

SSH

SSH bietet eine Möglichkeit, die Client-Konfigurationsdatei zu ändern, aber soweit ich gefunden habe, nur über die Befehlszeile. Eine Lösung für das Aufrufen der Clients mit keiner Standardposition ist:

if [ -s "$/ssh/config" ] then SSH_CONFIG="-F $/ssh/config" fi if [ -s "$/ssh/id_dsa" ] then SSH_ID="-i $/ssh/id_dsa" fi  alias ssh="ssh $SSH_CONFIG $SSH_ID " alias ssh-copy-id="ssh-copy-id $SSH_ID" 

Und Ihr $/ssh/configsollte so etwas enthalten:

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

Was funktioniert noch nicht

Obwohl GNUPGHOMEes sich um eine dokumentierte Variable handelt, müssen Sie unter Fedora 21 beim Erstellen ~/.gnupgeiner neuen Sitzung ein neues Verzeichnis erstellen.

Obwohl ICEauthorityes sich um eine dokumentierte Variable handelt, erhalten Sie unter Fedora 21 beim Erstellen einer neuen Sitzung die Erstellung eines neuen Cookies.

Der Dotfile- ~/.swtInhalt sollte wahrscheinlich direkt in $beiden libVerzeichnissen gespeichert werden . Es wurde keine Dokumentation gefunden, wie dies möglich ist.

Mozilla- Produkte unterstützen keine geeignete Umgebungsvariable. Mozilla-Produkte erlauben keine Verwendung eines benutzerdefinierten Benutzerkonfigurationsverzeichnisses und Unterstützung für die Freedesktop.org XDG-Basisverzeichnisspezifikation .

Andere nützliche Quellen

Sollte / etc / profile bei der Verwendung von bash als interaktive Nicht-Login-Shell (normale Terminalnutzung) überhaupt nicht gelesen werden? Werden unsere Definitionen dann nicht festgelegt? Hashken vor 9 Jahren 1
Laut der Manpage auf meinem System haben Sie recht. Nun würde ich Ihnen vorschlagen, einfach zu testen, da dies von der Standardkonfiguration Ihres Systems abhängen kann. Bitte geben Sie Feedback zurück, danke. psychoslave vor 9 Jahren 1
Ich kann bestätigen, dass / etc / profile für Nicht-Login-Shells nicht gelesen wird. Wenn Sie jedoch tmux öffnen, wird Ihr / etc / Profil gelesen. Dies liegt daran, dass tmux alle Shells als Login-Shells öffnet. Hashken vor 9 Jahren 1
Dinge wie History-Dateien sollten unter `$ XDG_CACHE_HOME` gespeichert werden vor 9 Jahren 1
1) Add: `export XAUTHORITY =" $ XDG_CACHE_HOME / Xauthority "` 2) Bitte geben Sie Ihre Variablen an! (Siehe (1) für ein Beispiel) 3) Für mein `bash` musste ich:` XDG_CONFIG_HOME = $ `exportieren Tom Hale vor 8 Jahren 0
5
Ben Creasy

Ich empfehle die XDG Base Directory-Unterstützung der Arch Linux-Wiki-Seite, die ständig aktualisiert wird.

GIT

Ich zog meine .gitconfigzu XDG_CONFIG_HOMEauf OSX. Gemäß der git-config-Dokumentation (Link wegen Reputation weggelassen).

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. 

Ich habe die Umgebungsvariable mit den Anweisungen unter Festlegen der systemweiten Umgebungsvariable PATH in Mavericks festgelegt . Beachten Sie, dass Sie die Datei XDG_CONFIG_HOME/git/configselbst erstellen müssen. Wenn sie ~/.gitconfigexistiert, hat sie Vorrang.

VIM

Ich habe Tom Vincents Artikel Vim Respect XDG aus dem Jahr 2011 verwendet und es scheint zu funktionieren. Ich bin nicht sicher über die obige Antwort. VIMDOTDIRscheint nicht eine Sache zu sein.

Hinweis: Ich gehe jetzt zur Verwendung von https://nixos.org/, wodurch die vollständige Konfiguration auf elegante Weise vollständig gesteuert werden kann Ben Creasy vor 6 Jahren 0
0
mattmc3

Zsh macht einen etwas besseren Job als Bash, wenn Sie Ihr Zuhause mit der $ZDOTDIRVariablen unübersichtlich machen . Um zsh aus dem Weg zu räumen, müssen Sie Ihrer ~/.zshenvDatei Folgendes hinzufügen :

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

Wenn Sie über Root-Berechtigungen verfügen, können Sie dies stattdessen zu /etc/zsh/zshenvzsh dotfiles in Ihrem $ HOME hinzufügen und vermeiden. Von hier aus können alle Ihre anderen zsh-Punktdateien verschoben ~/.config/zshwerden .zshrc. Ich empfehle auch Ihre zsh Geschichte zum Hinzufügen $XDG_DATA_HOMEOrt: HISTFILE=$XDG_DATA_HOME/zsh/zsh_history.

Einige Apps suchen standardmäßig nach den XDG-Speicherorten. Möglicherweise ist dies nicht der Fall, da sich in Ihrem $ HOME-Verzeichnis noch eine ältere Dotfile befindet. Git ist ein gutes Beispiel dafür - wenn Sie eine haben ~/.gitconfig, verschieben Sie sie nach ~/.config/git/config. Mein persönlicher Favorit, Fish Shell, verwendet standardmäßig auch ~ / .config.

Überprüfen Sie auch Ihre anderen Apps auf ihre eigene Version einer neuen $ HOME-Variablen. Viele unterstützen es XDG über eine Variable:

  • Atom: export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • lpass: export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa / z hat eine: export _Z_DATA=$XDG_DATA_HOME/z/z.txt

Aber es gibt immer noch eine recht umfangreiche XDG-Wand der Schande. Tmux hat sich aktiv dafür eingesetzt, Ihr $ HOME zu stören . Gleiches mit Pylint . Und Julia . Und die Liste geht weiter. Arch führt hier eine schöne Liste mit XDG-Unterstützung .

Ehrlich gesagt, kann ich den Widerstand gegen die Unterstützung nicht verstehen. Benutzer müssen eindeutig eine klare Nachricht senden, dass Apps nicht über ihr $ HOME laufen sollten. Es ist nicht mehr in Ordnung. Ein modernes System verwendet Hunderte von Apps, die $ HOME verschmutzen, und nicht zehn, wie vor 20 Jahren.