Moving git frontend to stagit. - selfhost - Incus configurations for my self-hosted setup.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 1cccbb9ba340e0c0af70679f15d3c01798cd5f3e
(DIR) parent 7c972e9d2ea5caf10dc4a414fd590898415bb35a
(HTM) Author: Jay Scott <me@jay.scot>
Date: Sun, 23 Jun 2024 16:17:25 +0100
Moving git frontend to stagit.
Diffstat:
D git/files/cgitrc | 28 ----------------------------
D git/files/favicon.ico | 0
M git/files/favicon.png | 0
M git/files/lighttpd.conf | 14 ++------------
M git/files/logo.png | 0
A git/files/stagit.sh | 23 +++++++++++++++++++++++
A git/files/style.css | 71 +++++++++++++++++++++++++++++++
D git/files/theme.css | 825 -------------------------------
M git/git.yaml | 2 +-
M git/init.sh | 11 ++++++-----
10 files changed, 103 insertions(+), 871 deletions(-)
---
(DIR) diff --git a/git/files/cgitrc b/git/files/cgitrc
@@ -1,28 +0,0 @@
-#
-# 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
@@ -8,7 +8,7 @@ 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")
+index-file.names = ("index.html")
server.modules += ( "mod_cgi", "mod_rewrite", "mod_openssl")
@@ -19,17 +19,7 @@ $SERVER["socket"] == ":443" {
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",
- )
-
+ server.document-root = "/srv/www/"
}
$HTTP["scheme"] == "http" {
(DIR) diff --git a/git/files/logo.png b/git/files/logo.png
Binary files differ.
(DIR) diff --git a/git/files/stagit.sh b/git/files/stagit.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+reposdir="/srv/git"
+wwwdir="/srv/www"
+
+stagit-index "${reposdir}/"*/ | sed 's|/log\.html||g' > "${wwwdir}/index.html"
+
+for dir in "${reposdir}/"*/; do
+
+ r=$(basename "${dir}")
+ printf "%s... " "${r}"
+
+ mkdir -p "${wwwdir}/${r}"
+ cd "${wwwdir}/${r}" || continue
+ stagit "${reposdir}/${r}"
+
+ ln -sf log.html index.html
+ ln -sf ../style.css style.css
+ ln -sf ../logo.png logo.png
+ ln -sf ../favicon.png favicon.png
+
+ echo "done"
+done
(DIR) diff --git a/git/files/style.css b/git/files/style.css
@@ -0,0 +1,71 @@
+body {
+ color: #000;
+ background-color: #FFF;
+ font-family: monospace;
+ font-size: 11pt;
+ margin: 0;
+ padding: 0;
+}
+
+h1 {
+ font-size: 2em;
+ margin: 0;
+}
+
+h2, h3, h4, h5, h6 {
+ font-size: 1em;
+ margin: 0;
+}
+
+img {
+ border: 0;
+ vertical-align: middle;
+}
+
+a {
+ color: #000;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #333;
+ font-weight: bold;
+}
+
+a:target {
+ background-color: #CCC;
+}
+
+.desc {
+ color: #555;
+ margin-bottom: 1em;
+}
+
+hr {
+ border: 0;
+ border-top: 1px solid #555;
+ height: 1px;
+}
+
+pre {
+ font-family: monospace;
+}
+
+@media (prefers-color-scheme: dark) {
+ body {
+ background-color: #000;
+ color: #BDBDBD;
+ }
+ hr {
+ border-color: #222;
+ }
+ a {
+ color: #56C8FF;
+ }
+ a:target {
+ background-color: #222;
+ }
+ .desc {
+ color: #AAA;
+ }
+}
(DIR) diff --git a/git/files/theme.css b/git/files/theme.css
@@ -1,825 +0,0 @@
-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
@@ -36,5 +36,5 @@ config:
- echo "git:*" | chpasswd -e
packages:
- git
- - cgit
+ - stagit
- lighttpd
(DIR) diff --git a/git/init.sh b/git/init.sh
@@ -7,14 +7,15 @@ 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 file push ./files/stagit.sh $HOST/etc/periodic/hourly/ -pv --mode 755
incus exec $HOST -- cloud-init status --wait
incus exec $HOST -- rc-service lighttpd start
incus exec $HOST -- rc-update add sshd
-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
-
+incus exec $HOST -- mkdir -p /srv/www
+incus file push ./files/logo.png $HOST/srv/www/ -pv --mode 644
+incus file push ./files/style.css $HOST/srv/www/ -pv --mode 644
+incus file push ./files/favicon.png $HOST/srv/www/ -pv --mode 644
+incus exec $HOST -- run-parts /etc/periodic/hourly