void-desktop/void-desktop-install.md

28 KiB

A Void Linux install

This install is based on the EFI boot stub blog entry of Matthias Totschnig, the Void Handbook and the Void Linux man pages. This guide focuses on a Void Linux x86_64 glibc/musl install on uefi. In this install gummiboot is used as bootloader and the root partition will be encrypted.

Provisioning

First off the drive should be partitioned, possibly with fdisk. It should have atleast two partitions with one EFI System Partition and one Linux filesystem partition.

It should look something like this:

Number of partition Size Type
1 1 to 2 GB or more EFI System
2 Rest of the drive Linux filesystem

Then to create the filesystem of the efi partition.

# mkfs.fat -F 32 -n efi /dev/<disk1>

And the encrypted filesystem of the root partition.

# cryptsetup luksFormat /dev/<disk2> --type luks2 --label luks
# cryptsetup open --type luks /dev/<disk2> root
# mkfs.ext4 -L root /dev/mapper/root

Other filesystems can also be used but ext4 is the standard for most linux distobutions.

Installation

To install the Void Linux distribution on the system, the encrypted partition and the efi partition have to be mounted to the main system.

# mount /dev/mapper/root /mnt
# mkdir /mnt/boot
# mount /dev/<disk1> /mnt/boot
# for dir in dev proc sys run; do
> mkdir /mnt/$dir
> mount --rbind --make-rslave /$dir /mnt/$dir
> done

The "base-system" needs to be installed to the mounted drive. For this installation there is also other packages which are needed like NetworkManager, gummiboot and cryptsetup.

  • For glibc:
# xbps-install -Sy -R https://repo-default.voidlinux.org/current -r /mnt base-system cryptsetup gummiboot vim apparmor NetworkManager git
  • For musl:
# xbps-install -Sy -R https://repo-default.voidlinux.org/current/musl -r /mnt base-system cryptsetup gummiboot vim apparmor NetworkManager git

To get internet inside the chroot whilst installing the system, copy over the resolv.conf.

# cp /etc/resolv.conf /mnt/etc/

Entering the chroot and configuring the system.

# chroot /mnt
# chown root:root /
# chmod 755 /
# passwd root
# echo <hostname> > /etc/hostname

Adding the uuid of the root partition to crypttab, by first creating /etc/crypttab:

# touch /etc/crypttab

Then the uuid can be obtained by:

# lsblk -f |grep luks >> /etc/crypttab

Now edit /etc/crypttab and insert:

root /dev/disk/by-uuid/<uuid> none:

We can configure the fstab by editing /etc/fstab and inserting:

tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0
/dev/disk/by-label/root / ext4 defaults,noatime 0 1
/dev/disk/by-label/efi /boot vfat defaults 0 2

Create /etc/dracut.conf.d/30.conf to configure dracut.

hostonly="yes"
use_fstab="yes"
install_items+=" /etc/crypttab "
add_drivers+=" vfat nls_cp437 nls_iso8859_1 "

Create a symbolic link from /etc/fstab.sys to /etc/fstab to indicate that dracut should mount all the file systems listed.

# ln -s /etc/fstab /etc/fstab.sys

Then, to omit mounting them again in runit stage 1, disable the corresponding core service.

# mv /etc/runit/core-services/03-filesystems.sh{,.bak}

Edit /etc/xbps.d/xbps.conf to prevent the service from being added back by an update to runit-void.

noextract=/etc/runit/core-services/03-filesystems.sh

Now mount efivarfs to /sys/firmware/efi/efivars.

# mount -t efivarfs efivarfs /sys/firmware/efi/efivars

And install gummiboot.

# gummiboot install

Create /boot/loader/void-options.conf to configure gummiboot.

# touch /boot/loader/void-options.conf

The uuid is needed again and can be obtained by:

# lsblk -f |grep luks >> /boot/loader/void-options.conf

Now edit /boot/loader/void-options.conf and insert:

rw rd.luks.name=<uuid>=root root=/dev/mapper/root quiet splash apparmor=1 security=apparmor loglevel=1

To obtain a boot menu. A timeout may be added to /boot/loader/loader.conf.

timeout 4

If running glibc the locales have to be configured, to configure the locales edit /etc/default/libc-locales and uncomment.

en_US.UTF-8 UTF-8

And reconfigure the locales.

 # xbps-reconfigure -f glibc-locales

