roundabout,
created on Sunday, 3 August 2025, 18:55:33 (1754247333),
received on Sunday, 3 August 2025, 18:55:47 (1754247347)
Author identity: Vlad <vlad.muntoiu@gmail.com>
1e34c653bd411c60b32c576bb58f8320a8e44dbc
README.md
@@ -0,0 +1,70 @@
Panorama panel
==============
The Panorama panel provides a configurable and traditional desktop panel
(taskbar) for traditional environments, especially the upcoming "Panorama DE".
It only runs correctly in Wayland compositors with layer-shell support, and is
designed specifically for Wayfire.
One can set up this program to display one or multiple panels on the screen,
each panel is set to display on a particular edge of a particular monitor, it
has a configurable size, can hide itself unless the mouse is over it and holds
applets in the left, centre or right areas.
Every widget you see on the panels is an applet provided by a dynamically loaded
Python module.
Dependencies
------------
* GTK 4.6 or newer
* [GTK4 Layer Shell](https://github.com/wmww/gtk4-layer-shell)
* libwayland
* Python 3.10 or newer
* [pywayland](https://pypi.org/project/pywayland/)
* [PyGObject](https://pygobject.gnome.org/)
* [ruamel.yaml](https://yaml.dev/doc/ruamel.yaml/)
For Debian and Ubuntu, this can be executed in the command:
~~~
sudo apt install libgtk-4-dev libgtk4-layer-shell-dev libwayland-dev python3 python3-gi python3-ruamel.yaml
~~~
Alternatively you can use venv. You also need a Wayland compositor that supports
the wlr-layer-shell protocol, which is supported by most reasonably popular
compositors except GNOME, Weston and Cage.
To use the included `wf-window-list` applet you need a Wayland compositor that
supports wlr-foreign-toplevel-management, that is, one based on wlroots,
Hyprland, Louvre or Mir.
Usage
-----
Unless you're installing from a hypothetical package which would create a
system-wide directory for applets, it is recommended to store them
in the user-specific location. These are
`~/.local/share/panorama-panel/applets` for applets and
`~/.config/panorama-panel/config.yaml` for config. For development purposes, it
is recommended that you make them symbolic links to the corresponding location
in the repository.
After creating these directories, simply run the code and the panels should
appear on your screen.
Writing applets
---------------
See [implementing-applets.md](docs/applet-api/implementing-applets.md).
Configuration
-------------
The configuration is in `~/.config/panorama-panel/config.yaml`. See
[configuration.md](docs/configuration.md) for information.
A configuration GUI is supported by right-clicking an empty area of the panel
and choosing "Open manager". Not all settings can be currently changed there.
The panel you're currently editing will flash when it is selected. The toggle
"Panel editing mode" makes applets draggable for you to reorder them.
docs/configuration.md
@@ -0,0 +1,56 @@
Configuring the Panorama panel
------------------------------
The panel loads all its configuration from a file
`~/.config/panorama-panel/config.yaml`. The format has a single top-level key
`panels` which is a list of the panels to generate. Each panel has the following
keys:
* `position`: `top`, `right`, `bottom` or `left`; specifies the edge of the
monitor to show the panel on
* `monitor`: the index of the monitor to show the panel on (usually refers
to the order in which the monitors are plugged in)
* `size`: the thickness of the panel in pixels
* `autohide`: whether the panel automatically hides leaving only 1px
* `hide_time`: the duration in ms of the sliding animation (not applicable
if `autohide` is `false`)
* `applets`: a dictionary with keys `left`, `centre`, `right`; they are actually
named wrong and are start/centre/end areas, each key has a list of applets,
each applet is described by a dictionary with a single key being the class
name and the value being a dictionary with configuration options (the options
depend on the applet)
Example:
~~~yaml
panels:
- position: top
monitor: 0
size: 40
autohide: false
hide_time: 300
applets:
left:
- WFWindowList: {}
centre: []
right:
- ClockApplet:
formatting: '%T, %a %-d %b %Y'
~~~
The order the panels are specified in decides how they occupy the screen, thus,
if you specify panel 1 on top, panel 2 on left, and panel 3 on bottom it will
look like:
~~~
===========================
=111111111111111111111111111=
=22 =
=22 =
=22 =
=22 =
=22 =
=22 =
=223333333333333333333333333=
===========================
~~~