{"id":13437862,"url":"https://github.com/Kharacternyk/pacwall","last_synced_at":"2025-03-19T18:30:58.367Z","repository":{"id":45600568,"uuid":"249010762","full_name":"Kharacternyk/pacwall","owner":"Kharacternyk","description":"A live wallpaper that shows the dependency graph and status of installed packages.","archived":false,"fork":false,"pushed_at":"2024-03-29T21:10:50.000Z","size":19214,"stargazers_count":548,"open_issues_count":8,"forks_count":35,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-08-01T03:25:08.951Z","etag":null,"topics":["archlinux","pacman","wallpaper"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kharacternyk.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-03-21T16:02:01.000Z","updated_at":"2024-07-27T12:59:38.000Z","dependencies_parsed_at":"2024-01-23T18:13:27.836Z","dependency_job_id":"8c6e0aef-69fd-4d12-8b74-2b81a5bbd508","html_url":"https://github.com/Kharacternyk/pacwall","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharacternyk%2Fpacwall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharacternyk%2Fpacwall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharacternyk%2Fpacwall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kharacternyk%2Fpacwall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kharacternyk","download_url":"https://codeload.github.com/Kharacternyk/pacwall/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221729754,"owners_count":16871098,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archlinux","pacman","wallpaper"],"created_at":"2024-07-31T03:01:00.769Z","updated_at":"2024-10-27T20:30:42.615Z","avatar_url":"https://github.com/Kharacternyk.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":".. image:: screenshot.png\n\n``pacwall`` changes your wallpaper to the dependency graph of installed\nwith ``pacman`` packages. Each node is a package and each edge represents\na dependency between two packages. ``pacwall`` highlights outdated packages,\norphans, and packages with `.pacnew files`_. The highlighting is customizable.\n\n``pacwall`` is bundled with systemd units that provide functionality\nsuch as triggering wallpaper regeneration on package\nupgrade/removal/installation, as well as periodical regeneration,\nwhich ensures that the displayed set of available updates is up-to-date.\n\n------------\nInstallation\n------------\n\nInstall the ``pacwall-git`` `AUR package`_.\n\n``pacwall`` doesn't know how to set a wallpaper by itself. Therefore, ``pacwall``\nrequires help in the form of shell commands. Such commands are called *hook*.\nThere are some example hooks for different setups, one of which you should copy to\nyour local config.\n\nIf you use GNOME, run:\n\n.. code-block:: bash\n\n    sudo pacman -S --needed imagemagick xorg-xdpyinfo\n    mkdir -p ~/.config/pacwall\n    cp /usr/share/pacwall/examples/hook/gsettings ~/.config/pacwall/pacwall.conf\n\nIf you use KDE Plasma, run:\n\n.. code-block:: bash\n\n    mkdir -p ~/.config/pacwall\n    cp /usr/share/pacwall/examples/hook/plasmash ~/.config/pacwall/pacwall.conf\n    cp /usr/share/pacwall/examples/hook/oneblackpixel.png ~/.config/pacwall/\n\nIf you use Xorg sans GNOME/KDE, run:\n\n.. code-block:: bash\n\n    sudo pacman -S --needed hsetroot\n    mkdir -p ~/.config/pacwall\n    cp /usr/share/pacwall/examples/hook/hsetroot ~/.config/pacwall/pacwall.conf\n\nIf you use Sway, run:\n\n.. code-block:: bash\n\n    mkdir -p ~/.config/pacwall\n    cp /usr/share/pacwall/examples/hook/swaymsg ~/.config/pacwall/pacwall.conf\n\nIf you use Hyprland, run:\n\n.. code-block:: bash\n\n    sudo pacman -S --needed swaybg\n    mkdir -p ~/.config/pacwall\n    cp /usr/share/pacwall/examples/hook/swaybg ~/.config/pacwall/pacwall.conf\n\nFor some setups, e.g. XFCE, there are no example hooks. Furthermore, the example\nhooks can have bugs. You can verify that ``pacwall`` itself works fine by examining\nthe image that it has generated at ``~/.cache/pacwall/pacwall.png``.\n\nIf you use the standard ``hsetroot`` hook along with a ``systemd`` unit listed\nbelow, you may notice that the package graph disappears if the unit triggers\nwhile your screen is turned off (typically due to DPMS timeout). This can be\nfixed by using the ``/usr/share/pacwall/examples/hook/hsetroot-dpms`` hook\ninstead of the plain ``hsetroot`` one. However, on multi-display systems, this\nmay cause undesired stretching of the graph over multiple screens.\n\n-----\nUsage\n-----\n\nRun ``pacwall``.\n\nThe circles represent packages, where the area of a circle is proportional to the\nsize of the package.\nThe blue circles are manually (explicitly) installed packages, the red ones are\nautomatically (implicitly) installed packages. The green circles are packages not found\nin the official non-testing repositories (e.g. from the AUR). The outlined teal circles\nare orphans, the outlined yellow circles are outdated packages. The outlined magenta\ncircles are packages with unresolved `.pacnew files`_ (it's time to run ``pacdiff``).\nThe dashed edges represent optional dependencies, the normal edges represent strict\n(hard, direct) dependencies. The appearance is customizable, see Customization_.\n\nIf you want the wallpaper to be persistent, run ``pacwall -ug`` in the init file\nof DE or WM you use. ``pacwall -ug`` doesn't regenerate the wallpaper, it just sets\nthe most recent one.\n\nIf you want the wallpaper to be automatically updated when a package is\nupgraded/removed/installed, run:\n\n.. code-block:: bash\n\n    systemctl --user enable pacwall-watch-packages.path\n\nNote that this one runs ``pacwall -u`` i.e. the displayed set of available updates\ncan only shrink.\n\nIf you want the wallpaper to be refreshed each hour with the up-to-date set of\navailable updates displayed, run:\n\n.. code-block:: bash\n\n    systemctl --user enable pacwall-watch-updates.timer\n\nIf you use Sway, you must run ``systemctl --user import-environment SWAYLOCK``\nby the time the systemd units are triggered. They will fail otherwise.\n\n---\nCLI\n---\n\n* ``-u``: do not attempt to add entries to the set of available updates\n\n  This flag speed-ups ``pacwall``. It also puts off some load from the\n  Arch mirrors, though the load is arguably minor.\n\n* ``-g``: do not regenerate the graph\n\n  This flag doesn't prevent from adding entries to the set of available updates, but\n  the entries will not be visible until the graph is regenerated.\n\n* ``-k``: do not run the hook\n\n-------------\nCustomization\n-------------\n\n``~/.config/pacwall/pacwall.conf`` is used to configure ``pacwall``.\nThe file is in the `libconfig format`_. TL;DR:\n\n.. code-block::\n\n    # comment\n    setting: \"foo\"\n    group: {\n        nestedSetting: \"bar\"\n        nestedGroup: {\n            nestedNestedSetting: \"baz\"\n        }\n    }\n    longSetting: \"A sequence of strings \"\n                 \"is concatenated into \"\n                 \"one, like in C.\"\n\nNote that you must use ``'`` in value strings wherever you would normally\nuse ``\"`` and vice versa. This avoids tons of ugly escaped ``\\\"``.\n\n~~~~~~~~~~~~~~~~\nList of settings\n~~~~~~~~~~~~~~~~\n\n* ``hook`` (no default value)\n\n  The shell commands that are executed after the graph has been generated.  The\n  hook is expected to set the wallpaper. The path to the graph image is exported\n  in the ``$W`` environmental variable.\n\n* ``shell`` (default: ``bash``)\n\n  The shell in which the commands specified in ``hook`` ought to be executed.\n\n* ``db`` (default: ``/var/lib/pacman``)\n\n  The path to the ``pacman`` packages database.\n\n* ``attributes`` (group)\n\n  The group that contains graphviz attributes, which modify the appearance\n  of the graph, nodes, and edges in various ways. See the\n  ``GRAPH, NODE AND EDGE ATTRIBUTES`` section in ``man twopi``. Beware that attributes\n  specific to layouts other than ``twopi`` won't work.\n\n  ``/usr/share/pacwall/examples/attributes/default`` contains the attributes\n  that are identical to the hardcoded defaults. It may be easier for you\n  to copy them to your ``pacwall.conf`` and then further modify instead\n  of writing these settings from scratch. You can also try out the other\n  examples in the directory.\n\n  * ``graph`` (default: ``bgcolor='#00000000'``)\n\n    The graph attributes (separated by semicolons).\n\n  * ``package`` (group)\n\n    * ``common`` (default: ``shape=point, height=0.1, fontname=monospace, fontsize=10``)\n\n      The attributes that are applied to all packages (separated by commas).\n\n    * ``implicit`` (default: ``color='#dc322faa'``)\n\n      The attributes that are applied to implicitly (i.e. to satisfy dependencies of\n      some other packages) installed packages (separated by commas).\n\n    * ``explicit`` (default: ``color='#268bd2aa'``)\n\n      The attributes that are applied to explicitly installed packages\n      (separated by commas).\n\n    * ``orphan``\n      (default: ``color='#2aa198aa', fontcolor='#2aa198', peripheries=2, xlabel='\\\\N'``)\n\n      The attributes that are applied to packages installed to satisfy some dependencies\n      and not directly required anymore (separated by commas).\n\n    * ``unneeded`` (no default value)\n\n      The attributes that are applied to orphan packages that are not optionally\n      required either (separated by commas).\n\n    * ``outdated``\n      (default: ``color='#b58900aa', fontcolor='#b58900', peripheries=3, xlabel='\\\\N'``)\n\n      The attributes that are applied to outdated packages (separated by commas).\n\n    * ``unresolved``\n      (default: ``color='#d33682aa', fontcolor='#d33682', peripheries=4, xlabel='\\\\N'``)\n\n      The attributes that are applied to packages with `.pacnew files`_\n      (separated by commas).\n\n      These files are `better to deal with immediately`_.\n\n    * ``repository`` (group) (default::\n\n             core: \"\"\n             extra: \"\"\n             community: \"\"\n             multilib: \"\"\n             *: \"color='#859900aa'\"\n      )\n\n      The group that maps attributes to packages based on the origin repositories.\n      Settings in this group are in the form of ``repository: \"comma-separated attributes\"``\n\n      Only one set of attributes from this group is applied to a package; if a package\n      is present in more than one repository, the first (from top to bottom) set takes\n      precedence.\n\n      A special entry in the form of ``*: \"comma-separated attributes\"`` is supported.\n      The attributes will be applied to packages that are not present in any of the\n      specified repositories. This entry should come last.\n\n  * ``dependency`` (group)\n\n    * ``common`` (default: ``color='#fdf6e30a'``)\n\n      The attributes that are applied to all dependencies (separated by commas).\n\n    * ``hard`` (no default value)\n\n      The attributes that are applied to hard (as opposed to optional) dependencies\n      (separated by commas).\n\n    * ``optional`` (default: ``arrowhead=empty, style=dashed``)\n\n      The attributes that are applied to optional dependencies (separated by commas).\n\n* ``features`` (group)\n\n  The group that contains settings that control optional features.\n\n  * ``installed-size`` (group) (default::\n\n        enabled: true\n        delta: 2e-5\n    )\n\n    The group that contains settings that control the installed size representation\n    feature. If ``enabled`` is true, the ``height`` and ``width`` attributes of nodes\n    are overwritten so that the area covered by a node is proportional to the size of\n    the installed package. The formula is::\n\n        width in inches = height in inches = (installed size in bytes)^(1/2) * delta\n\n    Note that values of these settings are not strings and omit the quotes enclosing\n    them.\n\n---------------\nTips and tricks\n---------------\n\n~~~~~~~~~~~~~~~~\nBackground image\n~~~~~~~~~~~~~~~~\n\n============\nVia hsetroot\n============\n\nIf ``hsetroot`` is used as the wallpaper setter, use the built-in multilayer feature, e.g.:\n\n.. code-block:: bash\n\n    hook: \"hsetroot -fill '/path/to/background' -center '$W' \u003e /dev/null\"\n\n===============\nVia imagemagick\n===============\n\nUse the ``convert`` command, e.g.:\n\n.. code-block:: bash\n\n    hook: \"convert '/path/to/background.png' '$W' -gravity center -compose over -composite '$W';\"\n          \"…\"\n\nThe ``imagemagick`` package is required.\n\n~~~~~\nPywal\n~~~~~\n\nMake use of `Pywal User Template Files`_ to integrate ``pacwall`` with pywal.\nSee `an example of such template here`_.\n\n~~~~~~~~~~\nGraph size\n~~~~~~~~~~\n\nUse the ``dpi`` graph attribute to scale the whole image.\n\nAlternatively, change node size, font size, and graph size separately via their\nrespective attributes. Use the ``ranksep`` graph attribute instead of ``size``.\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nHighlighting specific packages\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nEntries of the form\n``'package-name' [comma-separated-list-of-attributes];``\nin the ``attributes.graph`` setting add attributes to a specific package.\n\n~~~~~~~~~\nWeb-graph\n~~~~~~~~~\n\nIf you want nice web-graph like on the following image:\n\n.. image:: example-web.png\n\nThen create the following config:\n\n.. code-block::\n\n    attributes: {\n        # Dark background for proper visibility. On bright background\n        # edges of dependencies would be almost invisible. If you'll\n        # increase their opacity they'll overlap with text and circles.\n        graph: \"bgcolor='#16161d' ratio=0.58 overlap=false\",\n        package: {\n            common: \"shape=point\",\n        },\n        dependency: {\n            # Notice opacity on colors of edges, it's very important.\n            # Also, width of edges is reduced to make them less bold.\n            common: \"color='#fdf6e30a', arrowhead='dot', arrowsize=0.6, penwidth=0.6\"\n            optional: \"color='#fdf6e0f', penwidth=0.4\"\n        }\n    }\n\nHere the most important property is ``overlap=false`` which renders web graph instead\nof defalut circled. Also important is ``ratio=0.58`` which you should calculate by\ndividing screen height per screen width.\n\n-------------------\nMigrating from v1.*\n-------------------\n\n``pacwall`` v2.* is written in C and is very different from the v1.* one, which is\na Bash script. Migrating should be straightforward, though, **unless** you don't\nrun an Arch-based distro. v2.* is ``pacman``-only and will likely remain such.\n\n----------------\nSimilar software\n----------------\n\n* pacgraph_\n* pacvis_\n\n.. LINKS:\n.. _.pacnew files: https://wiki.archlinux.org/index.php/Pacman/Pacnew_and_Pacsave\n.. _AUR package: https://aur.archlinux.org/packages/pacwall-git/\n.. _libconfig format: https://hyperrealm.github.io/libconfig/libconfig_manual.html#Configuration-Files\n.. _better to deal with immediately: https://www.reddit.com/r/archlinux/comments/iczyr0/psa_be_careful_with_pacnew_when_updating/\n.. _Pywal User Template Files: https://github.com/dylanaraps/pywal/wiki/User-Template-Files\n.. _an example of such template here: https://github.com/Kharacternyk/dotfiles/blob/master/.config/wal/templates/pacwall.conf\n.. _pacgraph: http://kmkeen.com/pacgraph/\n.. _pacvis: https://github.com/farseerfc/pacvis\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKharacternyk%2Fpacwall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKharacternyk%2Fpacwall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKharacternyk%2Fpacwall/lists"}