To obtain better security, apparmor will be set to enforce. By editing /etc/default/apparmor and inserting:

APPARMOR=enforce

To set the internal network edit /etc/hosts and insert.

127.0.1.1 <hostname>

Finally reconfigure Linux.

# xbps-reconfigure -f linux<version>

Exit the chroot.

# exit

Do not forget to umount. (I always do).

# umount -Rf /mnt

And reboot.

# shutdown -r now

Post install

In the post install section the installation and configuration of certain applications are elaborated. With the use of the config-files in this repository.

To obtain these config-files the void-desktop repository may be cloned with the git command.

$ git clone https://git.bijl.us/luc/void-desktop.git

Network

NetworkManager will be used as Network daemon due to its versatility. The package was already installed with the installation, thereby it only needs to be symlinked to /var/service to function.

# ln -s /etc/sv/NetworkManager /var/service

NetworkManager needs the dbus daemon to function, in general most other applications that will be discussed in the Post install section need dbus. To symlink dbus to /var/service:

# ln -s /etc/sv/dbus /var/service

Then, NetworkManager may be configured to enhance the security of the system. This is especially useful for laptops etc. To do this edit /etc/NetworkManager/NetworkManager.conf.

[device-mac-randomization]
wifi.scan-rand-mac-address=yes
[connection-mac-randomization]
ethernet.cloned-mac-address=random
wifi.cloned-mac-address=random

Users

A user should be added to improve security of the system.

# useradd <user>

Configure a password for the user:

# passwd <user>

The user may be added to certain groups, to give it some rights.

# usermod -aG wheel,audio,video,kvm,tty,input,storage <user>

The package sudo that is present in the base-system package will be removed. Since, it is bloatware. To persist this. That is sudo will not be installed ever again on the system. Edit /etc/xbps.d/xbps.conf and insert:

ignorepkg=sudo

Then remove sudo.

# xbps-remove -y sudo

The sudo package will be replaced by opendoas. To install it:

# xbps-install -Sy opendoas 

Symlink it to /bin/sudo so that applications which require root can still be granted by the user.

# ln -s /bin/doas /bin/sudo

And edit /etc/doas.conf to give users in the wheel group access to the doas command.

permit persist :wheel as root

To finalize this section, the .bashrc and .bash_profile configuration files will be copied to the home space of the user.

$ cp void-desktop/config-files/bash/.bashrc .bashrc
$ cp void-desktop/config-files/bash/.bash_profile .bash_profile

User directories

It is generally beneficial to set default user directories. To obtain some consistency in the home directory. This may be obtained with the xdg-user-dirs package.

It may be installed with.

# xbps-install -Sy xdg-user-dirs

then run:

$ xdg-user-dirs-update

This will create a whole suite of default user directories and in .config it will create user-dirs.dirs and user-dirs.locale.

With .config/user-dirs.dirs the syntax of of the directories may be set.

$ cp void-desktop/config-files/xdg-user-dirs/user-dirs.dirs .config/

Then to persist the modifications.

$ xdg-user-dirs-update

Linux-lts

It might be desirable to install an LTS kernel for better stability. This can be done by:

# xbps-install -Sy linux-lts linux-lts-headers

To uninstall the non-lts kernel, ignore the package through /etc/xbps.d/xbps.conf by adding:

ignorepkg=linux

And then removing the linux meta package and its dependecies:

# xbps-remove -Ry linux

Localtime

A "Network Time Protocol Daemon" (nptd for short) can sync the system clock with internet standard time servers. The chrony daemon is used as ntpd. Install it by:

# xbps-install -Sy chrony

Then to active its service:

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

To configure the timezone edit the /etc/rc.conf file.

HARDWARECLOCK="localtime"

And symlink the correct timezone to /etc/localtime:

# ln -sf /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime

Using Swap

Swap can be utilised by the system to free up space in RAM. For most use cases it is recommend to create a swapfile that is one and a half times the size of your RAM.

To create a swapfile of 8 GB use:

# dd if=/dev/zero of=/swapfile bs=8M count=1024 status=progress

To create a different size of swapfile, change the count= amount to a desirable size.

Then to actually add the swap space to your system issue these commands:

# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile

To mount the swap to the system at boot, add the swapfile to your /etc/fstab:

/swapfile none swap defaults 0 0

And do not forget to reconfigure the kernel after updating/etc/fstab:

# xbps-reconfigure -f linux<version>

