diff --git a/assets/favicons/favicon.png b/assets/favicons/favicon.png new file mode 100644 index 0000000..72f673f Binary files /dev/null and b/assets/favicons/favicon.png differ diff --git a/assets/favicons/favicon.svg b/assets/favicons/favicon.svg new file mode 100644 index 0000000..e99f3fe --- /dev/null +++ b/assets/favicons/favicon.svg @@ -0,0 +1,11 @@ + + \ No newline at end of file diff --git a/hosts/lab/default.nix b/hosts/lab/default.nix index daa272e..8a8f5bb 100644 --- a/hosts/lab/default.nix +++ b/hosts/lab/default.nix @@ -6,6 +6,7 @@ ./foundry.nix ./dokuwiki.nix ./forgejo.nix + ../../modules/favicons.nix ../../modules/site.nix ./sites.nix ./fail2ban.nix diff --git a/hosts/lab/dokuwiki.nix b/hosts/lab/dokuwiki.nix index 9a3d213..b70b40f 100644 --- a/hosts/lab/dokuwiki.nix +++ b/hosts/lab/dokuwiki.nix @@ -18,6 +18,8 @@ in { services.caddy.virtualHosts."wiki.ily.rs" = { extraConfig = '' + import favicons + @health path /health-ping handle @health { respond 200 diff --git a/hosts/lab/forgejo.nix b/hosts/lab/forgejo.nix index 26ed025..4bf72bb 100644 --- a/hosts/lab/forgejo.nix +++ b/hosts/lab/forgejo.nix @@ -11,6 +11,7 @@ in services.caddy.virtualHosts."git.ily.rs" = { extraConfig = '' + import favicons reverse_proxy localhost:${toString srv.HTTP_PORT} encode zstd gzip ''; diff --git a/hosts/lab/foundry.nix b/hosts/lab/foundry.nix index 2c64480..c3f71e2 100644 --- a/hosts/lab/foundry.nix +++ b/hosts/lab/foundry.nix @@ -2,6 +2,7 @@ { services.caddy.virtualHosts."foundry.ily.rs" = { extraConfig = '' + import favicons reverse_proxy localhost:30000 encode zstd gzip ''; diff --git a/hosts/lab/shlink.nix b/hosts/lab/shlink.nix index d73751f..010aeed 100644 --- a/hosts/lab/shlink.nix +++ b/hosts/lab/shlink.nix @@ -40,6 +40,8 @@ services.caddy.virtualHosts."links.ily.rs" = { extraConfig = '' + import favicons + @health path /health-ping handle @health { respond 200 diff --git a/hosts/lab/sites.nix b/hosts/lab/sites.nix index bd40fd7..6773029 100644 --- a/hosts/lab/sites.nix +++ b/hosts/lab/sites.nix @@ -49,6 +49,8 @@ in # (light_theme/dark_theme/extra_themes) needs 0.22+. Pull from unstable. extraBuildPackages = [ unstable.zola ]; caddyConfig = '' + import favicons + root * /srv/website/repo/public encode zstd gzip diff --git a/hosts/lab/tinyauth.nix b/hosts/lab/tinyauth.nix index cd782e3..b9ee9e2 100644 --- a/hosts/lab/tinyauth.nix +++ b/hosts/lab/tinyauth.nix @@ -16,6 +16,7 @@ services.caddy.virtualHosts."auth.ily.rs" = { extraConfig = '' + import favicons reverse_proxy localhost:3002 encode zstd gzip ''; diff --git a/modules/favicons.nix b/modules/favicons.nix new file mode 100644 index 0000000..840d388 --- /dev/null +++ b/modules/favicons.nix @@ -0,0 +1,18 @@ +{ ... }: +let + faviconRoot = ../assets/favicons; +in +{ + services.caddy.extraConfig = '' + (favicons) { + @favicon path /favicon.ico /favicon.svg /favicon.png /apple-touch-icon.png /apple-touch-icon-precomposed.png + handle @favicon { + root * ${faviconRoot} + @needs_png path /favicon.ico /apple-touch-icon.png /apple-touch-icon-precomposed.png + rewrite @needs_png /favicon.png + header Cache-Control "public, max-age=86400" + file_server + } + } + ''; +} diff --git a/modules/site.nix b/modules/site.nix index bd41de7..223145c 100644 --- a/modules/site.nix +++ b/modules/site.nix @@ -176,11 +176,13 @@ in ${site.domain}.extraConfig = if site.caddyConfig != null then site.caddyConfig else if site.static then '' + import favicons root * ${site.dataDir}/repo/${site.buildOutputDir} encode zstd gzip try_files {path} /index.html file_server '' else '' + import favicons reverse_proxy localhost:${toString site.port} encode zstd gzip ''; @@ -193,6 +195,8 @@ in ) cfg) ++ (mapAttrsToList (name: site: let previewDataDir = "/srv/${name}-preview"; in { ${site.preview.domain}.extraConfig = if site.static then '' + import favicons + @health path /health-ping handle @health { respond 200 @@ -205,6 +209,8 @@ in file_server } '' else '' + import favicons + @health path /health-ping handle @health { respond 200