diff --git a/README.md b/README.md
index 10bcff5..6211e7a 100644
--- a/README.md
+++ b/README.md
@@ -37,13 +37,264 @@ luacheck .
 
 ## Configuration Documentation
 
-<!-- TO DO -->
+This project is fully-customizable from configuration. It means that you can _safely_ pull latest changes without tweaking any Lua code (:sunglasses:).  
+The main idea is to describe the content of two "columns", displayed on your screen (please refer to the screen-shot above).  
+To achieve this, you can either use pre-defined types of entity (detailed below) or tweak global settings.
+
+<details>
+<summary>Comprehensive documentation of the `config.json` file</summary>
+<p>
+
+<!-- JS syntax to allow comments in JSON ;-) -->
+
+```javascript
+{
+	"settings": {
+		"conky": {
+			// Specific settings related to Conky itself.
+			// You can read further information about them here : <https://github.com/brndnmtthws/conky/wiki/Configurations#settings>.
+			// Entries present by default are mostly mine, working against a Cinnamon setup.
+		},
+		"timers": {
+			// Number of iterations to wait before drawing anything on the screen.
+			// It allows Conky to initialize its internals and gather some data before rendering anything.
+			// You MAY lower this value at your own risks.
+			"startup_threshold": 3,
+
+			// Number of iterations to wait before checking the user configuration (and reloading Conky if it changed).
+			// Use `null` to disable this behavior (default).
+			"config_autoreload": null,
+
+			// Number of iterations to wait before gathering current screen resolutions (and reloading Conky if it changed).
+			// This option is very useful if you are used to plug your laptop on a dock or play with multiple screens.
+			"resolution_autodetect": null
+		},
+		"display": {
+			// The width (in pixels) of the two columns drawn on screen.
+			// You MAY lower this value, but don't forget about very long content that could be displayed (i.e. IPv6 addresses).
+			"columns_width": 460,
+
+			// A subcommand to be run in order to retrieve the current screen dimensions (output MUST be formatted as `${WIDTH}x${HEIGHT}`).
+			"resolution_exec": "xdpyinfo | grep dimensions | tr -s ' ' | cut -d ' ' -f 3"
+		},
+		"font": {
+			// The font size and family to be used when writing down text on the screen.
+			// The font family SHOULD be a "Monospaced" one (see <https://en.wikipedia.org/wiki/Monospaced_font>).
+			"size": 15,
+			"family": "Consolas"
+		},
+		"colors": {
+			// Below colors are defined as RGBA values.
+			// Keys speak for themselves.
+			"default": [1, 1, 1, 1],
+			"clock_second_hand": [1, 0, 0, 1],
+			"bar_background": [0.4, 0.4, 0.4, 1],
+			"graph_in": [0, 0.5, 0.66, 1],
+			"graph_out": [1, 0.5, 0, 1]
+		},
+		"temperature": {
+			// The temperature unit that will be employed.
+			// You can either specify `F` for Fahrenheit or `C` for Celsius (default).
+			"unit": "C",
+
+			// The degree symbol that should be set before the unit.
+			// Please be careful, the one set by default required you to use a font family supporting Unicode.
+			"degree": "°",
+
+			// The string that will be added to any temperature exceeding the set threshold (see `{drive,sensor}_temperature` entities below)
+			"warning": "/!\\"
+		}
+	},
+	"content": {
+		// Entities are represented by a list of objects, each one containing (at least) a `type`.
+		// This first list will describe entities set within the left column.
+		"left": [
+			{
+				// This entity will display a clock, as present on the screen-shot above.
+				"type": "clock"
+			},
+			{
+				// This entity will render the current date-time and output it as a 'text' object.
+				// This is a regular 'text' object underly, so you MAY tweak the `align_center` setting (see `text` entity below).
+				"type": "date_time",
+				"format": "%H:%M:%S, %A %d/%m/%Y",
+				"align_center": true
+			},
+			{
+				// This entity will display an horizontal line, allowing you to separate entities and thus creating "blocks".
+				"type": "separator"
+			},
+			{
+				// A typical entity that would evaluate `var` and `arg` through Conky and show the result as a 'text' object.
+				// For example, the lines below would produce : "Hostname: ${nodename}".
+				//
+				// `arg` is fully-optional and MAY be omitted.
+				//
+				// `align_center` is fully-optional and defaults to `false`.
+				"type": "text",
+				"var": "nodename",
+				"arg": "",
+				"name": "Hostname",
+				"align_center": false
+			},
+			{
+				// This is the most powerful entity currently available.
+				// It allows you to execute (synchronously though) a subcommand and show the (STDOUT) result as a 'text' object.
+				// For example, on Debian, the lines below MIGHT produce : "Updates: 42 available".
+				//
+				// `interval` represents the number of iterations to wait before executing the command again (the output is cached).
+				// Please be careful, with `update_interval` Conky setting set to 2 seconds, such a command would be executed each 3600 * 2 seconds, or 2 hours.
+				// You MAY set `interval` to `null` to completely disable value update (the first obtained output would be kept until reloading).
+				// Inversely, you MAY set `interval` to `0` (or even omit the entry) to update it during each iteration (use at your own risks).
+				//
+				// `pre_text` and `post_text` (fully-optional values) allow you to respectively set some texts before and after obtained output.
+				// `align_center` acts described above for `text` entities.
+				//
+				// When the command fails, `on_error` content will be displayed.
+				"type": "command",
+				"exec": "apt list --upgradable -qq 2> /dev/null | wc -l",
+				"name": "Updates",
+				"interval": 3600,
+				"pre_text": "",
+				"post_text": " available",
+				"align_center": false,
+				"on_error": "Not detected"
+			},
+			{
+				// A typical entity that would evaluate `var` and `arg` through Conky and show the result as a 'bar' object.
+				// `arg` is fully-optional and MAY be omitted.
+				//
+				// `show_percent` allows you to add the numerical percentage value next to the `name` of your 'bar' object (disabled by default).
+				//
+				// You MAY use `bar` with any variable evaluating to a valid percentage.
+				"type": "bar",
+				"var": "battery_percent",
+				"arg": "",
+				"name": "Battery",
+				"show_percent": false
+			},
+			{
+				// `brightness` is a very specific entity.
+				// Through `cur_file` and `max_file`, it computes a brightness percentage ratio and produces a 'bar' object.
+				// You SHOULD specify an `interval` to avoid opening and reading two files during each iteration.
+				//
+				// For this entity, `name` is fully-optional and defaults to "Brightness" when not specified.
+				//
+				// `show_percent` is also available and MAY be tweaked.
+				//
+				// Please be careful, set file paths below MAY NOT work on your system.
+				"type": "brightness",
+				"name": "Brightness",
+				"cur_file": "/sys/class/backlight/intel_backlight/actual_brightness",
+				"max_file": "/sys/class/backlight/intel_backlight/max_brightness",
+				"interval": 10,
+				"show_percent": false
+			},
+			{
+				// This entity allows you to show a 'top'-like output for processes, based on their CPU usage.
+				// `max_processes` MAY be set between `1` and `10` (defaults to `10`).
+				"type": "top_processes",
+				"max_processes": 5
+			},
+			{
+				/* ... */
+			}
+		],
+		// This second list will describe entities set within the right column.
+		"right": [
+			{
+				// This entity relies entirely on the LM-SENSORS program.
+				// It underly uses a `sensors` call to retrieve temperature information from a chip.
+				// The identifier of the `chip` to prompt MUST be specified and could be found by manually running `sensors -A`.
+				// The final displayed value correspond to the chip temperature inputs average.
+				//
+				// `interval` acts as described for `command` type entity (see above).
+				//
+				// `threshold` represents the maximum temperature value that could be reached before adding the symbol specified in `settings.temperature.warning` (see above).
+				// You can either specify Celsius or Fahrenheit, as long as it is consistent to the unit specified in `settings.temperature.unit` (see above too).
+				//
+				// When no temperature could be computed, `on_error` will be displayed.
+				"type": "sensor_temperature",
+				"name": "CPUs",
+				"chip": "coretemp-isa-0000",
+				"interval": 5,
+				"threshold": 70,
+				"on_error": "Not detected"
+			},
+			{
+				// This entity works as the `sensor_temperature` above, but relies on the HDDTEMP program.
+				// You'll have to specify the path to the targeted drive.
+				//
+				// `wake_up` allows you to force drive wake up if needed to measure its temperature (disabled by default).
+				//
+				// `interval`, `threshold` and `on_error` acts as described for `sensor_temperature` type entity (see above).
+				"type": "drive_temperature",
+				"drive": "/dev/sda",
+				"wake_up": false,
+				"interval": 5,
+				"threshold": 60,
+				"on_error": "Not detected"
+			},
+			{
+				// This entity is a handy wrapper to the 'bar' entity.
+				// By specifying any partition `mount_point`, it will display a 'bar' representing its usage.
+				// `show_percent` acts as described above for `bar` entities (see above).
+				"type": "partition_usage",
+				"mount_point": "/home/",
+				"show_percent": false
+			},
+			{
+				// This entity will display two graphs representing the I/O rate of the specified `drive`.
+				// To set graphs colors, please refer to `settings.colors.graph_{in,out}`.
+				"type": "drive_io",
+				"drive": "/dev/sda"
+			},
+			{
+				// This entity will display two graphs representing the I/O rate of the specified network `interface`.
+				// As `drive_io` above, please refer to `settings.colors.graph_{in,out}` to set graphs colors.
+				//
+				// Please be careful, such an entity will be skipped when the interface is down (see `if_up_strictness` for further information).
+				"type": "network_interface_io",
+				"interface": "enp0s25"
+			},
+			{
+				// This entity will display each IP addresses associated to the specified network `interface`.
+				// `hide_v6` allows you to hide any IPv6 address (disabled by default).
+				//
+				// Please be careful, such an entity will be skipped when the interface is down (see `if_up_strictness` for further information).
+				"type": "network_interface_addr",
+				"interface": "enp0s25",
+				"hide_v6": false
+			},
+			{
+				// This entity is a disguised 'text' object.
+				// It allows you to show Conky version, with `{pre,post}_text` (active as within the `command` entity).
+				//
+				// `align_center` is available and acting as described above.
+				//
+				// It could be very useful to give you credits on screen-shot for instance.
+				"type": "version",
+				"pre_text": "Horloge's script on ",
+				"post_text": "",
+				"align_center": true
+			},
+			{
+				/* ... */
+			}
+		]
+	}
+}
+```
+
+</p>
+</details>
 
 ## Frequently asked questions
 
