mirror of
https://git.myvelabs.com/lab/archlinux.git
synced 2025-12-17 21:26:25 +00:00
670 lines
19 KiB
Text
670 lines
19 KiB
Text
|
|
#!/usr/bin/env bash
|
||
|
|
revision='0.1f (feb 24/25)'
|
||
|
|
set -a
|
||
|
|
set -E
|
||
|
|
|
||
|
|
# Exit function
|
||
|
|
trap '[ "${?}" -ne 77 ] || exit 77' ERR
|
||
|
|
function die
|
||
|
|
{
|
||
|
|
if [ ${@} ]
|
||
|
|
then
|
||
|
|
echo
|
||
|
|
echo -e "\e[1;31mError encountered for the following reason:\e[0m
|
||
|
|
|
||
|
|
\e[33m${@}\e[0m
|
||
|
|
|
||
|
|
\e[1;31mScript aborted...\e[0m"
|
||
|
|
echo
|
||
|
|
else
|
||
|
|
echo
|
||
|
|
echo -e '\e[1;31mError encountered, script aborted...\e[0m'
|
||
|
|
echo
|
||
|
|
fi
|
||
|
|
exit 77
|
||
|
|
}
|
||
|
|
|
||
|
|
# Internet connection check
|
||
|
|
if nc -z -w 1 archlinux.org 443 >/dev/null 2>&1 || nc -z -w 1 google.com 443 >/dev/null 2>&1
|
||
|
|
then
|
||
|
|
sudo timedatectl set-ntp true
|
||
|
|
else
|
||
|
|
die 'No internet connectivity detected, plug in an ethernet cable or run \e[32miwd-connect\e[33m if using wifi and try again'
|
||
|
|
fi
|
||
|
|
|
||
|
|
totalde=21
|
||
|
|
cat <<- menu
|
||
|
|
$(tput setaf 5 bold)
|
||
|
|
Select a desktop$(tput sgr0)
|
||
|
|
$(tput smul setaf 7 dim)# none$(tput sgr0)
|
||
|
|
0) none
|
||
|
|
$(tput smul setaf 7 dim)# wayland$(tput sgr0)
|
||
|
|
1) sway
|
||
|
|
2) hyprland
|
||
|
|
3) qtile-wayland
|
||
|
|
4) river
|
||
|
|
5) plasma-wayland
|
||
|
|
6) gnome-wayland
|
||
|
|
7) cosmic
|
||
|
|
$(tput smul setaf 7 dim)# x11$(tput sgr0)
|
||
|
|
8) qtile-x11
|
||
|
|
9) bspwm
|
||
|
|
10) awesome
|
||
|
|
11) i3
|
||
|
|
12) i3-plasma
|
||
|
|
13) plasma-x11
|
||
|
|
14) gnome-x11
|
||
|
|
15) xfce4
|
||
|
|
16) budgie
|
||
|
|
17) cinnamon
|
||
|
|
18) deepin
|
||
|
|
19) mate
|
||
|
|
20) pantheon
|
||
|
|
21) cutefish
|
||
|
|
22) lxde
|
||
|
|
23) lxqt
|
||
|
|
menu
|
||
|
|
if [ ${1} ]
|
||
|
|
then
|
||
|
|
desktop=${1}
|
||
|
|
else
|
||
|
|
desktop=-1
|
||
|
|
fi
|
||
|
|
until [[ ${desktop} -ge 0 && ${desktop} -le ${totalde} ]]
|
||
|
|
do
|
||
|
|
read -p '> ' desktop
|
||
|
|
[[ ${desktop} -ge 0 && ${desktop} -le ${totalde} ]] ||\
|
||
|
|
echo -e "\n\n\e[1;31mInvalid selection, type an option from 0 to ${totalde}\e[0m"
|
||
|
|
done
|
||
|
|
|
||
|
|
# Configure btrfs
|
||
|
|
if findmnt / | grep -w -q btrfs
|
||
|
|
then
|
||
|
|
desktop_packages+=(btrfs-progs)
|
||
|
|
if pacman -Q | grep -q "^grub"
|
||
|
|
then
|
||
|
|
desktop_packages+=(grub-btrfs inotify-tools)
|
||
|
|
systemd_services+=(grub-btrfsd.service)
|
||
|
|
fi
|
||
|
|
|
||
|
|
# echo -e '\n\e[1;35mConfiguring snapper\e[0m'
|
||
|
|
# sudo pacman --sync --ask 4 snapper snap-pac
|
||
|
|
# echo
|
||
|
|
# sudo umount /.snapshots /home/.snapshots
|
||
|
|
# sudo rm -r /.snapshots /home/.snapshots
|
||
|
|
# sudo snapper -c root create-config /
|
||
|
|
# sudo snapper -c home create-config /home
|
||
|
|
# sudo sed -i 's/TIMELINE_LIMIT_HOURLY="10"/TIMELINE_LIMIT_HOURLY="4"/' /etc/snapper/configs/root
|
||
|
|
# sudo sed -i 's/TIMELINE_LIMIT_DAILY="10"/TIMELINE_LIMIT_DAILY="7"/' /etc/snapper/configs/root
|
||
|
|
# sudo sed -i 's/TIMELINE_LIMIT_MONTHLY="10"/TIMELINE_LIMIT_MONTHLY="1"/' /etc/snapper/configs/root
|
||
|
|
# sudo sed -i 's/TIMELINE_LIMIT_YEARLY="10"/TIMELINE_LIMIT_YEARLY="0"/' /etc/snapper/configs/root
|
||
|
|
# sudo sed -i 's/TIMELINE_CREATE="yes"/TIMELINE_CREATE="no"/' /etc/snapper/configs/home
|
||
|
|
# sudo btrfs subvolume delete /.snapshots
|
||
|
|
# sudo btrfs subvolume delete /home/.snapshots
|
||
|
|
# sudo mkdir -p --mode=750 /.snapshots /home/.snapshots
|
||
|
|
# sudo mount -a
|
||
|
|
# sudo systemctl --quiet enable --now snapper-cleanup.timer snapper-timeline.timer
|
||
|
|
|
||
|
|
# # Create snapshots for fresh installation
|
||
|
|
# sudo snapper -c root create --description "fresh install"
|
||
|
|
# sudo snapper -c home create --description "fresh install"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Assign DE variables
|
||
|
|
case ${desktop} in
|
||
|
|
0)
|
||
|
|
# TTY only
|
||
|
|
desktop_choice=none
|
||
|
|
echo
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
systemd_user_services+=(wireplumber.service pipewire-pulse.service pipewire.service)
|
||
|
|
desktop_packages+=(ttf-dejavu pipewire pipewire-audio pipewire-pulse pipewire-jack wireplumber)
|
||
|
|
case ${desktop} in
|
||
|
|
[1-7])
|
||
|
|
# Wayland
|
||
|
|
desktop_packages+=(wayland)
|
||
|
|
case ${desktop} in
|
||
|
|
1)
|
||
|
|
desktop_choice=sway
|
||
|
|
desktop_packages+=(sway seatd swaylock swayidle swaybg bemenu bemenu-wayland i3status foot kate dolphin konsole kompare kcalc breeze-icons kde-cli-tools brightnessctl gnome-keyring fakeroot qt5-wayland polkit-kde-agent)
|
||
|
|
systemd_services+=(seatd.service)
|
||
|
|
;;
|
||
|
|
2)
|
||
|
|
desktop_choice=hyprland
|
||
|
|
desktop_packages+=(hyprland uwsm swaylock swayidle bemenu bemenu-wayland waybar foot kate dolphin konsole kompare kcalc breeze-icons kde-cli-tools ttf-font-awesome brightnessctl gnome-keyring fakeroot qt5-wayland polkit-kde-agent)
|
||
|
|
systemd_user_services+=(foot-server.service)
|
||
|
|
;;
|
||
|
|
3)
|
||
|
|
desktop_choice=qtile-wayland
|
||
|
|
desktop_packages+=(qtile python-pywlroots xorg-xwayland foot)
|
||
|
|
systemd_user_services+=(foot-server.service)
|
||
|
|
;;
|
||
|
|
4)
|
||
|
|
desktop_choice=river
|
||
|
|
desktop_packages+=(river foot)
|
||
|
|
systemd_user_services+=(foot-server.service)
|
||
|
|
;;
|
||
|
|
5)
|
||
|
|
desktop_choice=plasma-wayland
|
||
|
|
desktop_packages+=($(pacman -Sgq plasma | grep -v 'discover\|oxygen\|plasma-nm') konsole foot kate dolphin kompare kcalc)
|
||
|
|
systemd_services+=(sddm.service)
|
||
|
|
systemd_user_services+=(foot-server.service)
|
||
|
|
;;
|
||
|
|
6)
|
||
|
|
desktop_choice=gnome-wayland
|
||
|
|
desktop_packages+=(gnome foot)
|
||
|
|
systemd_services+=(gdm.service)
|
||
|
|
systemd_user_services+=(foot-server.service)
|
||
|
|
;;
|
||
|
|
7)
|
||
|
|
desktop_choice=cosmic
|
||
|
|
desktop_packages+=(cosmic)
|
||
|
|
systemd_services+=(cosmic-greeter.service)
|
||
|
|
if ls -l /dev/disk/* | grep -q 'VBOX\|virtio\|QEMU'
|
||
|
|
then
|
||
|
|
desktop_packages+=(vulkan-virtio)
|
||
|
|
elif lspci | grep VGA | grep -q NVIDIA
|
||
|
|
then
|
||
|
|
desktop_packages+=(nvidia-utils)
|
||
|
|
elif lscpu | grep 'Model name:' | grep -q AMD
|
||
|
|
then
|
||
|
|
desktop_packages+=(amdvlk)
|
||
|
|
elif lscpu | grep 'Model name:' | grep -q Intel
|
||
|
|
then
|
||
|
|
desktop_packages+=(vulkan-intel)
|
||
|
|
fi
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
# Environment
|
||
|
|
sudo tee -a /etc/environment >/dev/null <<- environment
|
||
|
|
QT_QPA_PLATFORM=wayland
|
||
|
|
environment
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
# Xorg
|
||
|
|
desktop_packages+=(xorg)
|
||
|
|
case ${desktop} in
|
||
|
|
8)
|
||
|
|
desktop_choice=qtile-x11
|
||
|
|
desktop_packages+=(qtile xorg-xinit konsole)
|
||
|
|
;;
|
||
|
|
9)
|
||
|
|
desktop_choice=bspwm
|
||
|
|
desktop_packages+=(bspwm sxhkd xorg-xinit polybar konsole)
|
||
|
|
;;
|
||
|
|
10)
|
||
|
|
desktop_choice=awesome
|
||
|
|
desktop_packages+=(awesome xorg-xinit konsole)
|
||
|
|
;;
|
||
|
|
11)
|
||
|
|
desktop_choice=i3
|
||
|
|
desktop_packages+=(i3-wm i3status i3lock dmenu lightdm lightdm-gtk-greeter pavucontrol konsole kate dolphin kompare breeze-icons)
|
||
|
|
systemd_services+=(lightdm.service)
|
||
|
|
;;
|
||
|
|
12)
|
||
|
|
desktop_choice=i3-plasma
|
||
|
|
desktop_packages+=($(pacman -Sgq plasma | grep -v 'discover\|oxygen\|plasma-nm') konsole kate dolphin kompare kcalc i3-wm i3status dmenu wmctrl feh)
|
||
|
|
systemd_services+=(sddm.service)
|
||
|
|
;;
|
||
|
|
13)
|
||
|
|
desktop_choice=plasma-x11
|
||
|
|
desktop_packages+=($(pacman -Sgq plasma | grep -v 'discover\|oxygen\|plasma-nm') konsole kate dolphin kompare kcalc)
|
||
|
|
systemd_services+=(sddm.service)
|
||
|
|
;;
|
||
|
|
14)
|
||
|
|
desktop_choice=gnome-x11
|
||
|
|
desktop_packages+=(gnome)
|
||
|
|
systemd_services+=(gdm.service)
|
||
|
|
;;
|
||
|
|
15)
|
||
|
|
desktop_choice=xfce4
|
||
|
|
desktop_packages+=(xfce4 lightdm lightdm-gtk-greeter)
|
||
|
|
systemd_services+=(lightdm.service)
|
||
|
|
;;
|
||
|
|
16)
|
||
|
|
desktop_choice=budgie
|
||
|
|
desktop_packages+=(budgie lightdm lightdm-gtk-greeter tilix)
|
||
|
|
systemd_services+=(lightdm.service)
|
||
|
|
;;
|
||
|
|
17)
|
||
|
|
desktop_choice=cinnamon
|
||
|
|
desktop_packages+=(cinnamon lightdm lightdm-gtk-greeter gnome-console)
|
||
|
|
systemd_services+=(lightdm.service)
|
||
|
|
;;
|
||
|
|
18)
|
||
|
|
desktop_choice=deepin
|
||
|
|
desktop_packages+=(deepin deepin-kwin $(pacman -Sgq deepin-extra | grep -v deepin-reader) lightdm lightdm-gtk-greeter gnome-keyring)
|
||
|
|
systemd_services+=(lightdm.service)
|
||
|
|
if uname -r | grep -q 'lts\|hardened\|zen'
|
||
|
|
then
|
||
|
|
desktop_packages+=(deepin-anything-dkms)
|
||
|
|
else
|
||
|
|
desktop_packages+=(deepin-anything-arch)
|
||
|
|
fi
|
||
|
|
;;
|
||
|
|
19)
|
||
|
|
desktop_choice=mate
|
||
|
|
desktop_packages+=(mate mate-extra lightdm lightdm-gtk-greeter)
|
||
|
|
systemd_services+=(lightdm.service)
|
||
|
|
;;
|
||
|
|
20)
|
||
|
|
desktop_choice=pantheon
|
||
|
|
desktop_packages+=(pantheon lightdm-pantheon-greeter lightdm)
|
||
|
|
systemd_services+=(lightdm.service)
|
||
|
|
;;
|
||
|
|
21)
|
||
|
|
desktop_choice=cutefish
|
||
|
|
desktop_packages+=(cutefish sddm)
|
||
|
|
systemd_services+=(sddm.service)
|
||
|
|
;;
|
||
|
|
22)
|
||
|
|
desktop_choice=lxde
|
||
|
|
desktop_packages+=(lxde lxdm)
|
||
|
|
systemd_services+=(lxdm.service)
|
||
|
|
;;
|
||
|
|
23)
|
||
|
|
desktop_choice=lxqt
|
||
|
|
desktop_packages+=(lxqt sddm breeze-icons)
|
||
|
|
systemd_services+=(sddm.service)
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
echo
|
||
|
|
echo -e "\t\e[1mYou have chosen \e[32m${desktop_choice}\e[0m\e[1m desktop\e[0m"
|
||
|
|
echo
|
||
|
|
echo -e '\e[1;35mInstalling base packages\e[0m'
|
||
|
|
sudo pacman --sync --ask 4 ${desktop_packages[@]} || die 'Failed to install required packages'
|
||
|
|
echo
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
case ${desktop_choice} in
|
||
|
|
plasma-wayland)
|
||
|
|
mkdir -p ~/.config/{autostart-scripts,foot}/
|
||
|
|
# install /dev/stdin ~/.config/autostart-scripts/foot.sh <<- foot
|
||
|
|
# #!/bin/sh
|
||
|
|
# foot --server
|
||
|
|
# foot
|
||
|
|
cat >>~/.config/kglobalshortcutsrc <<- shortcuts
|
||
|
|
|
||
|
|
[services][footclient.desktop]
|
||
|
|
_launch=Alt+Return
|
||
|
|
|
||
|
|
[services][org.kde.konsole.desktop]
|
||
|
|
_launch=none
|
||
|
|
shortcuts
|
||
|
|
;;
|
||
|
|
gnome-wayland)
|
||
|
|
mkdir -p ~/.config/{autostart,foot}/
|
||
|
|
# cat > ~/.config/autostart/foot-server.desktop <<- foot
|
||
|
|
# [Desktop Entry]
|
||
|
|
# Type=Application
|
||
|
|
# Name=Foot server
|
||
|
|
# Exec=foot --server
|
||
|
|
# foot
|
||
|
|
gsettings set $(gsettings list-schemas | grep terminal) exec footclient
|
||
|
|
;;
|
||
|
|
cosmic)
|
||
|
|
mkdir -p ~/.config/foot/
|
||
|
|
;;
|
||
|
|
i3|i3-plasma)
|
||
|
|
# i3-config
|
||
|
|
mkdir -p ~/.config/i3/
|
||
|
|
curl --fail -s -L https://raw.githubusercontent.com/i3/i3/next/etc/config | sed 's/exec i3-config-wizard/# &/' > ~/.config/i3/config
|
||
|
|
case ${desktop_choice} in
|
||
|
|
i3-plasma)
|
||
|
|
kwriteconfig6 --file startkderc --group General --key systemdBoot false
|
||
|
|
sudo install /dev/stdin /opt/local/bin/plasma-i3.sh <<- EOF
|
||
|
|
#!/usr/bin/env bash
|
||
|
|
export KDEWM=/usr/bin/i3
|
||
|
|
/usr/bin/startplasma-x11
|
||
|
|
EOF
|
||
|
|
sudo tee /usr/share/xsessions/plasma-i3.desktop >/dev/null <<- EOF
|
||
|
|
[Desktop Entry]
|
||
|
|
Type=XSession
|
||
|
|
Exec=/opt/local/bin/plasma-i3.sh
|
||
|
|
DesktopNames=KDE
|
||
|
|
Name=Plasma (i3)
|
||
|
|
Comment=KDE Plasma with i3 as the WM
|
||
|
|
EOF
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
if ls -l /dev/disk/* | grep -q 'VBOX\|virtio\|QEMU'
|
||
|
|
then
|
||
|
|
cat >> ~/.config/i3/config <<- 'i3'
|
||
|
|
|
||
|
|
exec xrandr --output $(xrandr -q | grep -w 'connected primary' | awk '{print $1}') --mode 1920x1080
|
||
|
|
exec xrandr --dpi 192
|
||
|
|
|
||
|
|
exec spice-vdagent
|
||
|
|
exec VBoxClient-all
|
||
|
|
i3
|
||
|
|
fi
|
||
|
|
;;
|
||
|
|
qtile-x11)
|
||
|
|
echo 'exec qtile start' >~/.xinitrc
|
||
|
|
cat >> ~/.bash_profile <<- 'autostart'
|
||
|
|
|
||
|
|
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]
|
||
|
|
then
|
||
|
|
exec startx
|
||
|
|
fi
|
||
|
|
autostart
|
||
|
|
;;
|
||
|
|
qtile-wayland)
|
||
|
|
mkdir -p ~/.config/foot/
|
||
|
|
cat >> ~/.bash_profile <<- 'autostart'
|
||
|
|
|
||
|
|
# Start sway on login from tty
|
||
|
|
if [ -z "${WAYLAND_DISPLAY}" ] && [ "${XDG_VTNR}" = 1 ]
|
||
|
|
then
|
||
|
|
exec qtile start -b wayland
|
||
|
|
fi
|
||
|
|
autostart
|
||
|
|
;;
|
||
|
|
river)
|
||
|
|
mkdir -p ~/.config/foot/
|
||
|
|
cat >> ~/.bash_profile <<- 'autostart'
|
||
|
|
|
||
|
|
# Start sway on login from tty
|
||
|
|
if [ -z "${WAYLAND_DISPLAY}" ] && [ "${XDG_VTNR}" = 1 ]
|
||
|
|
then
|
||
|
|
exec river
|
||
|
|
fi
|
||
|
|
autostart
|
||
|
|
;;
|
||
|
|
bspwm)
|
||
|
|
cat >> ~/.bash_profile <<- 'autostart'
|
||
|
|
|
||
|
|
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]
|
||
|
|
then
|
||
|
|
exec startx /usr/bin/bspwm
|
||
|
|
fi
|
||
|
|
autostart
|
||
|
|
mkdir -p ~/.config/{bspwm,sxhkd,polybar}/
|
||
|
|
install -Dm755 /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/bspwmrc
|
||
|
|
install -Dm644 /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkd/sxhkdrc
|
||
|
|
cp /etc/polybar/config.ini ~/.config/polybar/
|
||
|
|
;;
|
||
|
|
awesome)
|
||
|
|
cat >> ~/.bash_profile <<- 'autostart'
|
||
|
|
|
||
|
|
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]
|
||
|
|
then
|
||
|
|
exec startx /usr/bin/awesome
|
||
|
|
fi
|
||
|
|
autostart
|
||
|
|
mkdir -p ~/.config/awesome/
|
||
|
|
sed -e '/^terminal =/c terminal = "konsole"' \
|
||
|
|
-e '/^modkey =/c modkey = "Mod1"' /etc/xdg/awesome/rc.lua > ~/.config/awesome/
|
||
|
|
;;
|
||
|
|
sway)
|
||
|
|
# Sway
|
||
|
|
sudo gpasswd -a ${USER} seat >/dev/null
|
||
|
|
|
||
|
|
# Dolphin default apps
|
||
|
|
mkdir -p ~/.config/menus/
|
||
|
|
curl --fail -s -L https://raw.githubusercontent.com/KDE/plasma-workspace/master/menu/desktop/plasma-applications.menu -o ~/.config/menus/applications.menu
|
||
|
|
kbuildsycoca6 >/dev/null 2>&1
|
||
|
|
|
||
|
|
# Dolphin default terminal
|
||
|
|
cat >> ~/.config/kdeglobals <<- foot
|
||
|
|
[General]
|
||
|
|
TerminalApplication=footclient
|
||
|
|
foot
|
||
|
|
|
||
|
|
# Create conf directories
|
||
|
|
mkdir -p ~/.config/{sway/config.d,foot}/
|
||
|
|
|
||
|
|
# Identify conf locations
|
||
|
|
cat > ~/.config/sway/config <<- 'config'
|
||
|
|
include /etc/sway/config.d/*
|
||
|
|
include ~/.config/sway/config.d/*
|
||
|
|
config
|
||
|
|
|
||
|
|
# Default sway config
|
||
|
|
sed -e 's/mod Mod4/mod Mod1/' \
|
||
|
|
-e 's/term foot/&client/' \
|
||
|
|
-e '/set $menu/c set $menu bemenu-run -p "" --no-overlap --tb "#285577" --hb "#285577" --tf "#eeeeee" --hf "#eeeeee" --nf "#bbbbbb"' \
|
||
|
|
/etc/sway/config > ~/.config/sway/config.d/00-config
|
||
|
|
sed -n "/^# Status Bar:$/q;p" -i ~/.config/sway/config.d/00-config
|
||
|
|
|
||
|
|
# Sway config
|
||
|
|
cat > ~/.config/sway/config.d/zz-sway <<- 'config'
|
||
|
|
# Disable xwayland
|
||
|
|
xwayland disable
|
||
|
|
|
||
|
|
# Start foot terminal server
|
||
|
|
exec foot --server
|
||
|
|
|
||
|
|
# Use i3status
|
||
|
|
bar {
|
||
|
|
status_command i3status
|
||
|
|
}
|
||
|
|
|
||
|
|
# Floating windows
|
||
|
|
for_window [window_role="About"] floating enable
|
||
|
|
for_window [window_role="Organizer"] floating enable
|
||
|
|
for_window [window_role="Preferences"] floating enable
|
||
|
|
for_window [window_role="bubble"] floating enable
|
||
|
|
for_window [window_role="page-info"] floating enable
|
||
|
|
for_window [window_role="pop-up"] floating enable
|
||
|
|
for_window [window_role="task_dialog"] floating enable
|
||
|
|
for_window [window_role="toolbox"] floating enable
|
||
|
|
for_window [window_role="webconsole"] floating enable
|
||
|
|
for_window [window_type="dialog"] floating enable
|
||
|
|
for_window [window_type="menu"] floating enable
|
||
|
|
|
||
|
|
# Floating for KCalc
|
||
|
|
for_window [title="KCalc"] floating enable
|
||
|
|
|
||
|
|
# Bind keys for brightness
|
||
|
|
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
|
||
|
|
bindsym XF86MonBrightnessUp exec brightnessctl set 5%+
|
||
|
|
|
||
|
|
# Mouse and keyboard defaults
|
||
|
|
input type:keyboard xkb_numlock enabled
|
||
|
|
input type:touchpad {
|
||
|
|
tap enabled
|
||
|
|
natural_scroll enabled
|
||
|
|
}
|
||
|
|
config
|
||
|
|
|
||
|
|
# Display config
|
||
|
|
cat > ~/.config/sway/config.d/zz-display <<- 'display'
|
||
|
|
# # Declare output
|
||
|
|
# set $laptop eDP-1 (swaymsg -t get_outputs)
|
||
|
|
|
||
|
|
# Swayidle
|
||
|
|
exec swayidle -w \
|
||
|
|
timeout 300 'swaylock -e -f -c 000000' \
|
||
|
|
timeout 315 'swaymsg "output * power off"' \
|
||
|
|
resume 'swaymsg "output * power on"' \
|
||
|
|
timeout 600 'systemctl suspend' \
|
||
|
|
before-sleep 'swaylock -e -f -c 000000'
|
||
|
|
|
||
|
|
# Laptop lid switches
|
||
|
|
bindswitch --reload --locked lid:on output * disable
|
||
|
|
bindswitch --reload --locked lid:off output * enable
|
||
|
|
|
||
|
|
# Swaylock
|
||
|
|
bindsym Mod4+l exec swaylock -e -f -c 000000
|
||
|
|
|
||
|
|
# Solid black background
|
||
|
|
output * bg #000000 solid_color
|
||
|
|
|
||
|
|
# Prevent swayidle when a window is in fullscreen
|
||
|
|
for_window [class=".*"] inhibit_idle fullscreen
|
||
|
|
for_window [app_id=".*"] inhibit_idle fullscreen
|
||
|
|
display
|
||
|
|
|
||
|
|
# Polkit
|
||
|
|
cat > ~/.config/sway/config.d/zz-polkit <<- 'polkit'
|
||
|
|
exec "/usr/lib/polkit-kde-authentication-agent-1"
|
||
|
|
polkit
|
||
|
|
|
||
|
|
# Monitor
|
||
|
|
if ls -l /dev/disk/* | grep -q 'VBOX\|virtio\|QEMU'
|
||
|
|
then
|
||
|
|
cat > ~/.config/sway/config.d/zz-virtualmonitor <<- 'monitor'
|
||
|
|
# Virtual monitor
|
||
|
|
output Virtual-1 {
|
||
|
|
pos 0,0
|
||
|
|
mode 1920x1080@60Hz
|
||
|
|
scale 1.25
|
||
|
|
}
|
||
|
|
monitor
|
||
|
|
fi
|
||
|
|
|
||
|
|
# TTY sway autostart
|
||
|
|
cat >> ~/.bash_profile <<- 'sway'
|
||
|
|
|
||
|
|
# Start sway on login from tty
|
||
|
|
if [ -z "${WAYLAND_DISPLAY}" ] && [ "${XDG_VTNR}" = 1 ]
|
||
|
|
then
|
||
|
|
exec sway
|
||
|
|
fi
|
||
|
|
sway
|
||
|
|
;;
|
||
|
|
hyprland)
|
||
|
|
# Hyprland
|
||
|
|
mkdir -p ~/.config/{menus,hypr/scripts,foot,waybar}/
|
||
|
|
|
||
|
|
# Dolphin default apps
|
||
|
|
curl --fail -s -L https://raw.githubusercontent.com/KDE/plasma-workspace/master/menu/desktop/plasma-applications.menu -o ~/.config/menus/applications.menu
|
||
|
|
kbuildsycoca6 >/dev/null 2>&1
|
||
|
|
|
||
|
|
# Dolphin default terminal
|
||
|
|
cat >> ~/.config/kdeglobals <<- foot
|
||
|
|
[General]
|
||
|
|
TerminalApplication=footclient
|
||
|
|
foot
|
||
|
|
|
||
|
|
# Swayidle
|
||
|
|
install /dev/stdin ~/.config/hypr/scripts/sleep.sh <<- 'swayidle'
|
||
|
|
swayidle -w timeout 300 'swaylock -f -c 000000' \
|
||
|
|
timeout 600 'systemctl suspend' \
|
||
|
|
before-sleep 'swaylock -f -c 000000' &
|
||
|
|
swayidle
|
||
|
|
|
||
|
|
# Config
|
||
|
|
curl --silent --fail https://raw.githubusercontent.com/hyprwm/Hyprland/refs/heads/main/example/hyprland.conf |\
|
||
|
|
sed -e '/Autostart/i exec-once = /usr/lib/polkit-kde-authentication-agent-1' \
|
||
|
|
-e '/Autostart/i exec-once = waybar -c ~/.config/waybar/waybar.conf' \
|
||
|
|
-e '/Autostart/i exec-once = ~/.config/hypr/scripts/sleep.sh' \
|
||
|
|
-e '/^$terminal =/c $terminal = footclient' \
|
||
|
|
-e '/gaps_in =/c gaps_in = 0' \
|
||
|
|
-e '/gaps_out =/c gaps_out = 0' \
|
||
|
|
-e '/^$menu =/c $menu = bemenu-run -p "" --no-overlap --tb "##285577" --hb "##285577" --tf "##eeeeee" --hf "##eeeeee" --nf "##bbbbbb"' \
|
||
|
|
-e 's/bind = $mainMod, R, exec, $menu/bind = $mainMod, D, exec, $menu/' \
|
||
|
|
-e 's/bind = $mainMod, Q, exec, $terminal/bind = $mainMod, RETURN, exec, $terminal/' \
|
||
|
|
-e 's/bind = $mainMod, C, killactive/bind = $mainMod SHIFT, Q, killactive/' \
|
||
|
|
-e '/$mainMod =/c $mainMod = ALT' \
|
||
|
|
-e '/RETURN/a bind = SUPER, L, exec, swaylock -e -f -c 000000' \
|
||
|
|
> ~/.config/hypr/hyprland.conf
|
||
|
|
# -e '/Autostart/i exec-once = uwsm app -- foot --server' \
|
||
|
|
|
||
|
|
# QEMU monitor
|
||
|
|
if ls -l /dev/disk/* | grep -q 'VBOX\|virtio\|QEMU'
|
||
|
|
then
|
||
|
|
sed -i "/^monitor/c monitor = $(hyprctl monitors all | grep "^Monitor" | awk '{print $2}'), 1920x1080@60, 0x0, 1.5" ~/.config/hypr/hyprland.conf
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Waybar
|
||
|
|
sed -e 's|sway/workspaces|sway/workspaces|g' \
|
||
|
|
-e 's|sway/mode|hyprland/submap|g' \
|
||
|
|
-e '/position/ s|//||' \
|
||
|
|
/etc/xdg/waybar/config.jsonc > ~/.config/waybar/waybar.conf
|
||
|
|
|
||
|
|
# TTY sway autostart
|
||
|
|
cat >> ~/.bash_profile <<- 'hyprland'
|
||
|
|
|
||
|
|
# Start sway on login from tty
|
||
|
|
if uwsm check may-start
|
||
|
|
then
|
||
|
|
exec uwsm start hyprland.desktop
|
||
|
|
fi
|
||
|
|
hyprland
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
# Foot terminal config (/etc/xdg/foot/foot.ini)
|
||
|
|
if [ -d ~/.config/foot/ ]
|
||
|
|
then
|
||
|
|
cat > ~/.config/foot/foot.ini <<- 'foot'
|
||
|
|
[main]
|
||
|
|
include=/usr/share/foot/themes/kitty
|
||
|
|
font=Source Code Pro:size=12
|
||
|
|
workers=32
|
||
|
|
|
||
|
|
[scrollback]
|
||
|
|
# lines=1000
|
||
|
|
foot
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Add user to shared folder group if in virtualbox guest
|
||
|
|
if ls -l /dev/disk/* | grep -q VBOX
|
||
|
|
then
|
||
|
|
sudo gpasswd -a ${USER} vboxsf >/dev/null
|
||
|
|
echo
|
||
|
|
fi
|
||
|
|
|
||
|
|
# iwd status function
|
||
|
|
if pacman -Q | grep -w -q iwd
|
||
|
|
then
|
||
|
|
cat > ~/.local/functions/iwd-status <<- iwd
|
||
|
|
#!/usr/bin/env bash
|
||
|
|
# iwd connection status
|
||
|
|
function iwd-status
|
||
|
|
{
|
||
|
|
iwctl station "$(iwctl station list | grep connected | awk '{print $(NF-1)}')" show
|
||
|
|
}
|
||
|
|
|
||
|
|
alias iwctl='iwctl station $(iwctl station list | grep connected | awk '{print $(NF-1)}')'
|
||
|
|
iwd
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ "${desktop_choice}" == "none" ]]
|
||
|
|
then
|
||
|
|
sudo rm -f ${0}
|
||
|
|
echo -e '\e[1;34mSetup complete, press any key to continue\e[5m...\e[0m\n'
|
||
|
|
read -n 1 -s -p ''
|
||
|
|
elif ls /usr/share/*sessions | grep -q desktop
|
||
|
|
then
|
||
|
|
install /dev/stdin ~/.local/bin/startup <<- 'EOF'
|
||
|
|
#!/usr/bin/env bash
|
||
|
|
|
||
|
|
# Internet connection check
|
||
|
|
if nc -z -w 1 archlinux.org 443 >/dev/null 2>&1 || nc -z -w 1 google.com 443 >/dev/null 2>&1
|
||
|
|
then
|
||
|
|
vim ~/.local/bin/startupscript
|
||
|
|
~/.local/bin/startupscript
|
||
|
|
rm -f ${0}
|
||
|
|
exit 0
|
||
|
|
else
|
||
|
|
echo -e '\n\e[31mNo internet connectivity detected'
|
||
|
|
echo -e 'Connect to a network and try again'
|
||
|
|
echo -e 'Aborting installer...\e[0m\n'
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
EOF
|
||
|
|
|
||
|
|
install /dev/stdin ~/.local/bin/startupscript <<- EOF
|
||
|
|
$(curl --fail --silent https://git.myvelabs.com/lab/archlinux/raw/branch/master/functions/startup)
|
||
|
|
EOF
|
||
|
|
sudo rm -f ${0}
|
||
|
|
echo -e '\e[1;34mDesktop installed, press any key to load '${desktop_choice}'\e[5m...\e[0m'
|
||
|
|
read -n 1 -s -p ''
|
||
|
|
echo
|
||
|
|
else
|
||
|
|
die 'Something does not feel right'
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Systemd services
|
||
|
|
for service in ${systemd_user_services[@]}
|
||
|
|
do
|
||
|
|
systemctl --quiet --user enable --now ${service}
|
||
|
|
done
|
||
|
|
sudo systemctl --quiet enable --now ${systemd_services[@]}
|