Ah yes, panels. The quintessential part of every desktop. I wouldn't bore you explaining what panels are; But to describe panels in slowshell, I'd say a bar with custom components that display some status.

What makes a panel important is what's inside, the statuses. Because, without those, a panel is just- a bar. Nothing to show, sad and empty inside.

And in slowshell, those statuses are components, which are the actual parts that hold real service.

Configuration

panels {
  panel "Main" position="top" monitor="*" height=32 {
    components {
      left {
        component "core/workspaces" { label "Workspaces" }
      }
      center {
        component "core/clock" { label "Clock" format "%I:%M %p" }
      }
      right {
        component "core/tray" { label "Tray" }
      }
    }
  }
}

What?

Underlings will explain.

panel

AttributeTypeDefaultHot-Reload
"<name>"stringrequirednone
position"top"/"bottom"/"left"/"right""top"Yes
monitorstring"*"No
heightint (px)32Yes
transparentbool#falseYes
overlaybool#falseYes
autohidebool#falseYes
autohide-triggerint (px)4Yes

simple example:

panel "Dock" position="bottom" height=48 transparent=#true autohide=#true autohide-trigger=8 {
  // sections go here
  // left/center/right {
  // and here goes one of these:
  // component "<id>"
  // component "<id>" { ... }
  // group "<label>" {
  //  item "<id>" (same as components)
  //  item "<id>" { ... }
  // }
}

Component Options

component "core/system" {
  label "Sysmon"      // mandatory, not an option
  interval 5          // option
  progress #true      // option
  items "cpu" "mem"   // option
  "progress-direction" "vertical" // yes, another option.
}

Groups

group "Media" {
  // optional: make the whole group open a menu
  //    note: will override the menus for components within
  menu "menus/quick"

  // optional
  prefix "core/icon" { label "Media" icon "preferences-system-symbolic" }

  item "core/audio" { label "Audio" "show-percent" #true }
  item "core/separator" { label "Sep" opacity 0.05 }
  item "core/network" { label "Network" ssid #true }
}

Style classes

.panel {
  background-color: var(--base-a45);
  border-width: 0px;
  border-color: var(--overlay-a15);
  padding-v: 8px;
  padding-h: 8px;
  gap: 4px;
}

.panel.items { gap: 4px; }

.item {
  background-color: var(--mantle-a60);
  border-radius: 4px;
  border-width: 0px;
  border-color: var(--overlay-a15);
  padding-v: 4px;
  padding-h: 8px;
  margin: 4px;
  font-size: 13px;
  color: var(--text);
  gap: 8px;
}

.item.prefix { border-radius: 4px; }

IPC

Panel commands

If you need to create pannels externally (with no configs):

slowshell ipc panel.create name=Secondary position=left height=48
CommandArgs
panel.createname= (required), position=, height=, monitor=

Per-panel commands

You can also toggle/configure/remove panels by their name:

slowshell ipc panel.main.toggle
slowshell ipc panel.main.hide
slowshell ipc panel.main.configure height=40 position=bottom enabled=true
CommandArgs
panel.<name>.shownone
panel.<name>.hidenone
panel.<name>.togglenone
panel.<name>.destroynone
panel.<name>.configureheight= (default 32), position= (default top), enabled= (default #false), transparent=, monitor=
panel.<name>.addsection= (default center), label= (required), component=, options=
panel.<name>.removesection= (required), label= (required)

Note: panel names are lowercased and sluggified, so for example "The Bar" would be "the-bar".

Example:

slowshell ipc panel.main.add section=right label=CPU component=core/system
slowshell ipc panel.main.remove section=right label=CPU