{
  "name": "services",
  "kind": "registry",
  "title": "Services",
  "description": "Start, stop and restart background services: systemd units on Linux, launchd jobs on macOS. Read their logs, and enable or disable a unit.",
  "version": "0.1.0",
  "icon": {
    "tile": {
      "glyph": "󰒓",
      "bg": "slate"
    }
  },
  "author": "pal",
  "spec": "github:zcag/pal/extensions/services@v0.17.4",
  "source": "https://github.com/zcag/pal-extensions/tree/HEAD/services",
  "commit": "4d2559cf9c04d0133c97d7c897f19a14acb9eace",
  "manifest": {
    "name": "services",
    "title": "Services",
    "description": "Start, stop and restart background services: systemd units on Linux, launchd jobs on macOS. Read their logs, and enable or disable a unit.",
    "version": "0.1.0",
    "icon": {
      "tile": {
        "glyph": "󰒓",
        "bg": "slate"
      }
    },
    "author": "pal",
    "repo": "bundled",
    "license": "MIT",
    "settings": [
      {
        "kind": "number",
        "id": "ttl",
        "label": "Refresh after",
        "description": "Seconds a listing stays good for: the palette lists again on show only once the rows are older than this. Read when the extension loads.",
        "min": 0,
        "max": 3600,
        "unit": "s",
        "default": 10
      },
      {
        "kind": "boolean",
        "id": "confirm_user",
        "label": "Confirm user units",
        "text": "Ask before stopping or restarting a user unit",
        "default": false,
        "description": "System units always ask first; a user unit acts at once unless this is on."
      },
      {
        "kind": "list",
        "id": "agent_dirs",
        "local": true,
        "label": "Agent folders (macOS)",
        "description": "Where the launchd agent plists are read from; the first is yours, the second every user's.",
        "default": [
          "~/Library/LaunchAgents",
          "/Library/LaunchAgents"
        ]
      }
    ],
    "store": {
      "tagline": "Start, stop and restart systemd units and launchd jobs",
      "category": "system",
      "features": [
        "Linux: every systemd unit, user and system, filtered by User, System, Failed or Running, its state in colour",
        "`enter` starts or stops a unit; system units ask first and use sudo or pkexec as allowed",
        "`cmd+l` shows the unit's recent log, `cmd+e` enables or disables it",
        "macOS: your launch agents and every loaded job, tagged running, loaded, exited or not loaded",
        "`enter` loads or unloads a job after a confirm, `cmd+shift+r` restarts it, `cmd+l` shows its plist"
      ],
      "permissions": [],
      "platforms": [
        "macos",
        "linux"
      ],
      "screenshots": [
        {
          "file": "1-units.png",
          "caption": "systemd units under the User filter: whether each is enabled, and whether it is running, idle or failed"
        },
        {
          "file": "2-failed.png",
          "caption": "The Failed filter gathers what broke across both managers, in a User and a System section"
        },
        {
          "file": "3-logs.png",
          "caption": "cmd+l shows a unit's journal in the panel: why last night's backup failed"
        },
        {
          "file": "4-agents.png",
          "caption": "On macOS, launchd agents by folder, with their pid and state"
        },
        {
          "file": "5-detail.png",
          "caption": "A unit's detail (cmd+I): its manager and file, the name, failed and enabled as chips, what it is for"
        }
      ],
      "actions": [
        {
          "title": "Stop",
          "description": "systemctl stop on an active unit; a system unit asks first.",
          "keys": "enter"
        },
        {
          "title": "Start",
          "description": "systemctl start on an inactive unit.",
          "keys": "enter"
        },
        {
          "title": "Logs",
          "description": "journalctl -u \u003cunit\u003e -n 200 in the panel.",
          "keys": "cmd+l"
        },
        {
          "title": "Restart",
          "description": "systemctl restart, or launchctl kickstart -k on macOS.",
          "keys": "cmd+shift+r"
        },
        {
          "title": "Enable",
          "description": "systemctl enable on a disabled unit file.",
          "keys": "cmd+e"
        },
        {
          "title": "Disable",
          "description": "systemctl disable; a system unit asks first.",
          "keys": "cmd+e"
        },
        {
          "title": "Copy unit name",
          "description": "name.service.",
          "keys": "cmd+c"
        },
        {
          "title": "Unload",
          "description": "macOS: launchctl bootout; asks first.",
          "keys": "enter"
        },
        {
          "title": "Load",
          "description": "macOS: launchctl bootstrap from the plist.",
          "keys": "enter"
        },
        {
          "title": "Show plist",
          "description": "macOS: the plist as XML in the panel.",
          "keys": "cmd+l"
        },
        {
          "title": "Open plist file",
          "keys": "cmd+o"
        },
        {
          "title": "Copy label",
          "keys": "cmd+c"
        }
      ]
    },
    "palettes": {
      "services": {
        "kind": "live",
        "description": "Every service unit (Linux) or launchd job (macOS), with its state.",
        "keys": [
          {
            "keys": "enter",
            "title": "Stop or start (unload or load on macOS)"
          },
          {
            "keys": "cmd+l",
            "title": "Logs (the plist on macOS)"
          },
          {
            "keys": "cmd+shift+r",
            "title": "Restart"
          },
          {
            "keys": "cmd+e",
            "title": "Enable or disable the unit file (Linux)"
          },
          {
            "keys": "cmd+o",
            "title": "Open the plist file (macOS)"
          },
          {
            "keys": "cmd+c",
            "title": "Copy the unit name or label"
          },
          {
            "keys": "tab",
            "title": "Next filter: User, System, Failed, Running"
          }
        ]
      }
    }
  },
  "playable": false,
  "updated_at": "2026-11-02T04:38:11Z",
  "url": "https://pal.cagdas.io/extensions/services",
  "tagline": "Start, stop and restart systemd units and launchd jobs",
  "category": "system",
  "screenshots": [
    "https://pal.cagdas.io/extensions/services/screenshots/1-units-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/1-units.png",
    "https://pal.cagdas.io/extensions/services/screenshots/2-failed-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/2-failed.png",
    "https://pal.cagdas.io/extensions/services/screenshots/3-logs-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/3-logs.png",
    "https://pal.cagdas.io/extensions/services/screenshots/4-agents-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/4-agents.png",
    "https://pal.cagdas.io/extensions/services/screenshots/5-detail-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/5-detail.png"
  ],
  "panel_screenshots": [
    "https://pal.cagdas.io/extensions/services/screenshots/1-units.png",
    "https://pal.cagdas.io/extensions/services/screenshots/2-failed.png",
    "https://pal.cagdas.io/extensions/services/screenshots/3-logs.png",
    "https://pal.cagdas.io/extensions/services/screenshots/4-agents.png",
    "https://pal.cagdas.io/extensions/services/screenshots/5-detail.png"
  ],
  "bar_screenshots": [],
  "panel_screenshots_dark": [
    "https://pal.cagdas.io/extensions/services/screenshots/1-units-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/2-failed-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/3-logs-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/4-agents-dark.png",
    "https://pal.cagdas.io/extensions/services/screenshots/5-detail-dark.png"
  ],
  "bar_screenshots_dark": [],
  "has_bar": false,
  "bar_items": [],
  "has_links": false,
  "links": [],
  "multi": false,
  "has_readme": true
}
