Compare commits

..

No commits in common. "ab0c36ff5f6ecc8de68a02991756a78937b27379" and "0460940582e59714a59a8ed623800b000b9ae445" have entirely different histories.

65 changed files with 616 additions and 99 deletions

View File

@ -10,7 +10,7 @@ function press_any_key {
}
function are_you_really_really_sure {
echo "Enter the following exactly to continue: $1"
echo "Enter the following to continue: $1"
read -p "> " DISCARD_ME
echo ""
if [ "$1" = "$DISCARD_ME" ]; then
@ -86,13 +86,13 @@ KBD_LAYOUT="de-latin1"
clear
echo "Select the USB stick to install to (NAME column below)...
"
# exclude loop devices and optical drives
lsblk --exclude 7,11 --nodeps --output NAME,SIZE,MODEL
# exclude loop devices
lsblk --exclude 7 --nodeps --output NAME,SIZE,MODEL
echo ""
read -p "> " TARGET_DISK
while [ ! -b "/dev/$TARGET_DISK" ]; do
lsblk --exclude 7,11 --nodeps --output NAME,SIZE,MODEL
lsblk --exclude 7 --nodeps --output NAME,SIZE,MODEL
echo "$TARGET_DISK is not a valid device!"
read -p "> " TARGET_DISK
done
@ -136,7 +136,7 @@ fi
echo -n "Wiping and partitioning storage... "
# new GPT
# 2M BIOS GRUB
# 66592 sectors ESP (first sector + 66591 sectors, the minimum to format FAT32 with default settings)
# 268M ESP
# everything else one big partition
echo "g
n
@ -146,7 +146,7 @@ n
n
+66591
+268M
n
@ -424,12 +424,6 @@ for I in ${!SECTIONS[@]}; do
for J in ${!OPTIONS[@]}; do
get_stage2_file "package_selections/${SECTIONS[$I]}/${OPTIONS[$J]}"
done
get_stage2_file "package_selections/${SECTIONS[$I]}/additional_files.lst"
readarray -t FILES < "$STAGE2_DIR/package_selections/${SECTIONS[$I]}/additional_files.lst"
for J in ${!FILES[@]}; do
get_stage2_file "package_selections/${SECTIONS[$I]}/${FILES[$J]}"
done
done
mv /mnt/target/etc/sv/agetty-tty1/conf /mnt/target/etc/sv/agetty-tty1/conf.bak >> $LOGFILE 2>&1

View File

@ -1,17 +1,24 @@
#!/usr/bin/env bash
#
# Kernel pre-install hook for Void-USB
# This script removes old kernels to save disk space.
# This script removes old kernels when disk space is low.
#
# Arguments: $1 package name, $2 kernel version
PKGNAME="$1"
VERSION="$2"
KEEP_OLD_KERNELS=3
MB_LOW=250
MB_FREE="$(df --block-size=1M --output=avail /boot | tail -n1)"
while [ "$(vkpurge list | wc -l)" -gt "$KEEP_OLD_KERNELS" ]; do
if [ "$MB_FREE" -lt "$MB_LOW" ]; then
echo
OLDEST_KERNEL="$(vkpurge list | sort | head -n1)"
echo "Removing old kernel $OLDEST_KERNEL using vkpurge..."
vkpurge rm "$OLDEST_KERNEL"
if [ -z "$OLDEST_KERNEL" ]; then
echo -e "\033[31m================================================\n\033[33mWARNING:\033[0m Failed to find an old kernel to remove.\nThe /boot partition is running out of space.\nThis will become an issue if left unaddressed.\n\033[31m================================================\033[0m"
else
echo "Removing old kernel $OLDEST_KERNEL using vkpurge..."
vkpurge rm "$OLDEST_KERNEL"
fi
done
else
echo "Not doing anything, /boot has plenty of space."
fi

View File

@ -1,6 +1,4 @@
TODO:
make sure that gufw works as intended
check for Nvidia Optimus support - or make it happen somehow
compare sizes of glibc and musl installations
need xdg menu maker?
adjust required USB stick and RAM size in README
@ -13,61 +11,34 @@ make our own or extract (if feasible) kb selection and time zone selection to hi
- potentially interesting packages
- ckbcomp
- kbd-data
vkpurge old stuff - only keep 2 vkpurgeable kernels
- change kernel pre-install hook
overview of the installation process at the start
overall progress indication (step x out of y)
exclude optical drives
add bash completion along the line somewhere
replace OpenBox with something lighter
allow unprivileged users to mount / unmount disks in GUI sessions
look into roxterm as an alternative terminal
add a zram swap option to package_selections
include arandr or something similar in fully featured desktop utils
deal with the entropy thing that runs after rc.shutdown
first run message in .xinitrc.d
- auto-removes itself
add firewall option to package_selections
first run message in xinitrc
- auto-disables itself
- displays README.txt on root dir of the F2FS partition
put a README.txt on root dir of F2FS partition
add online check to all the selections that need internet
sort out /etc/resolv.conf for the chroot
set keyboard layout for initramfs
package selections:
desktop
icewm-full
packages
-> audio applet
-> system monitor, file browser, image viewer, text editor, archive manager
-> GUI package manager? GUI update manager?
-> notification daemon?
post-install
add ultimate.bashrc
add backgrounds
modify bashrc to auto-start X if not already running
kick off scripts in .xinitrc.d from .xinitrc
exec icewm-session from .xinitrc
add to .xinitrc.d
choose random background
start pipewire, pipewire-pulse, wireplumber
start conky
start nm-applet, audio applet
display README
put README.txt with relevant information on root dir of F2FS partition
symlink to /home/README.txt
add a symlink ~/.local/bin/xterm that points to lxterminal
configure icewm
configure conky
icewm-lite
post-install
add ultimate.bashrc
modify bashrc to auto-start X if not already running
kick off scripts in .xinitrc.d from .xinitrc
exec icewm (not session) from .xinitrc
add to .xinitrc.d
start pipewire, pipewire-pulse, wireplumber
display README
put README.txt with relevant information on root dir of F2FS partition
symlink to /home/README.txt
configure icewm
none
post-install
add ultimate.bashrc
modify bashrc to display README
put README.txt with relevant information on root dir of F2FS partition
symlink to /home/README.txt
need some sort of notification handler?
when installing GUI also install elogind xdg-utils dbus-elogind dbus-elogind-libs dbus-elogind-x11
allow backgrounds only for icewm-fancy
when pre-configuring desktop
-> check if pipewire installed
-> add pipewire, pipewire-pulse, wireplumber
-> run IceWM directly if the lighter setup was selected
musl downsides:
- no nvidia drivers
@ -77,7 +48,7 @@ musl upsides:
Stage 1:
-> select kb layout
-> select installation type (x86_32/x86_64, glibc/musl)
-> select installation type (x86_32/x86_64/aarch64, glibc/musl)
-> configure time zone
-> selection dialog?
-> symlink /etc/localtime

View File

@ -0,0 +1 @@
Choose which audio packages to install

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="No audio"
PACKAGES=""
function post_install {
echo "audio/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,3 @@
pipewire
pipewire-slim
none

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Pipewire with GUI settings (Pavucontrol)"
PACKAGES="pipewire pavucontrol"
function post_install {
echo "audio/pipewire" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Pipewire with text-based settings (pulsemixer)"
PACKAGES="pipewire pulsemixer"
function post_install {
echo "audio/pipewire-slim" >> /tmp/stage-2-choices
}

View File

@ -1 +0,0 @@
resources/common_packages

View File

@ -0,0 +1,14 @@
function check {
[ "$INTERNET" = "down" ] && return 1
return 0
}
DESCRIPTION="BodgeMasters IceWM setup (recommended)"
XORG_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"
# TODO
PACKAGES="$XORG_PACKAGES icewm elogind"
function post_install {
echo "desktop/icewm-fancy" >> /tmp/stage-2-choices
}

View File

@ -1,13 +0,0 @@
function check {
[ "$INTERNET" = "down" ] && return 1
return 0
}
DESCRIPTION="Fully featured desktop with IceWM"
# TODO
PACKAGES="$(cat /opt/void-usb/installer/package_selections/desktop/resources/common_packages) pavucontrol network-manager-applet vlc lxterminal bash-completion gufw conky icewm firefox"
function post_install {
echo "desktop/icewm-light" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,14 @@
function check {
[ "$INTERNET" = "down" ] && return 1
return 0
}
DESCRIPTION="Lighter IceWM setup"
XORG_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"
# TODO
PACKAGES="$XORG_PACKAGES icewm elogind"
function post_install {
echo "desktop/icewm-light" >> /tmp/stage-2-choices
}

View File

@ -1,13 +0,0 @@
function check {
[ "$INTERNET" = "down" ] && return 1
return 0
}
DESCRIPTION="Small desktop with IceWM"
# TODO
PACKAGES="$(cat /opt/void-usb/installer/package_selections/desktop/resources/common_packages) pulsemixer xterm icewm firefox htop xfe"
function post_install {
echo "desktop/icewm-light" >> /tmp/stage-2-choices
}

View File

@ -2,7 +2,7 @@ function check {
return 0
}
DESCRIPTION="Leave the system as-is (no desktop)"
DESCRIPTION="No desktop - for advanced users that want to set things up themselves"
PACKAGES=""

View File

@ -0,0 +1,15 @@
function check {
[ "$INTERNET" = "down" ] && return 1
return 0
}
# TODO: more information for the user
DESCRIPTION="OpenBox window manager (even more lightweight???)"
XORG_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"
# TODO
PACKAGES="$XORG_PACKAGES xclock openbox elogind"
function post_install {
echo "desktop/openbox" >> /tmp/stage-2-choices
}

View File

@ -1,3 +1,4 @@
icewm-full
icewm-lite
icewm-fancy
icewm-light
openbox
none

View File

@ -1 +0,0 @@
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 elogind xdg-utils dbus-elogind dbus-elogind-libs dbus-elogind-x11 pipewire

View File

@ -0,0 +1,18 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="All of the above"
#TODO
PACKAGES=""
function post_install {
# TODO: configure desktop backgounds if using IceWM
echo "extras/all" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,18 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="All of the above except Minecraft"
#TODO
PACKAGES=""
function post_install {
# TODO: configure desktop backgounds if using IceWM
echo "extras/all-no-minecraft" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1 @@
Choose some extras to install

View File

@ -0,0 +1,19 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/icewm" /tmp/stage-2-choices >/dev/null 2>&1; then
return 0
else
return 1
fi
}
DESCRIPTION="Add some desktop backgrounds and randomly choose one on login"
PACKAGES=""
function post_install {
# TODO: install wget
# TODO: configure
# TODO: remove wget
echo "extras/desktop-backgrounds" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,17 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Prism Launcher for Minecraft"
#TODO: Java stuff
PACKAGES="PrismLauncher"
function post_install {
echo "extras/minecraft" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,18 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
#TODO
DESCRIPTION="??? (Minesweeper)"
#TODO
PACKAGES=""
function post_install {
echo "extras/minesweeper" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="None"
PACKAGES=""
function post_install {
echo "extras/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,7 @@
desktop-backgrounds
minesweeper
snake
minecraft
all-no-minecraft
all
none

View File

@ -0,0 +1,18 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
#TODO
DESCRIPTION="nSnake"
#TODO
PACKAGES="nSnake"
function post_install {
echo "extras/snake" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1 @@
Install a media player?

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="No"
PACKAGES=""
function post_install {
echo "multimedia/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,2 @@
vlc
none

View File

@ -0,0 +1,17 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Install VLC"
#TODO: fluidsynth MIDI stuff
PACKAGES="vlc"
function post_install {
echo "multimedia/vlc" >> /tmp/stage-2-choices
}

View File

@ -2,9 +2,8 @@ Do you want to install the proprietary Nvidia driver?
By default, Void Linux ships with the open-source nouveau driver.
This is nice because it gets the system up and running when using an
Nvidia GPU but, due to Nvidias secrecy, nouveau isnt particularly good.
Nvidia GPU but, due to Nvidias secrecy, it isnt particularly good.
Installing the proprietary driver is recommended if you want to use Nvidia GPUs.
This will enable the nonfree repository.
Different versions are available. You can only choose one.

View File

@ -9,6 +9,7 @@ function check {
DESCRIPTION="Latest Nvidia driver, supports GTX ??? series and up"
#TODO: optimus support?
#TODO: void-repo-nonfree
PACKAGES="nvidia"

View File

@ -9,6 +9,7 @@ function check {
DESCRIPTION="Legacy Nvidia driver, version 390, supports GTX ??? series"
#TODO: Optimus support?
#TODO: void-repo-nonfree
PACKAGES="nvidia390"

View File

@ -9,6 +9,7 @@ function check {
DESCRIPTION="Legacy Nvidia driver, version 470, supports GTX ??? series"
#TODO: optimus support?
#TODO: void-repo-nonfree
PACKAGES="nvidia470"

View File

@ -0,0 +1,14 @@
function check {
return 0
}
DESCRIPTION="Only add custom bashrc (advanced users)"
PACKAGES=""
function post_install {
#TODO: configure things
# (probably by barfing the bashrc using echo)
echo "pre-configure/bashrc" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1 @@
Do you want some quality-of-life configuration done?

View File

@ -0,0 +1,17 @@
function check {
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Auto-start GUI session on login and add custom bashrc (recommended)"
PACKAGES=""
function post_install {
#TODO: configure things
echo "pre-configure/gui-and-bashrc" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="No (advanced users)"
PACKAGES=""
function post_install {
echo "pre-configure/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,3 @@
gui-and-bashrc
bashrc
none

View File

@ -1,2 +1,10 @@
nvidia
desktop
audio
systray
terminal
utilities
pre-configure
web
multimedia
extras

View File

@ -0,0 +1 @@
Do you want to install system tray applets?

View File

@ -0,0 +1,21 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/icewm" /tmp/stage-2-choices >/dev/null 2>&1; then
if grep "audio/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 0
else
return 1
fi
else
return 1
fi
}
DESCRIPTION="Add tray icon for network"
#TODO
PACKAGES=""
function post_install {
echo "systray/network" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,21 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/icewm" /tmp/stage-2-choices >/dev/null 2>&1; then
if grep "audio/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
else
return 1
fi
}
DESCRIPTION="Add tray icon for network and audio"
#TODO
PACKAGES=""
function post_install {
echo "systray/network-and-audio" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="Dont install additional tray icons"
PACKAGES=""
function post_install {
echo "systray/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,3 @@
network-and-audio
network
none

View File

@ -0,0 +1 @@
Which GUI terminal emulator do you want to install?

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="LXDE Terminal (recommended)"
PACKAGES="lxterminal"
function post_install {
echo "terminal/lxterminal" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="None (advanced users only)"
PACKAGES="none"
function post_install {
echo "terminal/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,3 @@
lxterminal
xterm
none

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Xterm"
PACKAGES="xterm"
function post_install {
echo "terminal/xterm" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1 @@
Which set of desktop utilities do you want to install?

View File

@ -0,0 +1,18 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
#TODO
DESCRIPTION="Fully featured (list of things) (recommended)"
#TODO
PACKAGES=""
function post_install {
echo "utilities/desktop-integrated-guisysmon" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,18 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
#TODO
DESCRIPTION="Fully featured (list of things with htop)"
#TODO
PACKAGES=""
function post_install {
echo "utilities/desktop-integrated-htop" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="None"
PACKAGES=""
function post_install {
echo "utilities/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,5 @@
desktop-integrated-guisysmon
xfe-guisysmon
desktop-integrated-htop
xfe-htop
none

View File

@ -0,0 +1,18 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
#TODO
DESCRIPTION="Smaller set of desktop utilities (XFE + ???)"
#TODO
PACKAGES="xfe"
function post_install {
echo "utilities/xfe-guisysmon" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Smaller set of desktop utilities (XFE + Htop)"
PACKAGES="xfe htop"
function post_install {
echo "utilities/xfe-htop" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1 @@
Install a web browser?

View File

@ -0,0 +1,12 @@
function check {
[ "$INTERNET" = "down" ] && return 1
return 0
}
DESCRIPTION="Install ELinks (terminal-based browser)"
PACKAGES="elinks"
function post_install {
echo "web/elinks" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Join the dark side with Chromium (Consider Firefox... You can still install Chromium later.)"
PACKAGES="chromium"
function post_install {
echo "web/evil" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Install Firefox (recommended)"
PACKAGES="firefox"
function post_install {
echo "web/firefox" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,16 @@
function check {
[ "$INTERNET" = "down" ] && return 1
if grep "desktop/none" /tmp/stage-2-choices >/dev/null 2>&1; then
return 1
else
return 0
fi
}
DESCRIPTION="Install Firefox - Extended Support Release (ESR)"
PACKAGES="firefox-esr"
function post_install {
echo "web/firefox-esr" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,11 @@
function check {
return 0
}
DESCRIPTION="No web browser"
PACKAGES=""
function post_install {
echo "web/none" >> /tmp/stage-2-choices
}

View File

@ -0,0 +1,5 @@
firefox
firefox-esr
evil
elinks
none