Network filesystems

Network filesystems may be used for enhanced workflow between multiple devices and persistance of storage.

Samba

Samba is such a Network filesystem protocol that may be used between different platforms. To use it install.

# xbps-install -Sy cifs-utils

Next, a credentials file will be created that is, $HOME/.smbpasswd. Edit the file and insert:

username=<username>
password=<password>
domain=<domain>

Concerning security considerations, the permissions may be enhanced.

# chmod 600 $HOME/.smbpasswd

Then edit /etc/fstab and insert:

//<domain>/<homefolder> $HOME/<smbfolder> cifs credentials=$HOME/.smbpasswd,_netdev,uid=<uid> 0 0

Finally mount the network filesystem.

# mount -a

Logging

Logging may be benificial to spot certain misbehaviours or errors in the system. The socklog-void package will be used as logging daemon.

# xbps-install -Sy socklog-void
# ln -s /etc/sv/socklog-unix /var/service/
# ln -s /etc/sv/nanoklogd /var/service/

To read the logs use:

# svlogtail

Or go to /var/log/socklog.

Repositories

To install the official Void Linux 32-bit and nonfree repositories simply install their respective packages:

  • For glibc
# xbps-install -Sy void-repo-multilib void-repo-nonfree void-repo-multilib-nonfree
  • For musl
# xbps-install -Sy void-repo-nonfree

And update the repositories:

# xbps-install -S

There is also our unnofficial extra repository for some additional packages and some packages which are needed for the graphical installation. To use those add them to /etc/xbps.d/00-repository-ample.conf,

  • For glibc:
repository=https://git.bijl.us/lnco/xbps-ample/raw/branch/main/current
repository=https://git.bijl.us/lnco/xbps-ample/raw/branch/main/current/nonfree
  • For musl
repository=https://git.bijl.us/lnco/xbps-ample/raw/branch/main/current/musl

And refresh the repositories:

# xbps-install -S

Firmware and drivers

GPU drivers

It is necessary for a graphical enviroment to install GPU drivers. To install the drivers for your GPU use one of the following commands:

  • For Intel
# xbps-install -Sy linux-firmware-intel mesa mesa-dri vulkan-loader mesa-vulkan-intel intel-video-accel 
  • For AMD
# xbps-install -Sy linux-firmware-amd vulkan-loader mesa-vulkan-radeon amdvlk xf86-video-amdgpu mesa-vaapi mesa-vdpau mesa-dri
  • For Nvidia (glibc only)
# xbps-install -Sy nvidia nvidia-opencl
32-bit drivers

(Only applicable to glibc as Void Linux musl only supports 64-bit)

To run 32-bit applications like some videogames it will also be necessary to install the 32-bit drivers:

  • For Intel
# xbps-install -Sy mesa-32bit mesa-dri-32bit mesa-vulkan-intel-32bit vulkan-loader-32bit
  • For AMD
# xbps-install -Sy vulkan-loader-32bit amdvlk-32bit mesa-32bit mesa-dri-32bit
  • For Nvidia
# xbps-install -Sy nvidia-libs-32bit

CPU firmware

To keep the firmware of your CPU up to date it is necessary to install the correct microcode:

  • For Intel

(The Intel microcode requires that you are using the nonfree repository)

# xbps-install -Sy intel-ucode

And regenerate the initramfs:

# xbps-reconfigure -f linux<version>
  • For AMD
# xbps-install -Sy linux-firmware-amd

Secure-boot

Secure boot is sometimes a necessity when working with a windows dual boot on laptops.

Linux Windows dual boot

To obtain secure boot for a device with both linux and windows partitions (dual boot), the sbctl package will be used. It may be installed with.

# xbps-install -Sy sbctl

Then to create keys, enroll them and sign the executables with it.

# sbctl create-keys
# sbctl enroll-keys --microsoft
# sbctl sign -s /boot/EFI/Boot/BOOTX64.EFI
# sbctl sign -s /boot/EFI/gummiboot/gummibootx64.efi
# sbctl sign -s /boot/vmlinuz-<version>

Then to check if it worked.

# sbctl verify

After every linux kernel update the new executables should be signed.

Laptop-management

To obtain enhanced battery lifespan, tlp and tlpui may be installed. The tlpui application may be used to monitor the general configuration of tlp.

# xbps-install -Sy tlp tlpui

