Adding dashboard, docs and git. - selfhost - Incus configurations for my self-hosted setup.
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit b3613cb818921bdd51c75ffa05bd1452e10a71b7
 (DIR) parent aa41dd9d04b1969a786e70ea1d80477b710ce38b
 (HTM) Author: Jay Scott <me@jay.scot>
       Date:   Wed, 12 Jun 2024 22:29:38 +0100
       
       Adding dashboard, docs and git.
       
       Diffstat:
         A dashboard/dashboard.yaml            |      29 +++++++++++++++++++++++++++++
         A dashboard/files/lighttpd.conf       |      29 +++++++++++++++++++++++++++++
         A dashboard/init.sh                   |      12 ++++++++++++
         A docs/docs.yaml                      |      29 +++++++++++++++++++++++++++++
         A docs/files/lighttpd.conf            |      29 +++++++++++++++++++++++++++++
         A docs/init.sh                        |      12 ++++++++++++
         A git/files/cgitrc                    |      28 ++++++++++++++++++++++++++++
         A git/files/favicon.ico               |       0 
         A git/files/favicon.png               |       0 
         A git/files/lighttpd.conf             |      39 +++++++++++++++++++++++++++++++
         A git/files/logo.png                  |       0 
         A git/files/theme.css                 |     825 +++++++++++++++++++++++++++++++
         A git/git.yaml                        |      40 +++++++++++++++++++++++++++++++
         A git/init.sh                         |      19 +++++++++++++++++++
         M pi-hole/files/custom.list           |       4 +++-
       
       15 files changed, 1094 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/dashboard/dashboard.yaml b/dashboard/dashboard.yaml
       @@ -0,0 +1,29 @@
       +devices:
       +  htdocs:
       +    path: /srv/www
       +    source: /srv/services/dashboard
       +    type: disk
       +  certs:
       +    path: /etc/lighttpd/certs
       +    source: /srv/certs
       +    type: disk
       +    shift: true
       +
       +config:
       +  cloud-init.network-config: |
       +    version: 2
       +    ethernets:
       +      eth0:
       +        addresses:
       +          - 192.168.2.11/24
       +        gateway4: 192.168.2.1
       +  cloud-init.user-data: |
       +    #cloud-config
       +    package_upgrade: true
       +    hostname: dashboard.jay.scot
       +    timezone: Europe/London
       +    manage_resolv_conf: true
       +    resolv_conf:
       +      nameservers: ['192.168.2.10', '1.1.1.1']
       +    packages:
       +      - lighttpd
 (DIR) diff --git a/dashboard/files/lighttpd.conf b/dashboard/files/lighttpd.conf
       @@ -0,0 +1,29 @@
       +var.basedir  = "/var/www/localhost"
       +var.logdir   = "/var/log/lighttpd"
       +var.statedir = "/var/lib/lighttpd"
       +
       +include "mime-types.conf"
       +server.username      = "lighttpd"
       +server.groupname     = "lighttpd"
       +server.document-root = var.basedir + "/htdocs"
       +server.pid-file      = "/run/lighttpd.pid"
       +server.errorlog      = var.logdir  + "/error.log"
       +index-file.names     = ("index.html")
       +
       +server.modules += ( "mod_redirect", "mod_openssl")
       +
       +$SERVER["socket"] == ":443" {
       +    ssl.engine  = "enable"
       +    ssl.pemfile = "/etc/lighttpd/certs/jay.scot.cer"
       +    ssl.privkey = "/etc/lighttpd/certs/jay.scot.key"
       +    ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1.3", "Options" => "-ServerPreference")
       +
       +    server.name          = "dashboard.jay.scot"
       +    server.document-root = "/srv/www/"
       +}
       +
       +$HTTP["scheme"] == "http" {
       +    $HTTP["host"] =~ ".*" {
       +        url.redirect = (".*" => "https://%0$0")
       +    }
       +}
 (DIR) diff --git a/dashboard/init.sh b/dashboard/init.sh
       @@ -0,0 +1,12 @@
       +#!/bin/sh
       +
       +HOST=dashboard
       +
       +incus stop $HOST
       +incus delete $HOST
       +incus launch images:alpine/3.20/cloud $HOST < $HOST.yaml
       +
       +incus file push ./files/lighttpd.conf $HOST/etc/lighttpd/ -pv --mode 644
       +incus exec $HOST -- cloud-init status --wait
       +incus exec $HOST -- rc-service lighttpd start
       +
 (DIR) diff --git a/docs/docs.yaml b/docs/docs.yaml
       @@ -0,0 +1,29 @@
       +devices:
       +  htdocs:
       +    path: /srv/www
       +    source: /srv/services/docs
       +    type: disk
       +  certs:
       +    path: /etc/lighttpd/certs
       +    source: /srv/certs
       +    type: disk
       +    shift: true
       +
       +config:
       +  cloud-init.network-config: |
       +    version: 2
       +    ethernets:
       +      eth0:
       +        addresses:
       +          - 192.168.2.13/24
       +        gateway4: 192.168.2.1
       +  cloud-init.user-data: |
       +    #cloud-config
       +    package_upgrade: true
       +    hostname: docs.jay.scot
       +    timezone: Europe/London
       +    manage_resolv_conf: true
       +    resolv_conf:
       +      nameservers: ['192.168.2.10', '1.1.1.1']
       +    packages:
       +      - lighttpd
 (DIR) diff --git a/docs/files/lighttpd.conf b/docs/files/lighttpd.conf
       @@ -0,0 +1,29 @@
       +var.basedir  = "/var/www/localhost"
       +var.logdir   = "/var/log/lighttpd"
       +var.statedir = "/var/lib/lighttpd"
       +
       +include "mime-types.conf"
       +server.username      = "lighttpd"
       +server.groupname     = "lighttpd"
       +server.document-root = var.basedir + "/htdocs"
       +server.pid-file      = "/run/lighttpd.pid"
       +server.errorlog      = var.logdir  + "/error.log"
       +index-file.names     = ("index.html")
       +
       +server.modules += ( "mod_redirect", "mod_openssl")
       +
       +$SERVER["socket"] == ":443" {
       +    ssl.engine  = "enable"
       +    ssl.pemfile = "/etc/lighttpd/certs/jay.scot.cer"
       +    ssl.privkey = "/etc/lighttpd/certs/jay.scot.key"
       +    ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1.3", "Options" => "-ServerPreference")
       +
       +    server.name          = "dashboard.jay.scot"
       +    server.document-root = "/srv/www/"
       +}
       +
       +$HTTP["scheme"] == "http" {
       +    $HTTP["host"] =~ ".*" {
       +        url.redirect = (".*" => "https://%0$0")
       +    }
       +}
 (DIR) diff --git a/docs/init.sh b/docs/init.sh
       @@ -0,0 +1,12 @@
       +#!/bin/sh
       +
       +HOST=docs
       +
       +incus stop $HOST
       +incus delete $HOST
       +incus launch images:alpine/3.20/cloud $HOST < $HOST.yaml
       +
       +incus file push ./files/lighttpd.conf $HOST/etc/lighttpd/ -pv --mode 644
       +incus exec $HOST -- cloud-init status --wait
       +incus exec $HOST -- rc-service lighttpd start
       +
 (DIR) diff --git a/git/files/cgitrc b/git/files/cgitrc
       @@ -0,0 +1,28 @@
       +#
       +# cgit config
       +#
       +
       +# theme
       +css=/theme.css
       +logo=/logo.png
       +favicon=/favicon.png
       +footer=
       +readme=:README
       +
       +# header
       +root-title=git.jay.scot
       +root-desc=
       +
       +# options
       +enable-http-clone=1
       +enable-index-owner=0
       +enable-index-links=1
       +remove-suffix=1
       +enable-commit-graph=1
       +enable-log-filecount=1
       +enable-git-config=1
       +robots=noindex, nofollow
       +
       +# repos
       +virtual-root=/
       +scan-path=/srv/git
 (DIR) diff --git a/git/files/favicon.ico b/git/files/favicon.ico
       Binary files differ.
 (DIR) diff --git a/git/files/favicon.png b/git/files/favicon.png
       Binary files differ.
 (DIR) diff --git a/git/files/lighttpd.conf b/git/files/lighttpd.conf
       @@ -0,0 +1,39 @@
       +var.basedir  = "/var/www/localhost"
       +var.logdir   = "/var/log/lighttpd"
       +var.statedir = "/var/lib/lighttpd"
       +
       +include "mime-types.conf"
       +server.username      = "lighttpd"
       +server.groupname     = "lighttpd"
       +server.document-root = var.basedir + "/htdocs"
       +server.pid-file      = "/run/lighttpd.pid"
       +server.errorlog      = var.logdir  + "/error.log"
       +index-file.names     = ("index.php", "index.html", "index.htm", "default.htm")
       +
       +server.modules += ( "mod_cgi", "mod_rewrite", "mod_openssl")
       +
       +$SERVER["socket"] == ":443" {
       +    ssl.engine  = "enable"
       +    ssl.pemfile = "/etc/lighttpd/certs/jay.scot.cer"
       +    ssl.privkey = "/etc/lighttpd/certs/jay.scot.key"
       +    ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1.3", "Options" => "-ServerPreference")
       +
       +    server.name          = "git.jay.scot"
       +    server.document-root = "/usr/share/webapps/cgit/"
       +
       +    index-file.names     = ( "cgit.cgi" )
       +    cgi.assign           = ( "cgit.cgi" => "" )
       +    mimetype.assign      = ( ".css" => "text/css" )
       +    url.rewrite-once     = (
       +        "^/cgit/cgit.css"   => "/cgit.css",
       +        "^/cgit/cgit.png"   => "/cgit.png",
       +        "^/([^?/]+/[^?]*)?(?:\?(.*))?$"   => "/cgit.cgi?url=$1&$2",
       +    )
       +
       +}
       +
       +$HTTP["scheme"] == "http" {
       +    $HTTP["host"] =~ ".*" {
       +        url.redirect = (".*" => "https://%0$0")
       +    }
       +}
 (DIR) diff --git a/git/files/logo.png b/git/files/logo.png
       Binary files differ.
 (DIR) diff --git a/git/files/theme.css b/git/files/theme.css
       @@ -0,0 +1,825 @@
       +body {
       +        font-family: 'Droid Sans',sans-serif;
       +}
       +
       +div#cgit {
       +        padding: 0em;
       +        margin: 0em;
       +        font-family: 'Droid Sans',sans-serif;
       +        font-size: 14pt;
       +        color: #333;
       +        padding: 4px;
       +}
       +
       +div#cgit a {
       +        color: #3232ff;
       +        text-decoration: none;
       +}
       +
       +div#cgit a:hover {
       +        text-decoration: underline;
       +}
       +
       +div#cgit table {
       +      border-collapse: collapse;
       +}
       +
       +div#cgit table#header {
       +        width: 100%;
       +        margin-bottom: 1em;
       +}
       +
       +div#cgit table#header td.logo {
       +        width: 50px;
       +        vertical-align: top;
       +}
       +
       +div#cgit table#header td.main {
       +        font-size: 250%;
       +        padding-left: 10px;
       +        white-space: nowrap;
       +}
       +
       +div#cgit table#header td.main a {
       +        color: #000;
       +}
       +
       +div#cgit table#header td.form {
       +        text-align: right;
       +        vertical-align: bottom;
       +        padding-right: 1em;
       +        padding-bottom: 2px;
       +        white-space: nowrap;
       +}
       +
       +div#cgit table#header td.form form,
       +div#cgit table#header td.form input,
       +div#cgit table#header td.form select {
       +        font-size: 90%;
       +}
       +
       +div#cgit table#header td.sub {
       +        color: #777;
       +        border-top: solid 1px #e0e0e0;
       +        border-radius: 2px;
       +        padding-left: 10px;
       +}
       +
       +div#cgit table.tabs {
       +        border-bottom: solid 3px #e0e0e0;
       +        border-collapse: collapse;
       +        border-radius: 2px;
       +        margin-top: 2em;
       +        margin-bottom: 0px;
       +        width: 100%;
       +}
       +
       +div#cgit table.tabs td {
       +        padding: 0px 1em;
       +        vertical-align: bottom;
       +}
       +
       +div#cgit table.tabs td a {
       +        padding: 2px 0.75em;
       +        color: #777;
       +        font-size: 110%;
       +}
       +
       +div#cgit table.tabs td a.active {
       +        color: #000;
       +        background-color: #e0e0e0;
       +}
       +
       +div#cgit table.tabs td.form {
       +        text-align: right;
       +}
       +
       +div#cgit table.tabs td.form form {
       +        padding-bottom: 2px;
       +        font-size: 90%;
       +        white-space: nowrap;
       +}
       +
       +div#cgit table.tabs td.form input,
       +div#cgit table.tabs td.form select {
       +        font-size: 90%;
       +}
       +
       +div#cgit div.path {
       +        margin: 0px;
       +        padding: 5px 2em 2px 2em;
       +        color: #000;
       +        background-color: #eee;
       +}
       +
       +div#cgit div.content {
       +        margin: 0px;
       +        padding: 2em;
       +        border-bottom: solid 3px #e0e0e0;
       +}
       +
       +
       +div#cgit table.list {
       +        width: 100%;
       +        border: none;
       +        background: #D6D4CC;
       +        border-collapse: collapse;
       +}
       +
       +div#cgit table.list tr {
       +        background-image: url('body.jpg');
       +}
       +
       +div#cgit table.list tr.logheader {
       +        background: #eee;
       +}
       +
       +div#cgit table.list tr:hover {
       +        background: #e0e0e0;
       +}
       +
       +div#cgit table.list tr.nohover:hover {
       +        background-image: url('body.jpg');
       +}
       +
       +div#cgit table.list th {
       +        font-family: 'Droid Sans';
       +        font-weight: bold;
       +        padding: 0.1em 0.5em 0.05em 0.5em;
       +        vertical-align: baseline;
       +}
       +
       +div#cgit table.list td {
       +        border: none;
       +        padding: 0.1em 0.5em 0.1em 0.5em;
       +}
       +
       +div#cgit table.list td.commitgraph {
       +        font-family: 'Droid Sans Mono',monospace;
       +        white-space: pre;
       +}
       +
       +div#cgit table.list td.commitgraph .column1 {
       +        color: #a00;
       +}
       +
       +div#cgit table.list td.commitgraph .column2 {
       +        color: #0a0;
       +}
       +
       +div#cgit table.list td.commitgraph .column3 {
       +        color: #aa0;
       +}
       +
       +div#cgit table.list td.commitgraph .column4 {
       +        color: #00a;
       +}
       +
       +div#cgit table.list td.commitgraph .column5 {
       +        color: #a0a;
       +}
       +
       +div#cgit table.list td.commitgraph .column6 {
       +        color: #0aa;
       +}
       +
       +div#cgit table.list td.logsubject {
       +        font-family: 'Droid Sans Mono', monospace;
       +        font-weight: bold;
       +}
       +
       +div#cgit table.list td.logmsg {
       +        font-family: 'Droid Sans Mono', monospace;
       +        white-space: pre;
       +        padding: 0 0.5em;
       +}
       +
       +div#cgit table.list td a {
       +        color: black;
       +}
       +
       +div#cgit table.list td a.ls-dir {
       +        font-weight: bold;
       +        color: #00f;
       +}
       +
       +div#cgit table.list td a:hover {
       +        color: #00f;
       +}
       +
       +div#cgit img {
       +        width: 60px;
       +        border: none;
       +}
       +
       +div#cgit input#switch-btn {
       +        margin: 2px 0px 0px 0px;
       +}
       +
       +div#cgit td#sidebar input.txt {
       +        width: 100%;
       +        margin: 2px 0px 0px 0px;
       +}
       +
       +div#cgit table#grid {
       +        margin: 0px;
       +}
       +
       +div#cgit td#content {
       +        vertical-align: top;
       +        padding: 1em 2em 1em 1em;
       +        border: none;
       +}
       +
       +div#cgit div#summary {
       +        vertical-align: top;
       +        margin-bottom: 1em;
       +}
       +
       +div#cgit table#downloads {
       +        float: right;
       +        border-collapse: collapse;
       +        border: solid 1px #777;
       +        border-radius: 2px;
       +        margin-left: 0.5em;
       +        margin-bottom: 0.5em;
       +}
       +
       +div#cgit table#downloads th {
       +        background-color: #e0e0e0;
       +}
       +
       +div#cgit div#blob {
       +        border: solid 1px black;
       +        border-radius: 2px;
       +}
       +
       +div#cgit div.error {
       +        color: red;
       +        font-weight: bold;
       +        margin: 1em 2em;
       +}
       +
       +div#cgit a.ls-blob, div#cgit a.ls-dir, div#cgit a.ls-mod {
       +        font-family: 'Droid Sans Mono',monospace;
       +}
       +
       +div#cgit td.ls-size {
       +        text-align: right;
       +        font-family: 'Droid Sans Mono',monospace;
       +        width: 10em;
       +}
       +
       +div#cgit td.ls-mode {
       +        font-family: 'Droid Sans Mono', monospace;
       +        width: 10em;
       +}
       +
       +div#cgit table.blob {
       +        margin-top: 0.5em;
       +        border-top: solid 1px black;
       +}
       +
       +div#cgit table.blob td.lines {
       +        margin: 0; padding: 0 0 0 0.5em;
       +        vertical-align: top;
       +        color: black;
       +}
       +
       +div#cgit table.blob td.linenumbers {
       +        margin: 0; padding: 0 0.5em 0 0.5em;
       +        vertical-align: top;
       +        text-align: right;
       +        border-right: 1px solid gray;
       +}
       +
       +div#cgit table.blob pre {
       +        padding: 0; margin: 0;
       +}
       +
       +div#cgit table.blob td.linenumbers a,
       +div#cgit table.ssdiff td.lineno a {
       +        color: gray;
       +        text-align: right;
       +        text-decoration: none;
       +}
       +
       +div#cgit table.blob td.linenumbers a:hover,
       +div#cgit table.ssdiff td.lineno a:hover {
       +        color: black;
       +}
       +
       +div#cgit table.bin-blob {
       +        margin-top: 0.5em;
       +        border: solid 1px black;
       +        border-radius: 2px;
       +}
       +
       +div#cgit table.bin-blob th {
       +        font-family: 'Droid Sans Mono', monospace;
       +        white-space: pre;
       +        border: solid 1px #777;
       +        border-radius: 2px;
       +        padding: 0.5em 1em;
       +}
       +
       +div#cgit table.bin-blob td {
       +        font-family: 'Droid Sans Mono', monospace;
       +        white-space: pre;
       +        border-left: solid 1px #777;
       +        padding: 0em 1em;
       +}
       +
       +div#cgit table.nowrap td {
       +        white-space: nowrap;
       +}
       +
       +div#cgit table.commit-info {
       +        border-collapse: collapse;
       +        margin-top: 1.5em;
       +}
       +
       +div#cgit div.cgit-panel {
       +        float: right;
       +        margin-top: 1.5em;
       +}
       +
       +div#cgit div.cgit-panel table {
       +        border-collapse: collapse;
       +        border: solid 1px #aaa;
       +        background-color: #eee;
       +}
       +
       +div#cgit div.cgit-panel th {
       +        text-align: center;
       +}
       +
       +div#cgit div.cgit-panel td {
       +        padding: 0.25em 0.5em;
       +}
       +
       +div#cgit div.cgit-panel td.label {
       +        padding-right: 0.5em;
       +}
       +
       +div#cgit div.cgit-panel td.ctrl {
       +        padding-left: 0.5em;
       +}
       +
       +div#cgit table.commit-info th {
       +        text-align: left;
       +        font-weight: normal;
       +        padding: 0.1em 1em 0.1em 0.1em;
       +        vertical-align: top;
       +}
       +
       +div#cgit table.commit-info td {
       +        font-weight: normal;
       +        padding: 0.1em 1em 0.1em 0.1em;
       +}
       +
       +div#cgit div.commit-subject {
       +        font-weight: bold;
       +        font-size: 125%;
       +        margin: 1.5em 0em 0.5em 0em;
       +        padding: 0em;
       +}
       +
       +div#cgit div.commit-msg {
       +        white-space: pre;
       +        font-family: 'Droid Sans Mono', monospace;
       +}
       +
       +div#cgit div.notes-header {
       +        font-weight: bold;
       +        padding-top: 1.5em;
       +}
       +
       +div#cgit div.notes {
       +        white-space: pre;
       +        font-family: 'Droid Sans Mono', monospace;
       +        border: solid 1px #ee9;
       +        background-color: #ffd;
       +        padding: 0.3em 2em 0.3em 1em;
       +        float: left;
       +}
       +
       +div#cgit div.notes-footer {
       +        clear: left;
       +}
       +
       +div#cgit div.diffstat-header {
       +        font-weight: bold;
       +        padding-top: 1.5em;
       +}
       +
       +div#cgit table.diffstat {
       +        border-collapse: collapse;
       +        border: solid 1px #aaa;
       +        background-color: #eee;
       +}
       +
       +div#cgit table.diffstat th {
       +        font-weight: normal;
       +        text-align: left;
       +        text-decoration: underline;
       +        padding: 0.1em 1em 0.1em 0.1em;
       +        font-size: 100%;
       +}
       +
       +div#cgit table.diffstat td {
       +        padding: 0.2em 0.2em 0.1em 0.1em;
       +        font-size: 100%;
       +        border: none;
       +}
       +
       +div#cgit table.diffstat td.mode {
       +        white-space: nowrap;
       +}
       +
       +div#cgit table.diffstat td span.modechange {
       +        padding-left: 1em;
       +        color: red;
       +}
       +
       +div#cgit table.diffstat td.add a {
       +        color: #3232ff;
       +}
       +
       +div#cgit table.diffstat td.del a {
       +        color: #3232ff;
       +}
       +
       +div#cgit table.diffstat td.upd a {
       +        color: #3232ff;
       +}
       +
       +div#cgit table.diffstat td.graph {
       +        width: 500px;
       +        vertical-align: middle;
       +}
       +
       +div#cgit table.diffstat td.graph table {
       +        border: none;
       +}
       +
       +div#cgit table.diffstat td.graph td {
       +        padding: 0px;
       +        border: 0px;
       +        height: 7pt;
       +}
       +
       +div#cgit table.diffstat td.graph td.add {
       +        background-color: #99cc99;
       +}
       +
       +div#cgit table.diffstat td.graph td.rem {
       +        background-color: #ff7f7f;
       +}
       +
       +div#cgit div.diffstat-summary {
       +        color: #888;
       +        padding-top: 0.5em;
       +}
       +
       +div#cgit table.diff {
       +        width: 100%;
       +}
       +
       +div#cgit table.diff td {
       +        font-family: 'Droid Sans Mono', monospace;
       +        white-space: pre;
       +}
       +
       +div#cgit table.diff td div.head {
       +        font-weight: bold;
       +        margin-top: 1em;
       +        color: black;
       +}
       +
       +div#cgit table.diff td div.hunk {
       +        color: #3232ff;
       +}
       +
       +div#cgit table.diff td div.add {
       +        background: #d9ffd9;
       +        color: black;
       +}
       +
       +div#cgit table.diff td div.del {
       +        background: #ffcccc;
       +        color: black;
       +}
       +
       +div#cgit .sha1 {
       +        font-family: 'Droid Sans Mono', monospace;
       +        font-size: 90%;
       +}
       +
       +div#cgit .left {
       +        text-align: left;
       +}
       +
       +div#cgit .right {
       +        text-align: right;
       +}
       +
       +div#cgit table.list td.reposection {
       +        font-style: italic;
       +        color: #888;
       +}
       +
       +div#cgit a.button {
       +        font-size: 80%;
       +        padding: 0em 0.5em;
       +}
       +
       +div#cgit a.primary {
       +        font-size: 100%;
       +}
       +
       +div#cgit a.secondary {
       +        font-size: 90%;
       +}
       +
       +div#cgit td.toplevel-repo {
       +
       +}
       +
       +div#cgit table.list td.sublevel-repo {
       +        padding-left: 1.5em;
       +}
       +
       +div#cgit ul.pager {
       +        list-style-type: none;
       +        text-align: center;
       +        margin: 1em 0em 0em 0em;
       +        padding: 0;
       +}
       +
       +div#cgit ul.pager li {
       +        display: inline-block;
       +        margin: 0.25em 0.5em;
       +}
       +
       +div#cgit ul.pager a {
       +        color: #777;
       +}
       +
       +div#cgit ul.pager .current {
       +        font-weight: bold;
       +}
       +
       +div#cgit span.age-mins {
       +        font-weight: bold;
       +        color: #080;
       +}
       +
       +div#cgit span.age-hours {
       +        color: #080;
       +}
       +
       +div#cgit span.age-days {
       +        color: #040;
       +}
       +
       +div#cgit span.age-weeks {
       +        color: #444;
       +}
       +
       +div#cgit span.age-months {
       +        color: #888;
       +}
       +
       +div#cgit span.age-years {
       +        color: #bbb;
       +}
       +div#cgit div.footer {
       +        margin-top: 0.5em;
       +        text-align: center;
       +        font-size: 80%;
       +        color: #e0e0e0;
       +}
       +div#cgit a.branch-deco {
       +        color: #000;
       +        margin: 0px 0.5em;
       +        padding: 0px 0.25em;
       +        background-color: #a2ffa2;
       +        border: solid 1px #71b271;
       +        border-radius: 4px;
       +}
       +div#cgit a.tag-deco {
       +        color: #000;
       +        margin: 0px 0.5em;
       +        padding: 0px 0.25em;
       +        background-color: #ffff88;
       +        border: solid 1px #777700;
       +        border-radius: 4px;
       +}
       +div#cgit a.remote-deco {
       +        color: #000;
       +        margin: 0px 0.5em;
       +        padding: 0px 0.25em;
       +        background-color: #ccccff;
       +        border: solid 1px #000077;
       +        border-radius: 4px;
       +}
       +div#cgit a.deco {
       +        color: #000;
       +        margin: 0px 0.5em;
       +        padding: 0px 0.25em;
       +        background-color: #ff9393;
       +        border: solid 1px #b25f5f;
       +        border-radius: 4px;
       +}
       +
       +div#cgit div.commit-subject a.branch-deco,
       +div#cgit div.commit-subject a.tag-deco,
       +div#cgit div.commit-subject a.remote-deco,
       +div#cgit div.commit-subject a.deco {
       +        margin-left: 1em;
       +        font-size: 75%;
       +}
       +
       +div#cgit table.stats {
       +        border: solid 1px black;
       +        border-radius: 2px;
       +        border-collapse: collapse;
       +}
       +
       +div#cgit table.stats th {
       +        text-align: left;
       +        padding: 1px 0.5em;
       +        background-color: #eee;
       +        border: solid 1px black;
       +}
       +
       +div#cgit table.stats td {
       +        text-align: right;
       +        padding: 1px 0.5em;
       +        border: solid 1px black;
       +        border-radius: 2px;
       +}
       +
       +div#cgit table.stats td.total {
       +        font-weight: bold;
       +        text-align: left;
       +}
       +
       +div#cgit table.stats td.sum {
       +        color: #c00;
       +        font-weight: bold;
       +/*        background-color: #eee; */
       +}
       +
       +div#cgit table.stats td.left {
       +        text-align: left;
       +}
       +
       +div#cgit table.vgraph {
       +        border-collapse: separate;
       +        border: solid 1px black;
       +        height: 200px;
       +}
       +
       +div#cgit table.vgraph th {
       +        background-color: #eee;
       +        font-weight: bold;
       +        border: solid 1px white;
       +        padding: 1px 0.5em;
       +}
       +
       +div#cgit table.vgraph td {
       +        vertical-align: bottom;
       +        padding: 0px 10px;
       +}
       +
       +div#cgit table.vgraph div.bar {
       +        background-color: #eee;
       +}
       +
       +div#cgit table.hgraph {
       +        border: solid 1px black;
       +        width: 800px;
       +}
       +
       +div#cgit table.hgraph th {
       +        background-color: #eee;
       +        font-weight: bold;
       +        border: solid 1px black;
       +        padding: 1px 0.5em;
       +}
       +
       +div#cgit table.hgraph td {
       +        vertical-align: middle;
       +        padding: 2px 2px;
       +}
       +
       +div#cgit table.hgraph div.bar {
       +        background-color: #eee;
       +        height: 1em;
       +}
       +
       +div#cgit table.ssdiff {
       +        width: 100%;
       +}
       +
       +div#cgit table.ssdiff td {
       +        font-size: 75%;
       +        font-family: 'Droid Sans Mono', monospace;
       +        white-space: pre;
       +        padding: 1px 4px 1px 4px;
       +        border-left: solid 1px #aaa;
       +        border-right: solid 1px #aaa;
       +        border-radius: 2px;
       +}
       +
       +div#cgit table.ssdiff td.add {
       +        color: black;
       +        background: #cfc;
       +        min-width: 50%;
       +}
       +
       +div#cgit table.ssdiff td.add_dark {
       +        color: black;
       +        background: #aca;
       +        min-width: 50%;
       +}
       +
       +div#cgit table.ssdiff span.add {
       +        background: #cfc;
       +        font-weight: bold;
       +}
       +
       +div#cgit table.ssdiff td.del {
       +        color: black;
       +        background: #ff6666;
       +        min-width: 50%;
       +}
       +
       +div#cgit table.ssdiff td.del_dark {
       +        color: black;
       +        background: #caa;
       +        min-width: 50%;
       +}
       +
       +div#cgit table.ssdiff span.del {
       +        background: #ff6666;
       +        font-weight: bold;
       +}
       +
       +div#cgit table.ssdiff td.changed {
       +        color: black;
       +        background: #ffc;
       +        min-width: 50%;
       +}
       +
       +div#cgit table.ssdiff td.changed_dark {
       +        color: black;
       +        background: #cca;
       +        min-width: 50%;
       +}
       +
       +div#cgit table.ssdiff td.lineno {
       +        color: black;
       +        background: #eee;
       +        text-align: right;
       +        width: 3em;
       +        min-width: 3em;
       +}
       +
       +div#cgit table.ssdiff td.hunk {
       +        color: black;
       +        background: #ccf;
       +        border-top: solid 1px #aaa;
       +        border-bottom: solid 1px #aaa;
       +        border-radius: 2px;
       +}
       +
       +div#cgit table.ssdiff td.head {
       +        border-top: solid 1px #aaa;
       +        border-bottom: solid 1px #aaa;
       +        border-radius: 2px;
       +}
       +
       +div#cgit table.ssdiff td.head div.head {
       +        font-weight: bold;
       +        color: black;
       +}
       +
       +div#cgit table.ssdiff td.foot {
       +        border-top: solid 1px #aaa;
       +        border-left: none;
       +        border-right: none;
       +        border-bottom: none;
       +        border-radius: 2px;
       +}
       +
       +div#cgit table.ssdiff td.space {
       +        border: none;
       +}
       +
       +div#cgit table.ssdiff td.space div {
       +        min-height: 3em;
       +}
       +
 (DIR) diff --git a/git/git.yaml b/git/git.yaml
       @@ -0,0 +1,40 @@
       +devices:
       +  repos:
       +    path: /srv/git
       +    source: /srv/services/git
       +    type: disk
       +    shift: true
       +  certs:
       +    path: /etc/lighttpd/certs
       +    source: /srv/certs
       +    type: disk
       +    shift: true
       +
       +config:
       +  cloud-init.network-config: |
       +    version: 2
       +    ethernets:
       +      eth0:
       +        addresses:
       +          - 192.168.2.12/24
       +        gateway4: 192.168.2.1
       +  cloud-init.user-data: |
       +    #cloud-config
       +    package_upgrade: true
       +    hostname: git.jay.scot
       +    timezone: Europe/London
       +    manage_resolv_conf: true
       +    resolv_conf:
       +      nameservers: ['192.168.2.10', '1.1.1.1']
       +    users:
       +      - name: git
       +        shell: /usr/bin/git-shell
       +        homedir: /srv/git
       +        ssh_authorized_keys:
       +          - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDLmKYxwXTbyRWLG0S24RTpyfyBO6AL8Dcy0XvVZ97Do
       +    runcmd:
       +      - echo "git:*" | chpasswd -e
       +    packages:
       +      - git
       +      - cgit
       +      - lighttpd
 (DIR) diff --git a/git/init.sh b/git/init.sh
       @@ -0,0 +1,19 @@
       +#!/bin/sh
       +
       +HOST=git
       +
       +incus stop $HOST
       +incus delete $HOST
       +incus launch images:alpine/3.20/cloud $HOST < $HOST.yaml
       +
       +incus file push ./files/lighttpd.conf $HOST/etc/lighttpd/ -pv --mode 644
       +incus file push ./files/cgitrc $HOST/etc/cgitrc -pv --mode 644
       +
       +incus exec $HOST -- cloud-init status --wait
       +incus exec $HOST -- rc-service lighttpd start
       +
       +incus file push ./files/logo.png $HOST/usr/share/webapps/cgit/ -pv --mode 644
       +incus file push ./files/theme.css $HOST/usr/share/webapps/cgit/ -pv --mode 644
       +incus file push ./files/favicon.png $HOST/usr/share/webapps/cgit/ -pv --mode 644
       +
       +
 (DIR) diff --git a/pi-hole/files/custom.list b/pi-hole/files/custom.list
       @@ -1 +1,3 @@
       -192.168.2.10 hole.jay.scot
       +192.168.1.100 meshtastic.jay.scot
       +192.168.2.11 dashboard.jay.scot
       +192.168.2.10 pihole.jay.scot