diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml
index 95a81c6077..fda77b71ac 100644
--- a/.github/workflows/doc.yml
+++ b/.github/workflows/doc.yml
@@ -26,7 +26,7 @@ jobs:
-
name: Build mkdocs Docker image
run: |
- docker build -t mkdocs -f ./doc/Dockerfile ./
+ docker build -t mkdocs - < doc/Dockerfile
-
name: Build docs
run: |
diff --git a/doc/API/API-Docs.md b/doc/API/API-Docs.md
deleted file mode 100644
index 14ec2bfefb..0000000000
--- a/doc/API/API-Docs.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/doc/API/ARP.md b/doc/API/ARP.md
index 1f0c0cb08d..33d03b8d2f 100644
--- a/doc/API/ARP.md
+++ b/doc/API/ARP.md
@@ -1,6 +1,3 @@
-source: API/ARP.md
-path: blob/master/doc/
-
### `list_arp`
Retrieve a specific ARP entry or all ARP entries for a device
diff --git a/doc/API/Alerts.md b/doc/API/Alerts.md
index 4144d13f7d..40c5f5001d 100644
--- a/doc/API/Alerts.md
+++ b/doc/API/Alerts.md
@@ -1,6 +1,3 @@
-source: API/Alerts.md
-path: blob/master/doc/
-
### `get_alert`
Get details of an alert
diff --git a/doc/API/Bills.md b/doc/API/Bills.md
index 87874b4d05..57ba80dbb8 100644
--- a/doc/API/Bills.md
+++ b/doc/API/Bills.md
@@ -1,6 +1,3 @@
-source: API/Bills.md
-path: blob/master/doc/
-
### `list_bills`
Retrieve the list of bills currently in the system.
diff --git a/doc/API/DeviceGroups.md b/doc/API/DeviceGroups.md
index fde8af6b4c..41b8616ac1 100644
--- a/doc/API/DeviceGroups.md
+++ b/doc/API/DeviceGroups.md
@@ -1,6 +1,3 @@
-source: API/DeviceGroups.md
-path: blob/master/doc/
-
### `get_devicegroups`
List all device groups.
diff --git a/doc/API/Devices.md b/doc/API/Devices.md
index 69a7a370de..e2a8a16e96 100644
--- a/doc/API/Devices.md
+++ b/doc/API/Devices.md
@@ -1,6 +1,3 @@
-source: API/Devices.md
-path: blob/master/doc/
-
### `del_device`
Delete a given device.
diff --git a/doc/API/Inventory.md b/doc/API/Inventory.md
index eb4165548b..5cb8c7c9e3 100644
--- a/doc/API/Inventory.md
+++ b/doc/API/Inventory.md
@@ -1,6 +1,3 @@
-source: API/Inventory.md
-path: blob/master/doc/
-
### `get_inventory`
Retrieve the inventory for a device. If you call this without any
diff --git a/doc/API/Locations.md b/doc/API/Locations.md
index aacd4db562..02eca8d97b 100644
--- a/doc/API/Locations.md
+++ b/doc/API/Locations.md
@@ -1,6 +1,3 @@
-source: API/Locations.md
-path: blob/master/doc/
-
### `add_location`
Add a new location
diff --git a/doc/API/Logs.md b/doc/API/Logs.md
index 91d4c4b2b1..65813dac4b 100644
--- a/doc/API/Logs.md
+++ b/doc/API/Logs.md
@@ -1,6 +1,3 @@
-source: API/Logs.md
-path: blob/master/doc/
-
All the `list_*logs` calls are aliased to `list_logs`.
Retrieve all logs or logs for a specific device.
diff --git a/doc/API/PortGroups.md b/doc/API/PortGroups.md
index 53b6651565..b76500e0b9 100644
--- a/doc/API/PortGroups.md
+++ b/doc/API/PortGroups.md
@@ -1,6 +1,3 @@
-source: API/PortGroups.md
-path: blob/master/doc/
-
### `get_graph_by_portgroup`
Get the graph based on the group type.
diff --git a/doc/API/Port_Groups.md b/doc/API/Port_Groups.md
index 1316c88922..d24b42eb1c 100644
--- a/doc/API/Port_Groups.md
+++ b/doc/API/Port_Groups.md
@@ -1,6 +1,3 @@
-source: API/Port_Groups.md
-path: blob/master/doc/
-
### `get_port_groups`
List all port groups.
diff --git a/doc/API/Ports.md b/doc/API/Ports.md
index 5931b83448..ff79cebd81 100644
--- a/doc/API/Ports.md
+++ b/doc/API/Ports.md
@@ -1,6 +1,3 @@
-source: API/Devices.md
-path: blob/master/doc/
-
### `get_all_ports`
Get info for all ports on all devices. Strongly recommend that you use
diff --git a/doc/API/Routing.md b/doc/API/Routing.md
index 43f814e059..af7a338e25 100644
--- a/doc/API/Routing.md
+++ b/doc/API/Routing.md
@@ -1,6 +1,3 @@
-source: API/Routing.md
-path: blob/master/doc/
-
### `list_bgp`
List the current BGP sessions.
diff --git a/doc/API/Services.md b/doc/API/Services.md
index fd4178804d..0956a37f00 100644
--- a/doc/API/Services.md
+++ b/doc/API/Services.md
@@ -1,6 +1,3 @@
-source: API/Services.md
-path: blob/master/doc/
-
### `list_services`
Retrieve all services
diff --git a/doc/API/Switching.md b/doc/API/Switching.md
index dba1969c7c..d9c961b9f1 100644
--- a/doc/API/Switching.md
+++ b/doc/API/Switching.md
@@ -1,6 +1,3 @@
-source: API/Switching.md
-path: blob/master/doc/
-
### `list_vlans`
Get a list of all VLANs.
diff --git a/doc/API/System.md b/doc/API/System.md
index 0c706120d4..b09bf14cf4 100644
--- a/doc/API/System.md
+++ b/doc/API/System.md
@@ -1,6 +1,3 @@
-source: API/System.md
-path: blob/master/doc/
-
### `system`
Display Librenms instance information.
diff --git a/doc/API/index.md b/doc/API/index.md
index eafef4734f..e644facea7 100644
--- a/doc/API/index.md
+++ b/doc/API/index.md
@@ -1,6 +1,3 @@
-source: API/index.md
-path: blob/master/doc/
-
## Versioning
Versioning an API is a minefield which saw us looking at numerous
diff --git a/doc/Alerting/Creating-Transport.md b/doc/Alerting/Creating-Transport.md
index 3690e11ca2..14dc597cc8 100644
--- a/doc/Alerting/Creating-Transport.md
+++ b/doc/Alerting/Creating-Transport.md
@@ -1,6 +1,3 @@
-source: Alerting/Creating-Transport.md
-path: blob/master/doc/
-
# Creating a new Transport
## File location
@@ -23,7 +20,7 @@ you want your alert to do.
`configTemplate()` - This is used to define the form that will accept
the transport config in the webui and then what data should be
-validated and how. Validation is done using [Laravel validation](https://laravel.com/docs/5.7/validation)
+validated and how. Validation is done using [Laravel validation](https://laravel.com/docs/validation)
The following function is __not__ required for new Transports and is
for legacy reasons only. `deliverAlertOld()`.
diff --git a/doc/Alerting/Device-Dependencies.md b/doc/Alerting/Device-Dependencies.md
index ddda531423..2b201a9366 100644
--- a/doc/Alerting/Device-Dependencies.md
+++ b/doc/Alerting/Device-Dependencies.md
@@ -1,6 +1,3 @@
-source: Alerting/Device-Dependencies.md
-path: blob/master/doc/
-
# Device Dependencies
It is possible to set one or more parents for a device. The aim for
diff --git a/doc/Alerting/Entities.md b/doc/Alerting/Entities.md
index 68cce563bc..4e9cc48b0e 100644
--- a/doc/Alerting/Entities.md
+++ b/doc/Alerting/Entities.md
@@ -1,6 +1,3 @@
-source: Alerting/Entities.md
-path: blob/master/doc/
-
# Entities
Entities as described earlier are based on the table and column names
diff --git a/doc/Alerting/Introduction.md b/doc/Alerting/Introduction.md
deleted file mode 100644
index 39423bf76d..0000000000
--- a/doc/Alerting/Introduction.md
+++ /dev/null
@@ -1,49 +0,0 @@
-source: Alerting/Introduction.md
-path: blob/master/doc/
-
-# Introduction
-
-To get started, you first need some alert rules which will react to
-changes with your devices before raising an alert.
-
-[Creating alert rules](Rules.md)
-
-After that you also need to tell LibreNMS how to notify you when an
-alert is raised, this is done using `Alert Transports`.
-
-[Configuring alert transports](Transports.md)
-
-The next step is not strictly required but most people find it
-useful. Creating custom alert templates will help you get the benefit
-out of the alert system in general. Whilst we include a default
-template, it is limited in the data that you will receive in the alerts.
-
-[Configuring alert templates](Templates.md)
-
-## Managing alerts
-
-When an alert has triggered you will see these in the Alerts ->
-Notifications page within the Web UI.
-
-This list has a couple of options available to it and we'll explain
-what these are here.
-
-### ACK
-
-This column provides you visibility on the status of the alert:
-
- This alert is currently active and sending
-alerts. Click this icon to acknowledge the alert.
-
- This alert is currently acknowledged
-until the alert clears. Click this icon to un-acknowledge the alert.
-
- This alert is
-currently acknowledged until the alert worsens or gets
-better, at which stage it will be automatically unacknowledged and
-alerts will resume. Click this icon to un-acknowledge the alert.
-
-### Notes
-
- This column will allow you access to the
-acknowledge/unacknowledge notes for this alert.
diff --git a/doc/Alerting/Macros.md b/doc/Alerting/Macros.md
index f63aa78bff..6e32679b61 100644
--- a/doc/Alerting/Macros.md
+++ b/doc/Alerting/Macros.md
@@ -1,6 +1,3 @@
-source: Alerting/Macros.md
-path: blob/master/doc/
-
# Macros
Macros are shorthands to either portion of rules or pure SQL enhanced with placeholders.
diff --git a/doc/Alerting/Old_Templates.md b/doc/Alerting/Old_Templates.md
deleted file mode 100644
index d12a8fbe18..0000000000
--- a/doc/Alerting/Old_Templates.md
+++ /dev/null
@@ -1,275 +0,0 @@
-source: Alerting/Templates.md
-path: blob/master/doc/
-
-# Templates
-
-Templates can be assigned to a single or a group of rules and can contain any kind of text. There is also a default template which is used for any rule that isn't associated with a template. This template can be found under `Alert Templates` page and can be edited. It also has an option revert it back to its default content.
-
-The template-parser understands `if` and `foreach` controls and replaces certain placeholders with information gathered about the alert.
-
-## Syntax
-
-Controls:
-
-- if-else (Else can be omitted): `{if %placeholder == value}Some Text{else}Other Text{/if}`
-- foreach-loop: `{foreach %faults}Key: %key
Value: %value{/foreach}`
-
-Placeholders:
-
-Placeholders are special variables that if used within the template will be replaced with the relevant data, I.e:
-
-`The device %hostname has been up for %uptime seconds` would result in the following `The device localhost has been up for 30344 seconds`.
-
-- Device ID: `%device_id`
-- Hostname of the Device: `%hostname`
-- sysName of the Device: `%sysName`
-- sysDescr of the Device: `%sysDescr`
-- hardware of the Device: `%hardware`
-- Software version of the Device: `%version`
-- location of the Device: `%location`
-- uptime of the Device (in seconds): `%uptime`
-- short uptime of the Device (28d 22h 30m 7s): `%uptime_short`
-- long uptime of the Device (28 days, 22h 30m 7s): `%uptime_long`
-- description (purpose db field) of the Device: `%description`
-- notes of the Device: `%notes`
-- notes of the alert: `%alert_notes`
-- ping timestamp (if icmp enabled): `%ping_timestamp`
-- ping loss (if icmp enabled): `%ping_loss`
-- ping min (if icmp enabled): `%ping_min`
-- ping max (if icmp enabled): `%ping_max`
-- ping avg (if icmp enabled): `%ping_avg`
-- Title for the Alert: `%title`
-- Time Elapsed, Only available on recovery (`%state == 0`): `%elapsed`
-- Alert-ID: `%id`
-- Unique-ID: `%uid`
-- Faults, Only available on alert (`%state != 0`), must be iterated in a foreach (`{foreach %faults}`). Holds all available information about the Fault, accessible in the format `%value.Column`, for example: `%value.ifDescr`. Special field `%value.string` has most Identification-information (IDs, Names, Descrs) as single string, this is the equivalent of the default used.
-- State: `%state`
-- Severity: `%severity`
-- Rule: `%rule`
-- Rule-Name: `%name`
-- Timestamp: `%timestamp`
-- Transport name: `%transport`
-
-- Contacts, must be iterated in a foreach, `%key` holds email and `%value` holds name: `%contacts`
-
-Placeholders can be used within the subjects for templates as well although %faults is most likely going to be worthless.
-
-> NOTE: Placeholder names which are contained within another need to be ordered correctly. As an example:
-
-```text
-Limit: %value.sensor_limit / %value.sensor_limit_low
-```
-
-Should be done as:
-
-```text
-Limit: %value.sensor_limit_low / %value.sensor_limit
-```
-
-The Default Template is a 'one-size-fit-all'. We highly recommend defining your own templates for your rules to include more specific information.
-
-## Examples
-
-Default Template:
-
-```text
-%title
-Severity: %severity
-{if %state == 0}Time elapsed: %elapsed{/if}
-Timestamp: %timestamp
-Unique-ID: %uid
-Rule: {if %name}%name{else}%rule{/if}
-{if %faults}Faults:
-{foreach %faults} #%key: %value.string{/foreach}{/if}
-Alert sent to: {foreach %contacts}%value <%key> {/foreach}
-```
-
-Ports Utilization Template:
-
-```text
-%title
-Device Name: %hostname
-Severity: %severity
-{if %state == 0}Time elapsed: %elapsed{/if}
-Timestamp: %timestamp
-Rule: {if %name}%name{else}%rule{/if}
-{foreach %faults}
-Physical Interface: %value.ifDescr
-Interface Description: %value.ifAlias
-Interface Speed: {calc (%value.ifSpeed/1000000000)} Gbs
-Inbound Utilization: {calc ((%value.ifInOctets_rate*8)/%value.ifSpeed)*100}%
-Outbound Utilization: {calc ((%value.ifOutOctets_rate*8)/%value.ifSpeed)*100}%
-{/foreach}
-```
-
-Storage:
-
-```text
-
-%title
-
-Device Name: %hostname
-Severity: %severity
-Uptime: %uptime_short
-{if %state == 0}Time elapsed: %elapsed{/if}
-Timestamp: %timestamp
-Location: %location
-Description: %description
-Features: %features
-Purpose: %purpose
-Notes: %notes
-
-Server: %sysName {foreach %faults}Mount Point: %value.storage_descr Percent Utilized: %value.storage_perc{/foreach}
-```
-
-Temperature Sensors:
-
-```text
-
-%title
-
-Device Name: %hostname
-Severity: %severity
-Timestamp: %timestamp
-Uptime: %uptime_short
-{if %state == 0}Time elapsed: %elapsed{/if}
-Location: %location
-Description: %description
-Features: %features
-Purpose: %purpose
-Notes: %notes
-
-Rule: {if %name}%name{else}%rule{/if}
-{if %faults}Faults:
-{foreach %faults}
-#%key: Temperature: %value.sensor_current°C
-** {calc(%value.sensor_current-%value.sensor_limit)}°C over limit
-Previous Measurement: %value.sensor_prev°C
-High Temperature Limit: %value.sensor_limit°C
-{/foreach}
-{/if}
-```
-
-Value Sensors:
-
-```text
-
-%title
-
-Device Name: %hostname
-Severity: %severity
-Timestamp: %timestamp
-Uptime: %uptime_short
-{if %state == 0}Time elapsed: %elapsed{/if}
-Location: %location
-Description: %description
-Features: %features
-Purpose: %purpose
-Notes: %notes
-
-Rule: {if %name}%name{else}%rule{/if}
-{if %faults}Faults:
-{foreach %faults}
-#%key: Sensor%value.sensor_current
-** {calc(%value.sensor_current-%value.sensor_limit)}over limit
-Previous Measurement: %value.sensor_prev
-Limit: %value.sensor_limit
-{/foreach}
-{/if}
-```
-
-Memory Alert:
-
-```text
-%title
-
-Device Name: %hostname
-Severity: %severity
-Uptime: %uptime_short
-{if %state == 0}Time elapsed: %elapsed{/if}
-Timestamp: %timestamp
-Location: %location
-Description: %description
-Notes: %notes
-
-Server: %hostname {foreach %faults}
-Memory Description: %value.mempool_descr
-Percent Utilized: %value.mempool_perc{/foreach}
-```
-
-Conditional formatting example, will display a link to the host in email or just the hostname in any other transport:
-
-```text
-{if %transport == mail}%hostname
-{else}
-%hostname
-{/if}
-```
-
-Note the use of double-quotes. Single quotes (`'`) in templates will be escaped (replaced with `\'`) in the output and should therefore be avoided.
-
-## Examples HTML
-
-Note: To use HTML emails you must set HTML email to Yes in the WebUI under Global Settings > Alerting Settings > Email transport > Use HTML emails
-
-Note: To include Graphs you must enable unauthorized graphs in config.php. Allow_unauth_graphs_cidr is optional, but more secure.
-
-```
-$config['allow_unauth_graphs_cidr'] = array('127.0.0.1/32');
-$config['allow_unauth_graphs'] = true;
-```
-
-Service Alert:
-
-```
-