Edit /etc/tlp.d/00-template.conf to set the battery usage to a more conservative setting.

CPU_ENERGY_PERF_POLICY_ON_AC=performance
CPU_ENERGY_PERF_POLICY_ON_BAT=power

The tlp service needs to be activated and also the acpid deamon is a necessity regarding obtaining all laptop functionality. Such as, brightness control, suspend when closing the lid etc.

# ln -s /etc/sv/tlp /var/service
# ln -s /etc/sv/acpid /var/service

Bluetooth

Bluetooth functionality may be obtained by enabling bluetoothd. Its packages may be installed by:

# xbps-install bluez bluez-alsa libspa-bluetooth

Then, bluetoothd may be enabled by symlinking it to /var/service/.

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

If it is the case that bluetooth is not constantly used. It may be generally disabled by:

# touch /var/service/bluetoothd/down

To be able to use bluetooth the user needs to be in the bluetooth group.

# usermod -aG bluetooth <user>

Graphical session

Session manager

To use a graphical enviroment it is necessary to start a seat and session manager. For a minimal install it is recommended to use seatd, turnstile and polkit. To install those run:

# xbps-install -Sy seatd turnstile polkit

Then to enable them:

# ln -s /etc/sv/seatd /var/service
# ln -s /etc/sv/turnstiled /var/service

To be able to use seatd it is necessary that the user is added to the _seatd group.

# usermod -aG _seatd <user>

For turnstile to function configure /etc/pam.d/system-login by adding the line:

session optional pam_turnstile.so

Make sure turnstile also creates a Runtime Directory by enabling it in /etc/turnstile/turnstiled.conf.

manage_rundir = yes

Login manager

To make it easier to log into the system, set up a login manager. For a minimal and wayland-compatible login manager use greetd with gtkgreet. Install them with:

# xbps-install -Sy greetd gtkgreet-git

Because Wayfire gets used as window manager for this install, that also means that it can be utilised as the login greeter.

A specific wayfire bash script for greetd may be created in /usr/local/bin. That exports all the essential environment variables for the login session.

# cp -r void-desktop/config-files/wayfire/wayfire-greetd /usr/local/bin/

Also, a wayfire config may be created specific for greetd with minimal settings.

# cp -r void-desktop/config-files/wayfire/wayfire-greetd.ini /etc/greetd/config/

Then, in /etc/greetd/config.toml set:

command = "wayfire-greetd -c /etc/greetd/config/wayfire-greetd.ini"

The user _greeter needs seatd permission for wayfire to function.

# usermod -aG _seatd _greeter

For styling of gtkgreet edit /etc/greetd/config/gtkgreet.css:

# cp -r void-desktop/config-files/gtkgreet/gtkgreet.css /etc/greetd/config/

Finally add wayfire-run and possibly bash to /etc/greetd/environments.

wayfire-run
bash

Additionally kanshi and wlogout may be added in the greeter session.

# cp -r void-desktop/config-files/kanshi /etc/greetd/config
# cp -r void-desktop/config-files/wlogout /etc/greetd/config

Window manager

There are many different window managers and desktop environments which can provide a decent experience. Wayfire is a functional, relatively lightweight and good looking wayland window manager and will be used for this install.

To install a barebones Wayfire use:

# xbps-install -Sy wayfire

To be able to configure Wayfire and have a gtk theme install:

# xbps-install -Sy wf-shell wcm dconf-editor plata-theme papirus-icon-theme

Wayfire can be configured by editing .config/wayfire.ini.

$ cp void-desktop/config-files/wayfire/wayfire.ini .config/

To use the gtk theme. Configure it with dconf-editor under org.gnome.desktop.interface.gtk-theme and for icons under org.gnome.desktop.interface.icon-theme. If these directories do not exist, than that possibly means that a gtk application has not yet ran on the system.

A custom bash script may be created in /usr/local/bin. That exports all the essential environment variables for the session.

# cp -r void-desktop/config-files/wayfire/wayfire-run /usr/local/bin/

Display configuration

To configure the displays of the systems it's necessary to either configure them through .config/wayfire.ini or use an external application like kanshi.

To install kanshi:

# xbps-install -Sy kanshi

To actually change the display settings edit the .config/kanshi/config according to it's manpage. It should look something like:

profile <profile_name> {
    output "<display_1>" mode<horizontal_resolution>x<vertical_resolution>@<display_frequency> position <x_coordinate>,<y_coordinate>
    output "<display_2>" mode<horizontal_resolution>x<vertical_resolution>@<display_frequency> position <x_coordinate>,<y_coordinate>
}

