Nix Integration
Runix provides a Nix flake with package builds, dev shells, a NixOS module, and a Home Manager module.
Flake Outputs
| Output | Description |
|---|---|
packages.<system>.default | The runix binary |
devShells.<system>.default | Development shell with Go, gopls, golangci-lint, goreleaser |
overlays.default | Overlay that adds runix to pkgs |
nixosModules.default | NixOS system-level service module |
homeManagerModules.default | Home Manager user-level service module |
formatter.<system> | nixfmt-tree for Nix file formatting |
Supported Systems
x86_64-linuxaarch64-linuxx86_64-darwinaarch64-darwin
Quick Usage
Run directly
nix run github:runixio/runix -- --help
Enter dev shell
nix develop github:runixio/runix
# Provides: go, gopls, gotools, golangci-lint, goreleaser
Install to a profile
nix profile install github:runixio/runix
Use in a flake
{
inputs.runix.url = "github:runixio/runix";
outputs = { runix, ... }: {
# Access the package
packages.x86_64-linux.default = runix.packages.x86_64-linux.default;
};
}
Use the overlay
{
inputs.runix.url = "github:runixio/runix";
outputs = { runix, nixpkgs, ... }: {
packages.x86_64-linux.default =
(import nixpkgs { overlays = [ runix.overlays.default ]; system = "x86_64-linux"; }).runix;
};
}
NixOS Module
System-level Runix daemon with a dedicated system user and hardened systemd service.
Basic Setup
{
inputs.runix.url = "github:runixio/runix";
outputs = { runix, nixpkgs, ... }: {
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
runix.nixosModules.default
{
services.runix.enable = true;
}
];
};
};
}
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
services.runix.enable | bool | false | Enable the Runix service |
services.runix.package | package | flake package | The runix package to use |
services.runix.configDir | string | "/etc/runix" | Directory for runix.yaml |
services.runix.settings | freeform YAML | {} | Runix configuration (generates runix.yaml) |
services.runix.settings.daemon.data_dir | string | "/var/lib/runix" | Data directory |
services.runix.settings.daemon.socket_path | string | "/run/runix/runix.sock" | Unix socket path |
services.runix.settings.daemon.log_level | enum | "info" | Log level: trace, debug, info, warn, error, fatal, panic |
Full Example
{
services.runix.enable = true;
services.runix.settings = {
daemon.log_level = "debug";
defaults = {
restart_policy = "always";
max_restarts = 20;
};
processes = {
api = {
runtime = "go";
entrypoint = "./cmd/api";
env.PORT = "8080";
};
};
};
}
What the Module Creates
| Resource | Details |
|---|---|
| System user | runix (isSystemUser, group runix) |
| Config file | /etc/runix/runix.yaml (generated from settings) |
| systemd service | runix.service — daemon start --config /etc/runix/runix.yaml |
| Runtime directory | /run/runix/ (mode 0750) |
| State directory | Managed by systemd StateDirectory=runix |
systemd Security Hardening
The NixOS module applies these systemd security restrictions:
| Setting | Value |
|---|---|
NoNewPrivileges | true |
ProtectSystem | strict |
ProtectHome | true |
PrivateTmp | true |
LimitNOFILE | 65536 |
Home Manager Module
User-level Runix daemon using systemd user services.
Basic Setup
{
inputs.runix.url = "github:runixio/runix";
outputs = { runix, home-manager, ... }: {
homeConfigurations.user = home-manager.lib.homeManagerConfiguration {
modules = [
runix.homeManagerModules.default
{
services.runix.enable = true;
}
];
};
};
}
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
services.runix.enable | bool | false | Enable the Runix service |
services.runix.package | package | flake package | The runix package to use |
services.runix.settings | freeform YAML | {} | Runix configuration |
services.runix.settings.daemon.data_dir | string | "~/.runix" | Data directory |
services.runix.settings.daemon.socket_path | string | "~/.runix/tmp/runix.sock" | Unix socket path |
services.runix.settings.daemon.log_level | enum | "info" | Log level |
What the Module Creates
| Resource | Details |
|---|---|
| Package | runix added to home.packages |
| Config file | ~/.config/runix/runix.yaml (generated from settings) |
| systemd user service | runix.service — starts after default.target |
Full Example
{
services.runix.enable = true;
services.runix.settings = {
daemon.log_level = "info";
processes = {
web = {
runtime = "node";
entrypoint = "server.js";
env.PORT = "3000";
};
};
};
}
Package Build Details
The package is defined in nix/package.nix:
| Setting | Value |
|---|---|
| Builder | buildGoModule |
CGO_ENABLED | 0 (static binary) |
proxyVendor | true |
| ldflags | -s -w (stripped) + version/build-time injection |
| Platforms | Linux + Darwin |
| Tests | -short flag (E2E tests skipped in Nix build) |
Formatting
Format Nix files using the flake's formatter:
nix fmt
Uses nixfmt-tree (treefmt + nixfmt).
What's Next
- Installation — Other install methods
- Daemon Commands — Managing the daemon
- Startup Command — Non-Nix systemd/launchd setup