nixos/manual: remove links from program listings
markdown cannot represent those links. remove them all now instead of in each chapter conversion to keep the diff for each chapter small and more understandable.
This commit is contained in:
@@ -60,8 +60,8 @@
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "ibus";
|
enabled = "ibus";
|
||||||
<link linkend="opt-i18n.inputMethod.ibus.engines">ibus.engines</link> = with pkgs.ibus-engines; [ anthy hangul mozc ];
|
ibus.engines = with pkgs.ibus-engines; [ anthy hangul mozc ];
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
@@ -151,8 +151,8 @@ ibus.engines = with pkgs.ibus-engines; [ table table-others ];
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "fcitx";
|
enabled = "fcitx";
|
||||||
<link linkend="opt-i18n.inputMethod.fcitx.engines">fcitx.engines</link> = with pkgs.fcitx-engines; [ mozc hangul m17n ];
|
fcitx.engines = with pkgs.fcitx-engines; [ mozc hangul m17n ];
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ i18n.inputMethod = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "nabi";
|
enabled = "nabi";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
@@ -242,7 +242,7 @@ i18n.inputMethod = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "uim";
|
enabled = "uim";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
@@ -267,7 +267,7 @@ i18n.inputMethod = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "hime";
|
enabled = "hime";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
@@ -284,7 +284,7 @@ i18n.inputMethod = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "kime";
|
enabled = "kime";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
setting <literal>programs.digitalbitbox</literal> to <literal>true</literal>
|
setting <literal>programs.digitalbitbox</literal> to <literal>true</literal>
|
||||||
in a manner similar to
|
in a manner similar to
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-programs.digitalbitbox.enable"/> = true;
|
programs.digitalbitbox.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
and bundles the <literal>digitalbitbox</literal> package (see
|
and bundles the <literal>digitalbitbox</literal> package (see
|
||||||
<xref
|
<xref
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
<literal>digitalbitbox</literal> package which could be installed as
|
<literal>digitalbitbox</literal> package which could be installed as
|
||||||
follows:
|
follows:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-environment.systemPackages"/> = [
|
environment.systemPackages = [
|
||||||
pkgs.digitalbitbox
|
pkgs.digitalbitbox
|
||||||
];
|
];
|
||||||
</programlisting>
|
</programlisting>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
The digitalbitbox hardware package enables the udev rules for Digital Bitbox
|
The digitalbitbox hardware package enables the udev rules for Digital Bitbox
|
||||||
devices and may be installed as follows:
|
devices and may be installed as follows:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-hardware.digitalbitbox.enable"/> = true;
|
hardware.digitalbitbox.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@@ -63,8 +63,8 @@
|
|||||||
by means of overriding as follows:
|
by means of overriding as follows:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
programs.digitalbitbox = {
|
programs.digitalbitbox = {
|
||||||
<link linkend="opt-programs.digitalbitbox.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-programs.digitalbitbox.package">package</link> = pkgs.digitalbitbox.override {
|
package = pkgs.digitalbitbox.override {
|
||||||
udevRule51 = "something else";
|
udevRule51 = "something else";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
To enable Plotinus, add the following to your
|
To enable Plotinus, add the following to your
|
||||||
<filename>configuration.nix</filename>:
|
<filename>configuration.nix</filename>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-programs.plotinus.enable"/> = true;
|
programs.plotinus.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|||||||
@@ -57,37 +57,36 @@
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
NixOS supports fetching ACME certificates for you by setting
|
NixOS supports fetching ACME certificates for you by setting
|
||||||
<literal><link linkend="opt-services.nginx.virtualHosts._name_.enableACME">enableACME</link>
|
<literal>enableACME = true;</literal> in a virtualHost config. We first create self-signed
|
||||||
= true;</literal> in a virtualHost config. We first create self-signed
|
|
||||||
placeholder certificates in place of the real ACME certs. The placeholder
|
placeholder certificates in place of the real ACME certs. The placeholder
|
||||||
certs are overwritten when the ACME certs arrive. For
|
certs are overwritten when the ACME certs arrive. For
|
||||||
<literal>foo.example.com</literal> the config would look like this:
|
<literal>foo.example.com</literal> the config would look like this:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-security.acme.acceptTerms" /> = true;
|
security.acme.acceptTerms = true;
|
||||||
<xref linkend="opt-security.acme.defaults.email" /> = "admin+acme@example.com";
|
security.acme.defaults.email = "admin+acme@example.com";
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
<link linkend="opt-services.nginx.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts">virtualHosts</link> = {
|
virtualHosts = {
|
||||||
"foo.example.com" = {
|
"foo.example.com" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.forceSSL">forceSSL</link> = true;
|
forceSSL = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">enableACME</link> = true;
|
enableACME = true;
|
||||||
# All serverAliases will be added as <link linkend="opt-security.acme.certs._name_.extraDomainNames">extra domain names</link> on the certificate.
|
# All serverAliases will be added as extra domain names on the certificate.
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.serverAliases">serverAliases</link> = [ "bar.example.com" ];
|
serverAliases = [ "bar.example.com" ];
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.root">root</link> = "/var/www";
|
root = "/var/www";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# We can also add a different vhost and reuse the same certificate
|
# We can also add a different vhost and reuse the same certificate
|
||||||
# but we have to append extraDomainNames manually beforehand:
|
# but we have to append extraDomainNames manually beforehand:
|
||||||
# <link linkend="opt-security.acme.certs._name_.extraDomainNames">security.acme.certs."foo.example.com".extraDomainNames</link> = [ "baz.example.com" ];
|
# security.acme.certs."foo.example.com".extraDomainNames = [ "baz.example.com" ];
|
||||||
"baz.example.com" = {
|
"baz.example.com" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.forceSSL">forceSSL</link> = true;
|
forceSSL = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.useACMEHost">useACMEHost</link> = "foo.example.com";
|
useACMEHost = "foo.example.com";
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.root">root</link> = "/var/www";
|
root = "/var/www";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -114,41 +113,41 @@ services.nginx = {
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-security.acme.acceptTerms" /> = true;
|
security.acme.acceptTerms = true;
|
||||||
<xref linkend="opt-security.acme.defaults.email" /> = "admin+acme@example.com";
|
security.acme.defaults.email = "admin+acme@example.com";
|
||||||
|
|
||||||
# /var/lib/acme/.challenges must be writable by the ACME user
|
# /var/lib/acme/.challenges must be writable by the ACME user
|
||||||
# and readable by the Nginx user. The easiest way to achieve
|
# and readable by the Nginx user. The easiest way to achieve
|
||||||
# this is to add the Nginx user to the ACME group.
|
# this is to add the Nginx user to the ACME group.
|
||||||
<link linkend="opt-users.users._name_.extraGroups">users.users.nginx.extraGroups</link> = [ "acme" ];
|
users.users.nginx.extraGroups = [ "acme" ];
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
<link linkend="opt-services.nginx.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts">virtualHosts</link> = {
|
virtualHosts = {
|
||||||
"acmechallenge.example.com" = {
|
"acmechallenge.example.com" = {
|
||||||
# Catchall vhost, will redirect users to HTTPS for all vhosts
|
# Catchall vhost, will redirect users to HTTPS for all vhosts
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.serverAliases">serverAliases</link> = [ "*.example.com" ];
|
serverAliases = [ "*.example.com" ];
|
||||||
locations."/.well-known/acme-challenge" = {
|
locations."/.well-known/acme-challenge" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.root">root</link> = "/var/lib/acme/.challenges";
|
root = "/var/lib/acme/.challenges";
|
||||||
};
|
};
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.return">return</link> = "301 https://$host$request_uri";
|
return = "301 https://$host$request_uri";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
# Alternative config for Apache
|
# Alternative config for Apache
|
||||||
<link linkend="opt-users.users._name_.extraGroups">users.users.wwwrun.extraGroups</link> = [ "acme" ];
|
users.users.wwwrun.extraGroups = [ "acme" ];
|
||||||
services.httpd = {
|
services.httpd = {
|
||||||
<link linkend="opt-services.httpd.enable">enable = true;</link>
|
enable = true;
|
||||||
<link linkend="opt-services.httpd.virtualHosts">virtualHosts</link> = {
|
virtualHosts = {
|
||||||
"acmechallenge.example.com" = {
|
"acmechallenge.example.com" = {
|
||||||
# Catchall vhost, will redirect users to HTTPS for all vhosts
|
# Catchall vhost, will redirect users to HTTPS for all vhosts
|
||||||
<link linkend="opt-services.httpd.virtualHosts._name_.serverAliases">serverAliases</link> = [ "*.example.com" ];
|
serverAliases = [ "*.example.com" ];
|
||||||
# /var/lib/acme/.challenges must be writable by the ACME user and readable by the Apache user.
|
# /var/lib/acme/.challenges must be writable by the ACME user and readable by the Apache user.
|
||||||
# By default, this is the case.
|
# By default, this is the case.
|
||||||
<link linkend="opt-services.httpd.virtualHosts._name_.documentRoot">documentRoot</link> = "/var/lib/acme/.challenges";
|
documentRoot = "/var/lib/acme/.challenges";
|
||||||
<link linkend="opt-services.httpd.virtualHosts._name_.extraConfig">extraConfig</link> = ''
|
extraConfig = ''
|
||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
RewriteCond %{HTTPS} off
|
RewriteCond %{HTTPS} off
|
||||||
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge [NC]
|
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge [NC]
|
||||||
@@ -164,16 +163,16 @@ services.httpd = {
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-security.acme.certs"/>."foo.example.com" = {
|
security.acme.certs."foo.example.com" = {
|
||||||
<link linkend="opt-security.acme.certs._name_.webroot">webroot</link> = "/var/lib/acme/.challenges";
|
webroot = "/var/lib/acme/.challenges";
|
||||||
<link linkend="opt-security.acme.certs._name_.email">email</link> = "foo@example.com";
|
email = "foo@example.com";
|
||||||
# Ensure that the web server you use can read the generated certs
|
# Ensure that the web server you use can read the generated certs
|
||||||
# Take a look at the <link linkend="opt-services.nginx.group">group</link> option for the web server you choose.
|
# Take a look at the group option for the web server you choose.
|
||||||
<link linkend="opt-security.acme.certs._name_.group">group</link> = "nginx";
|
group = "nginx";
|
||||||
# Since we have a wildcard vhost to handle port 80,
|
# Since we have a wildcard vhost to handle port 80,
|
||||||
# we can generate certs for anything!
|
# we can generate certs for anything!
|
||||||
# Just make sure your DNS resolves them.
|
# Just make sure your DNS resolves them.
|
||||||
<link linkend="opt-security.acme.certs._name_.extraDomainNames">extraDomainNames</link> = [ "mail.example.com" ];
|
extraDomainNames = [ "mail.example.com" ];
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
@@ -203,11 +202,11 @@ services.httpd = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.bind = {
|
services.bind = {
|
||||||
<link linkend="opt-services.bind.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.bind.extraConfig">extraConfig</link> = ''
|
extraConfig = ''
|
||||||
include "/var/lib/secrets/dnskeys.conf";
|
include "/var/lib/secrets/dnskeys.conf";
|
||||||
'';
|
'';
|
||||||
<link linkend="opt-services.bind.zones">zones</link> = [
|
zones = [
|
||||||
rec {
|
rec {
|
||||||
name = "example.com";
|
name = "example.com";
|
||||||
file = "/var/db/bind/${name}";
|
file = "/var/db/bind/${name}";
|
||||||
@@ -218,14 +217,14 @@ services.bind = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Now we can configure ACME
|
# Now we can configure ACME
|
||||||
<xref linkend="opt-security.acme.acceptTerms" /> = true;
|
security.acme.acceptTerms = true;
|
||||||
<xref linkend="opt-security.acme.defaults.email" /> = "admin+acme@example.com";
|
security.acme.defaults.email = "admin+acme@example.com";
|
||||||
<xref linkend="opt-security.acme.certs" />."example.com" = {
|
security.acme.certs."example.com" = {
|
||||||
<link linkend="opt-security.acme.certs._name_.domain">domain</link> = "*.example.com";
|
domain = "*.example.com";
|
||||||
<link linkend="opt-security.acme.certs._name_.dnsProvider">dnsProvider</link> = "rfc2136";
|
dnsProvider = "rfc2136";
|
||||||
<link linkend="opt-security.acme.certs._name_.credentialsFile">credentialsFile</link> = "/var/lib/secrets/certs.secret";
|
credentialsFile = "/var/lib/secrets/certs.secret";
|
||||||
# We don't need to wait for propagation since this is a local DNS server
|
# We don't need to wait for propagation since this is a local DNS server
|
||||||
<link linkend="opt-security.acme.certs._name_.dnsPropagationCheck">dnsPropagationCheck</link> = false;
|
dnsPropagationCheck = false;
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
@@ -296,23 +295,23 @@ systemd.services.dns-rfc2136-conf = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
# Configure ACME appropriately
|
# Configure ACME appropriately
|
||||||
<xref linkend="opt-security.acme.acceptTerms" /> = true;
|
security.acme.acceptTerms = true;
|
||||||
<xref linkend="opt-security.acme.defaults.email" /> = "admin+acme@example.com";
|
security.acme.defaults.email = "admin+acme@example.com";
|
||||||
<xref linkend="opt-security.acme.defaults" /> = {
|
security.acme.defaults = {
|
||||||
<link linkend="opt-security.acme.defaults.dnsProvider">dnsProvider</link> = "rfc2136";
|
dnsProvider = "rfc2136";
|
||||||
<link linkend="opt-security.acme.defaults.credentialsFile">credentialsFile</link> = "/var/lib/secrets/certs.secret";
|
credentialsFile = "/var/lib/secrets/certs.secret";
|
||||||
# We don't need to wait for propagation since this is a local DNS server
|
# We don't need to wait for propagation since this is a local DNS server
|
||||||
<link linkend="opt-security.acme.defaults.dnsPropagationCheck">dnsPropagationCheck</link> = false;
|
dnsPropagationCheck = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
# For each virtual host you would like to use DNS-01 validation with,
|
# For each virtual host you would like to use DNS-01 validation with,
|
||||||
# set acmeRoot = null
|
# set acmeRoot = null
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
<link linkend="opt-services.nginx.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts">virtualHosts</link> = {
|
virtualHosts = {
|
||||||
"foo.example.com" = {
|
"foo.example.com" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">enableACME</link> = true;
|
enableACME = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.acmeRoot">acmeRoot</link> = null;
|
acmeRoot = null;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -349,8 +348,8 @@ security.acme.certs."mail.example.com".postRun = ''
|
|||||||
|
|
||||||
# Now you must augment OpenSMTPD's systemd service to load
|
# Now you must augment OpenSMTPD's systemd service to load
|
||||||
# the certificate files.
|
# the certificate files.
|
||||||
<link linkend="opt-systemd.services._name_.requires">systemd.services.opensmtpd.requires</link> = ["acme-finished-mail.example.com.target"];
|
systemd.services.opensmtpd.requires = ["acme-finished-mail.example.com.target"];
|
||||||
<link linkend="opt-systemd.services._name_.serviceConfig">systemd.services.opensmtpd.serviceConfig.LoadCredential</link> = let
|
systemd.services.opensmtpd.serviceConfig.LoadCredential = let
|
||||||
certDir = config.security.acme.certs."mail.example.com".directory;
|
certDir = config.security.acme.certs."mail.example.com".directory;
|
||||||
in [
|
in [
|
||||||
"cert.pem:${certDir}/cert.pem"
|
"cert.pem:${certDir}/cert.pem"
|
||||||
|
|||||||
@@ -23,8 +23,8 @@
|
|||||||
<para>
|
<para>
|
||||||
To enable PostgreSQL, add the following to your <filename>configuration.nix</filename>:
|
To enable PostgreSQL, add the following to your <filename>configuration.nix</filename>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.postgresql.enable"/> = true;
|
services.postgresql.enable = true;
|
||||||
<xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql_11;
|
services.postgresql.package = pkgs.postgresql_11;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
Note that you are required to specify the desired version of PostgreSQL (e.g. <literal>pkgs.postgresql_11</literal>). Since upgrading your PostgreSQL version requires a database dump and reload (see below), NixOS cannot provide a default value for <xref linkend="opt-services.postgresql.package"/> such as the most recent release of PostgreSQL.
|
Note that you are required to specify the desired version of PostgreSQL (e.g. <literal>pkgs.postgresql_11</literal>). Since upgrading your PostgreSQL version requires a database dump and reload (see below), NixOS cannot provide a default value for <xref linkend="opt-services.postgresql.package"/> such as the most recent release of PostgreSQL.
|
||||||
</para>
|
</para>
|
||||||
@@ -45,7 +45,7 @@ Type "help" for help.
|
|||||||
<para>
|
<para>
|
||||||
By default, PostgreSQL stores its databases in <filename>/var/lib/postgresql/$psqlSchema</filename>. You can override this using <xref linkend="opt-services.postgresql.dataDir"/>, e.g.
|
By default, PostgreSQL stores its databases in <filename>/var/lib/postgresql/$psqlSchema</filename>. You can override this using <xref linkend="opt-services.postgresql.dataDir"/>, e.g.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.postgresql.dataDir"/> = "/data/postgresql";
|
services.postgresql.dataDir = "/data/postgresql";
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
@@ -71,7 +71,7 @@ Type "help" for help.
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
<xref linkend="opt-environment.systemPackages" /> = [
|
environment.systemPackages = [
|
||||||
(let
|
(let
|
||||||
# XXX specify the postgresql package you'd like to upgrade to.
|
# XXX specify the postgresql package you'd like to upgrade to.
|
||||||
# Do not forget to list the extensions you need.
|
# Do not forget to list the extensions you need.
|
||||||
@@ -87,8 +87,8 @@ Type "help" for help.
|
|||||||
|
|
||||||
export NEWBIN="${newPostgres}/bin"
|
export NEWBIN="${newPostgres}/bin"
|
||||||
|
|
||||||
export OLDDATA="${config.<xref linkend="opt-services.postgresql.dataDir"/>}"
|
export OLDDATA="${config.services.postgresql.dataDir}"
|
||||||
export OLDBIN="${config.<xref linkend="opt-services.postgresql.package"/>}/bin"
|
export OLDBIN="${config.services.postgresql.package}/bin"
|
||||||
|
|
||||||
install -d -m 0700 -o postgres -g postgres "$NEWDATA"
|
install -d -m 0700 -o postgres -g postgres "$NEWDATA"
|
||||||
cd "$NEWDATA"
|
cd "$NEWDATA"
|
||||||
@@ -189,8 +189,8 @@ postgresql_11.pkgs.pg_partman postgresql_11.pkgs.pgroonga
|
|||||||
<para>
|
<para>
|
||||||
To add plugins via NixOS configuration, set <literal>services.postgresql.extraPlugins</literal>:
|
To add plugins via NixOS configuration, set <literal>services.postgresql.extraPlugins</literal>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.postgresql.package"/> = pkgs.postgresql_11;
|
services.postgresql.package = pkgs.postgresql_11;
|
||||||
<xref linkend="opt-services.postgresql.extraPlugins"/> = with pkgs.postgresql_11.pkgs; [
|
services.postgresql.extraPlugins = with pkgs.postgresql_11.pkgs; [
|
||||||
pg_repack
|
pg_repack
|
||||||
postgis
|
postgis
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
To enable Flatpak, add the following to your
|
To enable Flatpak, add the following to your
|
||||||
<filename>configuration.nix</filename>:
|
<filename>configuration.nix</filename>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.flatpak.enable"/> = true;
|
services.flatpak.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
in other cases, you will need to add something like the following to your
|
in other cases, you will need to add something like the following to your
|
||||||
<filename>configuration.nix</filename>:
|
<filename>configuration.nix</filename>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-xdg.portal.extraPortals"/> = [ pkgs.xdg-desktop-portal-gtk ];
|
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
|
|||||||
@@ -375,8 +375,8 @@ in [...]
|
|||||||
To install and enable the <command>systemd</command> user service for Emacs
|
To install and enable the <command>systemd</command> user service for Emacs
|
||||||
daemon, add the following to your <filename>configuration.nix</filename>:
|
daemon, add the following to your <filename>configuration.nix</filename>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.emacs.enable"/> = true;
|
services.emacs.enable = true;
|
||||||
<xref linkend="opt-services.emacs.package"/> = import /home/cassou/.emacs.d { pkgs = pkgs; };
|
services.emacs.package = import /home/cassou/.emacs.d { pkgs = pkgs; };
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@@ -459,8 +459,8 @@ emacsclient --create-frame --tty # opens a new frame on the current terminal
|
|||||||
Emacs daemon is not wanted for all users, it is possible to install the
|
Emacs daemon is not wanted for all users, it is possible to install the
|
||||||
service but not globally enable it:
|
service but not globally enable it:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.emacs.enable"/> = false;
|
services.emacs.enable = false;
|
||||||
<xref linkend="opt-services.emacs.install"/> = true;
|
services.emacs.install = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<para>
|
<para>
|
||||||
To enable Trezor support, add the following to your <filename>configuration.nix</filename>:
|
To enable Trezor support, add the following to your <filename>configuration.nix</filename>:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.trezord.enable"/> = true;
|
services.trezord.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
This will add all necessary udev rules and start Trezor Bridge.
|
This will add all necessary udev rules and start Trezor Bridge.
|
||||||
</para>
|
</para>
|
||||||
|
|||||||
@@ -28,14 +28,14 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
services.mailman = {
|
services.mailman = {
|
||||||
<link linkend="opt-services.mailman.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.mailman.serve.enable">serve.enable</link> = true;
|
serve.enable = true;
|
||||||
<link linkend="opt-services.mailman.hyperkitty.enable">hyperkitty.enable</link> = true;
|
hyperkitty.enable = true;
|
||||||
<link linkend="opt-services.mailman.webHosts">webHosts</link> = ["lists.example.org"];
|
webHosts = ["lists.example.org"];
|
||||||
<link linkend="opt-services.mailman.siteOwner">siteOwner</link> = "mailman@example.org";
|
siteOwner = "mailman@example.org";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">services.nginx.virtualHosts."lists.example.org".enableACME</link> = true;
|
services.nginx.virtualHosts."lists.example.org".enableACME = true;
|
||||||
<link linkend="opt-networking.firewall.allowedTCPPorts">networking.firewall.allowedTCPPorts</link> = [ 25 80 443 ];
|
networking.firewall.allowedTCPPorts = [ 25 80 443 ];
|
||||||
}</programlisting>
|
}</programlisting>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
mailman = {
|
mailman = {
|
||||||
enable = true;
|
enable = true;
|
||||||
siteOwner = "mailman@example.org";
|
siteOwner = "mailman@example.org";
|
||||||
<link linkend="opt-services.mailman.enablePostfix">enablePostfix</link> = false;
|
enablePostfix = false;
|
||||||
settings.mta = {
|
settings.mta = {
|
||||||
incoming = "mailman.mta.exim4.LMTP";
|
incoming = "mailman.mta.exim4.LMTP";
|
||||||
outgoing = "mailman.mta.deliver.deliver";
|
outgoing = "mailman.mta.deliver.deliver";
|
||||||
|
|||||||
@@ -67,16 +67,16 @@
|
|||||||
{
|
{
|
||||||
services.mjolnir = {
|
services.mjolnir = {
|
||||||
enable = true;
|
enable = true;
|
||||||
<link linkend="opt-services.mjolnir.homeserverUrl">homeserverUrl</link> = "https://matrix.domain.tld";
|
homeserverUrl = "https://matrix.domain.tld";
|
||||||
<link linkend="opt-services.mjolnir.pantalaimon">pantalaimon</link> = {
|
pantalaimon = {
|
||||||
<link linkend="opt-services.mjolnir.pantalaimon.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.mjolnir.pantalaimon.username">username</link> = "mjolnir";
|
username = "mjolnir";
|
||||||
<link linkend="opt-services.mjolnir.pantalaimon.passwordFile">passwordFile</link> = "/run/secrets/mjolnir-password";
|
passwordFile = "/run/secrets/mjolnir-password";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.mjolnir.protectedRooms">protectedRooms</link> = [
|
protectedRooms = [
|
||||||
"https://matrix.to/#/!xxx:domain.tld"
|
"https://matrix.to/#/!xxx:domain.tld"
|
||||||
];
|
];
|
||||||
<link linkend="opt-services.mjolnir.managementRoom">managementRoom</link> = "!yyy:domain.tld";
|
managementRoom = "!yyy:domain.tld";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|||||||
@@ -47,12 +47,12 @@ let
|
|||||||
return 200 '${builtins.toJSON data}';
|
return 200 '${builtins.toJSON data}';
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
<xref linkend="opt-networking.hostName" /> = "myhostname";
|
networking.hostName = "myhostname";
|
||||||
<xref linkend="opt-networking.domain" /> = "example.org";
|
networking.domain = "example.org";
|
||||||
<xref linkend="opt-networking.firewall.allowedTCPPorts" /> = [ 80 443 ];
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||||
|
|
||||||
<xref linkend="opt-services.postgresql.enable" /> = true;
|
services.postgresql.enable = true;
|
||||||
<xref linkend="opt-services.postgresql.initialScript" /> = pkgs.writeText "synapse-init.sql" ''
|
services.postgresql.initialScript = pkgs.writeText "synapse-init.sql" ''
|
||||||
CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
|
CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
|
||||||
CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
|
CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
|
||||||
TEMPLATE template0
|
TEMPLATE template0
|
||||||
@@ -61,42 +61,42 @@ in {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
<link linkend="opt-services.nginx.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.nginx.recommendedTlsSettings">recommendedTlsSettings</link> = true;
|
recommendedTlsSettings = true;
|
||||||
<link linkend="opt-services.nginx.recommendedOptimisation">recommendedOptimisation</link> = true;
|
recommendedOptimisation = true;
|
||||||
<link linkend="opt-services.nginx.recommendedGzipSettings">recommendedGzipSettings</link> = true;
|
recommendedGzipSettings = true;
|
||||||
<link linkend="opt-services.nginx.recommendedProxySettings">recommendedProxySettings</link> = true;
|
recommendedProxySettings = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts">virtualHosts</link> = {
|
virtualHosts = {
|
||||||
"${config.networking.domain}" = { <co xml:id='ex-matrix-synapse-dns' />
|
"${config.networking.domain}" = { <co xml:id='ex-matrix-synapse-dns' />
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">enableACME</link> = true;
|
enableACME = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.forceSSL">forceSSL</link> = true;
|
forceSSL = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.extraConfig">locations."= /.well-known/matrix/server".extraConfig</link> = mkWellKnown serverConfig; <co xml:id='ex-matrix-synapse-well-known-server' />
|
locations."= /.well-known/matrix/server".extraConfig = mkWellKnown serverConfig; <co xml:id='ex-matrix-synapse-well-known-server' />
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.extraConfig">locations."= /.well-known/matrix/client".extraConfig</link> = mkWellKnown clientConfig; <co xml:id='ex-matrix-synapse-well-known-client' />
|
locations."= /.well-known/matrix/client".extraConfig = mkWellKnown clientConfig; <co xml:id='ex-matrix-synapse-well-known-client' />
|
||||||
};
|
};
|
||||||
"${fqdn}" = {
|
"${fqdn}" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">enableACME</link> = true;
|
enableACME = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.forceSSL">forceSSL</link> = true;
|
forceSSL = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.extraConfig">locations."/".extraConfig</link> = '' <co xml:id='ex-matrix-synapse-rev-default' />
|
locations."/".extraConfig = '' <co xml:id='ex-matrix-synapse-rev-default' />
|
||||||
return 404;
|
return 404;
|
||||||
'';
|
'';
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.proxyPass">locations."/_matrix".proxyPass</link> = "http://[::1]:8008"; <co xml:id='ex-matrix-synapse-rev-proxy-pass' />
|
locations."/_matrix".proxyPass = "http://[::1]:8008"; <co xml:id='ex-matrix-synapse-rev-proxy-pass' />
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.proxyPass">locations."/_synapse/client".proxyPass</link> = "http://[::1]:8008"; <co xml:id='ex-matrix-synapse-rev-client' />
|
locations."/_synapse/client".proxyPass = "http://[::1]:8008"; <co xml:id='ex-matrix-synapse-rev-client' />
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.matrix-synapse = {
|
services.matrix-synapse = {
|
||||||
<link linkend="opt-services.matrix-synapse.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.matrix-synapse.settings.server_name">settings.server_name</link> = config.networking.domain;
|
settings.server_name = config.networking.domain;
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners">settings.listeners</link> = [
|
settings.listeners = [
|
||||||
{ <link linkend="opt-services.matrix-synapse.settings.listeners._.port">port</link> = 8008;
|
{ port = 8008;
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners._.bind_addresses">bind_addresses</link> = [ "::1" ];
|
bind_addresses = [ "::1" ];
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners._.type">type</link> = "http";
|
type = "http";
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners._.tls">tls</link> = false;
|
tls = false;
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners._.x_forwarded">x_forwarded</link> = true;
|
x_forwarded = true;
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners._.resources">resources</link> = [ {
|
resources = [ {
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners._.resources._.names">names</link> = [ "client" "federation" ];
|
names = [ "client" "federation" ];
|
||||||
<link linkend="opt-services.matrix-synapse.settings.listeners._.resources._.compress">compress</link> = true;
|
compress = true;
|
||||||
} ];
|
} ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@@ -159,7 +159,7 @@ in {
|
|||||||
<title>Registering Matrix users</title>
|
<title>Registering Matrix users</title>
|
||||||
<para>
|
<para>
|
||||||
If you want to run a server with public registration by anybody, you can
|
If you want to run a server with public registration by anybody, you can
|
||||||
then enable <literal><link linkend="opt-services.matrix-synapse.settings.enable_registration">services.matrix-synapse.settings.enable_registration</link> =
|
then enable <literal>services.matrix-synapse.settings.enable_registration =
|
||||||
true;</literal>. Otherwise, or you can generate a registration secret with
|
true;</literal>. Otherwise, or you can generate a registration secret with
|
||||||
<command>pwgen -s 64 1</command> and set it with
|
<command>pwgen -s 64 1</command> and set it with
|
||||||
<option><link linkend="opt-services.matrix-synapse.settings.registration_shared_secret">services.matrix-synapse.settings.registration_shared_secret</link></option>.
|
<option><link linkend="opt-services.matrix-synapse.settings.registration_shared_secret">services.matrix-synapse.settings.registration_shared_secret</link></option>.
|
||||||
@@ -202,7 +202,7 @@ Success!
|
|||||||
Include the file like this in your configuration:
|
Include the file like this in your configuration:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
{
|
{
|
||||||
<xref linkend="opt-services.matrix-synapse.extraConfigFiles" /> = [
|
services.matrix-synapse.extraConfigFiles = [
|
||||||
"/run/secrets/matrix-shared-secret"
|
"/run/secrets/matrix-shared-secret"
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -244,13 +244,13 @@ Success!
|
|||||||
<programlisting>
|
<programlisting>
|
||||||
{
|
{
|
||||||
services.nginx.virtualHosts."element.${fqdn}" = {
|
services.nginx.virtualHosts."element.${fqdn}" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">enableACME</link> = true;
|
enableACME = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.forceSSL">forceSSL</link> = true;
|
forceSSL = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.serverAliases">serverAliases</link> = [
|
serverAliases = [
|
||||||
"element.${config.networking.domain}"
|
"element.${config.networking.domain}"
|
||||||
];
|
];
|
||||||
|
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.root">root</link> = pkgs.element-web.override {
|
root = pkgs.element-web.override {
|
||||||
conf = {
|
conf = {
|
||||||
default_server_config = clientConfig; # see `clientConfig` from the snippet above.
|
default_server_config = clientConfig; # see `clientConfig` from the snippet above.
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,16 +20,16 @@
|
|||||||
For instance, the following configuration could be used to use nginx as
|
For instance, the following configuration could be used to use nginx as
|
||||||
frontend proxy:
|
frontend proxy:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<link linkend="opt-services.nginx.enable">services.nginx</link> = {
|
services.nginx = {
|
||||||
<link linkend="opt-services.nginx.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.nginx.recommendedGzipSettings">recommendedGzipSettings</link> = true;
|
recommendedGzipSettings = true;
|
||||||
<link linkend="opt-services.nginx.recommendedOptimisation">recommendedOptimisation</link> = true;
|
recommendedOptimisation = true;
|
||||||
<link linkend="opt-services.nginx.recommendedProxySettings">recommendedProxySettings</link> = true;
|
recommendedProxySettings = true;
|
||||||
<link linkend="opt-services.nginx.recommendedTlsSettings">recommendedTlsSettings</link> = true;
|
recommendedTlsSettings = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts">virtualHosts</link>."git.example.com" = {
|
virtualHosts."git.example.com" = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">enableACME</link> = true;
|
enableACME = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.forceSSL">forceSSL</link> = true;
|
forceSSL = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.locations._name_.proxyPass">locations."/".proxyPass</link> = "http://unix:/run/gitlab/gitlab-workhorse.socket";
|
locations."/".proxyPass = "http://unix:/run/gitlab/gitlab-workhorse.socket";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
@@ -53,26 +53,26 @@
|
|||||||
A basic configuration with some custom settings could look like this:
|
A basic configuration with some custom settings could look like this:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.gitlab = {
|
services.gitlab = {
|
||||||
<link linkend="opt-services.gitlab.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.gitlab.databasePasswordFile">databasePasswordFile</link> = "/var/keys/gitlab/db_password";
|
databasePasswordFile = "/var/keys/gitlab/db_password";
|
||||||
<link linkend="opt-services.gitlab.initialRootPasswordFile">initialRootPasswordFile</link> = "/var/keys/gitlab/root_password";
|
initialRootPasswordFile = "/var/keys/gitlab/root_password";
|
||||||
<link linkend="opt-services.gitlab.https">https</link> = true;
|
https = true;
|
||||||
<link linkend="opt-services.gitlab.host">host</link> = "git.example.com";
|
host = "git.example.com";
|
||||||
<link linkend="opt-services.gitlab.port">port</link> = 443;
|
port = 443;
|
||||||
<link linkend="opt-services.gitlab.user">user</link> = "git";
|
user = "git";
|
||||||
<link linkend="opt-services.gitlab.group">group</link> = "git";
|
group = "git";
|
||||||
smtp = {
|
smtp = {
|
||||||
<link linkend="opt-services.gitlab.smtp.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.gitlab.smtp.address">address</link> = "localhost";
|
address = "localhost";
|
||||||
<link linkend="opt-services.gitlab.smtp.port">port</link> = 25;
|
port = 25;
|
||||||
};
|
};
|
||||||
secrets = {
|
secrets = {
|
||||||
<link linkend="opt-services.gitlab.secrets.dbFile">dbFile</link> = "/var/keys/gitlab/db";
|
dbFile = "/var/keys/gitlab/db";
|
||||||
<link linkend="opt-services.gitlab.secrets.secretFile">secretFile</link> = "/var/keys/gitlab/secret";
|
secretFile = "/var/keys/gitlab/secret";
|
||||||
<link linkend="opt-services.gitlab.secrets.otpFile">otpFile</link> = "/var/keys/gitlab/otp";
|
otpFile = "/var/keys/gitlab/otp";
|
||||||
<link linkend="opt-services.gitlab.secrets.jwsFile">jwsFile</link> = "/var/keys/gitlab/jws";
|
jwsFile = "/var/keys/gitlab/jws";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.gitlab.extraConfig">extraConfig</link> = {
|
extraConfig = {
|
||||||
gitlab = {
|
gitlab = {
|
||||||
email_from = "gitlab-no-reply@example.com";
|
email_from = "gitlab-no-reply@example.com";
|
||||||
email_display_name = "Example GitLab";
|
email_display_name = "Example GitLab";
|
||||||
|
|||||||
@@ -15,11 +15,11 @@
|
|||||||
<para>
|
<para>
|
||||||
Sourcehut is a Python and Go based set of applications.
|
Sourcehut is a Python and Go based set of applications.
|
||||||
This NixOS module also provides basic configuration integrating Sourcehut into locally running
|
This NixOS module also provides basic configuration integrating Sourcehut into locally running
|
||||||
<literal><link linkend="opt-services.nginx.enable">services.nginx</link></literal>,
|
<literal>services.nginx</literal>,
|
||||||
<literal><link linkend="opt-services.redis.servers">services.redis.servers.sourcehut</link></literal>,
|
<literal>services.redis.servers.sourcehut</literal>,
|
||||||
<literal><link linkend="opt-services.postfix.enable">services.postfix</link></literal>
|
<literal>services.postfix</literal>
|
||||||
and
|
and
|
||||||
<literal><link linkend="opt-services.postgresql.enable">services.postgresql</link></literal> services.
|
<literal>services.postgresql</literal> services.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@@ -34,21 +34,21 @@ let
|
|||||||
in {
|
in {
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
<link linkend="opt-networking.hostName">hostName</link> = "srht";
|
hostName = "srht";
|
||||||
<link linkend="opt-networking.domain">domain</link> = "tld";
|
domain = "tld";
|
||||||
<link linkend="opt-networking.firewall.allowedTCPPorts">firewall.allowedTCPPorts</link> = [ 22 80 443 ];
|
firewall.allowedTCPPorts = [ 22 80 443 ];
|
||||||
};
|
};
|
||||||
|
|
||||||
services.sourcehut = {
|
services.sourcehut = {
|
||||||
<link linkend="opt-services.sourcehut.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.sourcehut.git.enable">git.enable</link> = true;
|
git.enable = true;
|
||||||
<link linkend="opt-services.sourcehut.man.enable">man.enable</link> = true;
|
man.enable = true;
|
||||||
<link linkend="opt-services.sourcehut.meta.enable">meta.enable</link> = true;
|
meta.enable = true;
|
||||||
<link linkend="opt-services.sourcehut.nginx.enable">nginx.enable</link> = true;
|
nginx.enable = true;
|
||||||
<link linkend="opt-services.sourcehut.postfix.enable">postfix.enable</link> = true;
|
postfix.enable = true;
|
||||||
<link linkend="opt-services.sourcehut.postgresql.enable">postgresql.enable</link> = true;
|
postgresql.enable = true;
|
||||||
<link linkend="opt-services.sourcehut.redis.enable">redis.enable</link> = true;
|
redis.enable = true;
|
||||||
<link linkend="opt-services.sourcehut.settings">settings</link> = {
|
settings = {
|
||||||
"sr.ht" = {
|
"sr.ht" = {
|
||||||
environment = "production";
|
environment = "production";
|
||||||
global-domain = fqdn;
|
global-domain = fqdn;
|
||||||
@@ -61,26 +61,26 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
<link linkend="opt-security.acme.certs._name_.extraDomainNames">security.acme.certs."${fqdn}".extraDomainNames</link> = [
|
security.acme.certs."${fqdn}".extraDomainNames = [
|
||||||
"meta.${fqdn}"
|
"meta.${fqdn}"
|
||||||
"man.${fqdn}"
|
"man.${fqdn}"
|
||||||
"git.${fqdn}"
|
"git.${fqdn}"
|
||||||
];
|
];
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
<link linkend="opt-services.nginx.enable">enable</link> = true;
|
enable = true;
|
||||||
# only recommendedProxySettings are strictly required, but the rest make sense as well.
|
# only recommendedProxySettings are strictly required, but the rest make sense as well.
|
||||||
<link linkend="opt-services.nginx.recommendedTlsSettings">recommendedTlsSettings</link> = true;
|
recommendedTlsSettings = true;
|
||||||
<link linkend="opt-services.nginx.recommendedOptimisation">recommendedOptimisation</link> = true;
|
recommendedOptimisation = true;
|
||||||
<link linkend="opt-services.nginx.recommendedGzipSettings">recommendedGzipSettings</link> = true;
|
recommendedGzipSettings = true;
|
||||||
<link linkend="opt-services.nginx.recommendedProxySettings">recommendedProxySettings</link> = true;
|
recommendedProxySettings = true;
|
||||||
|
|
||||||
# Settings to setup what certificates are used for which endpoint.
|
# Settings to setup what certificates are used for which endpoint.
|
||||||
<link linkend="opt-services.nginx.virtualHosts">virtualHosts</link> = {
|
virtualHosts = {
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">"${fqdn}".enableACME</link> = true;
|
"${fqdn}".enableACME = true;
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.useACMEHost">"meta.${fqdn}".useACMEHost</link> = fqdn:
|
"meta.${fqdn}".useACMEHost = fqdn:
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.useACMEHost">"man.${fqdn}".useACMEHost</link> = fqdn:
|
"man.${fqdn}".useACMEHost = fqdn:
|
||||||
<link linkend="opt-services.nginx.virtualHosts._name_.useACMEHost">"git.${fqdn}".useACMEHost</link> = fqdn:
|
"git.${fqdn}".useACMEHost = fqdn:
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,10 +91,10 @@
|
|||||||
For example, let's say you have the following configuration:
|
For example, let's say you have the following configuration:
|
||||||
<screen>
|
<screen>
|
||||||
{
|
{
|
||||||
<xref linkend="opt-services.taskserver.enable"/> = true;
|
services.taskserver.enable = true;
|
||||||
<xref linkend="opt-services.taskserver.fqdn"/> = "server";
|
services.taskserver.fqdn = "server";
|
||||||
<xref linkend="opt-services.taskserver.listenHost"/> = "::";
|
services.taskserver.listenHost = "::";
|
||||||
<link linkend="opt-services.taskserver.organisations._name_.users">services.taskserver.organisations.my-company.users</link> = [ "alice" ];
|
services.taskserver.organisations.my-company.users = [ "alice" ];
|
||||||
}
|
}
|
||||||
</screen>
|
</screen>
|
||||||
This creates an organisation called <literal>my-company</literal> with the
|
This creates an organisation called <literal>my-company</literal> with the
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
{ ... }:
|
{ ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
<link linkend="opt-services.weechat.enable">services.weechat.enable</link> = true;
|
services.weechat.enable = true;
|
||||||
}
|
}
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
support:
|
support:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
{
|
{
|
||||||
<link linkend="opt-programs.screen.screenrc">programs.screen.screenrc</link> = ''
|
programs.screen.screenrc = ''
|
||||||
multiuser on
|
multiuser on
|
||||||
acladd normal_user
|
acladd normal_user
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -38,21 +38,21 @@
|
|||||||
endpoint will look like this:
|
endpoint will look like this:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.prosody = {
|
services.prosody = {
|
||||||
<link linkend="opt-services.prosody.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.prosody.admins">admins</link> = [ "root@example.org" ];
|
admins = [ "root@example.org" ];
|
||||||
<link linkend="opt-services.prosody.ssl.cert">ssl.cert</link> = "/var/lib/acme/example.org/fullchain.pem";
|
ssl.cert = "/var/lib/acme/example.org/fullchain.pem";
|
||||||
<link linkend="opt-services.prosody.ssl.key">ssl.key</link> = "/var/lib/acme/example.org/key.pem";
|
ssl.key = "/var/lib/acme/example.org/key.pem";
|
||||||
<link linkend="opt-services.prosody.virtualHosts">virtualHosts</link>."example.org" = {
|
virtualHosts."example.org" = {
|
||||||
<link linkend="opt-services.prosody.virtualHosts._name_.enabled">enabled</link> = true;
|
enabled = true;
|
||||||
<link linkend="opt-services.prosody.virtualHosts._name_.domain">domain</link> = "example.org";
|
domain = "example.org";
|
||||||
<link linkend="opt-services.prosody.virtualHosts._name_.ssl.cert">ssl.cert</link> = "/var/lib/acme/example.org/fullchain.pem";
|
ssl.cert = "/var/lib/acme/example.org/fullchain.pem";
|
||||||
<link linkend="opt-services.prosody.virtualHosts._name_.ssl.key">ssl.key</link> = "/var/lib/acme/example.org/key.pem";
|
ssl.key = "/var/lib/acme/example.org/key.pem";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.prosody.muc">muc</link> = [ {
|
muc = [ {
|
||||||
<link linkend="opt-services.prosody.muc">domain</link> = "conference.example.org";
|
domain = "conference.example.org";
|
||||||
} ];
|
} ];
|
||||||
<link linkend="opt-services.prosody.uploadHttp">uploadHttp</link> = {
|
uploadHttp = {
|
||||||
<link linkend="opt-services.prosody.uploadHttp.domain">domain</link> = "upload.example.org";
|
domain = "upload.example.org";
|
||||||
};
|
};
|
||||||
};</programlisting>
|
};</programlisting>
|
||||||
</para>
|
</para>
|
||||||
@@ -72,13 +72,13 @@ services.prosody = {
|
|||||||
a TLS certificate for the three endponits:
|
a TLS certificate for the three endponits:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
security.acme = {
|
security.acme = {
|
||||||
<link linkend="opt-security.acme.defaults.email">email</link> = "root@example.org";
|
email = "root@example.org";
|
||||||
<link linkend="opt-security.acme.acceptTerms">acceptTerms</link> = true;
|
acceptTerms = true;
|
||||||
<link linkend="opt-security.acme.certs">certs</link> = {
|
certs = {
|
||||||
"example.org" = {
|
"example.org" = {
|
||||||
<link linkend="opt-security.acme.certs._name_.webroot">webroot</link> = "/var/www/example.org";
|
webroot = "/var/www/example.org";
|
||||||
<link linkend="opt-security.acme.certs._name_.email">email</link> = "root@example.org";
|
email = "root@example.org";
|
||||||
<link linkend="opt-security.acme.certs._name_.extraDomainNames">extraDomainNames</link> = [ "conference.example.org" "upload.example.org" ];
|
extraDomainNames = [ "conference.example.org" "upload.example.org" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};</programlisting>
|
};</programlisting>
|
||||||
|
|||||||
@@ -15,18 +15,18 @@
|
|||||||
A minimal configuration using Let's Encrypt for TLS certificates looks like this:
|
A minimal configuration using Let's Encrypt for TLS certificates looks like this:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.discourse = {
|
services.discourse = {
|
||||||
<link linkend="opt-services.discourse.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.discourse.hostname">hostname</link> = "discourse.example.com";
|
hostname = "discourse.example.com";
|
||||||
admin = {
|
admin = {
|
||||||
<link linkend="opt-services.discourse.admin.email">email</link> = "admin@example.com";
|
email = "admin@example.com";
|
||||||
<link linkend="opt-services.discourse.admin.username">username</link> = "admin";
|
username = "admin";
|
||||||
<link linkend="opt-services.discourse.admin.fullName">fullName</link> = "Administrator";
|
fullName = "Administrator";
|
||||||
<link linkend="opt-services.discourse.admin.passwordFile">passwordFile</link> = "/path/to/password_file";
|
passwordFile = "/path/to/password_file";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.secretKeyBaseFile">secretKeyBaseFile</link> = "/path/to/secret_key_base_file";
|
secretKeyBaseFile = "/path/to/secret_key_base_file";
|
||||||
};
|
};
|
||||||
<link linkend="opt-security.acme.defaults.email">security.acme.email</link> = "me@example.com";
|
security.acme.email = "me@example.com";
|
||||||
<link linkend="opt-security.acme.acceptTerms">security.acme.acceptTerms</link> = true;
|
security.acme.acceptTerms = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@@ -48,17 +48,17 @@ services.discourse = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.discourse = {
|
services.discourse = {
|
||||||
<link linkend="opt-services.discourse.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.discourse.hostname">hostname</link> = "discourse.example.com";
|
hostname = "discourse.example.com";
|
||||||
<link linkend="opt-services.discourse.sslCertificate">sslCertificate</link> = "/path/to/ssl_certificate";
|
sslCertificate = "/path/to/ssl_certificate";
|
||||||
<link linkend="opt-services.discourse.sslCertificateKey">sslCertificateKey</link> = "/path/to/ssl_certificate_key";
|
sslCertificateKey = "/path/to/ssl_certificate_key";
|
||||||
admin = {
|
admin = {
|
||||||
<link linkend="opt-services.discourse.admin.email">email</link> = "admin@example.com";
|
email = "admin@example.com";
|
||||||
<link linkend="opt-services.discourse.admin.username">username</link> = "admin";
|
username = "admin";
|
||||||
<link linkend="opt-services.discourse.admin.fullName">fullName</link> = "Administrator";
|
fullName = "Administrator";
|
||||||
<link linkend="opt-services.discourse.admin.passwordFile">passwordFile</link> = "/path/to/password_file";
|
passwordFile = "/path/to/password_file";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.secretKeyBaseFile">secretKeyBaseFile</link> = "/path/to/secret_key_base_file";
|
secretKeyBaseFile = "/path/to/secret_key_base_file";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
@@ -108,24 +108,24 @@ services.discourse = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.discourse = {
|
services.discourse = {
|
||||||
<link linkend="opt-services.discourse.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.discourse.hostname">hostname</link> = "discourse.example.com";
|
hostname = "discourse.example.com";
|
||||||
<link linkend="opt-services.discourse.sslCertificate">sslCertificate</link> = "/path/to/ssl_certificate";
|
sslCertificate = "/path/to/ssl_certificate";
|
||||||
<link linkend="opt-services.discourse.sslCertificateKey">sslCertificateKey</link> = "/path/to/ssl_certificate_key";
|
sslCertificateKey = "/path/to/ssl_certificate_key";
|
||||||
admin = {
|
admin = {
|
||||||
<link linkend="opt-services.discourse.admin.email">email</link> = "admin@example.com";
|
email = "admin@example.com";
|
||||||
<link linkend="opt-services.discourse.admin.username">username</link> = "admin";
|
username = "admin";
|
||||||
<link linkend="opt-services.discourse.admin.fullName">fullName</link> = "Administrator";
|
fullName = "Administrator";
|
||||||
<link linkend="opt-services.discourse.admin.passwordFile">passwordFile</link> = "/path/to/password_file";
|
passwordFile = "/path/to/password_file";
|
||||||
};
|
};
|
||||||
mail.outgoing = {
|
mail.outgoing = {
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.serverAddress">serverAddress</link> = "smtp.emailprovider.com";
|
serverAddress = "smtp.emailprovider.com";
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.port">port</link> = 587;
|
port = 587;
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.username">username</link> = "user@emailprovider.com";
|
username = "user@emailprovider.com";
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.passwordFile">passwordFile</link> = "/path/to/smtp_password_file";
|
passwordFile = "/path/to/smtp_password_file";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.mail.incoming.enable">mail.incoming.enable</link> = true;
|
mail.incoming.enable = true;
|
||||||
<link linkend="opt-services.discourse.secretKeyBaseFile">secretKeyBaseFile</link> = "/path/to/secret_key_base_file";
|
secretKeyBaseFile = "/path/to/secret_key_base_file";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
@@ -210,24 +210,24 @@ services.discourse = {
|
|||||||
and changes a few request limits in the backend settings:
|
and changes a few request limits in the backend settings:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.discourse = {
|
services.discourse = {
|
||||||
<link linkend="opt-services.discourse.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.discourse.hostname">hostname</link> = "discourse.example.com";
|
hostname = "discourse.example.com";
|
||||||
<link linkend="opt-services.discourse.sslCertificate">sslCertificate</link> = "/path/to/ssl_certificate";
|
sslCertificate = "/path/to/ssl_certificate";
|
||||||
<link linkend="opt-services.discourse.sslCertificateKey">sslCertificateKey</link> = "/path/to/ssl_certificate_key";
|
sslCertificateKey = "/path/to/ssl_certificate_key";
|
||||||
admin = {
|
admin = {
|
||||||
<link linkend="opt-services.discourse.admin.email">email</link> = "admin@example.com";
|
email = "admin@example.com";
|
||||||
<link linkend="opt-services.discourse.admin.username">username</link> = "admin";
|
username = "admin";
|
||||||
<link linkend="opt-services.discourse.admin.fullName">fullName</link> = "Administrator";
|
fullName = "Administrator";
|
||||||
<link linkend="opt-services.discourse.admin.passwordFile">passwordFile</link> = "/path/to/password_file";
|
passwordFile = "/path/to/password_file";
|
||||||
};
|
};
|
||||||
mail.outgoing = {
|
mail.outgoing = {
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.serverAddress">serverAddress</link> = "smtp.emailprovider.com";
|
serverAddress = "smtp.emailprovider.com";
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.port">port</link> = 587;
|
port = 587;
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.username">username</link> = "user@emailprovider.com";
|
username = "user@emailprovider.com";
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.passwordFile">passwordFile</link> = "/path/to/smtp_password_file";
|
passwordFile = "/path/to/smtp_password_file";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.mail.incoming.enable">mail.incoming.enable</link> = true;
|
mail.incoming.enable = true;
|
||||||
<link linkend="opt-services.discourse.siteSettings">siteSettings</link> = {
|
siteSettings = {
|
||||||
required = {
|
required = {
|
||||||
title = "My Cats";
|
title = "My Cats";
|
||||||
site_description = "Discuss My Cats (and be nice plz)";
|
site_description = "Discuss My Cats (and be nice plz)";
|
||||||
@@ -238,13 +238,13 @@ services.discourse = {
|
|||||||
github_client_secret._secret = /run/keys/discourse_github_client_secret;
|
github_client_secret._secret = /run/keys/discourse_github_client_secret;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.backendSettings">backendSettings</link> = {
|
backendSettings = {
|
||||||
max_reqs_per_ip_per_minute = 300;
|
max_reqs_per_ip_per_minute = 300;
|
||||||
max_reqs_per_ip_per_10_seconds = 60;
|
max_reqs_per_ip_per_10_seconds = 60;
|
||||||
max_asset_reqs_per_ip_per_10_seconds = 250;
|
max_asset_reqs_per_ip_per_10_seconds = 250;
|
||||||
max_reqs_per_ip_mode = "warn+block";
|
max_reqs_per_ip_mode = "warn+block";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.secretKeyBaseFile">secretKeyBaseFile</link> = "/path/to/secret_key_base_file";
|
secretKeyBaseFile = "/path/to/secret_key_base_file";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
@@ -320,33 +320,33 @@ services.discourse = {
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.discourse = {
|
services.discourse = {
|
||||||
<link linkend="opt-services.discourse.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.discourse.hostname">hostname</link> = "discourse.example.com";
|
hostname = "discourse.example.com";
|
||||||
<link linkend="opt-services.discourse.sslCertificate">sslCertificate</link> = "/path/to/ssl_certificate";
|
sslCertificate = "/path/to/ssl_certificate";
|
||||||
<link linkend="opt-services.discourse.sslCertificateKey">sslCertificateKey</link> = "/path/to/ssl_certificate_key";
|
sslCertificateKey = "/path/to/ssl_certificate_key";
|
||||||
admin = {
|
admin = {
|
||||||
<link linkend="opt-services.discourse.admin.email">email</link> = "admin@example.com";
|
email = "admin@example.com";
|
||||||
<link linkend="opt-services.discourse.admin.username">username</link> = "admin";
|
username = "admin";
|
||||||
<link linkend="opt-services.discourse.admin.fullName">fullName</link> = "Administrator";
|
fullName = "Administrator";
|
||||||
<link linkend="opt-services.discourse.admin.passwordFile">passwordFile</link> = "/path/to/password_file";
|
passwordFile = "/path/to/password_file";
|
||||||
};
|
};
|
||||||
mail.outgoing = {
|
mail.outgoing = {
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.serverAddress">serverAddress</link> = "smtp.emailprovider.com";
|
serverAddress = "smtp.emailprovider.com";
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.port">port</link> = 587;
|
port = 587;
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.username">username</link> = "user@emailprovider.com";
|
username = "user@emailprovider.com";
|
||||||
<link linkend="opt-services.discourse.mail.outgoing.passwordFile">passwordFile</link> = "/path/to/smtp_password_file";
|
passwordFile = "/path/to/smtp_password_file";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.mail.incoming.enable">mail.incoming.enable</link> = true;
|
mail.incoming.enable = true;
|
||||||
<link linkend="opt-services.discourse.mail.incoming.enable">plugins</link> = with config.services.discourse.package.plugins; [
|
plugins = with config.services.discourse.package.plugins; [
|
||||||
discourse-spoiler-alert
|
discourse-spoiler-alert
|
||||||
discourse-solved
|
discourse-solved
|
||||||
];
|
];
|
||||||
<link linkend="opt-services.discourse.siteSettings">siteSettings</link> = {
|
siteSettings = {
|
||||||
plugins = {
|
plugins = {
|
||||||
spoiler_enabled = false;
|
spoiler_enabled = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.discourse.secretKeyBaseFile">secretKeyBaseFile</link> = "/path/to/secret_key_base_file";
|
secretKeyBaseFile = "/path/to/secret_key_base_file";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
<programlisting>{ pkgs, ... }:
|
<programlisting>{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
services.grocy = {
|
services.grocy = {
|
||||||
<link linkend="opt-services.grocy.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.grocy.hostName">hostName</link> = "grocy.tld";
|
hostName = "grocy.tld";
|
||||||
};
|
};
|
||||||
}</programlisting>
|
}</programlisting>
|
||||||
This configures a simple vhost using <link linkend="opt-services.nginx.enable">nginx</link>
|
This configures a simple vhost using <link linkend="opt-services.nginx.enable">nginx</link>
|
||||||
@@ -45,19 +45,19 @@
|
|||||||
# The default currency in the system for invoices etc.
|
# The default currency in the system for invoices etc.
|
||||||
# Please note that exchange rates aren't taken into account, this
|
# Please note that exchange rates aren't taken into account, this
|
||||||
# is just the setting for what's shown in the frontend.
|
# is just the setting for what's shown in the frontend.
|
||||||
<link linkend="opt-services.grocy.settings.currency">currency</link> = "EUR";
|
currency = "EUR";
|
||||||
|
|
||||||
# The display language (and locale configuration) for grocy.
|
# The display language (and locale configuration) for grocy.
|
||||||
<link linkend="opt-services.grocy.settings.currency">culture</link> = "de";
|
culture = "de";
|
||||||
|
|
||||||
calendar = {
|
calendar = {
|
||||||
# Whether or not to show the week-numbers
|
# Whether or not to show the week-numbers
|
||||||
# in the calendar.
|
# in the calendar.
|
||||||
<link linkend="opt-services.grocy.settings.calendar.showWeekNumber">showWeekNumber</link> = true;
|
showWeekNumber = true;
|
||||||
|
|
||||||
# Index of the first day to be shown in the calendar (0=Sunday, 1=Monday,
|
# Index of the first day to be shown in the calendar (0=Sunday, 1=Monday,
|
||||||
# 2=Tuesday and so on).
|
# 2=Tuesday and so on).
|
||||||
<link linkend="opt-services.grocy.settings.calendar.firstDayOfWeek">firstDayOfWeek</link> = 2;
|
firstDayOfWeek = 2;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}</programlisting>
|
}</programlisting>
|
||||||
|
|||||||
@@ -15,13 +15,13 @@
|
|||||||
A minimal configuration using Let's Encrypt for TLS certificates looks like this:
|
A minimal configuration using Let's Encrypt for TLS certificates looks like this:
|
||||||
<programlisting>{
|
<programlisting>{
|
||||||
services.jitsi-meet = {
|
services.jitsi-meet = {
|
||||||
<link linkend="opt-services.jitsi-meet.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.jitsi-meet.enable">hostName</link> = "jitsi.example.com";
|
hostName = "jitsi.example.com";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.jitsi-videobridge.openFirewall">services.jitsi-videobridge.openFirewall</link> = true;
|
services.jitsi-videobridge.openFirewall = true;
|
||||||
<link linkend="opt-networking.firewall.allowedTCPPorts">networking.firewall.allowedTCPPorts</link> = [ 80 443 ];
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||||
<link linkend="opt-security.acme.defaults.email">security.acme.email</link> = "me@example.com";
|
security.acme.email = "me@example.com";
|
||||||
<link linkend="opt-security.acme.acceptTerms">security.acme.acceptTerms</link> = true;
|
security.acme.acceptTerms = true;
|
||||||
}</programlisting>
|
}</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
@@ -32,22 +32,22 @@
|
|||||||
Here is the minimal configuration with additional configurations:
|
Here is the minimal configuration with additional configurations:
|
||||||
<programlisting>{
|
<programlisting>{
|
||||||
services.jitsi-meet = {
|
services.jitsi-meet = {
|
||||||
<link linkend="opt-services.jitsi-meet.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.jitsi-meet.enable">hostName</link> = "jitsi.example.com";
|
hostName = "jitsi.example.com";
|
||||||
<link linkend="opt-services.jitsi-meet.config">config</link> = {
|
config = {
|
||||||
enableWelcomePage = false;
|
enableWelcomePage = false;
|
||||||
prejoinPageEnabled = true;
|
prejoinPageEnabled = true;
|
||||||
defaultLang = "fi";
|
defaultLang = "fi";
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.jitsi-meet.interfaceConfig">interfaceConfig</link> = {
|
interfaceConfig = {
|
||||||
SHOW_JITSI_WATERMARK = false;
|
SHOW_JITSI_WATERMARK = false;
|
||||||
SHOW_WATERMARK_FOR_GUESTS = false;
|
SHOW_WATERMARK_FOR_GUESTS = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.jitsi-videobridge.openFirewall">services.jitsi-videobridge.openFirewall</link> = true;
|
services.jitsi-videobridge.openFirewall = true;
|
||||||
<link linkend="opt-networking.firewall.allowedTCPPorts">networking.firewall.allowedTCPPorts</link> = [ 80 443 ];
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||||
<link linkend="opt-security.acme.defaults.email">security.acme.email</link> = "me@example.com";
|
security.acme.email = "me@example.com";
|
||||||
<link linkend="opt-security.acme.acceptTerms">security.acme.acceptTerms</link> = true;
|
security.acme.acceptTerms = true;
|
||||||
}</programlisting>
|
}</programlisting>
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -185,15 +185,15 @@
|
|||||||
A basic configuration with some custom settings could look like this:
|
A basic configuration with some custom settings could look like this:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.keycloak = {
|
services.keycloak = {
|
||||||
<link linkend="opt-services.keycloak.enable">enable</link> = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
<link linkend="opt-services.keycloak.settings.hostname">hostname</link> = "keycloak.example.com";
|
hostname = "keycloak.example.com";
|
||||||
<link linkend="opt-services.keycloak.settings.hostname-strict-backchannel">hostname-strict-backchannel</link> = true;
|
hostname-strict-backchannel = true;
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.keycloak.initialAdminPassword">initialAdminPassword</link> = "e6Wcm0RrtegMEHl"; # change on first login
|
initialAdminPassword = "e6Wcm0RrtegMEHl"; # change on first login
|
||||||
<link linkend="opt-services.keycloak.sslCertificate">sslCertificate</link> = "/run/keys/ssl_cert";
|
sslCertificate = "/run/keys/ssl_cert";
|
||||||
<link linkend="opt-services.keycloak.sslCertificateKey">sslCertificateKey</link> = "/run/keys/ssl_key";
|
sslCertificateKey = "/run/keys/ssl_key";
|
||||||
<link linkend="opt-services.keycloak.database.passwordFile">database.passwordFile</link> = "/run/keys/db_password";
|
database.passwordFile = "/run/keys/db_password";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|||||||
@@ -31,22 +31,22 @@
|
|||||||
<programlisting>{ pkgs, ... }:
|
<programlisting>{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
<link linkend="opt-services.nextcloud.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.nextcloud.hostName">hostName</link> = "nextcloud.tld";
|
hostName = "nextcloud.tld";
|
||||||
config = {
|
config = {
|
||||||
<link linkend="opt-services.nextcloud.config.dbtype">dbtype</link> = "pgsql";
|
dbtype = "pgsql";
|
||||||
<link linkend="opt-services.nextcloud.config.dbuser">dbuser</link> = "nextcloud";
|
dbuser = "nextcloud";
|
||||||
<link linkend="opt-services.nextcloud.config.dbhost">dbhost</link> = "/run/postgresql"; # nextcloud will add /.s.PGSQL.5432 by itself
|
dbhost = "/run/postgresql"; # nextcloud will add /.s.PGSQL.5432 by itself
|
||||||
<link linkend="opt-services.nextcloud.config.dbname">dbname</link> = "nextcloud";
|
dbname = "nextcloud";
|
||||||
<link linkend="opt-services.nextcloud.config.adminpassFile">adminpassFile</link> = "/path/to/admin-pass-file";
|
adminpassFile = "/path/to/admin-pass-file";
|
||||||
<link linkend="opt-services.nextcloud.config.adminuser">adminuser</link> = "root";
|
adminuser = "root";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.postgresql = {
|
services.postgresql = {
|
||||||
<link linkend="opt-services.postgresql.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.postgresql.ensureDatabases">ensureDatabases</link> = [ "nextcloud" ];
|
ensureDatabases = [ "nextcloud" ];
|
||||||
<link linkend="opt-services.postgresql.ensureUsers">ensureUsers</link> = [
|
ensureUsers = [
|
||||||
{ name = "nextcloud";
|
{ name = "nextcloud";
|
||||||
ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
|
ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
|
||||||
}
|
}
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
after = ["postgresql.service"];
|
after = ["postgresql.service"];
|
||||||
};
|
};
|
||||||
|
|
||||||
<link linkend="opt-networking.firewall.allowedTCPPorts">networking.firewall.allowedTCPPorts</link> = [ 80 443 ];
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||||
}</programlisting>
|
}</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@@ -199,24 +199,24 @@
|
|||||||
<para>
|
<para>
|
||||||
An exemplary configuration may look like this:
|
An exemplary configuration may look like this:
|
||||||
<programlisting>{ config, lib, pkgs, ... }: {
|
<programlisting>{ config, lib, pkgs, ... }: {
|
||||||
<link linkend="opt-services.nginx.enable">services.nginx.enable</link> = false;
|
services.nginx.enable = false;
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
<link linkend="opt-services.nextcloud.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.nextcloud.hostName">hostName</link> = "localhost";
|
hostName = "localhost";
|
||||||
|
|
||||||
/* further, required options */
|
/* further, required options */
|
||||||
};
|
};
|
||||||
<link linkend="opt-services.phpfpm.pools._name_.settings">services.phpfpm.pools.nextcloud.settings</link> = {
|
services.phpfpm.pools.nextcloud.settings = {
|
||||||
"listen.owner" = config.services.httpd.user;
|
"listen.owner" = config.services.httpd.user;
|
||||||
"listen.group" = config.services.httpd.group;
|
"listen.group" = config.services.httpd.group;
|
||||||
};
|
};
|
||||||
services.httpd = {
|
services.httpd = {
|
||||||
<link linkend="opt-services.httpd.enable">enable</link> = true;
|
enable = true;
|
||||||
<link linkend="opt-services.httpd.adminAddr">adminAddr</link> = "webmaster@localhost";
|
adminAddr = "webmaster@localhost";
|
||||||
<link linkend="opt-services.httpd.extraModules">extraModules</link> = [ "proxy_fcgi" ];
|
extraModules = [ "proxy_fcgi" ];
|
||||||
virtualHosts."localhost" = {
|
virtualHosts."localhost" = {
|
||||||
<link linkend="opt-services.httpd.virtualHosts._name_.documentRoot">documentRoot</link> = config.services.nextcloud.package;
|
documentRoot = config.services.nextcloud.package;
|
||||||
<link linkend="opt-services.httpd.virtualHosts._name_.extraConfig">extraConfig</link> = ''
|
extraConfig = ''
|
||||||
<Directory "${config.services.nextcloud.package}">
|
<Directory "${config.services.nextcloud.package}">
|
||||||
<FilesMatch "\.php$">
|
<FilesMatch "\.php$">
|
||||||
<If "-f %{REQUEST_FILENAME}">
|
<If "-f %{REQUEST_FILENAME}">
|
||||||
|
|||||||
@@ -18,15 +18,15 @@
|
|||||||
After that, <package>plausible</package> can be deployed like this:
|
After that, <package>plausible</package> can be deployed like this:
|
||||||
<programlisting>{
|
<programlisting>{
|
||||||
services.plausible = {
|
services.plausible = {
|
||||||
<link linkend="opt-services.plausible.enable">enable</link> = true;
|
enable = true;
|
||||||
adminUser = {
|
adminUser = {
|
||||||
<link linkend="opt-services.plausible.adminUser.activate">activate</link> = true; <co xml:id='ex-plausible-cfg-activate' />
|
activate = true; <co xml:id='ex-plausible-cfg-activate' />
|
||||||
<link linkend="opt-services.plausible.adminUser.email">email</link> = "admin@localhost";
|
email = "admin@localhost";
|
||||||
<link linkend="opt-services.plausible.adminUser.passwordFile">passwordFile</link> = "/run/secrets/plausible-admin-pwd";
|
passwordFile = "/run/secrets/plausible-admin-pwd";
|
||||||
};
|
};
|
||||||
server = {
|
server = {
|
||||||
<link linkend="opt-services.plausible.server.baseUrl">baseUrl</link> = "http://analytics.example.org";
|
baseUrl = "http://analytics.example.org";
|
||||||
<link linkend="opt-services.plausible.server.secretKeybaseFile">secretKeybaseFile</link> = "/run/secrets/plausible-secret-key-base"; <co xml:id='ex-plausible-cfg-secretbase' />
|
secretKeybaseFile = "/run/secrets/plausible-secret-key-base"; <co xml:id='ex-plausible-cfg-secretbase' />
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}</programlisting>
|
}</programlisting>
|
||||||
|
|||||||
@@ -18,8 +18,8 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.xserver.desktopManager.gnome.enable"/> = true;
|
services.xserver.desktopManager.gnome.enable = true;
|
||||||
<xref linkend="opt-services.xserver.displayManager.gdm.enable"/> = true;
|
services.xserver.displayManager.gdm.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<note>
|
<note>
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.gnome.core-utilities.enable"/> = false;
|
services.gnome.core-utilities.enable = false;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.gnome.tracker-miners.enable"/> = false;
|
services.gnome.tracker-miners.enable = false;
|
||||||
<xref linkend="opt-services.gnome.tracker.enable"/> = false;
|
services.gnome.tracker.enable = false;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.gnome.games.enable"/> = true;
|
services.gnome.games.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.gnome.core-developer-tools.enable"/> = true;
|
services.gnome.core-developer-tools.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.xserver.desktopManager.gnome.flashback.enableMetacity"/> = true;
|
services.xserver.desktopManager.gnome.flashback.enableMetacity = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.xserver.desktopManager.gnome.flashback.customSessions"/> = [
|
services.xserver.desktopManager.gnome.flashback.customSessions = [
|
||||||
{
|
{
|
||||||
wmName = "xmonad";
|
wmName = "xmonad";
|
||||||
wmLabel = "XMonad";
|
wmLabel = "XMonad";
|
||||||
@@ -162,7 +162,7 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-environment.systemPackages"/> = [
|
environment.systemPackages = [
|
||||||
gnomeExtensions.dash-to-dock
|
gnomeExtensions.dash-to-dock
|
||||||
gnomeExtensions.gsconnect
|
gnomeExtensions.gsconnect
|
||||||
gnomeExtensions.mpris-indicator-button
|
gnomeExtensions.mpris-indicator-button
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
services.xserver.desktopManager.gnome = {
|
services.xserver.desktopManager.gnome = {
|
||||||
<link xlink:href="#opt-services.xserver.desktopManager.gnome.extraGSettingsOverrides">extraGSettingsOverrides</link> = ''
|
extraGSettingsOverrides = ''
|
||||||
# Change default background
|
# Change default background
|
||||||
[org.gnome.desktop.background]
|
[org.gnome.desktop.background]
|
||||||
picture-uri='file://${pkgs.nixos-artwork.wallpapers.mosaic-blue.gnomeFilePath}'
|
picture-uri='file://${pkgs.nixos-artwork.wallpapers.mosaic-blue.gnomeFilePath}'
|
||||||
@@ -221,7 +221,7 @@ services.xserver.desktopManager.gnome = {
|
|||||||
favorite-apps=['org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop']
|
favorite-apps=['org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop']
|
||||||
'';
|
'';
|
||||||
|
|
||||||
<link xlink:href="#opt-services.xserver.desktopManager.gnome.extraGSettingsOverridePackages">extraGSettingsOverridePackages</link> = [
|
extraGSettingsOverridePackages = [
|
||||||
pkgs.gsettings-desktop-schemas # for org.gnome.desktop
|
pkgs.gsettings-desktop-schemas # for org.gnome.desktop
|
||||||
pkgs.gnome.gnome-shell # for org.gnome.shell
|
pkgs.gnome.gnome-shell # for org.gnome.shell
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -11,16 +11,16 @@
|
|||||||
<para>
|
<para>
|
||||||
All of Pantheon is working in NixOS and the applications should be available, aside from a few <link xlink:href="https://github.com/NixOS/nixpkgs/issues/58161">exceptions</link>. To enable Pantheon, set
|
All of Pantheon is working in NixOS and the applications should be available, aside from a few <link xlink:href="https://github.com/NixOS/nixpkgs/issues/58161">exceptions</link>. To enable Pantheon, set
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.xserver.desktopManager.pantheon.enable"/> = true;
|
services.xserver.desktopManager.pantheon.enable = true;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
This automatically enables LightDM and Pantheon's LightDM greeter. If you'd like to disable this, set
|
This automatically enables LightDM and Pantheon's LightDM greeter. If you'd like to disable this, set
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.xserver.displayManager.lightdm.greeters.pantheon.enable"/> = false;
|
services.xserver.displayManager.lightdm.greeters.pantheon.enable = false;
|
||||||
<xref linkend="opt-services.xserver.displayManager.lightdm.enable"/> = false;
|
services.xserver.displayManager.lightdm.enable = false;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
but please be aware using Pantheon without LightDM as a display manager will break screenlocking from the UI. The NixOS module for Pantheon installs all of Pantheon's default applications. If you'd like to not install Pantheon's apps, set
|
but please be aware using Pantheon without LightDM as a display manager will break screenlocking from the UI. The NixOS module for Pantheon installs all of Pantheon's default applications. If you'd like to not install Pantheon's apps, set
|
||||||
<programlisting>
|
<programlisting>
|
||||||
<xref linkend="opt-services.pantheon.apps.enable"/> = false;
|
services.pantheon.apps.enable = false;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
You can also use <xref linkend="opt-environment.pantheon.excludePackages"/> to remove any other app (like <package>elementary-mail</package>).
|
You can also use <xref linkend="opt-environment.pantheon.excludePackages"/> to remove any other app (like <package>elementary-mail</package>).
|
||||||
</para>
|
</para>
|
||||||
|
|||||||
Reference in New Issue
Block a user