And make sure kanshi gets started by Wayfire by adding it to auto start.

[autostart]
outputs = kanshi

Color-temperature adjustment

For changing the day/night gamma install wlsunset.

# xbps-install -Sy wlsunset

Add it to Wayfire by auto starting it through:

[autostart]
gamma = wlsunset -l <latitude> -L <longitude> -t <color-temperature>

Change the latitude, longitude and color-temperature according to your location and preference.

Taskbar

For the taskbar it is recommended to use Waybar since it's wayland native and has enough functionality. Furthermore network manager applet will be used to display network status and to easily configure network settings.

To install both, in combination with some necessary fonts.

# xbps-install -Sy Waybar network-manager-applet fonts-roboto-ttf font-awesome

Waybar may be configured by editing .config/waybar/config.

$ cp -r void-desktop/config-files/waybar .config/

Also make sure that Waybar and network-manager-applet are started by Wayfire.

[autostart]
bar = waybar
network = sleep 5; nm-applet --indicator

Application launcher

An application launcher may be used to easily start applications in Wayfire.

Tofi

For a fast and lightweight application launcher it's recommended to use tofi which starts in a few miliseconds if configured correctly. To install it:

# xbps-install -Sy tofi

Tofi can be configured by editing .config/tofi/config.

cp -r void-desktop/config-files/tofi .config/

To launch tofi through a keybind it has to be bound in .config/wayfire.ini.

[command]
binding_launcher = <super> KEY_S
command_launcher = tofi-drun | xargs /bin/bash -c -- & exit

Wofi

Although the wofi package is no longer maintained and is generally less optimised compared to tofi it does have some important features that tofi does not have. Such as, a better positioning protocol.

To install the wofi package.

# xbps-install -Sy wofi

Wofi may be configured by editing .config/wofi/config.

$ cp -r void-desktop/config-files/wofi .config/

Wofi may be launched with a keybind, thereby edit .config/wayfire.ini.

[command]
binding_launcher = <super> KEY_S
command_launcher = wofi --show drun

Wlogout

Wlogout may be used as a specific launcher for power management options. Such as, reboot, suspend and to power off the system.

To install the wlogout package.

# xbps-install -Sy wlogout

Wlogout can be configured by editing .config/wlogout/layout.

$ cp -r void-desktop/config-files/wlogout .config/
# cp void-desktop/data/wlogout-icons/* /usr/share/wlogout/icons/

Wlogout can be launched with a keybind, thereby edit .config/wayfire.ini.

[command]
binding_wlogout = <super> KEY_P
command_wlogout = wlogout

Wlogout needs permission to shutdown the system. This permission can be given by creating /etc/polkit-1/rules.d/00-power-management.rules and inserting.

polkit.addRule(function(action, subject) 
{
	if (action.id == "org.freedesktop.policykit.exec" && action.lookup("program") == "/bin/shutdown" && subject.isInGroup("wheel"))
		return polkit.Result.YES;
});

polkit.addRule(function(action, subject)
{
	if (action.id == "org.freedesktop.policykit.exec" && action.lookup("program") == "/bin/zzz" && subject.isInGroup("wheel"))
		return polkit.Result.YES;
});

or

# cp void-desktop/config-files/polkit/00-power-management.rules /etc/polkit-1/rules.d/

Notifications

SwayNC

For a more robust notification deamon it's recommended to use SwayNotificationCenter which also provides a notifications center which can be heavily customised.

To install SwayNC:

# xbps-install -Sy swaync

SwayNC's functionality and looks can be edited through .config/swaync/config.json and .config/swaync/style.css .....

$ cp -r void-desktop/config-files/swaync .config/

To use SwayNC make sure it gets started by Wayfire and to be able to toggle it's notification center also bind it in .config/wayfire.ini.

[autostart]
notifications = swaync

[command]
binding_swaync = <super> KEY_TAB
command_swaync = swaync-client -t -sw

Waybar can also be configured to display an icon for when there are unread notifications. In .config/waybar/config add:

----------------------------------------------------------------

Mako

For a very minimal notification deamon it's recommended to use Mako. It can be used to display notifications from the session-bus.

To install it.

# xbps-install -Sy mako

Mako may be configured by editing .config/mako/config.

