• 1 Post
  • 13 Comments
Joined 1 year ago
cake
Cake day: August 31st, 2025

help-circle










  • Yeah, that’s all there is to it. The finish script is optional, and rememer to make your links. You can have user level services by making links for runsvdir-USERNAME. This creates a service that manages your services.

    It could probably be more robustn but here’s my setup:

    $ readlink {/etc/sv,/var/service}/runsvdir-$USER | sed "s:$USER:USERNAME:g"
    /home/USERNAME/.dotfiles/runsvdir-USERNAME
    /etc/sv/runsvdir-USERNAME
    
    $ print -l /etc/sv/runsvdir-$USER/*(.)
    /etc/sv/runsvdir-USERNAME/conf
    /etc/sv/runsvdir-USERNAME/finish
    /etc/sv/runsvdir-USERNAME/run
    
    $ print -l /etc/sv/runsvdir-$USER/*(.) | to -b -C '#' -A $'\n' cat | sed "s:$USER:USERNAME:g"
    # /etc/sv/runsvdir-USERNAME/conf
    #!/bin/sh
    
    set -eu
    
    self="$(realpath "$0")"
    root="$(dirname "$self")"
    user="$(basename "$root" | sed 's:^runsvdir-::')"
    home="/home/$user"
    
    groups="$(id -Gn "$user" | tr ' ' ':')"
    svdir="$home/service"
    #
    
    # /etc/sv/runsvdir-USERNAME/finish
    #!/usr/bin/env sh
    
    set -eu
    
    self="$(realpath "$0")"
    root="$(dirname "$self")"
    
    [ ! -e "$root/conf" ] || . "$root/conf"
    
    sv -w600 force-stop "$svdir/"\*
    #
    
    # /etc/sv/runsvdir-USERNAME/run
    #!/bin/sh
    
    # start up for user-level service configuration
    
    set -eu
    
    exec 2>&1
    
    root="$(realpath "$0" | xargs -d '\n' dirname)"
    [ ! -e "$root/conf" ] || . "$root/conf"
    
    exec chpst -u "$user:$groups" runsvdir -P "$svdir"
    #
    
    

    For clarity, the to command is an xargs alternative that’s not out, yet.


  • Runit is actually quite simple. If you want a service that your distro packages, you just have to install it and symlink it’s directory from (in void’s case) /etc/sv/app-or-service to /var/service/app-or-service. Inside that dir you’ll find a “run” script and, maybe, a “finish” script that the service manager (sv) will use to initiate and interrupt the service. This is helpful to know if you want to create custom services; i have some for things like brightness, manual tiling, and clipboard management.