Void Linux Post-Installation Script for Wayland

June 19, 2025 · View on GitHub

#!/bin/sh

Void Linux Post-Installation Script for Wayland

Author: Speyll

Last-update: 20-03-2025

Enable debugging output and exit on error

set -x

Add multilib and nonfree repositories

sudo xbps-install -Sy void-repo-nonfree

Update package lists and upgrade existing packages

sudo xbps-install -Syu

Install GPU drivers

install_gpu_driver() { gpu_driver="" case "(lspcigrepEVGA3D)"inIntel)gpudriver="mesadriintelvideoaccelvulkanloadermesavulkanintel";;AMD)gpudriver="mesadrimesavaapimesavdpauvulkanloadermesavulkanradeon";;NVIDIA)gpudriver="mesadrinvidianvidialibs32bit";;esacforpkgin(lspci | grep -E 'VGA|3D')" in *Intel*) gpu_driver="mesa-dri intel-video-accel vulkan-loader mesa-vulkan-intel" ;; *AMD*) gpu_driver="mesa-dri mesa-vaapi mesa-vdpau vulkan-loader mesa-vulkan-radeon" ;; *NVIDIA*)gpu_driver="mesa-dri nvidia nvidia-libs-32bit" ;; esac for pkg in gpu_driver; do [ -n "pkg" ] && sudo xbps-install -y "pkg" done }

install_gpu_driver

Install CPU microcode updates

if lspci | grep -q 'Intel'; then sudo xbps-install -y intel-ucode sudo xbps-reconfigure -f linux-$(uname -r) fi

Install other packages

install_core_packages() { for pkg in git tmux wayland dbus dbus-glib curl elogind polkit polkit-gnome chrony
xdg-utils xdg-desktop-portal-gtk xdg-desktop-portal-gnome xdg-desktop-portal-wlr xdg-desktop-portal
pipewire gstreamer1-pipewire libspa-bluetooth rtkit pavucontrol wlr-randr
noto-fonts-emoji noto-fonts-cjk-sans noto-fonts-ttf nerd-fonts-symbols-ttf
grim slurp wl-clipboard cliphist wvkbd
swayimg imv swaybg mpv mpvpaper ffmpeg yt-dlp
fnott libnotify
yazi unzip p7zip unrar xz pcmanfm-qt ffmpegthumbnailer webp-pixbuf-loader tumbler lxqt-archiver gvfs-smb gvfs-afc gvfs-mtp udisks2
flavours breeze-gtk breeze-snow-cursor-theme breeze-icons
qt5-wayland bluez
labwc neovim foot Waybar wlsunset fuzzel brightnessctl bash-completion; do sudo xbps-install -y "pkg"echo"Failedtoinstallpkg" || echo "Failed to install pkg" done }

install_networking_packages() { for pkg in fuse-sshfs lynx rsync wireguard; do sudo xbps-install -y "$pkg" done }

install_flatpak_packages() { sudo xbps-install -y flatpak flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak install flathub io.gitlab.librewolf-community flatpak install flathub com.github.tchx84.Flatseal flatpak install org.gtk.Gtk3theme.Adwaita-dark

System scope

sudo flatpak override --system
--filesystem=xdg-config/gtk-3.0:ro
--filesystem=xdg-config/gtk-4.0:ro
--filesystem=xdg-data/icons:ro
--filesystem=~/.local/share/themes
--filesystem=xdg-data/themes:ro

User scope

flatpak override --user
--device=dri
--env=ICON_THEME=Kaela-Kovalskia-v2
--env=GTK_THEME=Adwaita-dark
--env=GNOME_THEME=prefer-dark
--env=_JAVA_OPTIONS=-Dawt.useSystemAAFontSettings=on
--filesystem=/.icons:ro
--filesystem=xdg-config/fontconfig:ro
--filesystem=
/.local/share/icons:ro }

install_flatpak_gaming() { flatpak install flathub com.usebottles.bottles flatpak install flathub org.freedesktop.Platform.VulkanLayer.MangoHud flatpak install flathub org.freedesktop.Platform.VulkanLayer.gamescope flatpak install flathub com.valvesoftware.Steam.CompatibilityTool.Proton-GE flatpak install flathub com.obsproject.Studio.Plugin.OBSVkCapture flatpak install flathub org.freedesktop.Platform.VulkanLayer.OBSVkCapture }

install_gaming_packages() { for pkg in void-repo-multilib-nonfree
libgcc-32bit libstdc++-32bit libdrm-32bit libglvnd-32bit wine wine-mono gamemode MangoHud gamescope; do sudo xbps-install -y "pkg"donesudousermodaGgamemodepkg" done sudo usermod -aG gamemode USER }

!IMPORTANT! here you can select what gets installed and what not by commenting

install_core_packages install_networking_packages install_flatpak_packages #install_flatpak_gaming #install_gaming_packages

Set up PipeWire

sudo ln -s /usr/share/applications/pipewire.desktop /etc/xdg/autostart/pipewire.desktop sudo mkdir -p /etc/alsa/conf.d sudo ln -s /usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d sudo ln -s /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d

Set up bluetooth autostart

sudo ln -s /etc/sv/bluetoothd /var/service/

Set up chrony

sudo ln -s /etc/sv/chronyd /var/service/

Set up polkitd

sudo ln -s /etc/sv/polkitd /var/service/

Set up rtkit

sudo ln -s /etc/sv/rtkit /var/service/

Remove unused services (TTYs)

for tty in 3 4 5 6; do sudo rm -rf /var/service/agetty-tty"$tty" done

Set up ACPI

sudo ln -s /etc/sv/acpid/ /var/service/ sudo sv enable acpid sudo sv start acpid

Improve font rendering

for conf in 11-lcdfilter-default.conf 10-sub-pixel-rgb.conf 10-hinting-slight.conf; do sudo ln -s /etc/fonts/conf.avail/"$conf" /etc/fonts/conf.d done

Set up NetworkManager

sudo xbps-install -Sy NetworkManager dbus if sudo sv status wpa_supplicant >/dev/null 2>&1; then sudo sv stop wpa_supplicant fi

sudo rm -rf /var/services/wpa_supplicant 2>/dev/null sudo ln -s /etc/sv/dbus /var/service sudo ln -s /etc/sv/NetworkManager /var/service sudo sv start NetworkManager

Clone and set up dotfiles

git clone https://github.com/speyll/dotfiles "HOME/dotfiles"cpr"HOME/dotfiles" cp -r "HOME/dotfiles/."* "HOME/"rmrf"HOME/" rm -rf "HOME/dotfiles"

chmod -R +X "HOME/.local/bin""HOME/.local/bin" "HOME/.local/share/applications" "HOME/.config/autostart/" # Adjust permissions ln -s "HOME/.config/mimeapps.list" "HOME/.local/share/applications/" # Create symbolic link for mimeapps.list dash "HOME/.local/share/fonts/git-fonts.sh" # Run the font installation script dash "$HOME/.local/share/icons/git-cursors.sh" # Run the cursors installation script

Add user to wheel group for sudo access

echo "%sudo ALL=(ALL:ALL) NOPASSWD: /usr/bin/halt, /usr/bin/poweroff, /usr/bin/reboot, /usr/bin/shutdown, /usr/bin/zzz, /usr/bin/ZZZ" | sudo tee -a /etc/sudoers.d/wheel