#!/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 . # Original author: Maciej Barć # 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 else return 1 fi } 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 echo "${eprefix_warn} ${1} not found" fi } eprefix_addman() { if [ -d "${1}" ] then MANPATH=${1}:${MANPATH} export MANPATH else echo "${eprefix_warn} ${1} not found" 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* ) : ;; * ) echo "${eprefix_bad} Error: not a login shell" echo "${eprefix_bad} Run: source ${0}" echo ">>> Exiting the shell" exit 1 ;; esac # Exit if eprefix does not exist if [ ! -d "${EPREFIX}" ] then echo "${eprefix_bad} No ${EPREFIX} found!" echo ">>> Exiting the shell" 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 echo "" if command_exists eselect then eprofile="$(eselect profile show)" if [[ "${eprofile}" == *prefix* ]] then echo "${eprefix_good} ${eprofile}" else echo "${eprefix_bad} You are not on a prefix profile" fi unset eprofile else echo "${eprefix_bad} Could not determine running profile" fi # >>> Finish echo "" echo ">>> Sourced the eprefix script" echo "" echo "${eprefix_good} Prefix: ${EPREFIX}" echo "${eprefix_good} Packages: $(eprefix_packages)" echo "${eprefix_good} In World: $(eprefix_world)" echo "${eprefix_good} Have fun! ;-)" if command_exists emerge then echo "" echo ">>> Environment ready" else echo "" echo "${eprefix_bad} Could not locate emerge" echo "${eprefix_bad} Environment may be broken" echo ">>> Continuing anyway..." fi # >>> Cleanup unset eprefix_good unset eprefix_bad unset eprefix_warn