grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / web-apps / fluidd.nix
blobf30127dd17ad7d1391b2cc6c8d0a1d7f52ba4560
1 { config, lib, pkgs, ... }:
2 with lib;
3 let
4   cfg = config.services.fluidd;
5   moonraker = config.services.moonraker;
6 in
8   options.services.fluidd = {
9     enable = mkEnableOption "Fluidd, a Klipper web interface for managing your 3d printer";
11     package = mkPackageOption pkgs "fluidd" { };
13     hostName = mkOption {
14       type = types.str;
15       default = "localhost";
16       description = "Hostname to serve fluidd on";
17     };
19     nginx = mkOption {
20       type = types.submodule
21         (import ../web-servers/nginx/vhost-options.nix { inherit config lib; });
22       default = { };
23       example = literalExpression ''
24         {
25           serverAliases = [ "fluidd.''${config.networking.domain}" ];
26         }
27       '';
28       description = "Extra configuration for the nginx virtual host of fluidd.";
29     };
30   };
32   config = mkIf cfg.enable {
33     services.nginx = {
34       enable = true;
35       upstreams.fluidd-apiserver.servers."${moonraker.address}:${toString moonraker.port}" = { };
36       virtualHosts."${cfg.hostName}" = mkMerge [
37         cfg.nginx
38         {
39           root = mkForce "${cfg.package}/share/fluidd/htdocs";
40           locations = {
41             "/" = {
42               index = "index.html";
43               tryFiles = "$uri $uri/ /index.html";
44             };
45             "/index.html".extraConfig = ''
46               add_header Cache-Control "no-store, no-cache, must-revalidate";
47             '';
48             "/websocket" = {
49               proxyWebsockets = true;
50               proxyPass = "http://fluidd-apiserver/websocket";
51             };
52             "~ ^/(printer|api|access|machine|server)/" = {
53               proxyWebsockets = true;
54               proxyPass = "http://fluidd-apiserver$request_uri";
55             };
56           };
57         }
58       ];
59     };
60   };