PFSG

Uses matplotlib, networkx and graphviz to create a beautiful graph of directory structure and exports as a png image for use as desktop wallpaper.

Examples

./pfsg.py ~/polybar dot.png --image /home/odroid/opportunity.png \
-l dot --file-node-colour "#BBBBBBFF" --show-files \
--file-node-size 15 --node-size 15 --label-size 20 \
--label-colour "#FFFFFFFF" --edge-colour "#999999FF" \
--edge-style dotted --edge-width 3 --label-depth 1
./pfsg.py ~/Code twopi.png -b "#000000FF" \
-l twopi --edge-colour "#666666FF" --edge-width 1 \
--label-colour "#FFFFFFFF" -f --file-node-colour "#55FF55FF"\
 --file-node-size 5 --label-depth 3
./pfsg.py ~/Code sfdp.png -b "#000000FF" -l sfdp \
--edge-colour "#222222FF" --edge-width 1 \
--label-colour "#FFFFFFFF" -f --file-node-colour "#FF5555FF" \
--file-node-size 25 --label-size 8
./pfsg.py ~/polybar ~/neato.png --image ~/Grey-Wall.png \
-w 1920 -h 1080 -l neato --edge-width 2 --edge-width-reduce 0.2 \
--file-node-size 3 --node-size 0 --label-size-reduce 2 \
--edge-colour inferno --colourmap-soften 5 \
--label-alpha-reduce 0.15

Prerequisites

Tested only on ubuntu 18.04

Ubuntu and Debian based:

# Mandatory dependencies:
sudo apt-get install python3 python3-pip
sudo pip3 install matplotlib networkx pydot graphviz click

# Optional dependencies:
sudo apt-get install imagemagick feh

(untested) Arch based:

# Mandatory dependencies:
sudo pacman -S python3 python3-pip python-pygraphviz
sudo pip3 install matplotlib networkx pydot graphviz click

# Optional dependencies:
sudo pacman -S imagemagick feh

Installing

wget https://raw.githubusercontent.com/niveknosredneh/PFSG/master/pfsg.py
sudo chmod +x pfsg.py
...

Options

  -w, --width INTEGER           Graph width
  -h, --height INTEGER          Graph height
  -l, --layout TEXT             Layout style: dot|twopi|neato|fdp|sfdp|circo
  -i, --image TEXT              Image file for graph to overlay ontop of
  -o, --opacity INTEGER         Opacity of graph when overlaid on image
  -b, --background-colour TEXT  Background colour in form '#RRGGBBAA'
  -d, --max-depth INTEGER       Max node depth
  -f, --show-files              Shows file nodes
  --show-file-labels            Shows file labels, restricted by label-depth
  --label-depth INTEGER         Max depth to draw labels
  --label-size INTEGER          Font size for labels
  --label-size-reduce FLOAT     Amount to reduce label size by depth
  --label-alpha INTEGER         Label alpha
  --label-alpha-reduce FLOAT    Amount to reduce label alpha by depth
  --label-colour TEXT           Font colour in form '#RRGGBBAA'
  --file-label-size INTEGER     Font size for file labels
  --file-label-colour TEXT      Font colour in form '#RRGGBBAA'
  --edge-width FLOAT            Edge line width
  --edge-width-reduce FLOAT     Amount to reduce edge width by depth
  --edge-colour TEXT            Edge colour '#RRGGBBAA' or matplotlib colormap
  --edge-style TEXT             Edge style: solid|dashed|dotted|dashdot
  --node-size INTEGER           Node dot size, set to zero to disable
  --node-colour TEXT            Node colour '#RRGGBBAA' or matplotlib colormap
  --file-node-size INTEGER      Node dot size, set to zero to disable
  --file-node-colour TEXT       Node colour in form '#RRGGBBAA'
  --colourmap-soften TEXT       Adds buffer to colourmap range
  -m, --map-by-size             Maps colours by file size rather than depth
  -s, --set-wallpaper           Sets output image as wallpaper using feh
  -v, --verbose                 Display more output than necessary
  --help                        Show this message and exit.

See https://matplotlib.org for full colourmap reference

Authors

  • Kevin Matthew Henderson

GitHub