diff options
| -rw-r--r-- | modules/bookwyrm.nix | 55 | ||||
| -rw-r--r-- | pkgs/bookwyrm.nix | 6 | 
2 files changed, 51 insertions, 10 deletions
diff --git a/modules/bookwyrm.nix b/modules/bookwyrm.nix index a55d115..9f48ab3 100644 --- a/modules/bookwyrm.nix +++ b/modules/bookwyrm.nix @@ -78,6 +78,24 @@ in          The name of the nginx virtual host to set up.        '';      }; + +    installWrapper = mkOption { +      default = true; +      type = types.bool; +      description = mdDoc '' +        Whether to install a wrapper script `bookworm-manage.py` into the system environmnt, +        which calls bookwyrm's `manage.py` script with the correct python path. +      ''; +    }; + +    environmentFile = mkOption { +      default = null; +      type = types.nullOr types.path; +      description = mdDoc '' +        An environment file containing config options which should not be set via Nix / not +        be contained in the nix store. +      ''; +    };    }; @@ -91,32 +109,44 @@ in          serviceConfig = mkMerge [            {              BindPaths = [ -              cfg.package.passthru.gunicorn -              cfg.package.passthru.celery +              cfg.package.gunicorn +              cfg.package.celery                cfg.stateDir              ];            }            (mkIf (cfg.bindAddress != "0.0.0.0" || cfg.port != 8000 || cfg.threads != 8) { -            ExecStart = "${lib.getExe cfg.package.passthru.gunicorn} bookwyrm.wsgi:application --threads=${toString cfg.threads} --bind ${cfg.bindAddress}:${toString cfg.port}"; - +            ExecStart = "${lib.getExe cfg.package.gunicorn} bookwyrm.wsgi:application --threads=${toString cfg.threads} --bind ${cfg.bindAddress}:${toString cfg.port}"; +          }) +          (mkIf (cfg.environmentFile != null) { +            EnvironmentFile = cfg.environmentFile;            })          ]; -        environment.PYTHONPATH = cfg.package.passthru.pythonPath; +        environment.PYTHONPATH = cfg.package.pythonPath; + +        preStart = '' +          ${lib.getExe cfg.package.manage} migrate +          # will fail after the first time +          ${lib.getExe cfg.package.manage} initdb || true +        '';        };        bookwyrm-worker = {          enable = true;          wantedBy = [ "multi-user.target" ]; -        environment.PYTHONPATH = cfg.package.passthru.pythonPath; +        environment.PYTHONPATH = cfg.package.pythonPath;          serviceConfig.BindPaths = [            cfg.stateDir          ]; +        serviceConfig.EnvironmentFile = +          mkIf (cfg.environmentFile != null) cfg.environmentFile;        };        bookwyrm-scheduler = {          enable = true;          wantedBy = [ "multi-user.target" ]; -        environment.PYTHONPATH = cfg.package.passthru.pythonPath; +        environment.PYTHONPATH = cfg.package.pythonPath; +        serviceConfig.EnvironmentFile = +          mkIf (cfg.environmentFile != null) cfg.environmentFile;        };      }; @@ -146,6 +176,15 @@ in      ];      users.groups.bookwyrm = {}; -  }; +    environment.systemPackages = mkIf cfg.installWrapper [ +      cfg.package.manage +    ]; + +    warnings = mkIf (cfg.settings ? "SECRET_KEY") [ '' +      Setting bookwyrm's SECRET_KEY via the free-form services.bookwyrm.settings.* is discouraged. +      It's better to pass an env file containing it to servies.bookwyrm.envFile instead. +      '' +    ]; +  };  } diff --git a/pkgs/bookwyrm.nix b/pkgs/bookwyrm.nix index 309e90b..0c9cb70 100644 --- a/pkgs/bookwyrm.nix +++ b/pkgs/bookwyrm.nix @@ -11,7 +11,6 @@ let    settingsWithDefaults = {      DOMAIN = "localhost";      DEBUG = false; -    SECRET_KEY = "fnord";      USE_HTTPS = false;      EMAIL = "your@email.here";      PGPORT = 5432; @@ -95,6 +94,9 @@ let      postBuild = ''        ln -s ${envfile} .env +      # needed for the python settings.py file to not fail, but not +      # used during the commands executed below, so this is safe +      export SECRET_KEY=fnord        substituteInPlace contrib/systemd/* \          --replace /opt/bookwyrm/venv/bin/gunicorn ${lib.getExe python.pkgs.gunicorn} \ @@ -104,7 +106,7 @@ let        sed -i /BindPath/d contrib/systemd/*        python manage.py compile_themes -      python manage.py collectstatic --no-input --ignore=*.scss +      python manage.py collectstatic --no-input      '';      postInstall = ''  | 
