# vigil ## Philosophy - Never drop into an emergency shell for non-critical failures (e.g. non-root filesystem mount failure). - Failures should be logged, not fatal. - Configuration via declarative TOML unit files. _(just like in systemd, but without the extra bloatware. Objectively, it is convenient to write services for systemd)_ ## Non-goals (explicitly out of scope) - Socket or bus activation (also like systemd). - Built-in cgroups, namespaces, or resource control. - D-Bus integration. - Dynamic dependency resolution beyond static unit deps. ## Implementation Roadmap ### Early system setup - [x] Mount essential filesystems (`/proc`, `/sys`, `/dev` via `devtmpfs`). - [ ] Spawn `udev` (or compatible device manager) as child process. - [x] Mount user-defined filesystems from `/etc/fstab` (non-fatal on failure = log & continue). - [ ] Activate `swap` (non-fatal on failure). - [ ] Set hostname, timezone, and locale from config. - [ ] Load kernel modules (via `modprobe` or direct `init_module` syscall). ### Core runtime responsibilities - [ ] **Service management** - Parse TOML unit files (`/etc/vigil/units/*.toml`) - Start/stop/restart/status via `vigilctl` - Handle `Wants=`, `After=`, `Before=` dependencies - Auto-restart failed services (configurable: `restart = always|on-failure|never`) - [ ] **Child process reaping** - Install `SIGCHLD` handler - Call `waitpid(-1, ...)` in loop to reap zombies - Log exit status, signal, and runtime duration per service - [ ] **TTY & login** - Launch `getty` on configured TTYs (e.g. `tty1`–`tty6`) - Support custom `getty` paths/args per TTY in config ### System lifecycle control - [ ] Handle `reboot`, `halt`, `poweroff` via `vigilctl` - [ ] Properly terminate all services in reverse dependency order - [ ] Sync filesystems and unmount (best-effort) - [ ] Invoke `reboot(2)` / `halt(2)` syscalls directly ### Signal handling - [ ] `SIGINT` / `SIGTERM` = graceful shutdown - [ ] `SIGUSR1` / `SIGUSR2` = reload config or trigger debug dump - [ ] Block all non-fatal signals during critical sections (e.g. mount)