From b35ca70be43d1a349399f4ba2c32803f416e12f7 Mon Sep 17 00:00:00 2001 From: Hendrik Boll Date: Sat, 21 Jun 2025 18:20:18 +0200 Subject: [PATCH] xbps: custom xtools (xi and xr) --- dot_alias | 2 + private_dot_local/bin/executable_xi | 57 +++++++++++++++++++++++++++++ private_dot_local/bin/executable_xr | 26 +++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 private_dot_local/bin/executable_xi create mode 100644 private_dot_local/bin/executable_xr diff --git a/dot_alias b/dot_alias index 1b76128..6e16a81 100644 --- a/dot_alias +++ b/dot_alias @@ -1,5 +1,7 @@ # xbps alias xup="xi -Su" +# uses custom /usr/bin/xr +alias xcln="xr -Oo" # listing files eza_params=( diff --git a/private_dot_local/bin/executable_xi b/private_dot_local/bin/executable_xi new file mode 100644 index 0000000..d908958 --- /dev/null +++ b/private_dot_local/bin/executable_xi @@ -0,0 +1,57 @@ +#!/bin/sh +# xi PKGS... - like xbps-install -S, but take cwd repo and sudo/su into account + +if [ -n "$XBPS_HOSTDIR" ]; then + XBPS_BINPKGS="$XBPS_HOSTDIR/binpkgs" +else + XBPS_DISTDIR="$(xdistdir 2>/dev/null)" || XBPS_DISTDIR=. + XBPS_BINPKGS="$XBPS_DISTDIR/hostdir/binpkgs" +fi + +set -- \ + --repository="$XBPS_BINPKGS" \ + --repository="$XBPS_BINPKGS/nonfree" \ + --repository="$XBPS_BINPKGS/multilib" \ + --repository="$XBPS_BINPKGS/multilib/nonfree" \ + --repository="$XBPS_BINPKGS/debug" \ + "$@" + +if BRANCH=$(git symbolic-ref -q --short HEAD 2>/dev/null) && [ -n "$BRANCH" ]; then + set -- \ + --repository="$XBPS_BINPKGS/$BRANCH" \ + --repository="$XBPS_BINPKGS/$BRANCH/nonfree" \ + --repository="$XBPS_BINPKGS/$BRANCH/multilib" \ + --repository="$XBPS_BINPKGS/$BRANCH/multilib/nonfree" \ + --repository="$XBPS_BINPKGS/$BRANCH/debug" \ + "$@" +fi + +which_sudo() { + if [ "$(id -u)" = "0" ]; then + return + elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then + echo doas + elif command -v sudo >/dev/null && sudo -l | grep -q -e ' ALL$' -e xbps-install; then + echo sudo + else + echo su + fi +} + +do_install() { + if [ "$SUDO" = su ]; then + su root -c 'xbps-install "$@"' -- sh "$@" + else + $SUDO xbps-install "$@" + fi +} + +SUDO=$(which_sudo) +do_install -S "$@" +status=$? +if [ $status -eq 16 ]; then + do_install -u xbps && + do_install -S "$@" +else + exit $status +fi diff --git a/private_dot_local/bin/executable_xr b/private_dot_local/bin/executable_xr new file mode 100644 index 0000000..7d3bd6c --- /dev/null +++ b/private_dot_local/bin/executable_xr @@ -0,0 +1,26 @@ +#!/bin/sh +# xr PKGS... - like xbps-remove -R, but take sudo/su into account + +which_sudo() { + if [ "$(id -u)" = "0" ]; then + return + elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then + echo doas + elif command -v sudo >/dev/null && sudo -l | grep -q -e ' ALL$' -e xbps-install; then + echo sudo + else + echo su + fi +} + +do_remove() { + if [ "$SUDO" = su ]; then + su root -c 'xbps-remove "$@"' -- sh "$@" + else + $SUDO xbps-remove "$@" + fi +} + +SUDO=$(which_sudo) +do_remove -R "$@" +exit $?