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

18

Die XDG-Basisverzeichnisspezifikation bietet eine Reihe von Verzeichnissen, in denen Daten gespeichert werden können, die zuvor in sogenannten Punktdateien / -verzeichnissen im Benutzerordner abgelegt wurden. Dieser Beitrag soll Benutzern helfen, die diese Verzeichnisse so oft wie möglich nutzen möchten.

Psychosklave
quelle

Antworten:

17

Tatsächlich lautet die aktuelle kurze Antwort auf die Frage, dass dies nicht möglich ist , da einige Anwendungen den Pfad fest codieren. Viele Anwendungen, die XDG-Verzeichnisse nicht speziell unterstützen, ermöglichen es jedoch, andere Verzeichnisse über Umgebungsvariablen festzulegen. Manchmal müssen Sie in der Lage sein, die systemweite Konfiguration zu ändern, beispielsweise mit der Shell. Meistens sollten Sie jedoch in der Lage sein, den Schritt als nicht privilegierter Benutzer auszuführen.

Einstellen Sie 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
'

Wenn Sie mehrere Shells verwenden, z. B. zsh für die interaktive Shell, aber eine andere für die Skripterstellung, möchten Sie möglicherweise eine $XDG_CONFIG_HOME/profileDatei erstellen, die Sie im entsprechenden Shell-Initialisierungsskript finden.

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=${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"

Umgehen

SSH

SSH bietet eine Möglichkeit, die Client-Konfigurationsdatei zu ändern, aber - soweit ich weiß - nur über die Befehlszeile. So kann eine Lösung, um die Clients immer mit einer Nicht-Standardeinstellung aufzurufen, sein:

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"

Und Ihr ${XDG_CONFIG_HOME}/ssh/configsolltet so etwas enthalten:

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

Was geht noch nicht

Obwohl GNUPGHOMEes sich um eine dokumentierte Variable handelt, werden Sie unter Fedora 21 ~/.gnupgbeim Starten einer neuen Sitzung ein neues Verzeichnis erstellen.

Obwohl ICEauthorityes sich um eine dokumentierte Variable handelt, wird unter Fedora 21 beim Starten einer neuen Sitzung ein neues Cookie erstellt.

Der dotfile- ~/.swtInhalt sollte wahrscheinlich direkt in gespeichert werden ${XDG_DATA_HOME}, da beide libVerzeichnisse haben. Es wurde keine Dokumentation gefunden, wie man das macht, wenn es möglich ist.

Mozilla- Produkte unterstützen keine geeignete Umgebungsvariable. Weitere Informationen finden Sie unter Mozilla-Produkte ermöglichen nicht die Verwendung eines benutzerdefinierten Benutzerkonfigurationsverzeichnisses und der Unterstützung für die XDG-Basisverzeichnisspezifikation von Freedesktop.org .

Andere nützliche Quellen

Psychosklave
quelle
1
Sollte / etc / profile bei Verwendung von bash als interaktive Nicht-Login-Shell (normale Terminalnutzung) überhaupt nicht gelesen werden? Werden unsere Definitionen dann nicht festgelegt?
Hashken
1
Laut der Manpage auf meinem System haben Sie recht. Nun würde ich vorschlagen, dass Sie einfach testen, da dies möglicherweise von der Standardkonfiguration Ihres Systems abhängt. Bitte geben Sie Feedback, danke.
Psychosklave
1
Ich kann bestätigen, dass / etc / profile für nicht angemeldete Shells nicht gelesen wird. Aber wenn Sie tmux öffnen, wird Ihre / etc / profile gelesen. Dies liegt daran, dass tmux alle seine Shells als Login-Shells öffnet.
Hashken
1
Dinge wie Verlaufsdateien sollten unter$XDG_CACHE_HOME
1) Hinzufügen: export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"2) Bitte geben Sie Ihre Variablen an! (siehe (1) für ein Beispiel) 3) Für meine bashmusste ich:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Tom Hale
6

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

GIT

Ich zog meine .gitconfigzu XDG_CONFIG_HOMEauf OSX. Per git-config Dokumentation (Link aus Reputationsgründen 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 setze die Umgebungsvariable gemäß den Anweisungen unter Festlegen der systemweiten Umgebungsvariablen PATH in Mavericks . Beachten Sie, dass Sie die Datei XDG_CONFIG_HOME/git/configselbst erstellen müssen und, falls ~/.gitconfigvorhanden, Vorrang hat.

VIM

Ich habe Tom Vincents 2011er Artikel Vim respect XDG verwendet und es scheint zu funktionieren. Ich bin mir bei der obigen Antwort nicht sicher. VIMDOTDIRscheint keine Sache zu sein.

Ben Creasy
quelle
Hinweis: Ich verwende jetzt nixos.org, mit dem sich alle Konfigurationen auf elegante Weise vollständig steuern lassen
Ben Creasy,
1

Zsh macht einen etwas besseren Job als die Bash, mit der Sie mit der $ZDOTDIRVariablen Ihr Zuhause aufräumen können. Um zsh aus dem Weg zu räumen, müssen Sie Folgendes zu Ihrem hinzufügen~/.zshenv Datei :

# ~/.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 diese stattdessen hinzufügen, /etc/zsh/zshenvum die Notwendigkeit von zsh-Punktdateien in Ihrem $ HOME zu vermeiden. Von hier aus können alle Ihre anderen zsh-Punktedateien 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, und Sie bemerken dies möglicherweise nicht einmal, da sich noch eine ältere Punktdatei in Ihrem $ HOME-Verzeichnis befindet. Git ist ein gutes Beispiel dafür - wenn Sie ein haben ~/.gitconfig, versuchen Sie es zu verschieben~/.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 wiederkehrenden 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 einen: export _Z_DATA=$XDG_DATA_HOME/z/z.txt

Aber es gibt immer noch eine ziemlich umfangreiche XDG-Mauer der Schande. Tmux war aktiv dagegen, das Aufräumen Ihres $ HOME zu unterstützen. Gleiches gilt für Pylint . Und Julia . Und die Liste geht weiter.Arch führt hier eine schöne Liste der XDG-Unterstützung .

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

mattmc3
quelle