config.phundrak.com/docs/shell.org

16 KiB
Raw Blame History

General Shell Configuration

General Shell Configuration

As you may have noticed with my Fish configuration, my main shell is Fish, not Bash or Zsh. But sometimes, I do need to use these instead of Fish. In order to share some common configuration, I have a rather rich $HOME/.profile file which mainly exports environment variables. Despite the fact Fish is not a POSIX shell and should not be able to read it, the plugin foreign-env comes in handy to load this .profile from fish, as you can see in my fish config.

The correctness and POSIX compatibility of this file is verified using shellcheck.

Before we go into the meaty stuff, let me first load some private configuration I cannot share online.

# shellcheck source=/dev/null
. "$HOME"/.profile.private

Personal Information

First of all, here I set some information in order to make some stufff work.

Variable Value
EMAIL lucien@phundrak.com
NAME "Lucien Cartier-Tilet"
<<export-variables(personal-info)>>

XDG variables

Then, let me set some XDG variables that may not be set by default, but are still quite useful.

Variable Value
XDG_CACHE_HOME "$HOME"/.cache
XDG_CONFIG_HOME "$HOME"/.config
XDG_DATA_HOME "$HOME"/.local/share
XDG_STATE_HOME "$HOME"/.local/state
<<export-variables(xdg-variables)>>

Dev

Here are some variables that are quite useful.

Variable Value Value is a command?
SSH_AUTH_SOCK gpgconf --list-dirs agent-ssh-socket yes
LD_LIBRARY_PATH "$LD_LIBRARY_PATH":/usr/local/lib
LSP_USE_PLISTS true
DIFFPROG ediff
SUDO_ASKPASS "$HOME"/.local/bin/askpass
MANPAGER less
SSH_AUTH_SOCK
allows me to use my local GPG keys when SSHing into a remote host that may not have a gpg agent. It tells SSH which sock to use, sock which allows SSH to interact with other software, here GPG.
LD_LIBRARY_PATH
path of libraries that may be included by compilers such as GCC.
LSP_USE_PLISTS
optimisation for LSP servers with Emacs.
DIFFPROG
program used by software that wants to diff two files, such as git. It uses my script ediff.
SUDO_ASKPASS
which script to call when calling sudo -A. It uses my script askpass.
<<export-variables(dev-variables)>>

Android development

Im not sure why I keep these, honestly.

Variable Value
DART_SDK /opt/dart-sdk/bin
ANDROID_HOME "$HOME"/Android/Sdk
CHROME_EXECUTABLE /usr/bin/chromium
<<export-variables(android)>>

Compatibility issues with MANPAGER

Due to compatibility issues with using less as the pager for man, some variables must be redefined.

Variable Value Value is a command?
LESS_TERMCAP_mb printf '\e[1;32m' yes
LESS_TERMCAP_md printf '\e[1;32m' yes
LESS_TERMCAP_me printf '\e[0m' yes
LESS_TERMCAP_se printf '\e[0m' yes
LESS_TERMCAP_so printf '\e[01;33m' yes
LESS_TERMCAP_ue printf '\e[0m' yes
LESS_TERMCAP_us printf '\e[1;4;31m' yes
<<export-variables(less-termcap)>>

Preferences

Browser

Its always nice to have the BROWSER variable available in case you want to do stuff with scripts and your default browser.

Variable Value
BROWSER firefox
<<export-variables(browser)>>

Editor variables

My favourite text editor is Emacs, in case you havent guessed already. It makes sense that both my EDITOR and VISUAL variables should be set to Emacs.

Variable Value
EDITOR "emacsclient -c"
VISUAL "emacsclient -c"
<<export-variables(editor)>>

GTK Theme

These are some important variables regarding the GTK theme I use.

Variable Value
GTK_THEME Nordic
GTK_ICON_THEME "Flat-Remix-Dark"
<<export-variables(gtk)>>

Cleaning up my home directory

Home directories tend to become cluttered over time, especially when developers tend to not care about the XDG standard and throw their apps files into $HOME rather than in XDG_CACHE_HOME, XDG_CONFIG_HOME, and so on. Fortunately, some software allow us to move their data elsewhere, so lets teach them some manners.

