1 { lib, config, pkgs, flakes, ... }:
3 cfg = config.myServices.websites.nicecoop.copanier;
4 pcfg = config.myEnv.websites.nicecoop.copanier;
5 hostname = "copanier.nc.immae.dev";
6 socket = "/run/nicecoop_copanier/socket.sock";
7 copanier = flakes.subflakes.public.copanier.defaultPackage.x86_64-linux;
9 options.myServices.websites.nicecoop.copanier.enable = lib.mkEnableOption "enable nicecoop's copanier website";
11 config = lib.mkIf cfg.enable {
12 services.websites.env.integration.vhostConfs.nicecoop_copanier = {
13 certName = "integration";
22 ProxyPassMatch ^/.well-known/acme-challenge !
23 ProxyPassMatch ^/static !
24 ProxyPass / unix://${socket}|http://${hostname}/
25 ProxyPassReverse / unix://${socket}|http://${hostname}/
26 Alias /static ${copanier}/${copanier.python.sitePackages}/copanier/static
27 <Directory ${copanier}/${copanier.python.sitePackages}/copanier/static>
35 secrets.keys."websites/nicecoop/copanier" = {
40 COPANIER_DATA_ROOT=/var/lib/nicecoop_copanier
41 COPANIER_SITE_URL=https://${hostname}
42 COPANIER_SITE_NAME=Copanier Nicecoop
43 COPANIER_SITE_DESCRIPTION=Copanier
44 COPANIER_XLSX_FILENAME=produits
45 COPANIER_SEND_EMAILS=True
46 COPANIER_SMTP_HOST=${pcfg.smtp.host}
47 COPANIER_SMTP_PASSWORD=${pcfg.smtp.password}
48 COPANIER_SMTP_LOGIN=${pcfg.smtp.email}
49 COPANIER_FROM_EMAIL=${pcfg.smtp.email}
50 COPANIER_EMAIL_SIGNATURE=Nicecoop
51 COPANIER_STAFF=${builtins.concatStringsSep " " pcfg.staff}
54 systemd.services.nicecoop-copanier = {
55 description = "Nicecoop Copanier website";
56 after = [ "network.target" ];
57 wantedBy = [ "multi-user.target" ];
60 EnvironmentFile = config.secrets.fullPaths."websites/nicecoop/copanier";
63 python = copanier.python.withPackages (p: [ p.gunicorn p.uvloop copanier ]);
65 "${python}/bin/gunicorn -k roll.worker.Worker copanier:app --bind unix:${socket}";
69 StandardOutput = "journal";
70 StandardError = "inherit";
71 StateDirectory = "nicecoop_copanier";
72 RuntimeDirectory = "nicecoop_copanier";