Nix Service Management

SkillDev tools

Manage nix-managed launchd and systemd services

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Nix Service Management skill

What this skill tells your AI

The instructions your AI receives, as published by r17x/universe in .claude/skills/nix/service/SKILL.md and read by ahel’s review.

macOS (launchd)

Discovery

# List nix-managed services
launchctl list | grep -E "org.nixos|nix"

# System daemons
ls /Library/LaunchDaemons/org.nixos.*.plist

# User agents
ls ~/Library/LaunchAgents/org.nixos.*.plist

Service Control

# Domain format: system/<label> or gui/<uid>/<label>
DOMAIN="system/org.nixos.<name>"
DOMAIN="gui/$(id -u)/org.nixos.<name>"

# Status
launchctl print $DOMAIN

# Start/restart
launchctl kickstart $DOMAIN
launchctl kickstart -k $DOMAIN  # kill first

# Stop (graceful)
launchctl kill SIGTERM $DOMAIN

# Stop (force unload - careful!)
sudo launchctl bootout $DOMAIN

View Plist

cat /Library/LaunchDaemons/org.nixos.<name>.plist
plutil -p /Library/LaunchDaemons/org.nixos.<name>.plist

Logs

# Recent logs for service
log show --predicate 'subsystem == "org.nixos.<name>"' --last 5m

# Stream logs
log stream --predicate 'process == "<process-name>"'

Linux (systemd)

Discovery

# System services
systemctl list-units --type=service | grep nix

# User services
systemctl --user list-units --type=service

Service Control

# Status
systemctl [--user] status <service>

# Control
systemctl [--user] start <service>
systemctl [--user] stop <service>
systemctl [--user] restart <service>

# Enable/disable at boot
systemctl [--user] enable <service>
systemctl [--user] disable <service>

Logs

journalctl [-u <service>] [-f] [--user]

Nix Configuration

Reduce CPU priority (darwin)

launchd.user.agents.<name>.serviceConfig = {
  ProcessType = "Background";
  Nice = 5;
  LowPriorityIO = true;
};

Disable auto-start (darwin)

launchd.daemons.<name>.serviceConfig = {
  RunAtLoad = lib.mkForce false;
  KeepAlive = lib.mkForce false;
};

Override existing service

Use lib.mkForce when the service module already sets values.

Signals

GitHub stars
135
Forks
12
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
nix-service
Source
github.com/r17x/universe