{ options, lib, config, pkgs, ... }: let cfg = config.services.storybook; rootDomain = "bensima.com"; ports = import ../Omni/Cloud/Ports.nix; in { options.services.storybook = { enable = lib.mkEnableOption "Enable the storybook service"; port = lib.mkOption { type = lib.types.int; default = 3000; description = '' The port on which storybook will listen for incoming HTTP traffic. ''; }; dataDir = lib.mkOption { type = lib.types.path; default = "/var/storybook/"; description = "Data dir location"; }; package = lib.mkOption { type = lib.types.package; description = "storybook package to use"; }; }; config = lib.mkIf cfg.enable { systemd.services.storybook = { path = [ cfg.package pkgs.git ]; wantedBy = [ "multi-user.target" ]; preStart = '' # these must be manually created test -d /run/storybook test -f /run/storybook/env # this can be generated mkdir -p ${cfg.dataDir} ''; script = '' ${cfg.package}/bin/storybook ''; description = '' Storybook ''; serviceConfig = { Environment = [ "PORT=${toString cfg.port}" "AREA=Live" "DATA_DIR=${cfg.dataDir}" ]; EnvironmentFile = "/run/storybook/env"; KillSignal = "INT"; Type = "simple"; Restart = "on-abort"; RestartSec = "1"; }; }; # TODO: nginx web stuff services.nginx = { enable = true; recommendedGzipSettings = true; recommendedOptimisation = true; recommendedProxySettings = true; recommendedTlsSettings = true; statusPage = true; user = "nginx"; group = "nginx"; virtualHosts."storybook.${rootDomain}" = { forceSSL = true; enableACME = true; locations."/".proxyPass = "http://localhost:${toString cfg.port}"; # useACMEHost = rootDomain; }; }; networking.firewall.allowedTCPPorts = [ ports.ssh ports.http ports.https ]; }; }