TODO: compare sizes of glibc and musl installations try running multiple MC versions on musl (incl ThatModPack) need xdg menu maker? check if there are problems with GRUB’s --disk-module=native on real USB drives on real hardware test that the (RAM) boot option allows you to install to the stick the system booted off adjust required USB stick and RAM size in README musl downsides: - no nvidia drivers - may be janky in regards to running some Minecraft versions musl upsides: - ?? ideas: use shell script for init, call real init via exec system lives on squashfs -> overlayfs with tmpfs set up at boot -> new system image generated and written back on shutdown -> user-selectable ("Do you want to save changes to the system? This will take some time.") -> fstrim (if applicable) swap on zram f2fs for home when backing up - do not cross file system boundaries - exclude /tmp, package cache, logs - possibly only save the changes in separate squashfs images - either until it takes up too much space or until a certain number of images exist - consolidate when the user requests it or when exceeding the limit Steps to install: - (user does this:) boot Void installer -> log in as root -> connect to the internet -> download and run install script - preparations: -> update xbps -> install xmirror squashfs-tools -> make our own or extract (if feasible) kb selection and time zone selection to hijack them for our purposes - select kb layout - set up disk -> select disk from a list -> warn user about formatting and making the USB stick unusable with Windows -> allow user to double check that it’s the USB drive -> wipe and partition disk (new gpt) -> 2M BIOS GRUB -> 268M ESP -> 1G /boot -> rest /container -> format partitions -> ESP FAT32 -> /boot and /container F2FS - mount them things -> set up plain tmpfs as / for now - install base system -> select mirror -> just use xmirror and get the result from the file -> if musl repo, remove that bit from repo url -> select installation type (x86_32/x86_64/aarch64, glibc/musl) -> if musl, add that bit to repo url -> install packages -> linux bash shadow f2fs-tools dosfstools dbus NetworkManager iana-etc iw wpa_supplicant util-linux which tar man-pages iproute2 iputils wifi-firmware traceroute grep gzip file sed gawk less coreutils findutils diffutils pciutils usbutils tzdata base-files ncurses mdocml procps-ng kbd xbps sudo ethtool kmod eudev runit-void removed-packages nano acpid squashfs-tools grub grub-i386-efi grub-x86_64-efi -> configure XBPS mirror -> configure sudo -> drop a file with "%wheel ALL=(ALL:ALL) ALL" in /etc/sudoers.d/sudo_group -> configure overlayfs setup -> startup script -> shutdown squashfs updater -> rc.shutdown? -> configure fstab -> /boot, /boot/efi -> /home (bind mount) -> NOT /, /container -> configure rc.conf -> keyboard layout -> hardware clock set to UTC? -> configure time zone while we’re at it -> selection dialog? -> symlink /etc/localtime -> configure host name -> install and configure bootloader -> install GRUB for i386-pc, i386-efi, x86_64-efi -> --removable and --no-nvram for EFI -> --boot-directory set to /boot/loader to prevent grub-mkconfig kernel hook from running -> state as much in a text file in there -> add kernel hooks -> script to run /opt/void-usb/grub-config -> a script that updates vmlinu{z,x} and initramfs.img symlinks -> add symlinks for newly installed kernel -> guess best choice when removing the currently symlinked kernel -> ask whether to run vkpurge if disk space is low -> download grub-config and its resources and drop them in /opt/void-usb -> xbps-reconfigure -fa -> prepare 2nd stage installation -> auto login root -> put script in .bashrc -> build squashfs -> (if needed) set up an initramfs with busybox to mount the squashfs/overlayfs at boot time - prompt user to reboot to finish installation - second stage installation -> configure services -> dbus -> NetworkManager -> acpid -> ask user to connect to network using nmtui -> install packages -> setxkbmap xauth xorg-video-drivers mesa mesa-dri xorg-server elogind xorg-input-drivers xrandr acpilight xhost xinit xrdb xinput xgamma xset iceauth sessreg transset xcmsdb xkbutils xmodmap dejavu-fonts-ttf -> terminal? -> browser? -> prism launcher -> java (multiple versions?) -> pipewire (pulsemixer?) -> ask about nvidia driver -> install if needed -> find out when and where to set `nvidia-drm.modeset=1` -> ask whether to use CTWM or IceWM -> short description of up and downsides -> if CTWM, also install -> xclock -> if IceWM, also install -> network-manager-applet -> sound applet -> configure zram swap -> passwd -l root -> populate /etc/skel -> ultimate bashrc bc why not -> first run message in xinitrc -> auto-deletes itself -> displays README.txt on root dir of the F2FS partition -> if using CTWM -> put xclock in xinitrc -> configure more sane defaults -> prepend bashrc with a thing that checks of xorg is running -> if not, run startx and ask user whether to shut down, reboot, or do nothing afterwards -> set up user -> ask for username -> run useradd (non-interactively) -> run passwd (interactively) -> add to groups -> including sudo group -> build new squashfs image and reboot