$ cp -r void-desktop/config-files/mako .config/

Mako needs to be started by Wayfire in .config/wayfire.ini.

[autostart]
notifications = mako

Audio

To obtain audio the pipewire server will be used with an alsa-pipewire plugin in combination with wireplumber as session manager.

They may be installed with:

# xbps-install -Sy alsa-pipewire pipewire wireplumber

Subsequently copy /usr/share/pipewire/pipewire.conf to /etc/pipewire/.

# cp /usr/share/pipewire/pipewire.conf /etc/pipewire/

/etc/pipewire/pipewire.conf may be configured by inserting:

context.exec = [
    { path = "/usr/bin/wireplumber" args = "" }
    { path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf"}
]

Then /etc/alsa/conf.d may be created and pipewire configurations may be symlinked:

# ln -s /usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d/
# ln -s /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/

Pipewire needs to be started by Wayfire.

[autostart]
audio = pipewire

Audio control

To obtain some control over the audio pavucontrol, pamixer and pa-notify may be installed.

# xbps-install -Sy pavucontrol pamixer pa-notify

Volume control bindings may be set with pamixer in .config/wayfire.ini.

[command]
binding_volumeup = KEY_VOLUMEUP
binding_volumedown = KEY_VOLUMEDOWN 
binding_mute = KEY_MUTE
command_volumeup = pamixer -i 5 -u
command_volumedown = pamixer -d 5 -u
command_mute = pamixer -t

To be notified when changing the volume pa-notify may be used. It needs to be started by Wayfire.

[autostart]
audio_notify = sleep 1; pa-notify -t 2

Music control

To control music and other media playerctl may be used.

# xbps-install -Sy playerctl

The bindings may be set in .config/wayfire.ini.

[autostart]
audio_player = playerctld daemon

[command]
binding_playpause = KEY_PLAYPAUSE
binding_next = KEY_NEXTSONG
binding_previous = KEY_PREVIOUSSONG
command_playpause = playerctl play-pause
command_next = playerctl next
command_previous = playerctl previous

Screenshots

To be able to make screenshots on the system the packages grim, slurp and wl-clipboard will need to be installed.

# xbps-install -Sy grim slurp wl-clipboard

And bind them in .config/wayfire.ini.

[command]
binding_screenshot = KEY_SYSRQ
binding_screenshot_interactive = <ctrl> <super> KEY_S
command_screenshot = grim - | wl-copy -t image/png
command_screenshot_interactive = pkill -9 slurp ; grim -g "$(slurp -d)" - | wl-copy -t image/png

Now the Prt Scn key will make a screenshot of the entire desktop and ctrl + super + S will let you select a region to screenshot.

Idle and lockscreen

Wayfire has a screensaver and dpms option. These may be configured by editing .config/wayfire.ini.

[idle]
screensaver_timeout = <timeout_screensaver>
dpms_timeout = <timeout_dpms>

Logically, timeout_dpms > timeout_screensaver.

gtklock is used as lockscreen, since it nicely matches the gtkgreet login manager.

# xbps-install -Sy gtklock

gtklock can be configured with the same css file as gtkgreet. Thereby:

# ln -s /etc/greetd/config/gtkgreet.css .config/gtklock/style.css

To initiate gtklock before sleep and after a certain time, swayidle may be used.

# xbps-install -Sy swayidle

Then, in .config/wayfire.ini gtklock may be started with the given conditions:

[autostart]
idle = swayidle -w timeout 590 gtklock before-sleep gtklock

Auto-mounting

udiskie will be used to automatically mount drives. It may be installed with.

# xpbs-install -Sy udiskie

udiskie needs to be started in Wayfire. This can be obtained by editing .config/wayfire.ini.

[autostart]
automount = udiskie -As

Furthermore, udiskie needs permission to mount drives, this permission can be given by creating /etc/polkit-1/rules.d/00-mounting.rules and inserting:

polkit.addRule(function(action, subject)
{
	if (action.id.startsWith("org.freedesktop.udisks2.") && subject.isInGroup("storage"))
		return polkit.Result.YES;
});

or

# cp void-desktop/config-files/polkit/00-mounting.rules /etc/polkit-1/rules.d/

Essential applications

Some essential applications and packages.

# xbps-install firefox-esr vscode foot Thunar element-desktop mpv blueman wdisplays wlr-randr noto-fonts-ttf noto-fonts-cjk