Files
nixos/hosts/web-arm/sites/cloonar.dev.nix
Dominik Polakovics bfae290927 feat(web-arm): add AVIF image support to cloonar.dev
Implement AVIF image content negotiation with WebP fallback for
cloonar.dev website. Browser will receive AVIF if supported and
available, otherwise WebP, falling back to original JPEG/PNG.

- Add AVIF-first content negotiation in image location block
- Maintain existing WebP fallback logic
- Include .avif in long-term cache headers (365d)
- Add Vary: Accept header for proper CDN/browser caching

AVIF files should be placed at /avif/$request_uri.avif to be served.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 23:55:08 +02:00

74 lines
1.8 KiB
Nix

{ pkgs, lib, config, ... }:
let
domain = "cloonar.dev";
dataDir = "/var/www/${domain}";
in {
services.webstack.instances."${domain}" = {
authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINrxGbJ8vqOLMySIst+e2Qq06bPLPh+7fmPRM27kMBgC"
];
locations."/".extraConfig = ''
index index.html;
'';
locations."~* \.(jpe?g|png)$".extraConfig = ''
set $img_format Z;
# Check for AVIF support (highest priority)
if ($http_accept ~* "avif") {
set $img_format A;
}
if (-f $document_root/avif/$request_uri.avif) {
set $img_format "''${img_format}V";
}
# Serve AVIF if supported and available
if ($img_format = "AV") {
add_header Vary Accept;
rewrite ^ /avif/$request_uri.avif break;
}
# Reset and check for WebP support (fallback)
set $img_format Z;
if ($http_accept ~* "webp") {
set $img_format W;
}
if (-f $document_root/webp/$request_uri.webp) {
set $img_format "''${img_format}P";
}
# Serve WebP if supported and available
if ($img_format = "WP") {
add_header Vary Accept;
rewrite ^ /webp/$request_uri.webp break;
}
# If neither AVIF nor WebP matched, serve original format
add_header Vary Accept;
'';
locations."^~ /vcards/".extraConfig = ''
location ~ /\.env {
deny all;
return 404;
}
# Determine if the requested file exists
try_files $uri $uri/ /vcards/index.php$is_args$args;
'';
locations."~* \.(js|jpg|gif|png|webp|avif|css|woff2)$".extraConfig = ''
expires 365d;
add_header Pragma "public";
add_header Cache-Control "public";
'';
phpPackage = pkgs.php;
};
}