2024-07-09 17:39:25 +02:00

170 lines
5.4 KiB
Bash

#!/bin/sh
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
##
## SPDX-License-Identifier: AGPL-3.0-or-later
## Not so invasive because it only assigns a value if it is empty.
: "${HOME:=$(cd ~ && pwd)}"
: "${USER:=$(id -un || printf %s "${HOME##*/}")}"
: "${UID:=$(id -u || awk -F ":" -v user="$USER" '/^user:/{print $3}' \
/etc/passwd)}"
: "${HOSTNAME:=$(hostname)}"
export HOME USER UID HOSTNAME
## Set XDG_*_HOME variables.
XDG_CONFIG_HOME="$HOME/.config"
XDG_CACHE_HOME="$HOME/.cache"
XDG_DATA_HOME="$HOME/.local/share"
XDG_STATE_HOME="$HOME/.local/state"
export XDG_CONFIG_HOME XDG_CACHE_HOME XDG_DATA_HOME XDG_STATE_HOME
mkdir -p \
"$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" "$XDG_DATA_HOME" "$XDG_STATE_HOME"
## Set XDG_*_DIR variables.
eval "$(grep "^[ ]*XDG_[A-Z].*_DIR=" "$XDG_CONFIG_HOME/user-dirs.dirs" |
sed "s/^/export /")"
## Set directory to be used for coding.
CODEDIR="$HOME/src"
export CODEDIR
## Set shell configuration directories.
SHDIR="$XDG_CONFIG_HOME/sh"
BASHDIR="$XDG_CONFIG_HOME/bash"
ZDOTDIR="$XDG_CONFIG_HOME/zsh"
export SHDIR BASHDIR ZDOTDIR
## Set general variables.
PATH="$HOME/bin:$HOME/.local/bin/$HOSTNAME:$HOME/.local/bin"
PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
PATH="$PATH:/usr/local/games:/usr/games"
INFOPATH="$HOME/.local/share/info:/usr/local/share/info:/usr/local/info"
INFOPATH="$INFOPATH:/usr/share/info:/usr/info"
MANPATH="$HOME/.local/share/man:/usr/local/man:/usr/local/share/man"
MANPATH="$MANPATH:/usr/X11R6/man:/opt/man:/snap/man:/usr/man:/usr/share/man"
ENV="$SHDIR/shrc"
BASH_ENV="$BASHDIR/bash_env"
TMPDIR="/tmp"
LANG="en_US.UTF-8"
LANGUAGE="${LANG%.*}"
LC_ALL="$LANG"
GNUPGHOME="$HOME/.gnupg"
export PATH INFOPATH MANPATH ENV TMPDIR LANG LANGUAGE LC_ALL GNUPGHOME
## Set interactive shell variables.
HISTSIZE=10000
EDITOR="$(has -s vim vim.tiny vi)"
test -n "$EDITOR" && VISUAL="$EDITOR"
TERMINAL="x-terminal-emulator"
BROWSER="chromium"
PAGER="less"
LESS="FRq#10"
GPG_TTY="$(tty)"
BLOCKSIZE="K"
RSYNC_RSH="ssh -ax"
SYSTEMD_PAGER=""
if test -s /rw/config/gpg-split-domain; then
read -r QUBES_GPG_DOMAIN < /rw/config/gpg-split-domain
else
QUBES_GPG_DOMAIN="@default"
fi
export HISTSIZE EDITOR VISUAL TERMINAL BROWSER PAGER LESS GPG_TTY BLOCKSIZE
export RSYNC_RSH SYSTEMD_PAGER QUBES_GPG_DOMAIN
if has fd; then
FZF_DEFAULT_COMMAND='fd --type=f --hidden --exclude=.git'
elif has fdind; then
FZF_DEFAULT_COMMAND='fdfind --type=f --hidden --exclude=.git'
fi
FZF_DEFAULT_OPTS="--layout=reverse --height 40%"
FZF_TMUX=1
export FZF_DEFAULT_COMMAND FZF_DEFAULT_OPTS FZF_TMUX
## 'vim.tiny' and 'vi' fails if VIMINIT is set to our vimrc.
if has vim; then
if test -f "$XDG_CONFIG_HOME/vim/vimrc"; then
# shellcheck disable=SC2016,SC2089
VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | so $MYVIMRC'
# shellcheck disable=SC2090
export VIMINIT
fi
fi
## XDG_CONFIG_HOME: user-specific configuration files
GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc-2.0"
KDEHOME="$XDG_CONFIG_HOME/kde"
INPUTRC="$BASHDIR/inputrc"
if has less; then
lesskey_src=0
less_version="$(less -V | awk -F '[ .]' 'NR==1 {print $2}')"
case "${less_version}" in
""|*[!0-9]*) ;;
*) if test "${less_version}" -ge 582; then lesskey_src=1; fi;;
esac
if test "${lesskey_src}" = "1"; then
LESSKEY="$XDG_CONFIG_HOME/less/lesskey"
elif has lesskey; then
LESSKEY="$XDG_CONFIG_HOME/less/lesskey-old"
lesskey -o "$LESSKEY" "$XDG_CONFIG_HOME/less/lesskey"
fi
unset lesskey_src less_version
fi
export GTK2_RC_FILES KDEHOME INPUTRC LESSKEY
## XDG_DATA_HOME: user-specific data files
RUSTUP_HOME="$XDG_DATA_HOME/rustup"
CARGO_HOME="$XDG_DATA_HOME/cargo"
GOPATH="$XDG_DATA_HOME/go"
WORKON_HOME="$XDG_DATA_HOME/virtualenvs"
ELECTRUMDIR="$XDG_DATA_HOME/electrum"
TERMINFO="$XDG_DATA_HOME/terminfo"
export RUSTUP_HOME CARGO_HOME GOPATH WORKON_HOME ELECTRUMDIR TERMINFO
## XDG_STATE_HOME: user-specific state files, persists application restarts
LESSHISTFILE="$XDG_STATE_HOME/history-less"
HISTFILE="$XDG_STATE_HOME/history-shell"
export LESSHISTFILE HISTFILE
## XDG_CACHE_HOME: user-specific non-essential data files
GOCACHE="$XDG_CACHE_HOME/go-build"
GOMODCACHE="$XDG_CACHE_HOME/go/mod"
export GOCACHE GOMODCACHE
## Start agents
ssh_agent_dir="$TMPDIR/ssh-agent-$USER"
ssh_agent_sock="$ssh_agent_dir/agent.sock"
ssh_agent_pid="$ssh_agent_dir/agent.pid"
if test -z "${SSH_AUTH_SOCK-}" && has ssh-agent; then
test -d "$ssh_agent_dir" || mkdir -p "$ssh_agent_dir"
if test -S "$ssh_agent_sock" &&
test -r "$ssh_agent_sock" &&
test -w "$ssh_agent_sock" &&
test -f "$ssh_agent_pid" &&
test -r "$ssh_agent_pid" &&
test -s "$ssh_agent_pid"
then
SSH_AUTH_SOCK="$ssh_agent_sock"
read -r SSH_AGENT_PID < "$ssh_agent_pid"
export SSH_AUTH_SOCK SSH_AGENT_PID
else
rm -f "$ssh_agent_sock" "$ssh_agent_pid"
eval "$(ssh-agent -s -a "$ssh_agent_sock")" >/dev/null
echo "$SSH_AGENT_PID" | tee "$ssh_agent_pid" >/dev/null
fi
fi
unset ssh_agent_dir ssh_agent_sock ssh_agent_pid
## Zsh sources this shell profile before no_nomatch is set in zshrc, thus
## fails with "no matches found" when the glob can't be expanded.
if test -n "${ZSH_VERSION:-}"; then
setopt no_nomatch
fi
for f in "$XDG_CONFIG_HOME/sh/profile.d"/*.sh; do
# shellcheck disable=SC1090,SC1091
! test -r "$f" || . "$f"
done
## Source local profile.
# shellcheck disable=SC1090,SC1091
! test -r "$HOME/.profile.local" || . "$HOME/.profile.local"