vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / misc / sourcehut / default.md
blobf965c395038a3a92ba1c46259b8a37e5fdccfb95
1 # Sourcehut {#module-services-sourcehut}
3 [Sourcehut](https://sr.ht.com/) is an open-source,
4 self-hostable software development platform. The server setup can be automated using
5 [services.sourcehut](#opt-services.sourcehut.enable).
7 ## Basic usage {#module-services-sourcehut-basic-usage}
9 Sourcehut is a Python and Go based set of applications.
10 This NixOS module also provides basic configuration integrating Sourcehut into locally running
11 `services.nginx`, `services.redis.servers.sourcehut`, `services.postfix`
12 and `services.postgresql` services.
14 A very basic configuration may look like this:
15 ```nix
16 { pkgs, ... }:
17 let
18   fqdn =
19     let
20       join = hostName: domain: hostName + optionalString (domain != null) ".${domain}";
21     in join config.networking.hostName config.networking.domain;
22 in {
24   networking = {
25     hostName = "srht";
26     domain = "tld";
27     firewall.allowedTCPPorts = [ 22 80 443 ];
28   };
30   services.sourcehut = {
31     enable = true;
32     git.enable = true;
33     man.enable = true;
34     meta.enable = true;
35     nginx.enable = true;
36     postfix.enable = true;
37     postgresql.enable = true;
38     redis.enable = true;
39     settings = {
40         "sr.ht" = {
41           environment = "production";
42           global-domain = fqdn;
43           origin = "https://${fqdn}";
44           # Produce keys with srht-keygen from sourcehut.coresrht.
45           network-key = "/run/keys/path/to/network-key";
46           service-key = "/run/keys/path/to/service-key";
47         };
48         webhooks.private-key= "/run/keys/path/to/webhook-key";
49     };
50   };
52   security.acme.certs."${fqdn}".extraDomainNames = [
53     "meta.${fqdn}"
54     "man.${fqdn}"
55     "git.${fqdn}"
56   ];
58   services.nginx = {
59     enable = true;
60     # only recommendedProxySettings are strictly required, but the rest make sense as well.
61     recommendedTlsSettings = true;
62     recommendedOptimisation = true;
63     recommendedGzipSettings = true;
64     recommendedProxySettings = true;
66     # Settings to setup what certificates are used for which endpoint.
67     virtualHosts = {
68       "${fqdn}".enableACME = true;
69       "meta.${fqdn}".useACMEHost = fqdn;
70       "man.${fqdn}".useACMEHost = fqdn;
71       "git.${fqdn}".useACMEHost = fqdn;
72     };
73   };
75 ```
77   The `hostName` option is used internally to configure the nginx
78 reverse-proxy. The `settings` attribute set is
79 used by the configuration generator and the result is placed in `/etc/sr.ht/config.ini`.
81 ## Configuration {#module-services-sourcehut-configuration}
83 All configuration parameters are also stored in
84 `/etc/sr.ht/config.ini` which is generated by
85 the module and linked from the store to ensure that all values from `config.ini`
86 can be modified by the module.
88 ## Using an alternative webserver as reverse-proxy (e.g. `httpd`) {#module-services-sourcehut-httpd}
90 By default, `nginx` is used as reverse-proxy for `sourcehut`.
91 However, it's possible to use e.g. `httpd` by explicitly disabling
92 `nginx` using [](#opt-services.nginx.enable) and fixing the
93 `settings`.