225 lines
5.0 KiB
Bash
225 lines
5.0 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
|
|
# This file is part of scripts.
|
|
|
|
# scripts is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, version 3.
|
|
|
|
# scripts is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with scripts. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
# Original author: Maciej Barć <xgqt@riseup.net>
|
|
# Copyright (c) 2020, src_prepare group
|
|
# Licensed under the GNU GPL v3 License
|
|
|
|
# Source this to enter the Eprefix environment
|
|
# Like this for example:
|
|
# $ source $HOME/gentoo/eprefix-activate
|
|
|
|
|
|
# >>> Set eprefix
|
|
|
|
EPREFIX=${EPREFIX:-${HOME}/gentoo}
|
|
export EPREFIX
|
|
|
|
|
|
# >>> Funcion definitions
|
|
|
|
command_exists() {
|
|
if command -v "${1}" >/dev/null
|
|
then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
if command_exists tput
|
|
then
|
|
eprefix_good="$(tput bold)$(tput setaf 2)*$(tput sgr0)"
|
|
eprefix_bad="$(tput bold)$(tput setaf 1)*$(tput sgr0)"
|
|
eprefix_warn="$(tput bold)$(tput setaf 3)*$(tput sgr0)"
|
|
else
|
|
eprefix_good="*"
|
|
eprefix_bad="*"
|
|
eprefix_warn="*"
|
|
fi
|
|
|
|
eprefix_addpath() {
|
|
if [ -d "${1}" ]
|
|
then
|
|
PATH=${1}:${PATH}
|
|
export PATH
|
|
else
|
|
printf "%s\n" "${eprefix_warn} ${1} not found" >> /dev/stderr
|
|
fi
|
|
}
|
|
|
|
eprefix_addman() {
|
|
if [ -d "${1}" ]
|
|
then
|
|
MANPATH=${1}:${MANPATH}
|
|
export MANPATH
|
|
else
|
|
printf "%s\n" "${eprefix_warn} ${1} not found" >> /dev/stderr
|
|
fi
|
|
}
|
|
|
|
eprefix_packages() {
|
|
if [ -d "${EPREFIX}/var/db/pkg" ]
|
|
then
|
|
find "${EPREFIX}"/var/db/pkg/*/* -type d | wc -l
|
|
fi
|
|
}
|
|
|
|
eprefix_world() {
|
|
if [ -f "${EPREFIX}/var/lib/portage/world" ]
|
|
then
|
|
wc -l < "${EPREFIX}/var/lib/portage/world"
|
|
fi
|
|
}
|
|
|
|
|
|
# >>> Checks
|
|
|
|
# Exit if script is not sourced
|
|
case ${-} in
|
|
*i* )
|
|
:
|
|
;;
|
|
* )
|
|
printf "%s\n" \
|
|
"${eprefix_bad} Error: not a login shell" \
|
|
"${eprefix_bad} Run: source ${0}" \
|
|
">>> Exiting the shell" >> /dev/stderr
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Exit if eprefix does not exist
|
|
if [ ! -d "${EPREFIX}" ]
|
|
then
|
|
printf "%s\n" \
|
|
"${eprefix_bad} No ${EPREFIX} found!" \
|
|
">>> Exiting the shell" >> /dev/stderr
|
|
sleep 3
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# >>> PATH setup
|
|
|
|
# Add directories to PATH
|
|
eprefix_addpath "${EPREFIX}/bin"
|
|
eprefix_addpath "${EPREFIX}/opt/bin"
|
|
eprefix_addpath "${EPREFIX}/sbin"
|
|
eprefix_addpath "${EPREFIX}/tmp/bin"
|
|
eprefix_addpath "${EPREFIX}/tmp/usr/bin"
|
|
eprefix_addpath "${EPREFIX}/usr/bin"
|
|
eprefix_addpath "${EPREFIX}/usr/local/bin"
|
|
eprefix_addpath "${EPREFIX}/usr/local/sbin"
|
|
eprefix_addpath "${EPREFIX}/usr/sbin"
|
|
|
|
# Add manpages
|
|
eprefix_addman "${EPREFIX}/usr/local/share/man"
|
|
eprefix_addman "${EPREFIX}/usr/share/binutils-data/x86_64-pc-linux-gnu/2.34/man"
|
|
eprefix_addman "${EPREFIX}/usr/share/man"
|
|
|
|
|
|
# >>> General env setup
|
|
|
|
# Process .sh files
|
|
for sh in "${EPREFIX}"/etc/profile.d/*.sh
|
|
do
|
|
# shellcheck disable=SC1090 disable=SC1091
|
|
[ -r "${sh}" ] && source "${sh}"
|
|
done
|
|
unset sh
|
|
|
|
# Set Portage shell
|
|
CONFIG_SHELL="${EPREFIX}/bin/bash"
|
|
export CONFIG_SHELL
|
|
|
|
# Misc env vars
|
|
CONFIG_PROTECT_MASK="${CONFIG_PROTECT_MASK} ${EPREFIX}/etc/ca-certificates.conf"
|
|
CONFIG_PROTECT_MASK="${CONFIG_PROTECT_MASK} ${EPREFIX}/etc/gentoo-release"
|
|
CONFIG_PROTECT_MASK="${CONFIG_PROTECT_MASK} ${EPREFIX}/etc/sandbox.d"
|
|
CONFIG_PROTECT_MASK="${CONFIG_PROTECT_MASK} ${EPREFIX}/etc/terminfo"
|
|
GCC_SPECS=""
|
|
LANG="en_US.utf8"
|
|
export CONFIG_PROTECT_MASK
|
|
export GCC_SPECS
|
|
export LANG
|
|
|
|
# Set umask
|
|
umask 022
|
|
|
|
|
|
# >>> Use Eprefix's tools
|
|
|
|
# We just use "which" because we put Eprefix's PATHs first
|
|
# before the system ones
|
|
EDITOR="$(command -v nano)"
|
|
PAGER="$(command -v less)"
|
|
export EDITOR
|
|
export PAGER
|
|
|
|
|
|
# >>> Emerge options
|
|
|
|
# Sandbox does not work well on Prefix
|
|
# Bug: 490246
|
|
FEATURES="${FEATURES} -usersandbox -sandbox"
|
|
export FEATURES
|
|
|
|
# Check if we are on a prefix profile
|
|
printf "\n"
|
|
if command_exists eselect
|
|
then
|
|
eprofile="$(eselect profile show)"
|
|
|
|
if [[ "${eprofile}" == *prefix* ]]
|
|
then
|
|
printf "%s\n" "${eprefix_good} ${eprofile}"
|
|
else
|
|
printf "%s\n" "${eprefix_bad} You are not on a prefix profile" >> /dev/stderr
|
|
fi
|
|
|
|
unset eprofile
|
|
else
|
|
printf "%s\n" "${eprefix_bad} Could not determine running profile" >> /dev/stderr
|
|
fi
|
|
|
|
|
|
# >>> Finish
|
|
|
|
printf "\n%s\n" \
|
|
">>> Sourced the eprefix script\n" \
|
|
"${eprefix_good} Prefix: ${EPREFIX}" \
|
|
"${eprefix_good} Packages: $(eprefix_packages)" \
|
|
"${eprefix_good} In World: $(eprefix_world)" \
|
|
"${eprefix_good} Have fun! ;-)"
|
|
|
|
|
|
if command_exists emerge
|
|
then
|
|
printf "\n%s\n" ">>> Environment ready"
|
|
else
|
|
printf "\n%s\n" \
|
|
"${eprefix_bad} Could not locate emerge" \
|
|
"${eprefix_bad} Environment may be broken" \
|
|
">>> Continuing anyway..." >> /dev/stderr
|
|
fi
|
|
|
|
|
|
# >>> Cleanup
|
|
unset eprefix_good
|
|
unset eprefix_bad
|
|
unset eprefix_warn
|