|
|
|
@ -1,7 +1,7 @@
|
|
|
|
|
#!/bin/sh |
|
|
|
|
|
|
|
|
|
# Manages dotfiles and packages |
|
|
|
|
# Depends: GNU getopt, pacman-contrib |
|
|
|
|
# Depends: GNU getopt, (pacman, pacman-contrib) / (dpkg, apt) |
|
|
|
|
|
|
|
|
|
# User-config--------------------------- |
|
|
|
|
|
|
|
|
@ -71,6 +71,9 @@ EOF
|
|
|
|
|
# Exit if no option is provided |
|
|
|
|
[ "$#" -eq 0 ] && help >&2 && exit 1 |
|
|
|
|
|
|
|
|
|
# Files |
|
|
|
|
# -------------------------------------- |
|
|
|
|
|
|
|
|
|
setFiles() |
|
|
|
|
{ |
|
|
|
|
files="$(find . -type f -o -type l \ |
|
|
|
@ -153,40 +156,113 @@ push()
|
|
|
|
|
pullPush "push" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ! pacman -Qqs pacman-contrib > /dev/null; then \ |
|
|
|
|
echo 'Please install the "pacman-contrib" dependency before running this option.' >&2 |
|
|
|
|
# Packages |
|
|
|
|
# -------------------------------------- |
|
|
|
|
|
|
|
|
|
osDetect() |
|
|
|
|
{ |
|
|
|
|
id="$(sed -nE 's/^ID=(.*)/\1/p' /etc/os-release)" |
|
|
|
|
idLike="$(sed -nE 's/^ID_LIKE=(.*)/\1/p' /etc/os-release)" |
|
|
|
|
|
|
|
|
|
if [ "$id" = "arch" ]; then |
|
|
|
|
os="arch" |
|
|
|
|
elif echo "$idLike" | grep -q 'arch'; then |
|
|
|
|
os="arch" |
|
|
|
|
elif [ "$id" = "debian" ] || [ "$id" = "ubuntu" ]; then |
|
|
|
|
os="debian" |
|
|
|
|
elif echo "$idLike" | grep -q 'debian'; then |
|
|
|
|
os="debian" |
|
|
|
|
elif echo "$idLike" | grep -q 'ubuntu'; then |
|
|
|
|
os="debian" |
|
|
|
|
else |
|
|
|
|
echo "Unsupported operating system." >&2 |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
osDependencies() |
|
|
|
|
{ |
|
|
|
|
if [ "$os" = "arch" ]; then |
|
|
|
|
binaryDependencyPair=" |
|
|
|
|
pacman:pacman |
|
|
|
|
pactree:pacman-contrib |
|
|
|
|
" |
|
|
|
|
elif [ "$os" = "debian" ]; then |
|
|
|
|
binaryDependencyPair=" |
|
|
|
|
apt-cache:apt |
|
|
|
|
apt-mark:apt |
|
|
|
|
dpkg-query:dpkg |
|
|
|
|
" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
for pair in $binaryDependencyPair; do |
|
|
|
|
binary="$(echo "$pair" | cut -d ':' -f 1)" |
|
|
|
|
if ! command -v "$binary" > /dev/null; then |
|
|
|
|
dependency="$(echo "$pair" | cut -d ':' -f 2)" |
|
|
|
|
echo "Please install the '$dependency' dependency before running this option." >&2 |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
done |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
packageList() |
|
|
|
|
{ |
|
|
|
|
if [ "$os" = "arch" ]; then |
|
|
|
|
filterList="$( (pacman -Qqg base base-devel; pactree -u base | tail -n +2) | sort)" |
|
|
|
|
packageList="$(pacman -Qqe | grep -vx "$filterList" | sort)" |
|
|
|
|
|
|
|
|
|
if [ "$1" = "list" ] || [ "$1" = "" ]; then |
|
|
|
|
echo "$packageList" |
|
|
|
|
elif [ "$1" = "store" ]; then |
|
|
|
|
if [ ! -s $packageFile ]; then |
|
|
|
|
touch "$packageFile" |
|
|
|
|
else |
|
|
|
|
truncate -s 0 "$packageFile" |
|
|
|
|
elif [ "$os" = "debian" ]; then |
|
|
|
|
installedList="$(dpkg-query --show --showformat='${Package}\t${Priority}\n')" |
|
|
|
|
filterList="$(echo "$installedList" | grep -E 'required|important|standard' | cut -f 1)" |
|
|
|
|
installedList="$(echo "$installedList" | cut -f 1)" |
|
|
|
|
installedManuallyList="$(awk '/Commandline:.* install / && !/APT::/ { print $NF }' /var/log/apt/history.log)" |
|
|
|
|
installedManuallyList="$( (echo "$installedManuallyList"; apt-mark showmanual) | sort -u)" |
|
|
|
|
packageList="$(echo "$installedManuallyList" | grep -x "$installedList" | grep -vx "$filterList")" |
|
|
|
|
fi |
|
|
|
|
echo "$packageList" > "$packageFile" |
|
|
|
|
elif [ "$1" = "install" ] || [ "$1" = "install-aur" ]; then |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
packageInstall() |
|
|
|
|
{ |
|
|
|
|
if [ "$os" = "arch" ]; then |
|
|
|
|
# Grab everything off enabled official repositories that is in the list |
|
|
|
|
coreList="$(pacman -Ssq | grep -xf $packageFile)" |
|
|
|
|
repoList="$(pacman -Ssq | grep -xf $packageFile)" |
|
|
|
|
|
|
|
|
|
if [ "$1" = "install" ]; then |
|
|
|
|
# Install core packages, answer no to pacman questions (honor Ignore) |
|
|
|
|
yes n | sudo pacman -Sy --needed $coreList |
|
|
|
|
# Install packages |
|
|
|
|
echo "$repoList" | xargs --open-tty sudo pacman -Sy --needed |
|
|
|
|
fi |
|
|
|
|
if [ "$1" = "install-aur" ]; then |
|
|
|
|
# Determine which packages in the list are from the AUR |
|
|
|
|
aurList="$(grep -vx "$coreList" < $packageFile)" |
|
|
|
|
aurList="$(grep -vx "$repoList" < $packageFile)" |
|
|
|
|
|
|
|
|
|
# Install AUR packages |
|
|
|
|
"$aurHelper" -Sy --needed --noconfirm $aurList |
|
|
|
|
echo "$aurList" | xargs --open-tty "$aurHelper" -Sy --needed --noconfirm |
|
|
|
|
fi |
|
|
|
|
elif [ "$os" = "debian" ]; then |
|
|
|
|
# Grab everything off enabled official repositories that is in the list |
|
|
|
|
repoList="$(apt-cache search .* | cut -d ' ' -f 1 | grep -xf $packageFile)" |
|
|
|
|
|
|
|
|
|
# Install packages |
|
|
|
|
echo "$repoList" | xargs --open-tty sudo apt install |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
packages() |
|
|
|
|
{ |
|
|
|
|
# If unset |
|
|
|
|
if [ -z "$os" ]; then |
|
|
|
|
osDetect |
|
|
|
|
osDependencies |
|
|
|
|
packageList |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
if [ "$1" = "list" ] || [ "$1" = "" ]; then |
|
|
|
|
echo "$packageList" |
|
|
|
|
elif [ "$1" = "store" ]; then |
|
|
|
|
echo "$packageList" > "$packageFile" |
|
|
|
|
elif [ "$1" = "install" ]; then |
|
|
|
|
packageInstall "install" |
|
|
|
|
elif [ "$1" = "install-aur" ]; then |
|
|
|
|
packageInstall "install-aur" |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|