This is the thread for tracking s6 support in Artix. Check the out the wiki page as well.
What is it?
s6 is a daemontools-like init system, service manager, and process supervisor.
How does it compare to runit or openrc?
s6 has more in common with runit since runit is also daemontools-like, but it is a bit more complex. One of the main strengths of s6 is its ability to guarantee proper service dependency management as well as truly parallelized service startup. runit is parallel, but it requires scripts to manually write a check function which may not be perfect. Openrc's dependency management works well but its parallel implementation is still considered experimental since it can possibly lock the machine during boot. See the author's page for a little more of his argument.
Current status:
Available in the stable repos plus all of the scripts from runit.
Installation:
Of course, this will remove your old init and change to a new one so as always, proceed with caution. skalibs, execline, s6, s6-rc, and s6-linux-init are mandatory packages (pacman -S s6 will pull all of these). Additionally, many service scripts are available (suffixed with *-s6). It's also strongly recommended that you at least get dhcpcd-s6 for internet.
Some shell scripts are located in /etc/s6/current/scripts which are executed at every bootup and shutdown by s6-linux-init Additionally an /etc/s6/rc.local script is executed by s6-rc on bootup. You can modify any of them to your liking if need be. After a reboot, you should have a working and functional s6 system.
Hopefully the reboot goes smoothly without any hitches. Now that you are actually running an s6-based system, you can start customizing your services and playing with the s6-rc database. The s6-rc packages are configured to start the "default" bundle if it exists on boot. You can add any services you want to a bundle. This is basically like using openrc's runlevels. So to add services to the default bundle you can simply do this:
# s6-rc-bundle add default dhcpcd elogind
Note that due to the way s6-rc's database works, you have to first delete a bundle (s6-rc-bundle delete "name") and then add it again if you want to modify it. "agetty-tty1" is provided by the s6-init binary itself while tty2-6 are started up in the initial boot. To bring the bundle up it's just simply:
# s6-rc -u change default
Of course, you can also individual start services in the same way. So for example:
# s6-rc -u change dhcpcd
I won't be covering all possible usage here (please consult s6-rc's faq for more details) but here are some quick tips. s6-rc uses a database approach to managing services which makes it a little more complex. The s6 packages I put together hide most of the boilerplate in the background so you shouldn't have to worry too much about it (scripts are installed in /etc/s6/sv if you need to know), but look at s6's documentation if you want more details.
To bring up a service/bundle:
# s6-rc -u change service
To bring down a service/bundle:
# s6-rc -d change service
To list all available services:
# s6-rc -d list
To generate a new database:
# s6-rc-compile /destdir /sourcedir
To update the database:
# s6-rc-update /path/to/compiled-database