mirror of
https://github.com/gaschz/dotfiles.git
synced 2025-03-01 14:22:33 +01:00
feat: enable all optional shellcheck validations
This commit is contained in:
parent
024e9c469d
commit
69c14a2429
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SPDX-FileCopyrightText: 2018 Chris Laprise <https://github.com/tasket>
|
||||
# SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
@ -9,6 +9,20 @@
|
||||
## Credits: https://github.com/tasket/Qubes-scripts
|
||||
set -eu
|
||||
|
||||
if ! command -v sensors >/dev/null; then
|
||||
echo "Program not installed: sensors" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v xentop >/dev/null; then
|
||||
echo "Program not installed: xentop" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sensors_stats () {
|
||||
# shellcheck disable=SC2312
|
||||
sensors | grep -E "^(${sensor_lines})"
|
||||
}
|
||||
|
||||
delay=5
|
||||
sortcol=3
|
||||
sensor_lines='Package id 0|fan1|CPU'
|
||||
@ -17,38 +31,35 @@ newline='
|
||||
sumline="--------------------------------------------------------"
|
||||
header="\033[2K\nVM NAME STATE CPU(%) MEM(MB)"
|
||||
|
||||
sensors_stats () {
|
||||
sensors | grep -E "^($sensor_lines)"
|
||||
}
|
||||
|
||||
trap "tput reset" HUP INT QUIT ABRT TERM EXIT
|
||||
|
||||
tput reset
|
||||
sensors_stats
|
||||
echo -e "$header"
|
||||
cpusum=0; memsum=0; table="$sumline"
|
||||
# shellcheck disable=SC2016
|
||||
stdbuf -oL xentop -b -f -d "$delay" | \
|
||||
echo -e "${header}"
|
||||
cpusum=0; memsum=0; table="${sumline}"
|
||||
# shellcheck disable=SC2016,SC2312
|
||||
stdbuf -oL xentop -b -f -d "${delay}" | \
|
||||
stdbuf -oL awk '{printf ("%-32s %5s %5d %7d\n", $1,$2,$4,$5/1000) }' | \
|
||||
(
|
||||
read -r ln
|
||||
while true; do
|
||||
if read -r -t 0.1 ln; then
|
||||
table="$table$newline$ln"
|
||||
read -r _ _ cpu mem <<<"$ln"
|
||||
table="${table}${newline}${ln}"
|
||||
read -r _ _ cpu mem <<<"${ln}"
|
||||
cpusum=$((cpusum+cpu))
|
||||
memsum=$((memsum+mem))
|
||||
else
|
||||
# End of list, print totals, make new page.
|
||||
sort -k $sortcol -n -r <<<"$table"
|
||||
printf '%-32s %5s %5d %7d\033[J\033[H' " " " " "$cpusum" "$memsum"
|
||||
sort -k "${sortcol}" -n -r <<<"${table}"
|
||||
printf '%-32s %5s %5d %7d\033[J\033[H' " " " " "${cpusum}" \
|
||||
"${memsum}"
|
||||
read -r ln
|
||||
cpusum=0; memsum=0
|
||||
table="$sumline"
|
||||
table="${sumline}"
|
||||
#clear
|
||||
#sensors |grep -E "^($sensor_lines)"
|
||||
#sensors |grep -E "^(${sensor_lines})"
|
||||
sensors_stats
|
||||
echo -e "\033[2K$header\n"
|
||||
echo -e "\033[2K${header}\n"
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
@ -20,4 +20,4 @@
|
||||
set -eu
|
||||
|
||||
xkb_plugin="$(xfconf-query -v -c xfce4-panel -p /plugins -l | grep xkb)"
|
||||
xfconf-query -c xfce4-panel -p "$xkb_plugin/group-policy" -n -s 0
|
||||
xfconf-query -c xfce4-panel -p "${xkb_plugin}/group-policy" -n -s 0
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
set -eu
|
||||
|
||||
## Guarantee commands are run from $HOME
|
||||
## Guarantee commands are run from ${HOME}
|
||||
cd
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
@ -25,35 +25,35 @@ fail_invalid_name(){
|
||||
test_description(){
|
||||
key="$1"
|
||||
value="$2"
|
||||
if ! (echo "$value" | grep -E -q "${description_regex}"); then
|
||||
fail_invalid_name "$key"
|
||||
if ! (echo "${value}" | grep -E -q "${description_regex}"); then
|
||||
fail_invalid_name "${key}"
|
||||
fi
|
||||
}
|
||||
|
||||
test_name(){
|
||||
key="$1"
|
||||
value="$2"
|
||||
if ! (echo "$value" | grep -E -q "${regex}"); then
|
||||
fail_invalid_name "$key"
|
||||
if ! (echo "${value}" | grep -E -q "${regex}"); then
|
||||
fail_invalid_name "${key}"
|
||||
fi
|
||||
}
|
||||
|
||||
clean_repo_name(){
|
||||
case "${repo-}" in
|
||||
*.git) repo="";;
|
||||
*) repo="$repo.git";;
|
||||
*) repo="${repo}.git";;
|
||||
esac
|
||||
}
|
||||
|
||||
is_bare(){
|
||||
_repo="$1"
|
||||
if ! test -d "$_repo"; then
|
||||
echo "Repository doesn't exist: $_repo" >&2
|
||||
if ! test -d "${_repo}"; then
|
||||
echo "Repository doesn't exist: ${_repo}" >&2
|
||||
return 1
|
||||
fi
|
||||
if ! test "$(git -C "$_repo" rev-parse --is-bare-repository)" = "true"
|
||||
then
|
||||
echo "Repository is not bare: $_repo" >&2
|
||||
bare_repo_check="$(git -C "${_repo}" rev-parse --is-bare-repository)"
|
||||
if ! test "${bare_repo_check}" = "true"; then
|
||||
echo "Repository is not bare: ${_repo}" >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
@ -13,29 +13,29 @@ usage(){
|
||||
# shellcheck disable=2154
|
||||
echo "usage: ${0##*/} SECTION REPOSITORY [DESCRIPTION]
|
||||
note: prints the current description if none description is specified.:w
|
||||
regex: $regex" >&2
|
||||
regex: ${regex}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
test -n "${2-}" || usage
|
||||
section="$1"
|
||||
test_name section "$section"
|
||||
test_name section "${section}"
|
||||
repo="$2"
|
||||
test_name repo "$repo"
|
||||
test_name repo "${repo}"
|
||||
clean_repo_name
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
is_bare "$base/$section/$repo"
|
||||
is_bare "${base}/${section}/${repo}"
|
||||
|
||||
description_file="$base/$section/$repo/description"
|
||||
description_file="${base}/${section}/${repo}/description"
|
||||
|
||||
if test -z "${3-}"; then
|
||||
test -f "$description_file" || touch "$description_file"
|
||||
cat "$description_file"
|
||||
test -f "${description_file}" || touch "${description_file}"
|
||||
cat "${description_file}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
description="$(echo "$3" | cut -c 1-80)"
|
||||
test_description description "$description"
|
||||
test_description description "${description}"
|
||||
|
||||
echo "$description" | tee "$description_file"
|
||||
echo "${description}" | tee "${description_file}"
|
||||
|
@ -11,8 +11,8 @@ set -eu
|
||||
printf "Available commands:\n"
|
||||
for f in "${0%/*}"/*; do
|
||||
test "${f##*/}" != "help" || continue
|
||||
test -f "$f" || continue
|
||||
test -x "$f" || continue
|
||||
usage="$("$f" --help 2>&1 | head -1 | sed "s/[Uu]sage: //")"
|
||||
test -f "${f}" || continue
|
||||
test -x "${f}" || continue
|
||||
usage="$("${f}" --help 2>&1 | head -1 | sed "s/[Uu]sage: //")"
|
||||
printf ' %-15s\t\t%s\n' "${f##*/}" "${usage}"
|
||||
done
|
||||
|
@ -12,25 +12,25 @@ set -eu
|
||||
usage(){
|
||||
# shellcheck disable=2154
|
||||
echo "usage: ${0##*/} SECTION REPOSITORY [BRANCH]
|
||||
regex: $regex" >&2
|
||||
regex: ${regex}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
test -n "${2-}" || usage
|
||||
section="$1"
|
||||
test_name section "$section"
|
||||
test_name section "${section}"
|
||||
repo="$2"
|
||||
test_name repo "$repo"
|
||||
test_name repo "${repo}"
|
||||
clean_repo_name
|
||||
branch=""
|
||||
test -n "${3-}" && branch="$3"
|
||||
|
||||
if test -n "${branch}"; then
|
||||
test_name branch "$branch"
|
||||
test_name branch "${branch}"
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
git init \
|
||||
--bare \
|
||||
${branch:+--initial-branch $branch} \
|
||||
-- "$base/$section/$repo"
|
||||
${branch:+--initial-branch ${branch}} \
|
||||
-- "${base}/${section}/${repo}"
|
||||
|
@ -15,7 +15,7 @@ set -eu
|
||||
usage(){
|
||||
# shellcheck disable=2154
|
||||
echo "usage: ${0##*/} [SECTION]
|
||||
regex: $regex" >&2
|
||||
regex: ${regex}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
@ -23,12 +23,12 @@ section=""
|
||||
case "${1-}" in
|
||||
-h|--help) usage;;
|
||||
"") ;;
|
||||
*) section="$1"; test_name section "$section";;
|
||||
*) section="$1"; test_name section "${section}";;
|
||||
esac
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if ! test -d "$base/$section"; then
|
||||
echo "Section doesn't exist: $section" >&2
|
||||
if ! test -d "${base}/${section}"; then
|
||||
echo "Section doesn't exist: ${section}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -39,10 +39,10 @@ print_bare='
|
||||
'
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if test -n "$section"; then
|
||||
find "$base/$section" -maxdepth 1 -type d -name "*.git" \
|
||||
-exec sh -c "$print_bare" -- {} \; -prune 2>/dev/null || true
|
||||
if test -n "${section}"; then
|
||||
find "${base}/${section}" -maxdepth 1 -type d -name "*.git" \
|
||||
-exec sh -c "${print_bare}" -- {} \; -prune 2>/dev/null || true
|
||||
else
|
||||
find "$base" -maxdepth 2 -type d -name "*.git" \
|
||||
-exec sh -c "$print_bare" -- {} \; -prune 2>/dev/null || true
|
||||
find "${base}" -maxdepth 2 -type d -name "*.git" \
|
||||
-exec sh -c "${print_bare}" -- {} \; -prune 2>/dev/null || true
|
||||
fi
|
||||
|
@ -30,13 +30,18 @@ set -eu
|
||||
|
||||
command -v git >/dev/null || exit 1
|
||||
|
||||
: "${GIT_PUSH_CERT_STATUS:-}"
|
||||
: "${GIT_PUSH_CERT_KEY:-}"
|
||||
: "${GIT_PUSH_CERT_NONCE_STATUS:-}"
|
||||
: "${GIT_PUSH_CERT_NONCE:-}"
|
||||
|
||||
obj_rejected=""
|
||||
zero="$(git hash-object --stdin </dev/null | tr "0-9a-f" "0")"
|
||||
tmpdir="$(mktemp -d "${TMPDIR:-/tmp}/XXXXXX")"
|
||||
trap 'rm -f "$tmpdir"' HUP INT QUIT ABRT TERM EXIT
|
||||
trap 'rm -f "${tmpdir}"' HUP INT QUIT ABRT TERM EXIT
|
||||
|
||||
err(){
|
||||
echo "$*" >&2
|
||||
echo "${*}" >&2
|
||||
}
|
||||
|
||||
require_signed_push(){
|
||||
@ -77,33 +82,33 @@ check_signed_push_keyring(){
|
||||
cert="$(git cat-file blob "${GIT_PUSH_CERT}")"
|
||||
begin_sig="-----BEGIN PGP SIGNATURE-----"
|
||||
|
||||
cert_msg="$tmpdir"/cert.msg
|
||||
cert_sig="$tmpdir"/cert.sig
|
||||
cert_msg="${tmpdir}"/cert.msg
|
||||
cert_sig="${tmpdir}"/cert.sig
|
||||
|
||||
in_sig=0
|
||||
echo "$cert" | while read -r line; do
|
||||
if test "$in_sig" = "1" || test "$line" = "$begin_sig"; then
|
||||
echo "${cert}" | while read -r line; do
|
||||
if test "${in_sig}" = "1" || test "${line}" = "${begin_sig}"; then
|
||||
in_sig=1
|
||||
echo "$line" | tee -a "$cert_sig"
|
||||
elif test "$line" != "$begin_sig"; then
|
||||
echo "$line" | tee -a "$cert_msg"
|
||||
echo "${line}" | tee -a "${cert_sig}"
|
||||
elif test "${line}" != "${begin_sig}"; then
|
||||
echo "${line}" | tee -a "${cert_msg}"
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
gpg_out="$("$gpg" --status-fd=1 --no-default-keyring \
|
||||
gpg_out="$("${gpg}" --status-fd=1 --no-default-keyring \
|
||||
--homedir "${GIT_PUSH_CERT_PGPHOMEDIR}" \
|
||||
--verify "$cert_sig" "$cert_msg" 2>&1)"
|
||||
--verify "${cert_sig}" "${cert_msg}" 2>&1)"
|
||||
gpg_ec="$?"
|
||||
gpg_sig="$(echo "$gpg_out" | awk '/ GOODSIG /{print $3}')"
|
||||
if test "$gpg_ec" = "0"; then
|
||||
true "Cert validation succeeded. Key: $gpg_sig"
|
||||
gpg_sig="$(echo "${gpg_out}" | awk '/ GOODSIG /{print $3}')"
|
||||
if test "${gpg_ec}" = "0"; then
|
||||
true "Cert validation succeeded. Key: ${gpg_sig}"
|
||||
else
|
||||
err "Cert validation failed. Verification output:"
|
||||
err "$gpg_out"
|
||||
err "${gpg_out}"
|
||||
fi
|
||||
rm -rf "$tmpdir"
|
||||
rm -rf "${tmpdir}"
|
||||
|
||||
if test "${GIT_PUSH_CERT_NONCE_STATUS}" = "OK"; then
|
||||
true "Cert nonce validation succeeded. Nonce: ${GIT_PUSH_CERT_NONCE}"
|
||||
@ -119,47 +124,47 @@ if git config --get receive.certNonceSeed >/dev/null 2>&1; then
|
||||
fi
|
||||
|
||||
while read -r oldrev newrev ref; do
|
||||
true "$oldrev $newrev $ref"
|
||||
test "$newrev" = "$zero" && continue
|
||||
true "${oldrev} ${newrev} ${ref}"
|
||||
test "${newrev}" = "${zero}" && continue
|
||||
|
||||
if test "$oldrev" = "$zero"; then
|
||||
objects="$(git rev-list "$newrev")"
|
||||
if test "${oldrev}" = "${zero}"; then
|
||||
objects="$(git rev-list "${newrev}")"
|
||||
else
|
||||
objects="$(git rev-list "$oldrev..$newrev")"
|
||||
objects="$(git rev-list "${oldrev}..${newrev}")"
|
||||
fi
|
||||
|
||||
obj_type="$(git cat-file -t "$newrev")"
|
||||
if test "$obj_type" = "tag"; then
|
||||
if git verify-tag "$newrev" >/dev/null 2>&1; then
|
||||
true "Tag validation succeeded for tag: $newrev"
|
||||
obj_type="$(git cat-file -t "${newrev}")"
|
||||
if test "${obj_type}" = "tag"; then
|
||||
if git verify-tag "${newrev}" >/dev/null 2>&1; then
|
||||
true "Tag validation succeeded for tag: ${newrev}"
|
||||
else
|
||||
obj_rejected="${obj_rejected-} $newrev "
|
||||
obj_rejected="${obj_rejected-} ${newrev} "
|
||||
continue
|
||||
fi
|
||||
commit_tag="$(git rev-list -n1 "$newrev")"
|
||||
obj_rejected="$(echo "$obj_rejected" | sed "s/ $commit_tag //")"
|
||||
err "Commit validation done by tag: $commit_tag $newrev"
|
||||
commit_tag="$(git rev-list -n1 "${newrev}")"
|
||||
obj_rejected="$(echo "${obj_rejected}" | sed "s/ ${commit_tag} //")"
|
||||
err "Commit validation done by tag: ${commit_tag} ${newrev}"
|
||||
continue
|
||||
fi
|
||||
|
||||
for obj in $objects; do
|
||||
for obj in ${objects}; do
|
||||
|
||||
if git verify-commit "$obj" >/dev/null 2>&1; then
|
||||
true "Commit validation succeeded commit: $obj"
|
||||
if git verify-commit "${obj}" >/dev/null 2>&1; then
|
||||
true "Commit validation succeeded commit: ${obj}"
|
||||
continue
|
||||
else
|
||||
err "No valid signature in commit: $obj"
|
||||
obj_rejected="${obj_rejected-} $obj "
|
||||
err "No valid signature in commit: ${obj}"
|
||||
obj_rejected="${obj_rejected-} ${obj} "
|
||||
fi
|
||||
|
||||
done
|
||||
done
|
||||
|
||||
test -n "$obj_rejected" || exit 0
|
||||
test -n "${obj_rejected}" || exit 0
|
||||
|
||||
obj_rejected="$(echo "$obj_rejected" | tr -s " " |
|
||||
obj_rejected="$(echo "${obj_rejected}" | tr -s " " |
|
||||
sed -e "s/^ //" -e "s/ $//")"
|
||||
err "Couldn't verify objects: $obj_rejected"
|
||||
err "Couldn't verify objects: ${obj_rejected}"
|
||||
exit 1
|
||||
|
||||
## Force signed pushes if receive.certNonceSeed is set.
|
||||
@ -168,42 +173,42 @@ if git config --get receive.certNonceSeed >/dev/null 2>&1; then
|
||||
fi
|
||||
|
||||
while read -r oldrev newrev ref; do
|
||||
true "$oldrev $newrev $ref"
|
||||
test "$newrev" = "$zero" && continue
|
||||
true "${oldrev} ${newrev} ${ref}"
|
||||
test "${newrev}" = "${zero}" && continue
|
||||
|
||||
if test "$oldrev" = "$zero"; then
|
||||
objects="$(git rev-list "$newrev")"
|
||||
if test "${oldrev}" = "${zero}"; then
|
||||
objects="$(git rev-list "${newrev}")"
|
||||
else
|
||||
objects="$(git rev-list "$oldrev..$newrev")"
|
||||
objects="$(git rev-list "${oldrev}..${newrev}")"
|
||||
fi
|
||||
|
||||
obj_type="$(git cat-file -t "$newrev")"
|
||||
if test "$obj_type" = "tag"; then
|
||||
if git verify-tag "$newrev" >/dev/null 2>&1; then
|
||||
true "Tag validation succeeded for tag: $newrev"
|
||||
obj_type="$(git cat-file -t "${newrev}")"
|
||||
if test "${obj_type}" = "tag"; then
|
||||
if git verify-tag "${newrev}" >/dev/null 2>&1; then
|
||||
true "Tag validation succeeded for tag: ${newrev}"
|
||||
else
|
||||
obj_rejected="${obj_rejected-} $newrev "
|
||||
obj_rejected="${obj_rejected-} ${newrev} "
|
||||
continue
|
||||
fi
|
||||
commit_tag="$(git rev-list -n1 "$newrev")"
|
||||
obj_rejected="$(echo "$obj_rejected" | sed "s/ $commit_tag //")"
|
||||
err "Commit validation done by tag: $commit_tag $newrev"
|
||||
commit_tag="$(git rev-list -n1 "${newrev}")"
|
||||
obj_rejected="$(echo "${obj_rejected}" | sed "s/ ${commit_tag} //")"
|
||||
err "Commit validation done by tag: ${commit_tag} ${newrev}"
|
||||
continue
|
||||
fi
|
||||
|
||||
for obj in $objects; do
|
||||
if git verify-commit "$obj" >/dev/null 2>&1; then
|
||||
true "Commit validation succeeded for commit: $obj"
|
||||
for obj in ${objects}; do
|
||||
if git verify-commit "${obj}" >/dev/null 2>&1; then
|
||||
true "Commit validation succeeded for commit: ${obj}"
|
||||
continue
|
||||
else
|
||||
err "No valid signature in commit: $obj"
|
||||
obj_rejected="${obj_rejected-} $obj "
|
||||
err "No valid signature in commit: ${obj}"
|
||||
obj_rejected="${obj_rejected-} ${obj} "
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
test -n "$obj_rejected" || exit 0
|
||||
test -n "${obj_rejected}" || exit 0
|
||||
|
||||
obj_rejected="$(echo "$obj_rejected" | tr -s " " | sed -e "s/^ //;s/ $//")"
|
||||
err "Couldn't verify objects: $obj_rejected"
|
||||
obj_rejected="$(echo "${obj_rejected}" | tr -s " " | sed -e "s/^ //;s/ $//")"
|
||||
err "Couldn't verify objects: ${obj_rejected}"
|
||||
exit 1
|
||||
|
@ -15,12 +15,12 @@ file="$1"
|
||||
#sha1="$3"
|
||||
|
||||
char="$(git config --get core.commentChar || echo "#")"
|
||||
template="$(git config --get commit.template | sed "s|^~/|$HOME/|")"
|
||||
template="$(git config --get commit.template | sed "s|^~/|${HOME}/|")"
|
||||
|
||||
if test "$char" = "auto"; then
|
||||
if test "${char}" = "auto"; then
|
||||
## Try to skip the init.template comment char by getting the last match, as
|
||||
## the template will be placed at the beginning of the file.
|
||||
char="$(grep -E "^(#|;|@|!|$|%|^|&|\\||:) " "$file" | cut -c 1 | tail -n 1)"
|
||||
char="$(grep -E "^(#|;|@|!|$|%|^|&|\\||:) " "${file}" | cut -c1 | tail -n1)"
|
||||
fi
|
||||
|
||||
## Remove the default instructional message and its following empty line.
|
||||
@ -28,12 +28,12 @@ sed -i'' \
|
||||
-e "/^. Please enter the commit message .*. Lines starting$/d" \
|
||||
-e "/^. with '.' will be ignored, .* aborts the commit.$/ {
|
||||
N; d; }" \
|
||||
"$file"
|
||||
"${file}"
|
||||
|
||||
## Replace init.template comment char to the core.commentChar line per line.
|
||||
if test -f "$template"; then
|
||||
if test -f "${template}"; then
|
||||
while read -r line; do
|
||||
mod_line="$(echo "$line" | sed "s/^. /${char} /")"
|
||||
sed -i'' "s/^${line}$/${mod_line}/" "$file"
|
||||
done < "$template"
|
||||
mod_line="$(echo "${line}" | sed "s/^. /${char} /")"
|
||||
sed -i'' "s/^${line}$/${mod_line}/" "${file}"
|
||||
done < "${template}"
|
||||
fi
|
||||
|
@ -7,8 +7,8 @@
|
||||
## Setup git client on new machine on a local/separate git configuration.
|
||||
set -eu
|
||||
|
||||
gitconfig_file="$HOME/.gitconfig.local"
|
||||
signature_file="$HOME/.signature"
|
||||
gitconfig_file="${HOME}/.gitconfig.local"
|
||||
signature_file="${HOME}/.signature"
|
||||
vim_modeline="vim: ft=gitconfig"
|
||||
|
||||
usage(){
|
||||
@ -30,20 +30,20 @@ email="$2"
|
||||
signingkey="$3"
|
||||
|
||||
set_git_config(){
|
||||
git config --file "$gitconfig_file" "$1" "$2"
|
||||
git config --file "${gitconfig_file}" "$1" "$2"
|
||||
}
|
||||
|
||||
set_git_config user.name "$user"
|
||||
set_git_config user.email "$email"
|
||||
set_git_config user.signingKey "$signingkey"
|
||||
set_git_config user.name "${user}"
|
||||
set_git_config user.email "${email}"
|
||||
set_git_config user.signingKey "${signingkey}"
|
||||
|
||||
if test -s "$signature_file"; then
|
||||
set_git_config format.signatureFile "$signature_file"
|
||||
if test -s "${signature_file}"; then
|
||||
set_git_config format.signatureFile "${signature_file}"
|
||||
else
|
||||
set_git_config format.signature "$user"
|
||||
set_git_config format.signature "${user}"
|
||||
fi
|
||||
|
||||
grep \
|
||||
-E "^;*\s+(vim:.*(\s+|:)|vim:(\s*))(ft|filetype)=gitconfig((\s+|:).*|$)" \
|
||||
-q "$gitconfig_file" ||
|
||||
sed -i'' "1i; $vim_modeline" "$gitconfig_file"
|
||||
-q "${gitconfig_file}" ||
|
||||
sed -i'' "1i; ${vim_modeline}" "${gitconfig_file}"
|
||||
|
@ -7,7 +7,7 @@
|
||||
set -eu
|
||||
|
||||
if command -v delta >/dev/null; then
|
||||
exec delta "$@"
|
||||
exec delta "${@}"
|
||||
else
|
||||
: "${DIFF_HIGHLIGHT_SOURCE:=/usr/share/doc/git/contrib/diff-highlight}"
|
||||
: "${DIFF_HIGHLIGHT_EXEC:=/usr/share/git-core/contrib/diff-highlight}"
|
||||
@ -26,5 +26,5 @@ else
|
||||
exec "${DIFF_HIGHLIGHT_EXEC}" | less -RS
|
||||
fi
|
||||
|
||||
exec less -RS "$@"
|
||||
exec less -RS "${@}"
|
||||
fi
|
||||
|
@ -7,7 +7,8 @@
|
||||
## Setup git server.
|
||||
set -eu
|
||||
|
||||
if ! test "$(id -u)" = "0"; then
|
||||
uid="$(id -u)"
|
||||
if ! test "${uid}" = "0"; then
|
||||
echo "This program requires root." >&2
|
||||
exit 1
|
||||
fi
|
||||
@ -25,23 +26,23 @@ git_user="git"
|
||||
git_home="/var/git"
|
||||
git_shell="$(command -v git-shell)"
|
||||
|
||||
useradd -m "$git_user" -d "$git_home" -s "$git_shell"
|
||||
mkdir -p "$git_home/src"
|
||||
useradd -m "${git_user}" -d "${git_home}" -s "${git_shell}"
|
||||
mkdir -p "${git_home}/src"
|
||||
|
||||
mkdir -p "$git_home/.ssh"
|
||||
chmod 0700 "$git_home/.ssh"
|
||||
touch "$git_home/.ssh/authorized_keys"
|
||||
chmod 0600 "$git_home/.ssh/authorized_keys"
|
||||
mkdir -p "${git_home}/.ssh"
|
||||
chmod 0700 "${git_home}/.ssh"
|
||||
touch "${git_home}/.ssh/authorized_keys"
|
||||
chmod 0600 "${git_home}/.ssh/authorized_keys"
|
||||
|
||||
mkdir -p "$git_home/git-shell-commands"
|
||||
cp -r "$git_home/.config/git/shell"/* "$git_home/git-shell-commands"
|
||||
chmod -R 0755 "$git_home/git-shell-commands"
|
||||
mkdir -p "${git_home}/git-shell-commands"
|
||||
cp -r "${git_home}/.config/git/shell"/* "${git_home}/git-shell-commands"
|
||||
chmod -R 0755 "${git_home}/git-shell-commands"
|
||||
|
||||
git config --system receive.updateServerInfo true
|
||||
git config --system receive.advertisePushOptions true
|
||||
nonce="$(head /dev/urandom |
|
||||
LC_ALL=C tr -dc 'A-Za-z0-9!#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' |
|
||||
cut -c 1-256)"
|
||||
git config --system receive.certNonceSeed "$nonce"
|
||||
git config --system receive.certNonceSeed "${nonce}"
|
||||
|
||||
chown -R "$git_user":"$git_user" "$git_home"
|
||||
chown -R "${git_user}":"${git_user}" "${git_home}"
|
||||
|
@ -4,8 +4,8 @@
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
: "${XDG_CONFIG_HOME:=$HOME/.config}"
|
||||
: "${XDG_CONFIG_HOME:=${HOME}/.config}"
|
||||
|
||||
CURL_HOME="$XDG_CONFIG_HOME/curl"
|
||||
WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
|
||||
CURL_HOME="${XDG_CONFIG_HOME}/curl"
|
||||
WGETRC="${XDG_CONFIG_HOME}/wget/wgetrc"
|
||||
export CURL_HOME WGETRC
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
##
|
||||
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
##
|
||||
@ -15,26 +15,30 @@
|
||||
set -eu
|
||||
|
||||
test -n "${1:-}" || { echo "usage: ${0##*/} QUBE"; exit 1; }
|
||||
test "$(id -u)" = "0" || { echo "Program requires root."; exit 1; }
|
||||
uid="$(id -u)"
|
||||
test "${uid}" = "0" || { echo "Program requires root."; exit 1; }
|
||||
|
||||
vm="$1"
|
||||
qvm-check "$vm" >/dev/null 2>&1 || { echo "VM doesn't exist: '$vm'"; exit 1; }
|
||||
qube="${1-}"
|
||||
if ! qvm-check -- "${qube}" >/dev/null 2>&1; then
|
||||
echo "VM doesn't exist: '${qube}'"
|
||||
exit 1
|
||||
fi
|
||||
test -f ./setup.sh || { echo "File doesn't exist: './setup.sh'"; exit 1; }
|
||||
|
||||
if test "$vm" = "dom0"; then
|
||||
if test "${qube}" = "dom0"; then
|
||||
sh ./dotfiles/setup.sh
|
||||
user_name="$(getent group qubes | awk -F "[:,]" '{print $4}')"
|
||||
user_home="$(getent passwd "${user_name}" | awk -F ":" '{print $6}')"
|
||||
sudo -u "${user_name}" mkdir -pv "${user_home}/.cache"
|
||||
tmpdir="$(sudo -u "${user_name}" mktemp -d "${user_home}/.cache/XXXXXX")"
|
||||
trap 'rm -rf -- "$tmpdir"' EXIT INT HUP QUIT ABRT
|
||||
cp -r ./dotfiles "$tmpdir"
|
||||
chown -R "${user_name}:${user_name}" "$tmpdir"
|
||||
sudo -u "${user_name}" "$tmpdir/dotfiles/setup.sh"
|
||||
trap 'rm -rf -- "${tmpdir}"' EXIT INT HUP QUIT ABRT
|
||||
cp -r ./dotfiles "${tmpdir}"
|
||||
chown -R "${user_name}:${user_name}" "${tmpdir}"
|
||||
sudo -u "${user_name}" "${tmpdir}/dotfiles/setup.sh"
|
||||
exit
|
||||
fi
|
||||
|
||||
qvm-run -q "$vm" -- "rm -rf ~/QubesIncoming/dom0/files"
|
||||
qvm-copy-to-vm "$vm" ../files
|
||||
qvm-run -q "$vm" -- "sh ~/QubesIncoming/dom0/files/setup.sh"
|
||||
qvm-run -q "$vm" -- "rm -rf ~/QubesIncoming/dom0/files"
|
||||
qvm-run -q "${qube}" -- "rm -rf ~/QubesIncoming/dom0/files"
|
||||
qvm-copy-to-vm "${qube}" ../files
|
||||
qvm-run -q "${qube}" -- "sh ~/QubesIncoming/dom0/files/setup.sh"
|
||||
qvm-run -q "${qube}" -- "rm -rf ~/QubesIncoming/dom0/files"
|
||||
|
@ -7,15 +7,15 @@
|
||||
set -eu
|
||||
|
||||
prg="$0"
|
||||
if ! test -e "$prg"; then
|
||||
case "$prg" in
|
||||
if ! test -e "${prg}"; then
|
||||
case "${prg}" in
|
||||
(*/*) exit 1;;
|
||||
(*) prg=$(command -v -- "$prg") || exit;;
|
||||
(*) prg=$(command -v -- "${prg}") || exit;;
|
||||
esac
|
||||
fi
|
||||
dir="$(cd -P -- "$(dirname -- "$prg")" && pwd -P)" || exit 1
|
||||
prg="$dir/$(basename -- "$prg")" || exit 1
|
||||
cd -- "$dir" || exit 1
|
||||
dir="$(cd -P -- "$(dirname -- "${prg}")" && pwd -P)" || exit 1
|
||||
prg="${dir}/$(basename -- "${prg}")" || exit 1
|
||||
cd -- "${dir}" || exit 1
|
||||
|
||||
usage(){
|
||||
printf '%s\n' "Usage: ${0##*/} [-h|--help] DIR [DIR2...]"
|
||||
@ -29,17 +29,23 @@ case "${1-}" in
|
||||
*) args="${*}";;
|
||||
esac
|
||||
|
||||
for dir in $args; do
|
||||
case "${dir##*/}" in "."|"..") continue;; esac
|
||||
for dir in ${args}; do
|
||||
case "${dir##*/}" in
|
||||
"."|"..") continue;;
|
||||
*) ;;
|
||||
esac
|
||||
dir="${dir%*/}"
|
||||
test -f "$dir" && continue
|
||||
if ! test -d "$dir"; then
|
||||
printf '%s\n' "Directory doesn't exist: '$dir'." >&2
|
||||
test -f "${dir}" && continue
|
||||
if ! test -d "${dir}"; then
|
||||
printf '%s\n' "Directory doesn't exist: '${dir}'." >&2
|
||||
exit 1
|
||||
fi
|
||||
for file in "$dir"/.*; do
|
||||
test -e "$file" || continue
|
||||
case "${file##*/}" in "."|"..") continue;; esac
|
||||
cp -rv "$file" "$HOME"
|
||||
for file in "${dir}"/.*; do
|
||||
test -e "${file}" || continue
|
||||
case "${file##*/}" in
|
||||
"."|"..") continue;;
|
||||
*) ;;
|
||||
esac
|
||||
cp -rv "${file}" "${HOME}"
|
||||
done
|
||||
done
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
|
||||
if test -z "$ENV" && test -n "$PATH"; then
|
||||
if test -z "${ENV}" && test -n "${PATH}"; then
|
||||
case $- in
|
||||
*l*) ;;
|
||||
*) . "$HOME/.bash_profile" >/dev/null ;;
|
||||
*) . "${HOME}/.bash_profile" >/dev/null ;;
|
||||
esac
|
||||
fi
|
||||
|
@ -6,5 +6,8 @@
|
||||
|
||||
# shellcheck disable=SC1090,1091
|
||||
|
||||
. "$HOME/.profile"
|
||||
case $- in *i*) . "$HOME/.bashrc";; esac
|
||||
. "${HOME}/.profile"
|
||||
case $- in
|
||||
*i*) . "${HOME}/.bashrc";;
|
||||
*) ;;
|
||||
esac
|
||||
|
@ -13,9 +13,9 @@ esac
|
||||
|
||||
## Source default files.
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
source "$HOME/.profile"
|
||||
source "${HOME}/.profile"
|
||||
# shellcheck disable=SC1090
|
||||
source "$ENV"
|
||||
source "${ENV}"
|
||||
## }}}
|
||||
## {{{ Options
|
||||
HISTCONTROL=ignoredups
|
||||
@ -39,20 +39,27 @@ fi
|
||||
_reset_line() {
|
||||
case "${TERM-}" in
|
||||
""|dumb|linux*|vt100*|vt220*) return;;
|
||||
*) ;;
|
||||
esac
|
||||
## Credit: Can't find the source, posted on StackExchange or alike.
|
||||
## Does not work well on Bash 5.0 and older.
|
||||
test "$(echo "${BASH_VERSION%.*}" | tr -d ".")" -lt 51 && return
|
||||
bash_version_clean="$(echo "${BASH_VERSION%.*}" | tr -d ".")"
|
||||
if test "${bash_version_clean}" -lt 51; then
|
||||
unset bash_version_clean
|
||||
return
|
||||
fi
|
||||
unset bash_version_clean
|
||||
|
||||
local termios cur_y
|
||||
## Ask the terminal for any pending (line buffered) input.
|
||||
termios=$(stty -g) && stty -icanon && stty "$termios"
|
||||
termios="$(stty -g)" && stty -icanon && stty "${termios}"
|
||||
unset termios
|
||||
## On pending input, assume it's been echoed and we're not in first column.
|
||||
## Otherwise ask the terminal for current column and read it from input.
|
||||
if read -t 0 || {
|
||||
IFS='[;' read -s -r -d'R' -p$'\033[6n' _ _ cur_y && [[ $cur_y != 1 ]]
|
||||
IFS='[;' read -s -r -d'R' -p$'\033[6n' _ _ cur_y && [[ ${cur_y} != 1 ]]
|
||||
}
|
||||
then
|
||||
unset cur_y
|
||||
## Print line ending char with reversed video and end with newline.
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
printf '%b' "\033[41m\033[0m\033[7m%\033[m\n\r"
|
||||
@ -79,12 +86,13 @@ newline=$'\n'
|
||||
if test "${color_prompt:-}" = "yes"; then
|
||||
# shellcheck disable=SC2154
|
||||
PS1="\$(_reset_line)\$(resize-terminal)\[\033[35m\][\[${reset_color}\]"
|
||||
PS1="${PS1}${debian_chroot:+($debian_chroot)}\[${usercolor}\]\u@\h "
|
||||
PS1="${PS1}${debian_chroot:+(${debian_chroot})}\[${usercolor}\]\u@\h "
|
||||
PS1="${PS1}\[${dircolor}\]\w\[${reset_color}\]\$(_git_prompt_info)"
|
||||
PS1="${PS1}\[\033[35m\]]\[${reset_color}\]${newline-}\$(_print_ec)"
|
||||
PS1="${PS1}${ps1_symbol} "
|
||||
else
|
||||
PS1="\$(_reset_line)\$(resize-terminal)[${debian_chroot:+($debian_chroot)}"
|
||||
PS1="\$(_reset_line)\$(resize-terminal)"
|
||||
PS1="${PS1}[${debian_chroot:+(${debian_chroot})}"
|
||||
PS1="${PS1}\u@\h:\w\$(_git_prompt_info)]${newline-}\$(_print_ec)"
|
||||
PS1="${PS1}${ps1_symbol} "
|
||||
fi
|
||||
@ -92,8 +100,9 @@ fi
|
||||
case "${TERM-}" in
|
||||
screen*|xterm*|rxvt*)
|
||||
## Set window title
|
||||
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
|
||||
PS1="\[\e]0;${debian_chroot:+(${debian_chroot})}\u@\h: \w\a\]${PS1}"
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
case "${TERM-}" in
|
||||
@ -113,13 +122,21 @@ fi
|
||||
unset newline ps1_symbol
|
||||
## }}}
|
||||
## {{{ Plugins
|
||||
! has zoxide || eval "$(zoxide init bash)"
|
||||
! has gitlint || eval "$(_GITLINT_COMPLETE=bash_source gitlint)"
|
||||
if has zoxide; then
|
||||
zoxide_bash_completion="$(zoxide init bash)"
|
||||
eval "${zoxide_bash_completion}"
|
||||
unset zoxide_bash_completion
|
||||
fi
|
||||
if has gitlint; then
|
||||
gitlint_bash_completion="$(_GITLINT_COMPLETE=bash_source gitlint)"
|
||||
eval "${gitlint_bash_completion}"
|
||||
unset gitlint_bash_completion
|
||||
fi
|
||||
|
||||
source_readable /usr/share/doc/fzf/examples/key-bindings.bash
|
||||
source_readable /usr/share/doc/fzf/examples/completion.bash
|
||||
## }}}
|
||||
## {{{ End
|
||||
## Source local bash configuration.
|
||||
source_readable "$HOME/.bashrc.local"
|
||||
source_readable "${HOME}/.bashrc.local"
|
||||
## }}}
|
||||
|
@ -14,6 +14,7 @@ if test -d "$1"; then
|
||||
else
|
||||
case $1 in
|
||||
*.json) command -v jq >/dev/null && exec jq -C . "$1";;
|
||||
*) ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
@ -5,56 +5,61 @@
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
## Not so invasive because it only assigns a value if it is empty.
|
||||
# shellcheck disable=SC2312
|
||||
: "${HOME:=$(cd ~ && pwd)}"
|
||||
# shellcheck disable=SC2312
|
||||
: "${USER:=$(id -un || printf %s "${HOME##*/}")}"
|
||||
: "${UID:=$(id -u || awk -F ":" -v user="$USER" '/^user:/{print $3}' \
|
||||
# shellcheck disable=SC2312
|
||||
: "${UID:=$(id -u || awk -F ":" -v user="${USER}" '/^user:/{print $3}' \
|
||||
/etc/passwd)}"
|
||||
# shellcheck disable=SC2312
|
||||
: "${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"
|
||||
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"
|
||||
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 /")"
|
||||
xdg_dirs="$(awk '/^[ ]*XDG_[A-Z]*_DIR=/{print "export " $1}' \
|
||||
"${XDG_CONFIG_HOME}/user-dirs.dirs")"
|
||||
eval "${xdg_dirs}"
|
||||
|
||||
## Set directory to be used for coding.
|
||||
CODEDIR="$HOME/src"
|
||||
CODEDIR="${HOME}/src"
|
||||
export CODEDIR
|
||||
|
||||
## Set shell configuration directories.
|
||||
SHDIR="$XDG_CONFIG_HOME/sh"
|
||||
BASHDIR="$XDG_CONFIG_HOME/bash"
|
||||
ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
test -n "${EDITOR}" && VISUAL="${EDITOR}"
|
||||
TERMINAL="x-terminal-emulator"
|
||||
BROWSER="chromium"
|
||||
PAGER="less"
|
||||
@ -82,18 +87,18 @@ 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
|
||||
if test -f "${XDG_CONFIG_HOME}/vim/vimrc"; then
|
||||
# shellcheck disable=SC2016,SC2089
|
||||
VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | so $MYVIMRC'
|
||||
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"
|
||||
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}')"
|
||||
@ -102,54 +107,56 @@ if has less; then
|
||||
*) if test "${less_version}" -ge 582; then lesskey_src=1; fi;;
|
||||
esac
|
||||
if test "${lesskey_src}" = "1"; then
|
||||
LESSKEY="$XDG_CONFIG_HOME/less/lesskey"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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
|
||||
rm -f "${ssh_agent_sock}" "${ssh_agent_pid}"
|
||||
ssh_agent_env="$(ssh-agent -s -a "${ssh_agent_sock}")"
|
||||
eval "${ssh_agent_env}" >/dev/null
|
||||
unset ssh_agent_env
|
||||
echo "${SSH_AGENT_PID}" | tee "${ssh_agent_pid}" >/dev/null
|
||||
fi
|
||||
fi
|
||||
unset ssh_agent_dir ssh_agent_sock ssh_agent_pid
|
||||
@ -159,11 +166,11 @@ unset ssh_agent_dir ssh_agent_sock ssh_agent_pid
|
||||
if test -n "${ZSH_VERSION:-}"; then
|
||||
setopt no_nomatch
|
||||
fi
|
||||
for f in "$XDG_CONFIG_HOME/sh/profile.d"/*.sh; do
|
||||
for f in "${XDG_CONFIG_HOME}/sh/profile.d"/*.sh; do
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
! test -r "$f" || . "$f"
|
||||
! test -r "${f}" || . "${f}"
|
||||
done
|
||||
|
||||
## Source local profile.
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
! test -r "$HOME/.profile.local" || . "$HOME/.profile.local"
|
||||
! test -r "${HOME}/.profile.local" || . "${HOME}/.profile.local"
|
||||
|
@ -16,7 +16,7 @@ esac
|
||||
|
||||
## Source profile.
|
||||
# shellcheck disable=SC1091
|
||||
. "$HOME/.profile"
|
||||
. "${HOME}/.profile"
|
||||
## }}}
|
||||
## {{{ Options
|
||||
stty -ixon
|
||||
@ -27,7 +27,7 @@ stty werase undef
|
||||
## }}}
|
||||
## {{{ Alias
|
||||
## Standard commands.
|
||||
test -n "$VISUAL" && alias vi='$VISUAL'
|
||||
test -n "${VISUAL-}" && alias vi='${VISUAL}'
|
||||
alias du="du -h"
|
||||
alias df="df -h"
|
||||
alias cp="cp -i"
|
||||
@ -35,8 +35,8 @@ alias mv="mv -i"
|
||||
alias ls="ls -hF --group-directories-first --color=auto"
|
||||
if has lsblk; then
|
||||
_lsblk_options="NAME,FSTYPE,LABEL,SIZE,FSAVAIL,FSUSE%,MOUNTPOINT"
|
||||
alias lsblk='lsblk -o $_lsblk_options'
|
||||
alias lsblku='lsblk -o $_lsblk_options,UUID,PARTUUID'
|
||||
alias lsblk='lsblk -o ${_lsblk_options}'
|
||||
alias lsblku='lsblk -o ${_lsblk_options},UUID,PARTUUID'
|
||||
fi
|
||||
if ! grep --color 2>&1 | grep -qE "(unrecognized|unknown) option" &&
|
||||
! grep --exclude 2>&1 | grep -qE "(unrecognized|unknown) option"
|
||||
@ -53,23 +53,34 @@ has highlight && alias highlight="highlight --out-format=ansi"
|
||||
has pygmentize && alias pygmentize="pygmentize -f terminal"
|
||||
|
||||
## Helpers.
|
||||
alias reload='. $ENV' r="reload"
|
||||
alias reload-xprofile='. $XDG_CONFIG_HOME/x11/xprofile' rx="reload-xprofile"
|
||||
alias reload='. ${ENV}' r="reload"
|
||||
if test -f "${XDG_CONFIG_HOME:-${HOME}/.config}/x11/xprofile"; then
|
||||
alias reload-xprofile='. ${XDG_CONFIG_HOME:-${HOME}/.config}/x11/xprofile'
|
||||
alias rx="reload-xprofile"
|
||||
fi
|
||||
cd_up(){
|
||||
# SPDX-FileCopyrightText: 2014 Grigory K <https://stackoverflow.com/users/2937875/grigory-k>
|
||||
# SPDX-License-Identifier: CC-BY-SA-3.0
|
||||
# Credits: https://stackoverflow.com/a/26134858
|
||||
case "${1-}" in
|
||||
[1-9]) cd "$(printf "%0.0s../" $(seq 1 "$1"))" || return;;
|
||||
"") cd .. || return;;
|
||||
*) cd "$(pwd | sed -r "s|(.*/$1[^/]*/).*|\1|")" || return
|
||||
[1-9])
|
||||
has seq || return
|
||||
# shellcheck disable=SC2312
|
||||
cd "$(printf "%0.0s../" $(seq 1 "${1}"))" || return
|
||||
;;
|
||||
"")
|
||||
cd .. || return;;
|
||||
*)
|
||||
# shellcheck disable=SC2312
|
||||
cd "$(pwd | sed -r "s|(.*/${1}[^/]*/).*|\1|")" || return
|
||||
;;
|
||||
esac
|
||||
}
|
||||
alias up="cd_up"
|
||||
## POSIX cd does not allow '--' and other shells breaks when not using it.
|
||||
alias -- -="cd -" 2>/dev/null || true
|
||||
test -n "$EDITOR" && alias e='$EDITOR'
|
||||
test -n "$VISUAL" && alias v='$VISUAL'
|
||||
test -n "${EDITOR-}" && alias e='${EDITOR}'
|
||||
test -n "${VISUAL-}" && alias v='${VISUAL}'
|
||||
alias j="jobs"
|
||||
alias h="history"
|
||||
alias l="ls -CF"
|
||||
@ -114,7 +125,7 @@ has tmux && {
|
||||
tcla(){
|
||||
## Clear all the panes of the current session.
|
||||
for _t_pane in $(tmux list-panes -s -F '#{pane_id}'); do
|
||||
tmux clear-history -t "$_t_pane"
|
||||
tmux clear-history -t "${_t_pane}"
|
||||
done
|
||||
}
|
||||
}
|
||||
@ -136,7 +147,7 @@ then
|
||||
g_alias="$(git config --get-regexp 'alias.*' | sed 's/^alias\.//;s/ .*//')"
|
||||
for key in $(printf '%s\n' "${g_alias}"); do
|
||||
# shellcheck disable=SC2139,SC2140
|
||||
alias "g$key"="git $key"
|
||||
alias "g${key}"="git ${key}"
|
||||
done
|
||||
unset g_alias
|
||||
fi
|
||||
@ -164,16 +175,20 @@ esac
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
if has dircolors; then
|
||||
## Use dircolors if available.
|
||||
if test -r "$XDG_CONFIG_HOME/dircolors/dircolors"; then
|
||||
eval "$(dircolors -b "$XDG_CONFIG_HOME/dircolors/dircolors")"
|
||||
if test -r "${XDG_CONFIG_HOME}/dircolors/dircolors"; then
|
||||
dircolors="$(dircolors -b "${XDG_CONFIG_HOME}/dircolors/dircolors")"
|
||||
eval "${dircolors}"
|
||||
else
|
||||
eval "$(dircolors -b)"
|
||||
dircolors="$(dircolors -b)"
|
||||
eval "${dircolors}"
|
||||
fi
|
||||
unset dircolors
|
||||
## Fix bold on some terminals.
|
||||
case "${TERM-}" in
|
||||
xterm*|screen*)
|
||||
LS_COLORS="$(echo "$LS_COLORS" | sed -e 's/01;3/00;9/g')"
|
||||
LS_COLORS="$(echo "${LS_COLORS}" | sed -e 's/01;3/00;9/g')"
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
export LS_COLORS
|
||||
else
|
||||
@ -232,16 +247,16 @@ _git_prompt_info(){
|
||||
esac
|
||||
if test -n "${ZSH_VERSION-}"; then
|
||||
# shellcheck disable=2016
|
||||
if test "$color_prompt" = "yes"; then
|
||||
print -Pn '(%%{$branchcolor%%}%20>...>$ref%<<%%{\e[00m%%})'
|
||||
if test "${color_prompt}" = "yes"; then
|
||||
print -Pn '(%%{${branchcolor}%%}%20>...>${ref}%<<%%{\e[00m%%})'
|
||||
else
|
||||
print -Pn '(%20>...>$ref%<<)'
|
||||
print -Pn '(%20>...>${ref}%<<)'
|
||||
fi
|
||||
else
|
||||
if test "$color_prompt" = "yes"; then
|
||||
printf '%s' "($branchcolor$ref$reset_color)"
|
||||
if test "${color_prompt}" = "yes"; then
|
||||
printf '%s' "(${branchcolor}${ref}${reset_color})"
|
||||
else
|
||||
printf '%s' "($ref)"
|
||||
printf '%s' "(${ref})"
|
||||
fi
|
||||
fi
|
||||
unset ref
|
||||
@ -273,17 +288,20 @@ case "${ZSH_VERSION-}" in
|
||||
esac
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
if test "$(id -u)" = "0"; then
|
||||
uid="$(id -u)"
|
||||
if test "${uid}" = "0"; then
|
||||
usercolor="$(printf '%b' "\e[00;97m")"
|
||||
ps1_symbol="#"
|
||||
fi
|
||||
unset uid
|
||||
|
||||
## Do not colorize this prompt, Sh fails to count the correct number of
|
||||
## characters on the prompt leading to problems.
|
||||
user="$(id -un)"
|
||||
if test "${color_prompt-}" = "yes"; then
|
||||
PS1="[${usercolor}$(id -un) $(hostname -s)${reset_color}]${ps1_symbol} "
|
||||
PS1="[${usercolor}${user} $(hostname -s)${reset_color}]${ps1_symbol} "
|
||||
else
|
||||
PS1="$(id -un)@$(hostname -s)${ps1_symbol} "
|
||||
PS1="${user}@$(hostname -s)${ps1_symbol} "
|
||||
fi
|
||||
## }}}
|
||||
## {{{ External Functions
|
||||
@ -291,7 +309,7 @@ fi
|
||||
## Source file if it is readable.
|
||||
## Usage: source_readable FILE
|
||||
source_readable(){
|
||||
for _file in "$@"; do
|
||||
for _file in "${@}"; do
|
||||
# shellcheck disable=SC1090
|
||||
! test -r "${_file}" || . "${_file}"
|
||||
done
|
||||
@ -301,23 +319,23 @@ _fzf_comprun() {
|
||||
_fzf_command="$1"
|
||||
shift
|
||||
|
||||
case "$_fzf_command" in
|
||||
case "${_fzf_command}" in
|
||||
cd) if has tree; then
|
||||
fzf --preview 'tree -C {} | head -200' "$@"
|
||||
fzf --preview 'tree -C {} | head -200' "${@}"
|
||||
else
|
||||
fzf "$@"
|
||||
fzf "${@}"
|
||||
fi
|
||||
;;
|
||||
export|unset)
|
||||
fzf --preview "eval 'echo \$'{}" "$@"
|
||||
fzf --preview "eval 'echo \$'{}" "${@}"
|
||||
;;
|
||||
ssh)
|
||||
if has dig; then
|
||||
fzf --preview 'dig {}' "$@"
|
||||
fzf --preview 'dig {}' "${@}"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
fzf --preview 'test -d {} || cat {}' "$@"
|
||||
fzf --preview 'test -d {} || cat {}' "${@}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@ -325,5 +343,5 @@ _fzf_comprun() {
|
||||
## }}}
|
||||
## {{{ End
|
||||
## Source local shell configuration file.
|
||||
source_readable "$HOME/.shrc.local"
|
||||
source_readable "${HOME}/.shrc.local"
|
||||
## }}}
|
||||
|
@ -11,14 +11,14 @@ set -eu
|
||||
test -n "${1-}" || exit 1
|
||||
|
||||
prg="$1"
|
||||
if ! test -e "$prg"; then
|
||||
case "$prg" in
|
||||
if ! test -e "${prg}"; then
|
||||
case "${prg}" in
|
||||
(*/*) exit 1;;
|
||||
(*) prg=$(command -v -- "$prg") || exit 1;;
|
||||
(*) prg=$(command -v -- "${prg}") || exit 1;;
|
||||
esac
|
||||
fi
|
||||
dir="$(cd -P -- "$(dirname -- "$prg")" && pwd -P)" || exit 1
|
||||
prg="$dir/$(basename -- "$prg")" || exit 1
|
||||
printf '%s\n' "$dir"
|
||||
dir="$(cd -P -- "$(dirname -- "${prg}")" && pwd -P)" || exit 1
|
||||
prg="${dir}/$(basename -- "${prg}")" || exit 1
|
||||
printf '%s\n' "${dir}"
|
||||
|
||||
exit 0
|
||||
|
@ -33,15 +33,15 @@ if test -z "${1-}"; then
|
||||
fi
|
||||
|
||||
vi_cmd="$(has -s vim vi)"
|
||||
if test -z "$vi_cmd"; then
|
||||
if test -z "${vi_cmd}"; then
|
||||
printf '%s\n' "Please install 'vi(m)'."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for f in "${@}"; do
|
||||
cp "$f" "$f.asc"
|
||||
"$vi_cmd" -u NONE \
|
||||
cp "${f}" "${f}.asc"
|
||||
"${vi_cmd}" -u NONE \
|
||||
-c 'set nomodeline' -c 'norm gg}j' \
|
||||
-c '.,$!gpg -a --clear-sign' \
|
||||
-c 'wq' -- "$f.asc"
|
||||
-c 'wq' -- "${f}.asc"
|
||||
done
|
||||
|
@ -20,6 +20,8 @@ action=""
|
||||
test -n "${1-}" || exit 1
|
||||
case "$1" in
|
||||
-s) action=show; shift; test -n "${1-}" || exit 1;;
|
||||
"") echo "Argument required" >&2; exit 1;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
for prog in "${@}"; do
|
||||
|
@ -1,12 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
## Check if we are root, fail otherwise.
|
||||
set -eu
|
||||
|
||||
test "$(id -u)" -eq 0 && exit 0
|
||||
uid="$(id -u)"
|
||||
test "${uid}" -eq 0 && exit 0
|
||||
printf '%s\n' "Permission denied, action requires privileges."
|
||||
exit 1
|
||||
|
@ -45,7 +45,8 @@ fi
|
||||
if ! echo R | read -r -t 1 -sd R 2>/dev/null; then
|
||||
## Fast but depends on XTerm.
|
||||
if has resize; then
|
||||
eval "$(resize)" >/dev/null
|
||||
resize_cmd="$(resize)"
|
||||
eval "${resize_cmd}" >/dev/null
|
||||
exit
|
||||
fi
|
||||
## Slow due to heavy stty calls.
|
||||
@ -53,7 +54,7 @@ if ! echo R | read -r -t 1 -sd R 2>/dev/null; then
|
||||
stty raw -echo min 0 time 1
|
||||
printf '\0337\033[r\033[99999;99999H\033[6n\0338' >/dev/tty
|
||||
IFS='[;R' read -r _ rows cols _ </dev/tty
|
||||
stty "$termios" cols "$cols" rows "$rows"
|
||||
stty "${termios}" cols "${cols}" rows "${rows}"
|
||||
unset termios
|
||||
exit
|
||||
fi
|
||||
@ -69,7 +70,7 @@ IFS='[;R' read -r -t 1 -s -d R _ rows cols _ </dev/tty || {
|
||||
exit 1
|
||||
}
|
||||
|
||||
if test ${COLUMNS} -eq "${cols}" && test ${LINES} -eq "${rows}";then
|
||||
if test "${COLUMNS}" = "${cols}" && test "${LINES}" = "${rows}";then
|
||||
stty echo
|
||||
unset rows cols
|
||||
exit
|
||||
|
@ -8,7 +8,7 @@ set -eu
|
||||
|
||||
command -v tmux >/dev/null || exit 1
|
||||
: "${TMUX:=}"
|
||||
ta_session="${1:-}"
|
||||
session="${1:-}"
|
||||
|
||||
## Attach to session if it exists or not and from inside tmux or not.
|
||||
## If name is supplied and doesn't exist, create session with given name.
|
||||
@ -16,120 +16,120 @@ ta_session="${1:-}"
|
||||
## else ask for the user to choose the wanted session.
|
||||
## usage: ta SESSION ARGS
|
||||
## example: ta dotfiles -d
|
||||
ta_new(){
|
||||
new(){
|
||||
## Session name was not specified.
|
||||
ta_list="$(tmux list-sessions 2>/dev/null)"
|
||||
list="$(tmux list-sessions 2>/dev/null)"
|
||||
|
||||
printf "Choose session or create one by providing a new name:\n"
|
||||
if test -n "$ta_list"; then
|
||||
printf %s"\n${ta_list}\n"
|
||||
if test -n "${list}"; then
|
||||
printf %s"\n${list}\n"
|
||||
fi
|
||||
|
||||
printf "\nEnter session name: "
|
||||
read -r ta_name
|
||||
read -r name
|
||||
|
||||
if test -z "$ta_name"; then
|
||||
if test -z "${name}"; then
|
||||
printf "Name cannot be empty.\n"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
main(){
|
||||
if test -n "$TMUX"; then
|
||||
if test -n "${TMUX}"; then
|
||||
## Inside tmux.
|
||||
if test "$ta_session" && tmux has-session -t "$ta_session" >/dev/null 2>&1
|
||||
if test "${session}" && tmux has-session -t "${session}" >/dev/null 2>&1
|
||||
then
|
||||
## Session name was specified and it exists.
|
||||
tmux switch-client -t "$ta_session"
|
||||
tmux display-message "Switched to session $ta_session"
|
||||
tmux switch-client -t "${session}"
|
||||
tmux display-message "Switched to session ${session}"
|
||||
|
||||
elif test -n "$ta_session"; then
|
||||
elif test -n "${session}"; then
|
||||
## Session name was specified but it doesn't exist.
|
||||
tmux new-session -d -s "$ta_session"
|
||||
tmux switch-client -t "$ta_session"
|
||||
tmux display-message "Created and switched to session $ta_session"
|
||||
tmux new-session -d -s "${session}"
|
||||
tmux switch-client -t "${session}"
|
||||
tmux display-message "Created and switched to session ${session}"
|
||||
|
||||
else
|
||||
|
||||
## Session name was not specified.
|
||||
ta_last="$(tmux display-message -p "#{client_last_session}")"
|
||||
if test -n "$ta_last" && tmux has-session -t "$ta_last"; then
|
||||
last="$(tmux display-message -p "#{client_last_session}")"
|
||||
if test -n "${last}" && tmux has-session -t "${last}"; then
|
||||
## If tmux has a last session, use it.
|
||||
tmux switch-client -t "$ta_last"
|
||||
tmux display-message "Switched to session $ta_last"
|
||||
tmux switch-client -t "${last}"
|
||||
tmux display-message "Switched to session ${last}"
|
||||
|
||||
else
|
||||
|
||||
## No last session, choose one or create one.
|
||||
printf "Last session not found.\n"
|
||||
ta_new || return 1
|
||||
new
|
||||
|
||||
if tmux has-session -t "$ta_name" 2>/dev/null; then
|
||||
if tmux has-session -t "${name}" 2>/dev/null; then
|
||||
## Chosen session exists.
|
||||
tmux switch-client -t "$ta_name"
|
||||
tmux display-message "Switched to session $ta_name"
|
||||
tmux switch-client -t "${name}"
|
||||
tmux display-message "Switched to session ${name}"
|
||||
|
||||
else
|
||||
## Chosen session doesn't exist.
|
||||
tmux new-session -d -s "$ta_name"
|
||||
tmux switch-client -t "$ta_name"
|
||||
tmux display-message "Created and switched to session $ta_name"
|
||||
tmux new-session -d -s "${name}"
|
||||
tmux switch-client -t "${name}"
|
||||
tmux display-message "Created and switched to session ${name}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
|
||||
## Outside of tmux.
|
||||
if test -n "$ta_session" && ! tmux list-sessions >/dev/null 2>&1; then
|
||||
if test -n "${session}" && ! tmux list-sessions >/dev/null 2>&1; then
|
||||
## Session name was specified but server is not running.
|
||||
tmux new-session -s "$ta_session"
|
||||
tmux display-message "Created session $ta_session"
|
||||
tmux new-session -s "${session}"
|
||||
tmux display-message "Created session ${session}"
|
||||
return 0
|
||||
|
||||
elif ! tmux list-sessions >/dev/null 2>&1; then
|
||||
## Server is not running.
|
||||
ta_new || return 1
|
||||
tmux new-session -s "$ta_name"
|
||||
tmux display-message "Created session $ta_name"
|
||||
new
|
||||
tmux new-session -s "${name}"
|
||||
tmux display-message "Created session ${name}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if test "$ta_session" && tmux has-session -t "$ta_session" >/dev/null 2>&1
|
||||
if test "${session}" && tmux has-session -t "${session}" >/dev/null 2>&1
|
||||
then
|
||||
## Session name was specified and it exists.
|
||||
tmux attach-session -t "$ta_session"
|
||||
tmux display-message "Attached to session $ta_session"
|
||||
tmux attach-session -t "${session}"
|
||||
tmux display-message "Attached to session ${session}"
|
||||
|
||||
elif test -n "$ta_session"; then
|
||||
elif test -n "${session}"; then
|
||||
## Session name was specified but it doesn't exist.
|
||||
tmux new-session -s "$ta_session"
|
||||
tmux display-message "Created new session $ta_session"
|
||||
tmux new-session -s "${session}"
|
||||
tmux display-message "Created new session ${session}"
|
||||
|
||||
else
|
||||
## Session name was not specified.
|
||||
ta_last="$(tmux display-message -p "#{session_name}")"
|
||||
last="$(tmux display-message -p "#{session_name}")"
|
||||
|
||||
if test -n "$ta_last" && tmux has-session -t "$ta_last"; then
|
||||
if test -n "${last}" && tmux has-session -t "${last}"; then
|
||||
## If tmux has a session name, use it.
|
||||
tmux attach-session -t "$ta_last"
|
||||
tmux display-message "Attached to session $ta_last"
|
||||
tmux attach-session -t "${last}"
|
||||
tmux display-message "Attached to session ${last}"
|
||||
|
||||
else
|
||||
ta_new || return 1
|
||||
new
|
||||
|
||||
if tmux has-session -t "$ta_name" 2>/dev/null; then
|
||||
if tmux has-session -t "${name}" 2>/dev/null; then
|
||||
## Chosen session exists.
|
||||
tmux attach-session -t "$ta_name"
|
||||
tmux display-message "Attached to session $ta_name"
|
||||
tmux attach-session -t "${name}"
|
||||
tmux display-message "Attached to session ${name}"
|
||||
|
||||
else
|
||||
## Chosen session doesn't exist.
|
||||
tmux new-session -s "$ta_name"
|
||||
tmux display-message "Created session $ta_name"
|
||||
tmux new-session -s "${name}"
|
||||
tmux display-message "Created session ${name}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
main "${@}"
|
||||
|
@ -11,8 +11,8 @@
|
||||
## In the absence of an argument, the script will try to find a 'plugin'
|
||||
## directory at the defaults Tmux configuration directory in the following
|
||||
## order (stops at first match):
|
||||
## - ${XDG_CONFIG_HOME-$HOME/.config}/tmux/plugins
|
||||
## - $HOME/.tmux/plugins
|
||||
## - ${XDG_CONFIG_HOME-${HOME}/.config}/tmux/plugins
|
||||
## - ${HOME}/.tmux/plugins
|
||||
##
|
||||
## Note '@plugin' definition is only useful for TPM, this script will source
|
||||
## all plugins that are found. If you want to deactivate a plugin, move the
|
||||
@ -29,12 +29,12 @@
|
||||
set -eu
|
||||
|
||||
get_plugin_path(){
|
||||
xdg_file="${XDG_CONFIG_HOME-$HOME/.config}/tmux/tmux.conf"
|
||||
home_subdir_file="$HOME/.tmux/tmux.conf"
|
||||
if test -f "$xdg_file"; then
|
||||
xdg_file="${XDG_CONFIG_HOME-${HOME}/.config}/tmux/tmux.conf"
|
||||
home_subdir_file="${HOME}/.tmux/tmux.conf"
|
||||
if test -f "${xdg_file}"; then
|
||||
plugin_base="${xdg_file%/tmux.conf}/plugins"
|
||||
return 0
|
||||
elif test -f "$home_subdir_file"; then
|
||||
elif test -f "${home_subdir_file}"; then
|
||||
plugin_base="${home_subdir_file%/tmux.conf}/plugins"
|
||||
return 0
|
||||
fi
|
||||
@ -45,16 +45,16 @@ set_plugin_path(){
|
||||
while true; do
|
||||
test -n "${1-}" || break
|
||||
cur_arg="$1"; shift
|
||||
case "$cur_arg" in
|
||||
case "${cur_arg}" in
|
||||
"")
|
||||
break
|
||||
;;
|
||||
*)
|
||||
test -d "$cur_arg" || continue
|
||||
test -d "${cur_arg}" || continue
|
||||
if test -n "${plugin_base-}"; then
|
||||
plugin_base="${plugin_base-} $cur_arg"; continue
|
||||
plugin_base="${plugin_base-} ${cur_arg}"; continue
|
||||
else
|
||||
plugin_base="$cur_arg"; continue
|
||||
plugin_base="${cur_arg}"; continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@ -64,32 +64,32 @@ set_plugin_path(){
|
||||
source_plugins(){
|
||||
directory="$1"
|
||||
## See shellcheck SC2044 to understand why loops over find are fragile.
|
||||
find "$directory" -maxdepth 1 -type d -not -name "$(printf "*\n*")" | \
|
||||
find "${directory}" -maxdepth 1 -type d -not -name "$(printf "*\n*")" | \
|
||||
while read -r plugin
|
||||
do
|
||||
plugin_name="${plugin##*/}"
|
||||
plugin_name="${plugin_name##tmux-}"
|
||||
plugin_name="$(echo "${plugin_name}" | tr "-" "_")"
|
||||
plugin_script="$plugin/$plugin_name.tmux"
|
||||
test -r "$plugin_script" || continue
|
||||
"$plugin_script" >/dev/null 2>&1
|
||||
plugin_script="${plugin}/${plugin_name}.tmux"
|
||||
test -r "${plugin_script}" || continue
|
||||
"${plugin_script}" >/dev/null 2>&1
|
||||
done
|
||||
}
|
||||
|
||||
plugin_base=""
|
||||
command -v tmux >/dev/null || exit 1
|
||||
if test -n "${1-}"; then
|
||||
set_plugin_path "$@"
|
||||
set_plugin_path "${@}"
|
||||
else
|
||||
get_plugin_path || exit 1
|
||||
get_plugin_path
|
||||
fi
|
||||
|
||||
## Don't fail if not directory was found
|
||||
test -n "${plugin_base-}" || exit 0
|
||||
|
||||
for p in ${plugin_base}; do
|
||||
test -d "$p" || continue
|
||||
source_plugins "$p"
|
||||
test -d "${p}" || continue
|
||||
source_plugins "${p}"
|
||||
done
|
||||
|
||||
exit
|
||||
|
@ -4,7 +4,7 @@
|
||||
##
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
: "${XDG_CONFIG_HOME:=$HOME/.config}"
|
||||
: "${XDG_CONFIG_HOME:=${HOME}/.config}"
|
||||
|
||||
XINITRC="$XDG_CONFIG_HOME/x11/xinitrc"
|
||||
XINITRC="${XDG_CONFIG_HOME}/x11/xinitrc"
|
||||
export XINITRC
|
||||
|
@ -5,5 +5,5 @@
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
test -r "$HOME/.profile" && . "$HOME/.profile"
|
||||
. "${XDG_CONFIG_HOME:=$HOME/.config}/x11/xprofile"
|
||||
test -r "${HOME}/.profile" && . "${HOME}/.profile"
|
||||
. "${XDG_CONFIG_HOME:=${HOME}/.config}/x11/xprofile"
|
||||
|
@ -17,7 +17,9 @@ if command -v xrdb >/dev/null; then
|
||||
fi
|
||||
|
||||
## If running normal OS or Qubes: Dom0, apply settings.
|
||||
if ! command -v qubesdb-read >/dev/null || test "$(hostname)" = "dom0"; then
|
||||
# shellcheck disable=3028
|
||||
hostname="${HOSTNAME:-$(hostname)}"
|
||||
if ! command -v qubesdb-read >/dev/null || test "${hostname}" = "dom0"; then
|
||||
## Decrease key repeat delay to X ms.
|
||||
## Increase key repeat rate to Y per second.
|
||||
xset r rate 275 60
|
||||
@ -65,13 +67,14 @@ for wm in ${wm_list}; do
|
||||
if test "${wm}" = "dwm" && command -v xsetroot >/dev/null; then
|
||||
desktop_autostart
|
||||
while true; do
|
||||
xsetroot -name "$(display-statusbar)"
|
||||
xroot_name="$(display-statusbar)"
|
||||
xsetroot -name "${xroot_name}"
|
||||
sleep 60
|
||||
done &
|
||||
fi
|
||||
# shellcheck disable=SC2093
|
||||
${wm} &
|
||||
wm_pid="$!"
|
||||
wm_pid="${!}"
|
||||
done
|
||||
|
||||
test -z "${wm_pid:-}" || wait "${wm_pid}"
|
||||
|
@ -5,5 +5,5 @@
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
test -r "$HOME/.profile" && . "$HOME/.profile"
|
||||
. "${XDG_CONFIG_HOME:=$HOME/.config}/x11/xprofile"
|
||||
test -r "${HOME}/.profile" && . "${HOME}/.profile"
|
||||
. "${XDG_CONFIG_HOME:=${HOME}/.config}/x11/xprofile"
|
||||
|
@ -5,5 +5,5 @@
|
||||
## SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
test -r "$HOME/.profile" && . "$HOME/.profile"
|
||||
. "${XDG_CONFIG_HOME:=$HOME/.config}/x11/xsession"
|
||||
test -r "${HOME}/.profile" && . "${HOME}/.profile"
|
||||
. "${XDG_CONFIG_HOME:=${HOME}/.config}/x11/xsession"
|
||||
|
Loading…
x
Reference in New Issue
Block a user