By using this site, you agree to have cookies stored on your device, strictly for functional purposes, such as storing your session and preferences.

Dismiss

Add some docs

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=
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                         ===========================
                                        
                                        
                                        
                                    
                                
                                
                                
                            
                                
                                    
                                        
                                        ~~~