added profile files, removed personal figlet font

This commit is contained in:
levasseur
2021-09-21 17:38:04 +02:00
parent 0c56bfcd98
commit 57103606ca
4 changed files with 1130 additions and 1 deletions

View File

@@ -13,7 +13,7 @@ export DEP_install_profile="install_pkg"
install_profile() install_profile()
{ {
installfile ansi_shadow.flf /usr/share/figlet/ansi_shadow.flf #installfile ansi_shadow.flf /usr/share/figlet/ansi_shadow.flf
local usrlist="/root" local usrlist="/root"
if find /home -mindepth 1 -maxdepth 1 -type d | read; then if find /home -mindepth 1 -maxdepth 1 -type d | read; then

115
repo/common/.bashrc Normal file
View File

@@ -0,0 +1,115 @@
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
#alias grep='grep --color=auto'
#alias fgrep='fgrep --color=auto'
#alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
. ~/profile

27
repo/common/.profile Normal file
View File

@@ -0,0 +1,27 @@
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi

987
repo/common/profile Normal file
View File

@@ -0,0 +1,987 @@
#!/bin/bash
# Begin profile
# ------------------------------------------------------------------------------------------
# Initial version from Beyond Linux From Scratch by
# * James Robertson <jameswrobertson@earthlink.net>
# * Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>
# ------------------------------------------------------------------------------------------
# Current version from Geoffray Levasseur <fatalerrors@geoffray-levasseur.org>
# 16/02/2013 Version 1.0.0 : Initial version
# 24/10/2015 Version 2.0.0 : Added some advanced functionnalities (clean, srr, etc.)
# 04/02/2017 Version 2.0.1 : clean improvements (--shell)
# 16/09/2018 Version 2.1.0 : Added rmhost, setc, setfr, review of locales management
# 23/09/2019 Version 2.1.1 : [bugfix] dpkgs
# 24/09/2019 Version 2.1.2 : [bugfix] bug in profile version display
# 16/12/2019 Version 2.2.0 : Added showinfo, primary write of showdiskmap (to be finished)
# 08/01/2020 Version 2.3.0 : Added use of figlet and neofetch as an equivalent to motd
# 16/01/2020 Version 2.3.1 : [bugfix] non-interactive mode were blocked with some functions
# 31/01/2020 Version 2.3.2 : Figlet : changed default font to ansi_shadow
# 02/03/2020 Version 2.4.0 : Added command auzip
# 03/03/2020 Version 2.5.0 : Added command taz and rmspc, auzip renamed utaz and improved
# 05/03/2020 Version 2.5.1 : Language consistancy fix, added pigz support in taz
# 06/03/2020 Version 2.5.2 : Few aliases sorted out
# 11/09/2020 Version 2.5.3 : Few more aliases, improved code consistancy and typo,
# : improved utaz, removed showdiskmap, removed remaining French,
# : added license information for future publication
# 24/10/2020 Version 2.6.0 : Added session save and restore for Konsole
# 25/12/2020 Version 2.6.1 : Add check on rmhost, improvements rmspc, created expendlist
# 26/02/2021 Version 2.6.2 : taz: corrected bug with trailing slash on directories
# ------------------------------------------------------------------------------------------
# Copyright (c) 2013-2020 Geoffray Levasseur <fatalerrors@geoffray-levasseur.org>
# Protected by the BSD3 license. Please read bellow for details.
#
# * Redistribution and use in source and binary forms,
# * with or without modification, are permitted provided
# * that the following conditions are met:
# *
# * Redistributions of source code must retain the above
# * copyright notice, this list of conditions and the
# * following disclaimer.
# *
# * Redistributions in binary form must reproduce the above
# * copyright notice, this list of conditions and the following
# * disclaimer in the documentation and/or other materials
# * provided with the distribution.
# *
# * Neither the name of the copyright holder nor the names
# * of any other contributors may be used to endorse or
# * promote products derived from this software without
# * specific prior written permission.
# *
# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# * OF SUCH DAMAGE.
# ------------------------------------------------------------------------------------------
export PROFVERSION="2.6.1"
export DEFAULT_CITY="Toulouse"
# ------------------------------------------------------------------------------------------
# path* : private functions for PATH variable management
# ------------------------------------------------------------------------------------------
pathremove ()
{
local ifs=':'
local newpath
local dir
local pathvar=${2:-PATH}
for dir in ${!pathvar} ; do
if [ "$dir" != "$1" ] ; then
newpath=${newpath:+$newpath:}$dir
fi
done
export $pathvar="$newpath"
}
pathprepend ()
{
pathremove $1 $2
local pathvar=${2:-PATH}
export $pathvar="$1${!pathvar:+:${!pathvar}}"
}
pathappend ()
{
pathremove $1 $2
local pathvar=${2:-PATH}
export $pathvar="${!pathvar:+${!pathvar}:}$1"
}
# ------------------------------------------------------------------------------------------
# expandlist : treat wildcards in a file/directory list
# ------------------------------------------------------------------------------------------
expandlist()
{
local result=""
for item in "$1"; do
for content in "$item"; do
result+="\"$content\" "
done
done
echo $result
}
# ------------------------------------------------------------------------------------------
# timer_* functions : internal timing function for prompt
# ------------------------------------------------------------------------------------------
function timer_now
{
date +%s%N
}
function timer_start
{
timer_start=${timer_start:-$(timer_now)}
}
function timer_stop
{
local delta_us=$((($(timer_now) - $timer_start) / 1000))
local us=$((delta_us % 1000))
local ms=$(((delta_us / 1000) % 1000))
local s=$(((delta_us / 1000000) % 60))
local m=$(((delta_us / 60000000) % 60))
local h=$((delta_us / 3600000000))
# Goal: always show around 3 digits of accuracy
if ((h > 0)); then timer_show=${h}h${m}m
elif ((m > 0)); then timer_show=${m}m${s}s
elif ((s >= 10)); then timer_show=${s}.$((ms / 100))s
elif ((s > 0)); then timer_show=${s}.$(printf %03d $ms)s
elif ((ms >= 100)); then timer_show=${ms}ms
elif ((ms > 0)); then timer_show=${ms}.$((us / 100))ms
else timer_show=${us}us
fi
unset timer_start
}
# ------------------------------------------------------------------------------------------
# Function triguered internaly by bash : defining prompt
# ------------------------------------------------------------------------------------------
set_prompt ()
{
Last_Command=$? # Must come first!
Blue='\[\e[0;34m\]'
White='\[\e[01;37m\]'
Yellow='\[\e[01;93m\]'
Red='\[\e[01;31m\]'
Green='\[\e[01;32m\]'
OnGrey='\[\e[47m\]'
OnRed='\[\e[41m\]'
OnBlue='\[\e[44m\]'
ICyan='\[\e[0;96m\]'
Default='\[\e[00m\]'
FancyX='\342\234\227'
Checkmark='\342\234\223'
# Begin with time
PS1="$Blue$OnGrey[ \t ]$Default "
# Add a bright white exit status for the last command
# If it was successful, print a green check mark. Otherwise, print
# a red X.
if [[ $Last_Command == 0 ]]; then
PS1+="$White$OnBlue[ \$Last_Command "
PS1+="$Green$Checkmark "
else
PS1+="$White$OnRed[ \$Last_Command "
PS1+="$Yellow$FancyX "
fi
# Add the ellapsed time and current date
timer_stop
PS1+="($timer_show)$White ]$Default "
# If root, just print the host in red. Otherwise, print the current user
# and host in green.
if [[ $EUID -eq 0 ]]; then
PS1+="$Red\\u$Green@\\h "
else
PS1+="$Green\\u@\\h "
fi
# Print the working directory and prompt marker in blue, and reset
# the text color to the default.
PS1+="$ICyan\\w \\\$$Default "
}
# ------------------------------------------------------------------------------------------
# Show profile version
# ------------------------------------------------------------------------------------------
ver ()
{
echo "Profile version $PROFVERSION."
}
export ver
# ------------------------------------------------------------------------------------------
# Change locale to French
# ------------------------------------------------------------------------------------------
setfr ()
{
# Set fr locale definitions
export LANG=fr_FR.UTF-8
export LC_MESSAGES=fr_FR.UTF-8
export LC_ALL=fr_FR.UTF-8
}
export setfr
# ------------------------------------------------------------------------------------------
# Change locale to C standard
# ------------------------------------------------------------------------------------------
setc ()
{
# Locale definitions
export LANG=C
export LC_MESSAGES=C
export LC_ALL=C
}
export setc
# ------------------------------------------------------------------------------------------
# Change locale to US (needed by Steam)
# ------------------------------------------------------------------------------------------
setus ()
{
# Locale definitions
export LANG=en_US.UTF-8
export LC_MESSAGES=en_US.UTF-8
export LC_ALL=en_US.UTF-8
}
export setc
# ------------------------------------------------------------------------------------------
# Display weather of the given city (or default one)
# ------------------------------------------------------------------------------------------
meteo ()
{
cities=$@
[[ $# -eq 0 ]] && local cities=$DEFAULT_CITY
for city in $cities; do
curl wttr.in/$city
done
}
export meteo
# ------------------------------------------------------------------------------------------
# Clean a directory or a tree from temporary or backup files
# ------------------------------------------------------------------------------------------
clean ()
{
for opt in $@ ; do
case $opt in
"-r"|"--recurs")
local recursive=1
;;
"-h"|"--help")
echo "clean : erase backup files in the given directories."
echo
echo "Usage : clean [option] [directory1] [...[directoryX]]"
echo
echo "Options :"
echo " -h, --help Display that help screen"
echo " -r, --recurs Do a recursive cleaning"
echo " -f, --force Do not ask for confirmation (use with care)"
echo " -s, --shell Do nothing and display what will be executed"
echo
return 0
;;
"-s"|"--shell")
local outshell=1
;;
"-f"|"--force")
local force=1
;;
"-"*)
echo "Invalid option, use \"clean --help\" to display usage."
echo
return 1
;;
*)
local dirlist="$dirlist $opt"
;;
esac
done
[[ ! $dirlist ]] && local dirlist=$(pwd)
[[ ! $recursive ]] && local findopt="-maxdepth 1"
[[ ! $force ]] && local rmopt="-i"
unset recursive force
for dir in $dirlist; do
local dellist=$(find $dir $findopt -type f -name "*~" -o -name "#*#" -o -name "*.bak" -o -name ".~*#")
for f in $dellist; do
if [[ ! $outshell ]]; then
rm $rmopt $f
else
echo "rm $rmopt $f"
fi
done
done
unset outshell dirlist dellist findopt rmopt
}
export clean
# ------------------------------------------------------------------------------------------
# Login root via SSH on the given machine
# ------------------------------------------------------------------------------------------
ssr ()
{
for opt in $@ ; do
case $opt in
"-h"|"--help")
echo "ssr: do a root user ssh login."
echo
echo "Usage : ssr <server [ssh options]>"
return 0
;;
esac
done
[[ ! $1 ]] &&
echo "Please specify the server you want to log in." && return 1
local srv=$1 && shift
ssh -x root@$srv $@
}
export ssr
# ------------------------------------------------------------------------------------------
# Look for a package within installed one
# ------------------------------------------------------------------------------------------
dpkgs ()
{
local count=0
for opt in $@ ; do
case $opt in
"-h"|"--help")
echo "dpkgs: look for an installed package by it's name."
echo
echo "Usage: dpkgs <string>"
return 0
;;
"-"*)
echo "Invalid option, use \"dpkgs --help\" to display usage."
echo
return 1
;;
*)
local pkg=$1 && shift
count=$(( $count + 1 ))
[[ $count -gt 1 ]] &&
echo "*** Error: Please specify a package name, without space, eventually partial." && return 1
;;
esac
done
[[ $count -lt 1 ]] && echo "*** Error: Please specify a package name, without space, eventually partial." && return 1
[[ -x /usr/sbin/dpkg ]] && "*** Error: dpkg command seems unavialable." && return 2
dpkg -l | grep $pkg
}
export dpkgs
# ------------------------------------------------------------------------------------------
# Search processes matching the given string
# ------------------------------------------------------------------------------------------
ppg ()
{
ps -edf | grep $@ | grep -v "grep $@"
}
export ppg
# ------------------------------------------------------------------------------------------
# Create a directory then goes inside
# ------------------------------------------------------------------------------------------
mcd () {
if [[ ! $# -eq 1 ]] ; then
echo "Create a directory then goes inside."
echo "Usage : mcd <directory>"
return 1
fi
mkdir -pv $1 && cd $1
}
export mcd
# ------------------------------------------------------------------------------------------
# Get PID list of the given process name
# ------------------------------------------------------------------------------------------
gpid () {
[[ $# -eq 1 ]] && local single=1
for pid in $@; do
local result=$(ps -A | grep $pid | awk '{print $1}')
if [[ $single ]]; then
[[ $result ]] && echo "$result"
else
[[ $result ]] && echo "$pid: $result"
fi
done
[[ $result ]] || return 1
}
export gpid
# ------------------------------------------------------------------------------------------
# Remove host from know_host (name and IP) for the active user
# ------------------------------------------------------------------------------------------
rmhost () {
if [[ "$#" -ne 1 ]]; then
echo "Error: incorrect number of parameters."
echo "Usage: rmhost <hostname>"
return 1
fi
hst=$1
ip=$(host $hst | grep "has address" | awk '{print $NF}')
[[ ! $? ]] && echo "*** rmhost(): Error extracting IP from hostname." && return 1
echo "Removing host $hst from ssh known_host..."
ssh-keygen -R $hst > /dev/null
echo "Removing IP $ip from ssh known_host..."
ssh-keygen -R $ip > /dev/null
}
export rmhost
# ------------------------------------------------------------------------------------------
# Rename all files in current directory to replace spaces with _
# ------------------------------------------------------------------------------------------
rmspc () {
local lst=""
for opt in $@ ; do
case $opt in
"-h"|"--help")
echo "rmspc : remove spaces from all filenames in current directories"
echo
echo "Usage : rmspc [option]"
echo
echo "Options :"
echo " -h, --help Display that help screen"
echo " -r, --recursive Treat subdiretories of the given directories"
echo " -c, --subst-char Change the replacement character (default is underscore)"
echo " -v, --verbose Display what is being done"
echo " -s, --shell Do nothing and display commands that would be executed"
echo
return 0
;;
"-r"|"--recursive")
local recurs=1
;;
"-c"?*|"--subst-char"?*)
local substchar=$(echo "$opt" | cut -f 2- -d '=')
;;
"-v"|"--verbose")
local verb=1
;;
"-s"|"--shell")
local shell=1
;;
*)
echo "Invalid parameter, use \"rmspc --help\" to display options list"
echo
return 1
;;
esac
done
[[ ! $substchar ]] && substchar="_"
[[ $verb ]] && local mvopt="-v"
for f in *\ *; do
[[ $recurs ]] && [[ -d "$f" ]] && (
#[[ $verb ]] && echo "Entering directory $f ..."
pushd "$f" > /dev/null
rmspc --subst-char="$substchar" $mvopt --shell
popd > /dev/null
#[[ $verb ]] && echo "Leaving directory $f"
)
if [[ $(echo $f | grep " ") ]]; then
local newf="${f// /${substchar}}"
local command="mv $mvopt \"$f\" \"$newf\""
if [[ $shell ]]; then
echo $command
else
$command
fi
fi
done
unset lst substchar verb shell newf command mvopt
}
export rmspc
# ------------------------------------------------------------------------------------------
# Smartly uncompress archives (zip only)
# ------------------------------------------------------------------------------------------
utaz()
{
for opt in $@ ; do
case $opt in
"-h"|"--help")
echo "utaz : uncompress all the given files and/or the ones found in the given"
echo " directories creating an host directory where needed."
echo
echo "Usage : utaz [option] [directorie(s)|file(s)]"
echo
echo "Options :"
echo " -h, --help Display that help screen"
echo " -d, --delete If decompression success, delete the source file"
echo " -c, --create-dir Always create a host directory"
echo " -n, --no-dir Never create a host directory"
echo
return 0
;;
"-d"|"--delete")
local willrm=1
;;
"-c"|"--create-dir")
local createdir=1
;;
"-n"|"--no-dir")
local nodir=1
;;
"-"*)
echo "Invalid option, use \"utaz --help\" to display options list"
echo
return 1
;;
*)
# The ${opt%/} writing is to remove trailing / if any
local LIST="$LIST ${opt%/}"
;;
esac
done
[[ $createdir && $nodir ]] && echo "*** Error: --create-dir and --no-dir options are mutually exclusive."
[[ ! $LIST ]] && local LIST="."
for zitem in $LIST; do
[[ $(ls $zitem/*.zip 2> /dev/null | wc -l) -eq 0 ]] &&
echo "$zitem contains no supported archive file, skipping." &&
continue
for f in $zitem/*.zip; do
echo -n "Processing archive $zitem/$f... "
local dir=${f::-4}
mkdir -p $dir
[[ $? -gt 0 ]] &&
echo "[ filesystem can't create directories, exit ]" &&
return 1
unzip -o $f -d $dir > /dev/null 2>&1
case $? in
0)
[[ $willrm ]] && rm -f $f && echo -n "Deleted ! "
;;
1)
echo "No deletion on warnings "
;;
*)
echo "[ zip file corrupted, failed ]"
rm -rf $dir > /dev/null 2>&1
continue
;;
esac
if [[ $createdir ]]; then
echo -n "[ subdir created, "
elif [[ $nodir ]]; then
mv ./$dir/* ./ && rmdir $dir
echo -n "[ No subdir, "
else
subdirs=$(find $dir -maxdepth 1 | wc -l)
if [[ $subdirs -eq 2 ]]; then
mv ./$dir/* ./ && rmdir $dir
echo -n "[ No subdir, "
else
echo -n "[ subdir created, "
fi
fi
echo " OK ]"
done
done
}
export utaz
# ------------------------------------------------------------------------------------------
# Compress directories or files into one or more archive
# ------------------------------------------------------------------------------------------
taz()
{
_doxz()
{
command -v xz >/dev/null 2>&1 || {
echo -e >&2 "\t*** The program 'xz' is not installed, aborting."
return 127
}
[[ $4 ]] && local verb='-v'
# Display a warning for this format
echo -e "\t! Warning: xz format is not suited for long term archiving."
echo -e "\t See https://www.nongnu.org/lzip/xz_inadequate.html for details."
# Compresse to xz (lzma2) - Deprecated
xz $verb --compress --keep -$3 -T $2 $1
return $?
}
_dolz()
{
local procopt="--threads $2"
local command=plzip
command -v plzip >/dev/null 2>&1 || {
command -v lzip >/dev/null 2>&1 || {
echo -e >&2 "\t*** Program 'plzip' or 'lzip' are not installed, aborting."
return 127
}
local command=lzip
local procopt=""
[[ $2 -gt 1 ]] &&
echo -e "\t! Warning: lzip doesn't support multithreading, falling back to 1 thread." &&
exho -e "\t* Consitder installing plzip to obtain multithreading abilities."
}
[[ $4 ]] && local verb="-vv"
# Compresse au format lzip (lzma)
$command $verb $procopt --keep -$3 $1
return $?
}
_dogz()
{
local procopt="--processes $2"
local command=pigz
command -v pigz >/dev/null 2>&1 || {
command -v gzip >/dev/null 2>&1 || {
echo -e >&2 "\t*** Programs 'pigz' or 'gzip' are not installed, aborting."
return 127
}
local command="gzip --compress"
local procopt=""
[[ $2 -gt 1 ]] &&
echo -e "\t! Warning: gzip doesn't support multithreading, falling back to 1 thread." &&
exho -e "\t* Consitder installing pigz to obtain multithreading abilities."
}
[[ $4 ]] && local verb="--verbose"
# Compresse au format bz2
$command $verb $procopt --keep -$3 $1
return $?
}
_dobz2()
{
local procopt="-p$2"
local command=pbzip2
command -v pbzip2 >/dev/null 2>&1 || {
command -v bzip2 >/dev/null 2>&1 || {
echo -e >&2 "\t*** The program 'pbzip2' or 'bzip2' are not installed, aborting."
return 127
}
local command=bzip2
local procopt=""
[[ $2 -gt 1 ]] &&
echo -e "\t! Warning: bzip2 doesn't support multithreading, falling back to 1 thread." &&
exho -e "\t* Consitder installing pbzip2 to obtain multithreading abilities."
}
[[ $4 ]] && local verb="-v"
# Compresse au format bz2
$command $verb --compress $procopt --keep -$3 $1
return $?
}
_dolzo()
{
command -v lzop >/dev/null 2>&1 || {
echo -e >&2 "\t*** The program 'lzop' is not installed, aborting."
return 127
}
[[ $4 ]] && local verb='-v'
[[ $2 -gt 1 ]] && echo -e "\t! Warning: lzop doesn't support multithreading, falling back to 1 thread."
# Compresse au format lzo
lzop --keep -$3 $1
return $?
}
for opt in $@ ; do
case $opt in
"-h"|"--help")
echo "taz : archive all files of a directory."
echo
echo "Usage: taz [option] [--parallel=<n>] [--format=<format>] [directory1 ... directoryN]"
echo
echo "Options:"
echo " -h, --help Display that help screen"
echo " -d, --delete Delete source file or directory after success"
echo " -f, --format Chose archive format in the given list. If several format are"
echo " given, the smalest is kept"
echo " -p, --parallel Number of threads to use (if allowed by underlying utility)"
echo " -v, --verbose Display progress where possible"
echo " -1, .., -9 Compression level to use [1=fast/big, 9=slow/small]"
echo
echo "Supported archive format:"
echo " Param.| programs | Algo. | Description"
echo " ------+---------------+-------+----------------------------------------"
echo " lz | plzip, lzip | lzma | Safe efficient default format"
echo " xz | xz | lzma2 | Unsafe, not for long term"
echo " bz2 | pbzip2, bzip2 | bzip2 | Historical but less efficient than lz"
echo " gz | pigz, gzip | lz77 | Historical, safe, fast"
echo " lzo | lzop | lzo | Very fast but no multithread"
echo " tar | tar | tar | No compression"
echo
return 0
;;
"-d"|"--delete")
local willrm=1
;;
"-f"?*|"--format"?*)
local compform=$(echo "$opt" | cut -f 2- -d '=')
;;
"-p"?*|"--parallel"?*)
local nproc=$(echo "$opt" | cut -f 2- -d '=')
;;
"-v"|"--verbose")
local verbose=1
;;
"-"[1..9])
local complevel=${opt:1:1}
;;
"-"*)
echo "Invalid option, use taz --help to display options list"
echo
return 1
;;
*)
local LIST="$LIST ${opt%/}"
;;
esac
done
[[ ! $compform ]] && compform=lz # safe and efficient (unless data are already compressed)
[[ ! $nproc ]] && nproc=1
[[ ! $complevel ]] && complevel=6
for item in $LIST; do
local donetar=0
echo "--- Processing $item..."
if [[ -d $item ]]; then
echo -ne "\t* Creating $item.tar... "
tar -cf $item{.tar,}
if [[ ! $? -eq 0 ]]; then
echo "[ failed, skipping ]"
continue
fi
local donetar=1
echo "[ OK ]"
fi
local fname=$item
[[ $donetar -gt 0 ]] && fname=$item.tar
# Skip compression part if tar is asked
if [[ $compform != "tar" ]]; then
echo -e "\t* Compressing archive..."
_do$compform $fname $nproc $complevel $verbose
[[ ! $? -eq 0 ]] && case $? in
127)
echo -e "\t*** Compression program unavailable, aborting."
return 127
;;
*)
echo -e "\t*** Compression program returned an error, not deleting anything if asked, skipping to next item."
continue
;;
esac
[[ $donetar -gt 0 ]] && rm $fname
fi
if [[ $willrm ]]; then
echo -en "\t* Deleting original source as asked... "
rm -r $item && echo '[ OK ]' || echo '[ failed ]'
fi
echo "--- Done"
done
}
export taz
# ------------------------------------------------------------------------------------------
# Display system genal information
# ------------------------------------------------------------------------------------------
showinfo() {
echo ""
figlet $(hostname) -t -k
echo ""
neofetch
}
export showinfo
# ------------------------------------------------------------------------------------------
# Save or restore Konsle session manually
# ------------------------------------------------------------------------------------------
ksession() {
# Configuration
local command=''
local savepath="${HOME}/.konsole/"
local savefile="$savepath/current-tabs"
# Restore if asked to
if [[ "$1" = "restore" ]]; then
echo "Restoring..."
konsole --tabs-from-file $savefile -e 'bash -c exit' &
elif [[ "$1" = "save" ]]; then
pid=$(pgrep konsole -u $USER)
if [[ $pid ]]; then
echo "# Most recent session list " $(date) > $savefile
for p in $pid; do
local sessions=$(qdbus org.kde.konsole-$p | grep /Sessions/)
if [[ $sessions ]] ; then
[[ ! -d $savepath ]] && mkdir $savepath
for i in $sessions; do
local format=$(qdbus org.kde.konsole-$p $i tabTitleFormat 0)
local processid=$(qdbus org.kde.konsole-$p $i processId)
local cwd=$(pwdx $processid | sed -e "s/^[0-9]*: //")
if [[ $(pgrep --parent $processid) ]] ; then
childpid=$(pgrep --parent $processid)
command=$(ps -p $childpid -o args=)
fi
echo "workdir: ${cwd};; title: ${format};; command:${command}" >> ${savefile}
command=''
done
fi
done
fi
else
echo "ksession: save and restore KDE's Konsole sessions"
echo
echo "Usage: ksession <save|restore>"
fi
}
export ksession
# ------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------
# **************************************** MAIN PROGRAM ************************************
# ------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------
# Former PS1, stopped for much better function
# Set the prompt look'n'feel
# NORMAL="\[\e[0m\]"
# RED="\[\e[1;31m\]"
# GREEN="\[\e[1;32m\]"
# PURPLE="\[\e[1;35m\]"
# BLUEONGREY="\[\e[0;34m\e[47m\]"
# if [[ $EUID == 0 ]] ; then
# export PS1="$BLUEONGREY[\t]$NORMAL $PURPLE\$?$NORMAL|$RED\u@\H:$NORMAL\w$RED\$ $NORMAL"
# else
# export PS1="$BLUEONGREY[\t]$NORMAL $PURPLE\$?$NORMAL|$GREEN\u@\H:$NORMAL\w$GREEN\$ $NORMAL"
# fi
# Build PATH environment variable
if [[ $EUID -eq 0 ]] ; then
pathappend /sbin:/usr/sbin
fi
[[ -d ~/.gem/ruby/2.3.0/bin ]] && pathappend ~/.gem/ruby/2.3.0/bin
[[ -d /share/services/gestparc ]] && pathappend /share/services/gestparc
# Set bash history
export HISTSIZE=10000
export HISTIGNORE="&:[bf]g:exit"
# Set default pager
export PAGER=less
# Execute optionnal config script if any
for script in ~/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
# Interactive shell detection, two methods available each one of those might have different result
# depending on distribution
#shopt -q login_shell && INTERACTIVE=1
[[ $- == *i* ]] && INTERACTIVE=1
if [[ $INTERACTIVE ]]; then
# For compiling (as we often compile with LFS/0linux...)
export MAKEFLAGS='-j4'
export PKGSOURCES='/share/src/archives'
#Aliases
alias ll='ls -laFh --color=auto'
alias la='ls -Ah --color=auto'
alias l='ls -CF --color=auto'
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias qfind="find . -name "
alias mkck='make check'
alias mkin='make install'
alias mkdin='make DESTDIR=$PWD/dest-install install'
alias ssh='ssh -x'
alias wget='wget -c' # resume mode by default
alias myip='curl ip.appspot.com'
# Human readable by default
alias df='df -H'
alias du='du -ch'
alias sdu='du -sk ./* | sort -n'
# Define PS1
trap 'timer_start' DEBUG
PROMPT_COMMAND='set_prompt'
# Set default language
setfr
showinfo
echo "Profile version $PROFVERSION chargé..."
fi
# Cleanup
unset pathremove pathprepend pathappend
#return 0
# End /etc/profile