/pacwall

Dependency graph of installed packages on your wallpaper.

Primary LanguageShellGNU General Public License v3.0GPL-3.0

screenshot.png

pacwall.sh is a shell script that changes your wallpaper to the dependency graph of installed packages. Each package is a node and each edge indicates a dependency between two packages.

An AUR package is available.

Highlighting

  • Packages

    Package/Distro

    Arch

    Void

    Normal

    Red

    Explicitly installed

    Blue

    Orphan

    Green (outlined)

    Foreign (AUR, etc.)

    Purple

    X

    Outdated

    Yellow (outlined)

    Virtual (see below)

    White (translucent)

    X

  • Dependencies

    • A depends on B: an arrow that points towards B
    • A provides B (B is a virtual package): an inverted arrow that points towards B (applies only to Arch)

The exact default colors have been taken from pywal's solarized theme. See Customization and Pywal integration if you want to change them.

Requirements

Arch Linux

sudo pacman -Syu --needed graphviz pacman-contrib

Void Linux

sudo xbps-install -S graphviz

Wallpaper backends

pacwall tries to set the wallpaper using feh, hsetroot and swaymsg.

Desktop environment integration

Use -D to enable desktop environment integration (KDE Plasma, GNOME, ...). You will be able to see the generated wallpapers in the graphical wallpaper picker.

DE integration requires imagemagick and if you are on X11, xorg-xdpyinfo. If you are using a Wayland compositor other than sway, you need to specify the screen size manually like this: ./pacwall.sh -DS 1920x1200.

WARNING: Setting a wallpaper in GNOME and the derivatives isn't possible with feh and hsetroot. -D is required.

Pywal integration

Run ./pacwall.sh -W to use colors set by pywal.

Some themes don't follow the color order convention, though many do. If you use a scheme that doesn't, then the color description table above may be partially invalid e.g. updates are highlighted green instead of yellow and orphans are yellow instead of green.

Customization

Customizations can be made on the command line, see the options with ./pacwall.sh -h.

USAGE: pacwall
        [ -iDWULV ]
        [ -b BACKGROUND_COLOR ]
        [ -s EDGE_COLOR ]
        [ -d NODE_COLOR ]
        [ -e EXPLICIT_NODE_COLOR ]
        [ -p ORPHAN_NODE_COLOR ]
        [ -f FOREIGN_NODE_COLOR ]
        [ -u OUTDATED_NODE_COLOR ]
        [ -y VIRTUAL_NODE_COLOR ]
        [ -x ORPHAN_NODE_OUTLINE ]
        [ -z OUTDATED_NODE_OUTLINE ]
        [ -c ROOT ]
        [ -r RANKSEP ]
        [ -o OUTPUT ]
        [ -S SCREEN_SIZE ]
        [ REPO:COLOR ... ]
        [ GROUP%COLOR ... ]
        [ PACKAGE@COLOR ... ]

        Use -i to suppress wallpaper setting.
        Use -D to enable integration with desktop environments.
        Use -W to enable pywal integration.
        Use -U to disable highlighting of outdated packages.
        Use -L to label outdated packages using 'monospace 12.5pt' font.
        Use -V if you are on VOID LINUX (EXPERIMENTAL, SOME FEATURES DON'T WORK)

        All colors may be specified either as
        - a color name (black, darkorange, ...)
        - a value of format #RRGGBB
        - a value of format #RRGGBBAA

        If OUTLINE value is bigger than 1, then OUTLINE-1 additional circles are drawn
        around the corresponding packages.

        ROOT is the package that will be put in the center of the graph.
        RANKSEP is the distance in **inches** between the concentric circles.
        OUTPUT is the path where the generated image is put.
        SCREEN_SIZE makes sense to set only if -D is enabled and you're on Wayland.

        REPO:COLOR overrides the highlight color for packages from REPO to COLOR.
        GROUP%COLOR overrides the highlight color for packages from GROUP to COLOR.
        PACKAGE@COLOR overrides the highlight color for PACKAGE to COLOR.

Additional customizations can be performed by modifying the script itself. The code in the script is well-structured (should be). To discover the customization possibilities, read the man page of graphviz and twopi, particularly the section on GRAPH, NODE AND EDGE ATTRIBUTES.

Tips and tricks

Pacman hook

90-pacwall.hook is an example of a pacman hook that you may put into /usr/share/libalpm/hooks/. It will trigger wallpaper regenerating each time a package is removed, added or upgraded. It's not a part of a package from AUR, because one is expected to customize the pacwall invocation and flags. Also not everyone likes the noticeable delay that the hook introduces to pacman invocations. Pywal integration doesn't work.

Graph size

If the graph is too large/small, use -r. For example, -r 0.3 means that the distance between the concentric circles of the graph will be 0.3 inch.

Contributors

Similar software