Variable Value
__GL_SHADER_DISK_CACHE_PATH "$XDG_CACHE_HOME"/nv
_JAVA_OPTIONS "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java -Djavafx.cachedir=${XDG_CACHE_HOME}/openjfx"
_Z_DATA "$XDG_DATA_HOME"/z
BUNDLE_USER_CACHE "$XDG_CACHE_HOME"/bundle
BUNDLE_USER_CONFIG "$XDG_CONFIG_HOME"/bundle
BUNDLE_USER_PLUGIN "$XDG_DATA_HOME"/bundle
CARGO_HOME "$XDG_DATA_HOME"/cargo
CUDA_CACHE_PATH "$XDG_CACHE_HOME"/nv
DENO_DIR "$HOME"/.config/deno
DENO_INSTALL_ROOT "$HOME"/.local/bin/deno
DOCKER_CONFIG "$XDG_CONFIG_HOME"/docker
GEM_HOME "$XDG_DATA_HOME"/gem
GEM_SPEC_CACHE "$XDG_CACHE_HOME"/gem
GNUPGHOME "$XDG_DATA_HOME"/gnupg
GOPATH "$XDG_DATA_HOME"/go
GTK2_RC_FILES "$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
HISTFILE "$XDG_STATE_HOME/bash/history"
ICEAUTHORITY "$XDG_CACHE_HOME"/ICEauthority
LESSHISTFILE "$XDG_CACHE_HOME"/less/history
MBSYNCRC "$XDG_CONFIG_HOME"/isync/mbsyncrc
MPLAYER_HOME "$XDG_CONFIG_HOME"/mplayer
MYPY_CACHE_DIR "$XDG_CACHE_HOME"/mypy
NPM_CONFIG_USERCONFIG "$XDG_CONFIG_HOME"/npm/npmrc
NUGET_PACKAGES "$XDG_CACHE_HOME"/NuGetPackages
NVM_DIR "$XDG_DATA_HOME"/nvm
PARALLEL_HOME "$XDG_CONFIG_HOME"/parallel
PASSWORD_STORE_DIR "$XDG_DATA_HOME"/pass
PKG_CACHE_PATH "$XDG_CACHE_HOME"/pkg-cache
PSQL_HISTORY "$XDG_DATA_HOME/psql_history"
PYENV_ROOT "$XDG_DATA_HOME"/pyenv
PYLINTHOME "$XDG_CACHE_HOME"/pylint
PYTHONSTARTUP "$HOME"/python/pythonrc
RUSTUP_HOME "$XDG_DATA_HOME"/rustup
SQLITE_HISTORY "$XDG_CACHE_HOME"/sqlite_history
TERMINFO "$XDG_DATA_HOME"/terminfo
TERMINFO_DIRS "$XDG_DATA_HOME"/terminfo:/usr/share/terminfo
TEXMFVAR "$XDG_CACHE_HOME"/texlive/texmf-var
W3M_DIR "$XDG_DATA_HOME"/w3m
WINEPREFIX "$XDG_DATA_HOME"/wine
XAUTHORITY "$XDG_RUNTIME_DIR"/Xauthority
XCOMPOSEFILE "$XDG_CONFIG_HOME"/X11/xcompose
XCURSOR_PATH /usr/share/icons:$XDG_DATA_HOME/icons
GRADLE_USER_HOME "$XDG_DATA_HOME"/gradle
DOTNET_CLI_HOME "$XDG_DATA_HOME"/dotnet
CUDA_CACHE_PATH "$XDG_CACHE_HOME"/nv
ANDROID_USER_HOME "$XDG_DATA_HOME"/android

I also need to export this alias, because wget feels like its special, but these are exported in wrappers in my scripts documentation.

If youre wondering how I got most of these variables, xdg-ninja can help you with that.

<<export-variables(cleanup-variables)>>

PATH variable

Additional PATH values Comment
/usr/lib/xfce-polkit/ Lets me access more easily XFCEs polkit
$HOME/.cabal/bin Haskell binaries
$GEM_HOME/ruby/2.6.0/bin Ruby 2.6.0 binaries
$GEM_HOME/ruby/3.0.0/bin Ruby 3 binaries
$GOPATH/bin Go binaries
${CARGO_HOME}/bin Cargo and Rust binaries
$HOME/Android/Sdk/tools/bin Android tools and binaries
$HOME/.local/bin Custom scripts
$HOME/.config/plover/plugins/linux/bin Plover binaries
$HOME/.nix-profile/bin Nix binaries
<<path-concat()>>