btw i use nix
1{
2 pkgs,
3 config,
4 lib,
5 options,
6 colour-guesser,
7 ...
8}:
9
10let
11 cfg = config.custom.website.colour-guesser;
12in
13{
14 options = {
15 custom.website.colour-guesser = {
16 enable = lib.mkEnableOption "Colour Guesser";
17 domain = lib.mkOption {
18 type = lib.types.str;
19 default = "colour-guesser.${config.networking.domain}";
20 };
21 cname = lib.mkOption {
22 type = lib.types.str;
23 default = null;
24 description = ''
25 CNAME to create DNS records for.
26 Ignored if null
27 '';
28 };
29 };
30 };
31
32 config = lib.mkIf cfg.enable {
33 security.acme-eon.nginxCerts = [ cfg.domain ];
34 services.nginx = {
35 enable = true;
36 recommendedProxySettings = true;
37 virtualHosts."${cfg.domain}" = {
38 forceSSL = true;
39 root = "${colour-guesser.packages.${pkgs.stdenv.hostPlatform.system}.default}";
40 };
41 };
42
43 # requires dns module
44 eilean.services.dns.zones.${config.networking.domain}.records = [
45 {
46 name = "${cfg.domain}.";
47 type = "CNAME";
48 value = cfg.cname;
49 }
50 {
51 name = "www.${cfg.domain}.";
52 type = "CNAME";
53 value = cfg.cname;
54 }
55 ];
56 };
57}