-### My Conky does not work, it <insert your very specific issue details>. What should I do ?
+### My Conky does not work, it \[insert your very specific issue details here\]. What should I do ?
 
-Please, refer to the [official Conky's FAQ](https://github.com/brndnmtthws/conky/wiki/FAQ) first.
+Please, refer to the [official Conky's FAQ](https://github.com/brndnmtthws/conky/wiki/FAQ) first.  
+If you can't find anything helpful, please [contact me](mailto:dev+conky@samuel.domains) with Conky terminal output attached.
 
 ### Your script is cool but I'd like to install it elsewhere. How could I achieve that ?
 
@@ -53,6 +304,9 @@ You'll have to tweak your `conky` execution with an additional environment varia
 CONKY_PATH="/another/path/to/" conky -c /another/path/to/conky.lua
 ```
 
+> Rationale : There is no way to fetch the project location from the configuration file itself (`conky.lua`).  
+> Fortunately for us, we may read Conky environment variables !
+
 ### How can I get the same background image ?
 
 [There](https://unsplash.com/photos/44t1AZNIMIE) it is !
diff --git a/lua/loading.lua b/lua/loading.lua
index c5b50ca..bd5779d 100644
--- a/lua/loading.lua
+++ b/lua/loading.lua
@@ -335,13 +335,13 @@ function loading.load_entities(display, number_of_updates)
             CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
     cairo_set_font_size(display, _settings.font.size)
 
-    -- Load entities in the left-column.
+    -- Load entities in the left column.
     for _, entity in ipairs(_content.left) do _load_entity(entity) end
 
-    -- Reset the "cursor" position to draw on the right-column.
+    -- Reset the "cursor" position to draw on the right column.
     x_pos, y_pos = (conky_window.width - _settings.display.columns_width), 0
 
-    -- Load entities in the right-column.
+    -- Load entities in the right column.
     for _, entity in ipairs(_content.right) do _load_entity(entity) end
 end