reupload
This commit is contained in:
106
arch-root/install.sh
Executable file
106
arch-root/install.sh
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cd "$(dirname "$(readlink -f -- "$0")")/_install"
|
||||
|
||||
PACKAGES=(
|
||||
|
||||
# system
|
||||
linux base linux-firmware lvm2 sudo polkit # base
|
||||
pulseaudio pulseaudio-bluetooth bluez bluez-utils networkmanager udisks2 # device management
|
||||
openssh man-db restic htop # admin utils
|
||||
|
||||
# generic runtime
|
||||
nodejs dash
|
||||
|
||||
# cli programs
|
||||
vifm vim less # navigation & editors
|
||||
shellcheck # shell scripting
|
||||
hugo miniserve neomutt translate-shell # www
|
||||
gnupg pass pass-otp # crypt
|
||||
jq libqalculate imagemagick # data processing
|
||||
git zip # others
|
||||
|
||||
# desktop env
|
||||
greetd sway swaybg swayidle # basic
|
||||
foot bemenu-wayland i3blocks mako libnotify # terminals, ui
|
||||
wev wl-clipboard wtype slurp grim # interaction
|
||||
ttf-roboto ttf-roboto-mono ttf-font-awesome # fonts
|
||||
|
||||
# gui apps
|
||||
imv mpv gimp # media
|
||||
qutebrowser qt6-wayland # www
|
||||
sqlitebrowser qt5-wayland # db
|
||||
|
||||
# extensions
|
||||
vim-ale vim-fugitive
|
||||
|
||||
# not so good
|
||||
telegram-desktop libreoffice-still
|
||||
|
||||
)
|
||||
|
||||
install() {
|
||||
pacman -S --needed --noconfirm "$@"
|
||||
}
|
||||
file_has_line() {
|
||||
grep -qxF "$2" "$1" || echo "$2" >> "$1"
|
||||
}
|
||||
cp_chown() {
|
||||
cp -rf "$1" "$2"
|
||||
chown "$3" "$2" -R
|
||||
chmod "$4" "$2" -R
|
||||
}
|
||||
|
||||
[ "$(id -u)" != "0" ] && echo "ERROR: root required" >&2 && exit 1
|
||||
|
||||
pacman -Syu --noconfirm
|
||||
install "${PACKAGES[@]}"
|
||||
|
||||
file_has_line "/etc/profile" "umask 002"
|
||||
find /etc/pam.d -type f -exec sed -i -e 's/^session optional pam_umask.so$/session optional pam_umask.so usergroups/g' {} \;
|
||||
|
||||
# device management
|
||||
sed -i 's/#AutoEnable=true/AutoEnable=false/' /etc/bluetooth/main.conf
|
||||
systemctl enable bluetooth --now
|
||||
|
||||
while read -r entity; do
|
||||
# group <name> <id>
|
||||
# user <name> <id> [<secondary groups>...]
|
||||
read -ra entity_parts <<< "$entity"
|
||||
etype="${entity_parts[0]}"
|
||||
ename="${entity_parts[1]}"
|
||||
eid="${entity_parts[2]}"
|
||||
[ "$etype" != "user" ] && [ "$etype" != "group" ] && echo "ERROR: bad entity type" >&2 && exit 1
|
||||
|
||||
# every user has their own primary group with id matching uid,
|
||||
# so for each entry we need a usergroup
|
||||
if [ -z "$(getent group "$eid")" ]; then
|
||||
echo "Creating group \"$ename\", id=$eid"
|
||||
groupadd --gid "$eid" "$ename"
|
||||
fi
|
||||
if [ "$etype" = "user" ]; then
|
||||
if ! id "$eid" >/dev/null 2>&1; then
|
||||
echo "Creating user \"$ename\", id=$eid"
|
||||
useradd --gid "$eid" --uid "$eid" -m "$ename"
|
||||
fi
|
||||
usermod -aG "$(IFS=,; echo "${entity_parts[*]:3}")" "$ename"
|
||||
else # group
|
||||
if [[ "$ename" == share-* ]]; then
|
||||
echo "Creating shared dir $ename"
|
||||
mkdir -p "/home/$ename"
|
||||
chgrp "$ename" -R "/home/$ename"
|
||||
chmod u=rwX,g=rwX,o= -R "/home/$ename"
|
||||
find "/home/$ename" -type d -print0 | xargs -0 chmod g+s
|
||||
|
||||
fi
|
||||
fi
|
||||
done </root/users.conf
|
||||
|
||||
cp_chown greetd.toml /etc/greetd/config.toml root:root 644
|
||||
|
||||
custom_script="./custom/$(cat /etc/hostname).sh"
|
||||
if [ -f "$custom_script" ]; then
|
||||
echo "Executing host-specific $custom_script"
|
||||
# shellcheck disable=SC1090
|
||||
source "$custom_script"
|
||||
fi
|
||||
Reference in New Issue
Block a user