mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-09-17 04:40:22 +00:00
Merge 6ddb0f7cdd into haskell-updates
This commit is contained in:
@@ -169,7 +169,7 @@ The build will fail if `shellcheck` finds any issues.
|
||||
|
||||
Checks that the output from running a command contains the specified version string in it as a whole word.
|
||||
|
||||
NOTE: In most cases, [`versionCheckHook`](#versioncheckhook) should be preferred, but this function is provided and documented here anyway. The motivation for adding either tests would be:
|
||||
NOTE: This is a check you add to `passthru.tests` which is mainly run by OfBorg, but not in Hydra. If you want a version check failure to block the build altogether, then [`versionCheckHook`](#versioncheckhook) is the tool you're looking for (and recommended for quick builds). The motivation for adding either of these checks would be:
|
||||
|
||||
- Catch dynamic linking errors and such and missing environment variables that should be added by wrapping.
|
||||
- Probable protection against accidentally building the wrong version, for example when using an "old" hash in a fixed-output derivation.
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# versionCheckHook {#versioncheckhook}
|
||||
|
||||
This hook adds a `versionCheckPhase` to the [`preInstallCheckHooks`](#ssec-installCheck-phase) that runs the main program of the derivation with a `--help` or `--version` argument, and checks that the `${version}` string is found in that output. You use it like this:
|
||||
This hook adds a `versionCheckPhase` to the [`preInstallCheckHooks`](#ssec-installCheck-phase) that runs the main program of the derivation with a `--help` or `--version` argument, and checks that the `${version}` string is found in that output. If this check fails then the whole build will fail. _(A softer option is [`testers.testVersion`](#tester-testVersion).)_
|
||||
|
||||
You use it like this:
|
||||
|
||||
```nix
|
||||
{
|
||||
@@ -33,3 +35,5 @@ The variables that this phase control are:
|
||||
- `versionCheckProgramArg`: The argument that needs to be passed to `versionCheckProgram`. If undefined the hook tries first `--help` and then `--version`. Examples: `version`, `-V`, `-v`.
|
||||
- `preVersionCheck`: A hook to run before the check is done.
|
||||
- `postVersionCheck`: A hook to run after the check is done.
|
||||
|
||||
This check assumes the executable is _hermetic_. If environment variables such as `PATH` or `HOME` are required for the program to function, then [`testers.testVersion`](#tester-testVersion) is currently the better alternative.
|
||||
|
||||
@@ -450,6 +450,12 @@
|
||||
githubId = 12799326;
|
||||
name = "Abhinav Sharma";
|
||||
};
|
||||
abhisheksingh0x558 = {
|
||||
github = "abhisheksingh0x558";
|
||||
name = "Abhishek Singh";
|
||||
email = "abhisheksingh0x558@proton.me";
|
||||
githubId = 92366747;
|
||||
};
|
||||
abigailbuccaneer = {
|
||||
email = "abigailbuccaneer@gmail.com";
|
||||
github = "AbigailBuccaneer";
|
||||
@@ -1837,6 +1843,12 @@
|
||||
githubId = 53097078;
|
||||
name = "AJ Reifsnyder";
|
||||
};
|
||||
arexon = {
|
||||
email = "arexonreal@gmail.com";
|
||||
github = "arexon";
|
||||
githubId = 65680034;
|
||||
name = "arexon";
|
||||
};
|
||||
arezvov = {
|
||||
email = "alex@rezvov.ru";
|
||||
github = "arezvov";
|
||||
@@ -7096,6 +7108,11 @@
|
||||
githubId = 16175276;
|
||||
keys = [ { fingerprint = "E4CE B0F0 B2EC 09A3 9678 F294 CC7A 7E3C 6CF3 1343"; } ];
|
||||
};
|
||||
EstebanMacanek = {
|
||||
name = "Esteban Macanek";
|
||||
github = "EstebanMacanek";
|
||||
githubId = 75503218;
|
||||
};
|
||||
ethancedwards8 = {
|
||||
email = "ethan@ethancedwards.com";
|
||||
matrix = "@ethancedwards8:matrix.org";
|
||||
@@ -22977,6 +22994,12 @@
|
||||
githubId = 5409166;
|
||||
name = "Rishi Desai";
|
||||
};
|
||||
therobot2105 = {
|
||||
email = "felix.kimmel@web.de";
|
||||
github = "TheRobot2105";
|
||||
githubId = 91203390;
|
||||
name = "Felix Kimmel";
|
||||
};
|
||||
thesola10 = {
|
||||
email = "me@thesola.io";
|
||||
github = "Thesola10";
|
||||
@@ -24552,17 +24575,6 @@
|
||||
github = "waynr";
|
||||
githubId = 1441126;
|
||||
};
|
||||
wbondanza_devoteam = {
|
||||
name = "Wilson Bondanza";
|
||||
email = "wilson.bondanza@devoteam.com";
|
||||
github = "wbondanza-devoteam";
|
||||
githubId = 195292349;
|
||||
keys = [
|
||||
{
|
||||
fingerprint = "61F3 9F46 606D 655F 4E8D 6C82 B623 05E6 1563 8A9E";
|
||||
}
|
||||
];
|
||||
};
|
||||
wchresta = {
|
||||
email = "wchresta.nix@chrummibei.ch";
|
||||
github = "wchresta";
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
- `nixos-option` has been rewritten to a Nix expression called by a simple bash script. This lowers our maintenance threshold, makes eval errors less verbose, adds support for flake-based configurations, descending into `attrsOf` and `listOf` submodule options, and `--show-trace`.
|
||||
|
||||
- The Mattermost module ({option}`services.mattermost`) and packages (`mattermost` and `mmctl`) have been substantially updated:
|
||||
- {option}`services.mattermost.preferNixConfig` now defaults to true if you advance {option}`system.stateVersion` to 25.05. This means that if you have {option}`services.mattermost.mutableConfig` set, NixOS will override your settings to those that you define in the module. It is recommended to leave this at the default, even if you used a mutable config before, because it will ensure that your Mattermost data directories are correct. If you moved your data directories, you may want to review the module changes before upgrading.
|
||||
- Mattermost telemetry reporting is now disabled by default, though security update notifications are enabled. Look at {option}`services.mattermost.telemetry` for options to control this behavior.
|
||||
- `pkgs.mattermostLatest` is now an option to track the latest (non-prerelease) Mattermost release. We test upgrade migrations from ESR releases (`pkgs.mattermost`) to `pkgs.mattermostLatest`.
|
||||
- The Mattermost frontend is now built from source and can be overridden.
|
||||
- Note that the Mattermost derivation containing both the webapp and server is now wrapped to allow them to be built independently, so overrides to both webapp and server look like `mattermost.overrideAttrs (prev: { webapp = prev.webapp.override { ... }; server = prev.server.override { ... }; })` now.
|
||||
@@ -122,6 +124,8 @@
|
||||
|
||||
- [Fider](https://fider.io/), an open platform to collect and prioritize feedback. Available as [services.fider](#opt-services.fider.enable).
|
||||
|
||||
- [PDS](https://github.com/bluesky-social/pds), Personal Data Server for [bsky](https://bsky.social/). Available as [services.pds](option.html#opt-services.pds).
|
||||
|
||||
- [mqtt-exporter](https://github.com/kpetremann/mqtt-exporter/), a Prometheus exporter for exposing messages from MQTT. Available as [services.prometheus.exporters.mqtt](#opt-services.prometheus.exporters.mqtt.enable).
|
||||
|
||||
- [nvidia-gpu](https://github.com/utkuozdemir/nvidia_gpu_exporter), a Prometheus exporter that scrapes `nvidia-smi` for GPU metrics. Available as [services.prometheus.exporters.nvidia-gpu](#opt-services.prometheus.exporters.nvidia-gpu.enable).
|
||||
|
||||
@@ -135,7 +135,7 @@ in
|
||||
type = types.lines;
|
||||
description = ''
|
||||
Extra configuration options that will be added verbatim at
|
||||
the end of the nslcd configuration file (`nslcd.conf(5)`).
|
||||
the end of the nslcd configuration file ({manpage}`nslcd.conf(5)`).
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -219,7 +219,7 @@ in
|
||||
type = types.lines;
|
||||
description = ''
|
||||
Extra configuration options that will be added verbatim at
|
||||
the end of the ldap configuration file (`ldap.conf(5)`).
|
||||
the end of the ldap configuration file ({manpage}`ldap.conf(5)`).
|
||||
If {option}`users.ldap.daemon` is enabled, this
|
||||
configuration will not be used. In that case, use
|
||||
{option}`users.ldap.daemon.extraConfig` instead.
|
||||
|
||||
@@ -111,7 +111,7 @@ in
|
||||
- `0` (or `"plain"`):
|
||||
No encryption. Passwords are stored in plaintext. HIGHLY DISCOURAGED.
|
||||
- `1` (or `"Y"`):
|
||||
Use crypt(3) function.
|
||||
Use {manpage}`crypt(3)` function.
|
||||
- `2` (or `"mysql"`):
|
||||
Use the MySQL PASSWORD() function. It is possible that the encryption function used
|
||||
by `pam_mysql` is different from that of the MySQL server, as
|
||||
|
||||
@@ -46,7 +46,7 @@ let
|
||||
If not specified, the amount of data to read from `source` will be
|
||||
determined by cryptsetup.
|
||||
|
||||
See `cryptsetup-open(8)` for details.
|
||||
See `{manpage}`cryptsetup-open(8)`` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -60,7 +60,7 @@ let
|
||||
If not specified, the default sector size is determined from the
|
||||
underlying block device.
|
||||
|
||||
See `cryptsetup-open(8)` for details.
|
||||
See `{manpage}`cryptsetup-open(8)`` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -158,7 +158,7 @@ let
|
||||
whole swap space is discarded at swapon invocation. If "pages",
|
||||
asynchronous discard on freed pages is performed, before returning to
|
||||
the available pages pool. With "both", both policies are activated.
|
||||
See swapon(8) for more information.
|
||||
See {manpage}`swapon(8)` for more information.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -204,7 +204,7 @@ let
|
||||
homeMode = mkOption {
|
||||
type = types.strMatching "[0-7]{1,5}";
|
||||
default = "700";
|
||||
description = "The user's home directory mode in numeric format. See chmod(1). The mode is only applied if {option}`users.users.<name>.createHome` is true.";
|
||||
description = "The user's home directory mode in numeric format. See {manpage}`chmod(1)`. The mode is only applied if {option}`users.users.<name>.createHome` is true.";
|
||||
};
|
||||
|
||||
cryptHomeLuks = mkOption {
|
||||
|
||||
@@ -28,7 +28,7 @@ in
|
||||
description = ''
|
||||
Configuration for `xdg-desktop-portal-wlr`.
|
||||
|
||||
See `xdg-desktop-portal-wlr(5)` for supported
|
||||
See {manpage}`xdg-desktop-portal-wlr(5)` for supported
|
||||
values.
|
||||
'';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
x86_64-linux = "/nix/store/wsa13yx6kl6zzjlhjb8vmcqb6msbxym3-nix-2.24.11";
|
||||
i686-linux = "/nix/store/rn1449hjxh77f723m5rc1skgv4paknic-nix-2.24.11";
|
||||
aarch64-linux = "/nix/store/psrkach0v2s66rw30nxzpz7hgsqrvg28-nix-2.24.11";
|
||||
riscv64-linux = "/nix/store/zc8clmxxi9zr7vx7y8v8kg1rsmhwsp42-nix-riscv64-unknown-linux-gnu-2.24.11";
|
||||
x86_64-darwin = "/nix/store/nc81g85wlkzqck5mxdfbnxscavg2xh09-nix-2.24.11";
|
||||
aarch64-darwin = "/nix/store/nqzxb4h7sbkk6876zx8yc88ahlgl5kkl-nix-2.24.11";
|
||||
x86_64-linux = "/nix/store/kwck2vdfdp2v4jr9c4daryyk9mlbx406-nix-2.24.12";
|
||||
i686-linux = "/nix/store/s9qqyxzcgjl7xrfhnnjiiy9v876pcphi-nix-2.24.12";
|
||||
aarch64-linux = "/nix/store/pmj4g05d4nlr3gcr8nyadgwir3svbkmx-nix-2.24.12";
|
||||
riscv64-linux = "/nix/store/nzr3m4x3mcnfpnmyap31f9pviwv29vyc-nix-riscv64-unknown-linux-gnu-2.24.12";
|
||||
x86_64-darwin = "/nix/store/pf6msb0yzccznd75yil32mzk284h90z4-nix-2.24.12";
|
||||
aarch64-darwin = "/nix/store/vaaakw66qnbw4g007rf2nggy0rmhf8fh-nix-2.24.12";
|
||||
}
|
||||
|
||||
@@ -1547,6 +1547,7 @@
|
||||
./services/web-apps/mobilizon.nix
|
||||
./services/web-apps/openwebrx.nix
|
||||
./services/web-apps/outline.nix
|
||||
./services/web-apps/pds.nix
|
||||
./services/web-apps/peering-manager.nix
|
||||
./services/web-apps/peertube.nix
|
||||
./services/web-apps/pgpkeyserver-lite.nix
|
||||
|
||||
@@ -26,7 +26,7 @@ in
|
||||
default = { };
|
||||
description = ''
|
||||
System-wide configuration for GameMode (/etc/gamemode.ini).
|
||||
See gamemoded(8) man page for available settings.
|
||||
See {manpage}`gamemoded(8)` man page for available settings.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
|
||||
@@ -47,7 +47,7 @@ in
|
||||
`config` to `[ { foo.x = 42; } { bar.y = 42; }]` will put the `foo`
|
||||
section before the `bar` section unlike the default alphabetical
|
||||
order, which can be helpful for sections such as `include` and
|
||||
`includeIf`. See the CONFIGURATION FILE section of git-config(1) for
|
||||
`includeIf`. See the CONFIGURATION FILE section of {manpage}`git-config(1)` for
|
||||
more information.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -34,7 +34,7 @@ in
|
||||
};
|
||||
description = ''
|
||||
Default values applied to all accounts.
|
||||
See msmtp(1) for the available options.
|
||||
See {manpage}`msmtp(1)` for the available options.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -52,7 +52,7 @@ in
|
||||
description = ''
|
||||
Named accounts and their respective configurations.
|
||||
The special name "default" allows a default account to be defined.
|
||||
See msmtp(1) for the available options.
|
||||
See {manpage}`msmtp(1)` for the available options.
|
||||
|
||||
Use `programs.msmtp.extraConfig` instead of this attribute set-based
|
||||
option if ordered account inheritance is needed.
|
||||
@@ -68,7 +68,7 @@ in
|
||||
default = "";
|
||||
description = ''
|
||||
Extra lines to add to the msmtp configuration verbatim.
|
||||
See msmtp(1) for the syntax and available options.
|
||||
See {manpage}`msmtp(1)` for the syntax and available options.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
@@ -31,7 +31,7 @@ in
|
||||
description = ''
|
||||
Config options for the /etc/login.defs file, that defines
|
||||
the site-specific configuration for the shadow password suite.
|
||||
See login.defs(5) man page for available options.
|
||||
See {manpage}`login.defs(5)` man page for available options.
|
||||
'';
|
||||
type = lib.types.submodule {
|
||||
freeformType = (pkgs.formats.keyValue { }).type;
|
||||
|
||||
@@ -1483,7 +1483,7 @@ in
|
||||
the YubiCloud.
|
||||
|
||||
Use "challenge-response" for offline validation using YubiKeys with HMAC-SHA-1
|
||||
Challenge-Response configurations. See the man-page ykpamcfg(1) for further
|
||||
Challenge-Response configurations. See the man-page {manpage}`ykpamcfg(1)` for further
|
||||
details on how to configure offline Challenge-Response validation.
|
||||
|
||||
More information can be found [here](https://developers.yubico.com/yubico-pam/Authentication_Using_Challenge-Response.html).
|
||||
|
||||
@@ -214,7 +214,7 @@ in
|
||||
example = "10G";
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
Size limit for the /run/wrappers tmpfs. Look at mount(8), tmpfs size option,
|
||||
Size limit for the /run/wrappers tmpfs. Look at {manpage}`mount(8)`, tmpfs size option,
|
||||
for the accepted syntax. WARNING: don't set to less than 64MB.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -163,7 +163,7 @@ in
|
||||
default = 10;
|
||||
};
|
||||
ioSchedulingClass = mkOption {
|
||||
description = "IO scheduling class for btrbk (see ionice(1) for a quick description). Applies to local instances, and remote ones connecting by ssh if set to idle.";
|
||||
description = "IO scheduling class for btrbk (see {manpage}`ionice(1)` for a quick description). Applies to local instances, and remote ones connecting by ssh if set to idle.";
|
||||
type = types.enum [
|
||||
"idle"
|
||||
"best-effort"
|
||||
@@ -181,7 +181,7 @@ in
|
||||
type = types.nullOr types.str;
|
||||
default = "daily";
|
||||
description = ''
|
||||
How often this btrbk instance is started. See systemd.time(7) for more information about the format.
|
||||
How often this btrbk instance is started. See {manpage}`systemd.time(7)` for more information about the format.
|
||||
Setting it to null disables the timer, thus this instance can only be started manually.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ in
|
||||
default = null;
|
||||
description = ''
|
||||
file containing the credentials to access the repository, in the
|
||||
format of an EnvironmentFile as described by systemd.exec(5)
|
||||
format of an EnvironmentFile as described by {manpage}`systemd.exec(5)`
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -60,8 +60,8 @@ in
|
||||
`"/root/tarsnap.key"`.
|
||||
|
||||
It's recommended for backups that you generate a key for every archive
|
||||
using `tarsnap-keygen(1)`, and then generate a
|
||||
write-only tarsnap key using `tarsnap-keymgmt(1)`,
|
||||
using {manpage}`tarsnap-keygen(1)`, and then generate a
|
||||
write-only tarsnap key using {manpage}`tarsnap-keymgmt(1)`,
|
||||
and keep your master key(s) for a particular machine off-site.
|
||||
|
||||
The keyfile name should be given as a string and not a path, to
|
||||
@@ -86,11 +86,11 @@ in
|
||||
Use this option if you want to run multiple backups
|
||||
concurrently - each archive must have a unique key. You can
|
||||
generate a write-only key derived from your master key (which
|
||||
is recommended) using `tarsnap-keymgmt(1)`.
|
||||
is recommended) using {manpage}`tarsnap-keymgmt(1)`.
|
||||
|
||||
Note: every archive must have an individual master key. You
|
||||
must generate multiple keys with
|
||||
`tarsnap-keygen(1)`, and then generate write
|
||||
{manpage}`tarsnap-keygen(1)`, and then generate write
|
||||
only keys from those.
|
||||
|
||||
The keyfile name should be given as a string and not a path, to
|
||||
|
||||
@@ -227,7 +227,7 @@ in
|
||||
environmentFile = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
description = ''
|
||||
File path containing environment variables for configuring the k3s service in the format of an EnvironmentFile. See systemd.exec(5).
|
||||
File path containing environment variables for configuring the k3s service in the format of an EnvironmentFile. See {manpage}`systemd.exec(5)`.
|
||||
'';
|
||||
default = null;
|
||||
};
|
||||
|
||||
@@ -136,7 +136,7 @@ let
|
||||
default = null;
|
||||
example = "1 6 3 4 5 0 7";
|
||||
description = ''
|
||||
Sets the logical button mapping for this device, see XSetPointerMapping(3). The string must
|
||||
Sets the logical button mapping for this device, see {manpage}`XSetPointerMapping(3)`. The string must
|
||||
be a space-separated list of button mappings in the order of the logical buttons on the
|
||||
device, starting with button 1. The default mapping is "1 2 3 ... 32". A mapping of 0 deac‐
|
||||
tivates the button. Multiple buttons can have the same mapping. Invalid mapping strings are
|
||||
|
||||
@@ -249,7 +249,7 @@ in
|
||||
];
|
||||
description = ''
|
||||
A list of extra command line arguments to pass to thinkfan.
|
||||
Check the thinkfan(1) manpage for available arguments.
|
||||
Check the {manpage}`thinkfan(1)` manpage for available arguments.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -259,7 +259,7 @@ in
|
||||
description = ''
|
||||
Thinkfan settings. Use this option to configure thinkfan
|
||||
settings not exposed in a NixOS option or to bypass one.
|
||||
Before changing this, read the `thinkfan.conf(5)`
|
||||
Before changing this, read the `{manpage}`thinkfan.conf(5)``
|
||||
manpage and take a look at the example config file at
|
||||
<https://github.com/vmatare/thinkfan/blob/master/examples/thinkfan.yaml>
|
||||
'';
|
||||
|
||||
@@ -65,7 +65,7 @@ in
|
||||
on or off. We can't do much to fix these problems, but this is a way
|
||||
for users to make the laptop panel vanish, a state that might be used
|
||||
by a couple of user-space daemons. On Linux systems, see also
|
||||
logind.conf(5).
|
||||
{manpage}`logind.conf(5)`.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ in
|
||||
];
|
||||
description = ''
|
||||
A list of device nodes to which {command}`esphome` has access to.
|
||||
Refer to DeviceAllow in systemd.resource-control(5) for more information.
|
||||
Refer to DeviceAllow in {manpage}`systemd.resource-control(5)` for more information.
|
||||
Beware that if a device is referred to by an absolute path instead of a device category,
|
||||
it will only allow devices that already are plugged in when the service is started.
|
||||
'';
|
||||
|
||||
@@ -135,7 +135,7 @@ in
|
||||
this patternBlock's {option}`filters` are applied.
|
||||
If `value` starts and ends with a slash, it is interpreted as
|
||||
an extended python regular expression, if not, it's an exact match.
|
||||
The journal fields are explained in systemd.journal-fields(7).
|
||||
The journal fields are explained in {manpage}`systemd.journal-fields(7)`.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -210,7 +210,7 @@ in
|
||||
description = ''
|
||||
How often to run journalwatch.
|
||||
|
||||
The format is described in systemd.time(7).
|
||||
The format is described in {manpage}`systemd.time(7)`.
|
||||
'';
|
||||
};
|
||||
accuracy = lib.mkOption {
|
||||
@@ -219,7 +219,7 @@ in
|
||||
description = ''
|
||||
The time window around the interval in which the journalwatch run will be scheduled.
|
||||
|
||||
The format is described in systemd.time(7).
|
||||
The format is described in {manpage}`systemd.time(7)`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
@@ -70,7 +70,7 @@ in
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Accept logging through UDP. Option -r of syslogd(8).
|
||||
Accept logging through UDP. Option -r of {manpage}`syslogd(8)`.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ in
|
||||
default = "";
|
||||
example = "X-Virus-Scanned: ClamAV using ClamSMTP";
|
||||
description = ''
|
||||
A header to add to scanned messages. See clamsmtpd.conf(5) for
|
||||
A header to add to scanned messages. See {manpage}`clamsmtpd.conf(5)` for
|
||||
more details. Empty means no header.
|
||||
'';
|
||||
};
|
||||
@@ -65,7 +65,7 @@ in
|
||||
example = "127.0.0.1:10025";
|
||||
description = ''
|
||||
Address to wait for incoming SMTP connections on. See
|
||||
clamsmtpd.conf(5) for more details.
|
||||
{manpage}`clamsmtpd.conf(5)` for more details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -118,7 +118,7 @@ in
|
||||
default = null;
|
||||
description = ''
|
||||
Command to run when a virus is found. Please see VIRUS ACTION in
|
||||
clamsmtpd(8) for a discussion of this option and its safe use.
|
||||
{manpage}`clamsmtpd(8)` for a discussion of this option and its safe use.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ in
|
||||
type = int;
|
||||
default = 32;
|
||||
description = ''
|
||||
Socket listen queue backlog size. See listen(2) for more information about a backlog.
|
||||
Socket listen queue backlog size. See {manpage}`listen(2)` for more information about a backlog.
|
||||
Default is 32, which may be increased if you have a very high connection rate.
|
||||
'';
|
||||
};
|
||||
@@ -194,7 +194,7 @@ in
|
||||
DAEMON = mkOption {
|
||||
default = { };
|
||||
description = ''
|
||||
This section lists long running daemons to start before any SERVICES are spawned. master(8) will ensure that these processes are running, restarting any process which dies or forks. All listed processes will be shutdown when master(8) is exiting.
|
||||
This section lists long running daemons to start before any SERVICES are spawned. {manpage}`master(8)` will ensure that these processes are running, restarting any process which dies or forks. All listed processes will be shutdown when {manpage}`master(8)` is exiting.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -221,7 +221,7 @@ in
|
||||
type = path;
|
||||
default = "/run/cyrus/lmtp";
|
||||
description = ''
|
||||
Unix socket that lmtpd listens on, used by deliver(8). This should match the path specified in cyrus.conf(5).
|
||||
Unix socket that lmtpd listens on, used by {manpage}`deliver(8)`. This should match the path specified in {manpage}`cyrus.conf(5)`.
|
||||
'';
|
||||
};
|
||||
idlesocket = mkOption {
|
||||
|
||||
@@ -37,13 +37,13 @@ in
|
||||
onCalendar = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "*:0/3"; # every 3 minutes
|
||||
description = "How often is offlineimap started. Default is '*:0/3' meaning every 3 minutes. See systemd.time(7) for more information about the format.";
|
||||
description = "How often is offlineimap started. Default is '*:0/3' meaning every 3 minutes. See {manpage}`systemd.time(7)` for more information about the format.";
|
||||
};
|
||||
|
||||
timeoutStartSec = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "120sec"; # Kill if still alive after 2 minutes
|
||||
description = "How long waiting for offlineimap before killing it. Default is '120sec' meaning every 2 minutes. See systemd.time(7) for more information about the format.";
|
||||
description = "How long waiting for offlineimap before killing it. Default is '120sec' meaning every 2 minutes. See {manpage}`systemd.time(7)` for more information about the format.";
|
||||
};
|
||||
};
|
||||
config = lib.mkIf (cfg.enable || cfg.install) {
|
||||
|
||||
@@ -65,7 +65,7 @@ in
|
||||
defaultText = lib.literalExpression ''"csl:''${config.networking.hostName}"'';
|
||||
example = "csl:example.com,mydomain.net";
|
||||
description = ''
|
||||
Local domains set (see `opendkim(8)` for more information on datasets).
|
||||
Local domains set (see {manpage}`opendkim(8)` for more information on datasets).
|
||||
Messages from them are signed, not verified.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -546,7 +546,7 @@ in
|
||||
type = lib.types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Additional entries to put verbatim into aliases file, cf. man-page aliases(8).
|
||||
Additional entries to put verbatim into aliases file, cf. man-page {manpage}`aliases(8)`.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -631,7 +631,7 @@ in
|
||||
type = lib.types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Entries for the virtual alias map, cf. man-page virtual(5).
|
||||
Entries for the virtual alias map, cf. man-page {manpage}`virtual(5)`.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -654,7 +654,7 @@ in
|
||||
List of accepted local users. Specify a bare username, an
|
||||
`"@domain.tld"` wild-card, or a complete
|
||||
`"user@domain.tld"` address. If set, these names end
|
||||
up in the local recipient map -- see the local(8) man-page -- and
|
||||
up in the local recipient map -- see the {manpage}`local(8)` man-page -- and
|
||||
effectively replace the system user database lookup that's otherwise
|
||||
used by default.
|
||||
'';
|
||||
@@ -664,7 +664,7 @@ in
|
||||
default = "";
|
||||
type = lib.types.lines;
|
||||
description = ''
|
||||
Entries for the transport map, cf. man-page transport(8).
|
||||
Entries for the transport map, cf. man-page {manpage}`transport(8)`.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ in
|
||||
greylistAction = mkOption {
|
||||
type = str;
|
||||
default = "DEFER_IF_PERMIT";
|
||||
description = "Response status for greylisted messages (see access(5))";
|
||||
description = "Response status for greylisted messages (see {manpage}`access(5)`)";
|
||||
};
|
||||
greylistHeader = mkOption {
|
||||
type = str;
|
||||
@@ -170,12 +170,12 @@ in
|
||||
whitelistClients = mkOption {
|
||||
type = listOf path;
|
||||
default = [ ];
|
||||
description = "Client address whitelist files (see postgrey(8))";
|
||||
description = "Client address whitelist files (see {manpage}`postgrey(8)`)";
|
||||
};
|
||||
whitelistRecipients = mkOption {
|
||||
type = listOf path;
|
||||
default = [ ];
|
||||
description = "Recipient address whitelist files (see postgrey(8))";
|
||||
description = "Recipient address whitelist files (see {manpage}`postgrey(8)`)";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -49,7 +49,7 @@ in
|
||||
'''
|
||||
'';
|
||||
description = ''
|
||||
Contents of `/etc/auto.master` file. See {command}`auto.master(5)` and {command}`autofs(5)`.
|
||||
Contents of `/etc/auto.master` file. See {manpage}`auto.master(5)` and {manpage}`autofs(5)`.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ in
|
||||
];
|
||||
description = ''
|
||||
A list of extra command line arguments to pass to gpsd.
|
||||
Check gpsd(8) mangpage for possible arguments.
|
||||
Check {manpage}`gpsd(8)` mangpage for possible arguments.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -283,7 +283,7 @@ in
|
||||
# It's similar to Nix daemon so there's no question whether or not this
|
||||
# should be sandboxed.
|
||||
systemd.services.guix-daemon = {
|
||||
environment = serviceEnv;
|
||||
environment = serviceEnv // config.networking.proxy.envVars;
|
||||
script = ''
|
||||
exec ${lib.getExe' package "guix-daemon"} \
|
||||
--build-users-group=${cfg.group} \
|
||||
|
||||
@@ -54,7 +54,7 @@ in
|
||||
default = null;
|
||||
description = ''
|
||||
File containing the credentials to access the repository, in the
|
||||
format of an EnvironmentFile as described by systemd.exec(5)
|
||||
format of an EnvironmentFile as described by {manpage}`systemd.exec(5)`
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ in
|
||||
type = lib.types.lines;
|
||||
default = "";
|
||||
example = "brun 10%";
|
||||
description = "Additional configuration file entries. See cachefilesd.conf(5) for more information.";
|
||||
description = "Additional configuration file entries. See {manpage}`cachefilesd.conf(5)` for more information.";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -73,7 +73,7 @@ in
|
||||
});
|
||||
description = ''
|
||||
This cell's database server records, added to the global
|
||||
CellServDB. See CellServDB(5) man page for syntax. Ignored when
|
||||
CellServDB. See {manpage}`CellServDB(5)` man page for syntax. Ignored when
|
||||
`afsdb` is set to `true`.
|
||||
'';
|
||||
example = [
|
||||
|
||||
@@ -117,7 +117,7 @@ in
|
||||
advertisedAddresses = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
description = "List of IP addresses this server is advertised under. See NetInfo(5)";
|
||||
description = "List of IP addresses this server is advertised under. See {manpage}`NetInfo(5)`";
|
||||
};
|
||||
|
||||
cellName = mkOption {
|
||||
|
||||
@@ -146,7 +146,7 @@ in
|
||||
};
|
||||
|
||||
repos = lib.mkOption {
|
||||
description = "cgit repository settings, see cgitrc(5)";
|
||||
description = "cgit repository settings, see {manpage}`cgitrc(5)`";
|
||||
type = with lib.types; attrsOf (attrsOf settingType);
|
||||
default = { };
|
||||
example = {
|
||||
@@ -165,7 +165,7 @@ in
|
||||
};
|
||||
|
||||
settings = lib.mkOption {
|
||||
description = "cgit configuration, see cgitrc(5)";
|
||||
description = "cgit configuration, see {manpage}`cgitrc(5)`";
|
||||
type = lib.types.attrsOf repeatedSettingType;
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
|
||||
@@ -194,7 +194,7 @@ in
|
||||
will be symlinked to the location given here.
|
||||
This file must exist and be
|
||||
readable only by the `uucp` user.
|
||||
See hosts.hfaxd(5) for details.
|
||||
See {manpage}`hosts.hfaxd(5)` for details.
|
||||
This configuration permits access for all users:
|
||||
```
|
||||
environment.etc."hosts.hfaxd" = {
|
||||
@@ -299,7 +299,7 @@ in
|
||||
description = ''
|
||||
purging old files from the spooling area with
|
||||
{file}`faxcron` with the given frequency
|
||||
(see systemd.time(7))
|
||||
(see {manpage}`systemd.time(7)`)
|
||||
'';
|
||||
};
|
||||
faxcron.infoDays = mkOption {
|
||||
@@ -339,7 +339,7 @@ in
|
||||
description = ''
|
||||
Purge old files from the spooling area with
|
||||
{file}`faxcron` with the given frequency
|
||||
(see systemd.time(7)).
|
||||
(see {manpage}`systemd.time(7)`).
|
||||
'';
|
||||
};
|
||||
faxqclean.archiving = mkOption {
|
||||
@@ -356,7 +356,7 @@ in
|
||||
`as-flagged` archives jobs that
|
||||
have been flagged for archiving by sendfax,
|
||||
`always` forces archiving of all jobs.
|
||||
See also sendfax(1) and faxqclean(8).
|
||||
See also {manpage}`sendfax(1)` and {manpage}`faxqclean(8)`.
|
||||
'';
|
||||
};
|
||||
faxqclean.doneqMinutes = mkOption {
|
||||
|
||||
@@ -12,7 +12,7 @@ in {
|
||||
|
||||
options.services.minidlna.settings = lib.mkOption {
|
||||
default = {};
|
||||
description = "Configuration for `minidlna.conf(5)`.";
|
||||
description = "Configuration for {manpage}`minidlna.conf(5)`.";
|
||||
type = lib.types.submodule {
|
||||
freeformType = format.type;
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ in
|
||||
enable = mkEnableOption "the ngircd IRC server";
|
||||
|
||||
config = mkOption {
|
||||
description = "The ngircd configuration (see ngircd.conf(5)).";
|
||||
description = "The ngircd configuration (see {manpage}`ngircd.conf(5)`).";
|
||||
|
||||
type = types.lines;
|
||||
};
|
||||
|
||||
@@ -58,7 +58,7 @@ in
|
||||
interfaces and displays its findings at http://localhost:''${toString
|
||||
config.${opt.http-port}}. Default username and password is admin/admin.
|
||||
|
||||
See the ntopng(8) manual page and http://www.ntop.org/products/ntop/
|
||||
See the {manpage}`ntopng(8)` manual page and http://www.ntop.org/products/ntop/
|
||||
for more info.
|
||||
|
||||
Note that enabling ntopng will also enable redis (key-value
|
||||
|
||||
@@ -53,7 +53,7 @@ in
|
||||
config = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = "pppd configuration for this peer, see the pppd(8) man page.";
|
||||
description = "pppd configuration for this peer, see the {manpage}`pppd(8)` man page.";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ in
|
||||
the disk usage, since Privoxy itself never deletes the certificates.
|
||||
|
||||
::: {.note}
|
||||
The format is that of the `tmpfiles.d(5)`
|
||||
The format is that of the {manpage}`tmpfiles.d(5)`
|
||||
Age parameter.
|
||||
:::
|
||||
'';
|
||||
|
||||
@@ -45,7 +45,7 @@ in
|
||||
type = types.str;
|
||||
description = ''
|
||||
File containing the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
|
||||
in the format of an EnvironmentFile as described by systemd.exec(5)
|
||||
in the format of an EnvironmentFile as described by {manpage}`systemd.exec(5)`
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ in
|
||||
extraFlags = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
description = ''Extra flags passed to the {command}`robustirc-bridge` command. See [RobustIRC Documentation](https://robustirc.net/docs/adminguide.html#_bridge) or robustirc-bridge(1) for details.'';
|
||||
description = ''Extra flags passed to the {command}`robustirc-bridge` command. See [RobustIRC Documentation](https://robustirc.net/docs/adminguide.html#_bridge) or {manpage}`robustirc-bridge(1)` for details.'';
|
||||
example = [
|
||||
"-network robustirc.net"
|
||||
];
|
||||
|
||||
@@ -16,7 +16,7 @@ with lib;
|
||||
description = ''
|
||||
Whether to enable `rpcbind`, an ONC RPC directory service
|
||||
notably used by NFS and NIS, and which can be queried
|
||||
using the rpcinfo(1) command. `rpcbind` is a replacement for
|
||||
using the {manpage}`rpcinfo(1)` command. `rpcbind` is a replacement for
|
||||
`portmap`.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -56,7 +56,7 @@ in
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Environment file (see `systemd.exec(5)`
|
||||
Environment file (see {manpage}`systemd.exec(5)`
|
||||
"EnvironmentFile=" section for the syntax) to define variables for
|
||||
Searx. This option can be used to safely include secret keys into the
|
||||
Searx configuration.
|
||||
|
||||
@@ -53,7 +53,7 @@ in {
|
||||
description = ''
|
||||
Address to listen on. Must be in the
|
||||
`ListenStream=` syntax of
|
||||
[systemd.socket(5)](https://www.freedesktop.org/software/systemd/man/systemd.socket.html).
|
||||
{manpage}`systemd.socket(5)`.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -357,7 +357,7 @@ in
|
||||
type = lib.types.nullOr (lib.types.enum [ "QUIET" "FATAL" "ERROR" "INFO" "VERBOSE" "DEBUG" "DEBUG1" "DEBUG2" "DEBUG3" ]);
|
||||
default = "INFO"; # upstream default
|
||||
description = ''
|
||||
Gives the verbosity level that is used when logging messages from sshd(8). Logging with a DEBUG level
|
||||
Gives the verbosity level that is used when logging messages from {manpage}`sshd(8)`. Logging with a DEBUG level
|
||||
violates the privacy of users and is not recommended.
|
||||
'';
|
||||
};
|
||||
@@ -369,7 +369,7 @@ in
|
||||
# apply if cfg.useDns then "yes" else "no"
|
||||
default = false;
|
||||
description = ''
|
||||
Specifies whether sshd(8) should look up the remote host name, and to check that the resolved host name for
|
||||
Specifies whether {manpage}`sshd(8)` should look up the remote host name, and to check that the resolved host name for
|
||||
the remote IP address maps back to the very same IP address.
|
||||
If this option is set to no (the default) then only addresses and not host names may be used in
|
||||
~/.ssh/authorized_keys from and sshd_config Match Host directives.
|
||||
|
||||
@@ -16,7 +16,7 @@ with lib;
|
||||
data = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = "The DNS data to serve, in the format described by tinydns-data(8)";
|
||||
description = "The DNS data to serve, in the format described by {manpage}`tinydns-data(8)`";
|
||||
};
|
||||
|
||||
ip = mkOption {
|
||||
|
||||
@@ -53,7 +53,7 @@ in
|
||||
type = lib.types.str;
|
||||
default = "hourly";
|
||||
description = ''
|
||||
How often freshclam is invoked. See systemd.time(7) for more
|
||||
How often freshclam is invoked. See {manpage}`systemd.time(7)` for more
|
||||
information about the format.
|
||||
'';
|
||||
};
|
||||
@@ -74,7 +74,7 @@ in
|
||||
type = lib.types.str;
|
||||
default = "hourly";
|
||||
description = ''
|
||||
How often freshclam is invoked. See systemd.time(7) for more
|
||||
How often freshclam is invoked. See {manpage}`systemd.time(7)` for more
|
||||
information about the format.
|
||||
'';
|
||||
};
|
||||
@@ -105,7 +105,7 @@ in
|
||||
type = lib.types.str;
|
||||
default = "*-*-* 04:00:00";
|
||||
description = ''
|
||||
How often clamdscan is invoked. See systemd.time(7) for more
|
||||
How often clamdscan is invoked. See {manpage}`systemd.time(7)` for more
|
||||
information about the format.
|
||||
By default this runs using 10 cores at most, be sure to run it at a time of low traffic.
|
||||
'';
|
||||
|
||||
@@ -181,7 +181,7 @@ in
|
||||
defaultText = literalExpression "if cfg.package == pkgs.transmission_3 then 18 else \"022\"";
|
||||
description = ''
|
||||
Sets transmission's file mode creation mask.
|
||||
See the umask(2) manpage for more information.
|
||||
See the {manpage}`umask(2)` manpage for more information.
|
||||
Users who want their saved torrents to be world-writable
|
||||
may want to set this value to 0/`"000"`.
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@ in
|
||||
type = str;
|
||||
default = "daily";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the
|
||||
time at which the LoTW upload will occur.
|
||||
'';
|
||||
};
|
||||
@@ -191,7 +191,7 @@ in
|
||||
type = str;
|
||||
default = "daily";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the time
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the time
|
||||
at which the Clublog upload will occur.
|
||||
'';
|
||||
};
|
||||
@@ -210,7 +210,7 @@ in
|
||||
type = str;
|
||||
default = "weekly";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the
|
||||
time at which the LoTW user update will occur.
|
||||
'';
|
||||
};
|
||||
@@ -228,7 +228,7 @@ in
|
||||
type = str;
|
||||
default = "monthly";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the
|
||||
time at which the DOK update will occur.
|
||||
'';
|
||||
};
|
||||
@@ -247,7 +247,7 @@ in
|
||||
type = str;
|
||||
default = "monthly";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the time
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the time
|
||||
at which the Clublog SCP update will occur.
|
||||
'';
|
||||
};
|
||||
@@ -266,7 +266,7 @@ in
|
||||
type = str;
|
||||
default = "monthly";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the time
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the time
|
||||
at which the WWFF update will occur.
|
||||
'';
|
||||
};
|
||||
@@ -284,7 +284,7 @@ in
|
||||
type = str;
|
||||
default = "daily";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the
|
||||
time at which the QRZ upload will occur.
|
||||
'';
|
||||
};
|
||||
@@ -302,7 +302,7 @@ in
|
||||
type = str;
|
||||
default = "monthly";
|
||||
description = ''
|
||||
Specification (in the format described by systemd.time(7)) of the time
|
||||
Specification (in the format described by {manpage}`systemd.time(7)`) of the time
|
||||
at which the SOTA update will occur.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -51,7 +51,7 @@ in
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Environment file (see `systemd.exec(5)`
|
||||
Environment file (see {manpage}`systemd.exec(5)`
|
||||
"EnvironmentFile=" section for the syntax) to define variables for dex.
|
||||
This option can be used to safely include secret keys into the dex configuration.
|
||||
'';
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.freshrss;
|
||||
webserver = config.services.${cfg.webserver};
|
||||
|
||||
extension-env = pkgs.buildEnv {
|
||||
name = "freshrss-extensions";
|
||||
@@ -129,13 +130,25 @@ in
|
||||
example = "/mnt/freshrss";
|
||||
};
|
||||
|
||||
webserver = mkOption {
|
||||
type = types.enum [ "nginx" "caddy" "none"];
|
||||
default = "nginx";
|
||||
description = ''
|
||||
Whether to use nginx or caddy for virtual host management.
|
||||
|
||||
Further nginx configuration can be done by adapting `services.nginx.virtualHosts.<name>`.
|
||||
See [](#opt-services.nginx.virtualHosts) for further information.
|
||||
|
||||
Further caddy configuration can be done by adapting `services.caddy.virtualHosts.<name>`.
|
||||
See [](#opt-services.caddy.virtualHosts) for further information.
|
||||
'';
|
||||
};
|
||||
|
||||
virtualHost = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
type = types.str;
|
||||
default = "freshrss";
|
||||
description = ''
|
||||
Name of the nginx virtualhost to use and setup. If null, do not setup any virtualhost.
|
||||
You may need to configure the virtualhost further through services.nginx.virtualHosts.<virtualhost>,
|
||||
for example to enable SSL.
|
||||
Name of the caddy/nginx virtualhost to use and setup.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -204,8 +217,21 @@ in
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
# Set up a Caddy virtual host.
|
||||
services.caddy = mkIf (cfg.webserver == "caddy") {
|
||||
enable = true;
|
||||
virtualHosts.${cfg.virtualHost}.extraConfig = ''
|
||||
root * ${config.services.freshrss.package}/p
|
||||
php_fastcgi unix/${config.services.phpfpm.pools.freshrss.socket} {
|
||||
env FRESHRSS_DATA_PATH ${config.services.freshrss.dataDir}
|
||||
}
|
||||
file_server
|
||||
'';
|
||||
};
|
||||
|
||||
# Set up a Nginx virtual host.
|
||||
services.nginx = mkIf (cfg.virtualHost != null) {
|
||||
services.nginx = mkIf (cfg.webserver == "nginx") {
|
||||
enable = true;
|
||||
virtualHosts.${cfg.virtualHost} = {
|
||||
root = "${cfg.package}/p";
|
||||
@@ -237,8 +263,8 @@ in
|
||||
${cfg.pool} = {
|
||||
user = "freshrss";
|
||||
settings = {
|
||||
"listen.owner" = "nginx";
|
||||
"listen.group" = "nginx";
|
||||
"listen.owner" = webserver.user;
|
||||
"listen.group" = webserver.group;
|
||||
"listen.mode" = "0600";
|
||||
"pm" = "dynamic";
|
||||
"pm.max_children" = 32;
|
||||
|
||||
@@ -80,7 +80,7 @@ in
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
description = ''
|
||||
File path containing environment variables for configuring the GoToSocial service
|
||||
in the format of an EnvironmentFile as described by systemd.exec(5).
|
||||
in the format of an EnvironmentFile as described by {manpage}`systemd.exec(5)`.
|
||||
|
||||
This option could be used to pass sensitive configuration to the GoToSocial daemon.
|
||||
|
||||
|
||||
@@ -202,6 +202,7 @@ let
|
||||
ListenAddress = "${cfg.host}:${toString cfg.port}";
|
||||
LocalModeSocketLocation = cfg.socket.path;
|
||||
EnableLocalMode = cfg.socket.enable;
|
||||
EnableSecurityFixAlert = cfg.telemetry.enableSecurityAlerts;
|
||||
};
|
||||
TeamSettings.SiteName = cfg.siteName;
|
||||
SqlSettings.DriverName = cfg.database.driver;
|
||||
@@ -233,7 +234,13 @@ let
|
||||
FileSettings.Directory = cfg.dataDir;
|
||||
PluginSettings.Directory = "${pluginDir}/server";
|
||||
PluginSettings.ClientDirectory = "${pluginDir}/client";
|
||||
LogSettings.FileLocation = cfg.logDir;
|
||||
LogSettings = {
|
||||
FileLocation = cfg.logDir;
|
||||
|
||||
# Reaches out to Mattermost's servers for telemetry; disable it by default.
|
||||
# https://docs.mattermost.com/configure/environment-configuration-settings.html#enable-diagnostics-and-error-reporting
|
||||
EnableDiagnostics = cfg.telemetry.enableDiagnostics;
|
||||
};
|
||||
} cfg.settings;
|
||||
|
||||
mattermostConf = recursiveUpdate mattermostConfWithoutPlugins (
|
||||
@@ -455,7 +462,10 @@ in
|
||||
|
||||
preferNixConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
default = versionAtLeast config.system.stateVersion "25.05";
|
||||
defaultText = ''
|
||||
versionAtLeast config.system.stateVersion "25.05";
|
||||
'';
|
||||
description = ''
|
||||
If both mutableConfig and this option are set, the Nix configuration
|
||||
will take precedence over any settings configured in the server
|
||||
@@ -474,6 +484,26 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
telemetry = {
|
||||
enableSecurityAlerts = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
True if we should enable security update checking. This reaches out to Mattermost's servers:
|
||||
https://docs.mattermost.com/manage/telemetry.html#security-update-check-feature
|
||||
'';
|
||||
};
|
||||
|
||||
enableDiagnostics = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
True if we should enable sending diagnostic data. This reaches out to Mattermost's servers:
|
||||
https://docs.mattermost.com/manage/telemetry.html#error-and-diagnostics-reporting-feature
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
environment = mkOption {
|
||||
type = with types; attrsOf (either int str);
|
||||
default = { };
|
||||
|
||||
@@ -72,7 +72,7 @@ in
|
||||
description = ''
|
||||
File containing the ADMIN_USERNAME and
|
||||
ADMIN_PASSWORD (length >= 6) in the format of
|
||||
an EnvironmentFile=, as described by systemd.exec(5).
|
||||
an EnvironmentFile=, as described by {manpage}`systemd.exec(5)`.
|
||||
'';
|
||||
example = "/etc/nixos/miniflux-admin-credentials";
|
||||
};
|
||||
|
||||
233
nixos/modules/services/web-apps/pds.nix
Normal file
233
nixos/modules/services/web-apps/pds.nix
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.pds;
|
||||
|
||||
inherit (lib)
|
||||
getExe
|
||||
mkEnableOption
|
||||
mkIf
|
||||
mkOption
|
||||
mkPackageOption
|
||||
escapeShellArgs
|
||||
concatMapStringsSep
|
||||
types
|
||||
literalExpression
|
||||
;
|
||||
|
||||
pdsadminWrapper =
|
||||
let
|
||||
cfgSystemd = config.systemd.services.pds.serviceConfig;
|
||||
in
|
||||
pkgs.writeShellScriptBin "pdsadmin" ''
|
||||
DUMMY_PDS_ENV_FILE="$(mktemp)"
|
||||
trap 'rm -f "$DUMMY_PDS_ENV_FILE"' EXIT
|
||||
env "PDS_ENV_FILE=$DUMMY_PDS_ENV_FILE" \
|
||||
${escapeShellArgs cfgSystemd.Environment} \
|
||||
${concatMapStringsSep " " (envFile: "$(cat ${envFile})") cfgSystemd.EnvironmentFile} \
|
||||
${getExe pkgs.pdsadmin} "$@"
|
||||
'';
|
||||
in
|
||||
# All defaults are from https://github.com/bluesky-social/pds/blob/8b9fc24cec5f30066b0d0b86d2b0ba3d66c2b532/installer.sh
|
||||
{
|
||||
options.services.pds = {
|
||||
enable = mkEnableOption "pds";
|
||||
|
||||
package = mkPackageOption pkgs "pds" { };
|
||||
|
||||
settings = mkOption {
|
||||
type = types.submodule {
|
||||
freeformType = types.attrsOf (
|
||||
types.oneOf [
|
||||
(types.nullOr types.str)
|
||||
types.port
|
||||
]
|
||||
);
|
||||
options = {
|
||||
PDS_PORT = mkOption {
|
||||
type = types.port;
|
||||
default = 3000;
|
||||
description = "Port to listen on";
|
||||
};
|
||||
|
||||
PDS_HOSTNAME = mkOption {
|
||||
type = types.str;
|
||||
example = "pds.example.com";
|
||||
description = "Instance hostname (base domain name)";
|
||||
};
|
||||
|
||||
PDS_BLOB_UPLOAD_LIMIT = mkOption {
|
||||
type = types.str;
|
||||
default = "52428800";
|
||||
description = "Size limit of uploaded blobs in bytes";
|
||||
};
|
||||
|
||||
PDS_DID_PLC_URL = mkOption {
|
||||
type = types.str;
|
||||
default = "https://plc.directory";
|
||||
description = "URL of DID PLC directory";
|
||||
};
|
||||
|
||||
PDS_BSKY_APP_VIEW_URL = mkOption {
|
||||
type = types.str;
|
||||
default = "https://api.bsky.app";
|
||||
description = "URL of bsky frontend";
|
||||
};
|
||||
|
||||
PDS_BSKY_APP_VIEW_DID = mkOption {
|
||||
type = types.str;
|
||||
default = "did:web:api.bsky.app";
|
||||
description = "DID of bsky frontend";
|
||||
};
|
||||
|
||||
PDS_REPORT_SERVICE_URL = mkOption {
|
||||
type = types.str;
|
||||
default = "https://mod.bsky.app";
|
||||
description = "URL of mod service";
|
||||
};
|
||||
|
||||
PDS_REPORT_SERVICE_DID = mkOption {
|
||||
type = types.str;
|
||||
default = "did:plc:ar7c4by46qjdydhdevvrndac";
|
||||
description = "DID of mod service";
|
||||
};
|
||||
|
||||
PDS_CRAWLERS = mkOption {
|
||||
type = types.str;
|
||||
default = "https://bsky.network";
|
||||
description = "URL of crawlers";
|
||||
};
|
||||
|
||||
PDS_DATA_DIRECTORY = mkOption {
|
||||
type = types.str;
|
||||
default = "/var/lib/pds";
|
||||
description = "Directory to store state";
|
||||
};
|
||||
|
||||
PDS_BLOBSTORE_DISK_LOCATION = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "/var/lib/pds/blocks";
|
||||
description = "Store blobs at this location, set to null to use e.g. S3";
|
||||
};
|
||||
|
||||
LOG_ENABLED = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "true";
|
||||
description = "Enable logging";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
description = ''
|
||||
Environment variables to set for the service. Secrets should be
|
||||
specified using {option}`environmentFile`.
|
||||
|
||||
Refer to <https://github.com/bluesky-social/atproto/blob/main/packages/pds/src/config/env.ts> for available environment variables.
|
||||
'';
|
||||
};
|
||||
|
||||
environmentFiles = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [ ];
|
||||
description = ''
|
||||
File to load environment variables from. Loaded variables override
|
||||
values set in {option}`environment`.
|
||||
|
||||
Use it to set values of `PDS_JWT_SECRET`, `PDS_ADMIN_PASSWORD`,
|
||||
and `PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX` secrets.
|
||||
`PDS_JWT_SECRET` and `PDS_ADMIN_PASSWORD` can be generated with
|
||||
```
|
||||
openssl rand --hex 16
|
||||
```
|
||||
`PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX` can be generated with
|
||||
```
|
||||
openssl ecparam --name secp256k1 --genkey --noout --outform DER | tail --bytes=+8 | head --bytes=32 | xxd --plain --cols 32
|
||||
```
|
||||
'';
|
||||
};
|
||||
|
||||
pdsadmin = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = cfg.enable;
|
||||
defaultText = literalExpression "config.services.pds.enable";
|
||||
description = "Add pdsadmin script to PATH";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment = mkIf cfg.pdsadmin.enable {
|
||||
systemPackages = [ pdsadminWrapper ];
|
||||
};
|
||||
|
||||
systemd.services.pds = {
|
||||
description = "pds";
|
||||
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = getExe cfg.package;
|
||||
Environment = lib.mapAttrsToList (k: v: "${k}=${if builtins.isInt v then toString v else v}") (
|
||||
lib.filterAttrs (_: v: v != null) cfg.settings
|
||||
);
|
||||
|
||||
EnvironmentFile = cfg.environmentFiles;
|
||||
User = "pds";
|
||||
Group = "pds";
|
||||
StateDirectory = "pds";
|
||||
StateDirectoryMode = "0755";
|
||||
Restart = "always";
|
||||
|
||||
# Hardening
|
||||
RemoveIPC = true;
|
||||
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
|
||||
NoNewPrivileges = true;
|
||||
PrivateDevices = true;
|
||||
ProtectClock = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelModules = true;
|
||||
PrivateMounts = true;
|
||||
SystemCallArchitectures = [ "native" ];
|
||||
MemoryDenyWriteExecute = false; # required by V8 JIT
|
||||
RestrictNamespaces = true;
|
||||
RestrictSUIDSGID = true;
|
||||
ProtectHostname = true;
|
||||
LockPersonality = true;
|
||||
ProtectKernelTunables = true;
|
||||
RestrictAddressFamilies = [
|
||||
"AF_UNIX"
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
];
|
||||
RestrictRealtime = true;
|
||||
DeviceAllow = [ "" ];
|
||||
ProtectSystem = "strict";
|
||||
ProtectProc = "invisible";
|
||||
ProcSubset = "pid";
|
||||
ProtectHome = true;
|
||||
PrivateUsers = true;
|
||||
PrivateTmp = true;
|
||||
UMask = "0077";
|
||||
};
|
||||
};
|
||||
|
||||
users = {
|
||||
users.pds = {
|
||||
group = "pds";
|
||||
isSystemUser = true;
|
||||
};
|
||||
groups.pds = { };
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ t4ccer ];
|
||||
}
|
||||
@@ -109,7 +109,7 @@ in {
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
With this option, you can customize an nginx virtual host which already has sensible defaults for Dolibarr.
|
||||
With this option, you can customize an nginx virtual host which already has sensible defaults for Pixelfed.
|
||||
Set to {} if you do not need any customization to the virtual host.
|
||||
If enabled, then by default, the {option}`serverName` is
|
||||
`''${domain}`,
|
||||
|
||||
@@ -30,7 +30,7 @@ in
|
||||
inherit (format) type;
|
||||
default = { };
|
||||
description = ''
|
||||
Merecat configuration. Refer to merecat(8) for details on supported values.
|
||||
Merecat configuration. Refer to {manpage}`merecat(8)` for details on supported values.
|
||||
'';
|
||||
example = {
|
||||
hostname = "localhost";
|
||||
|
||||
@@ -72,7 +72,7 @@ in
|
||||
description = ''
|
||||
File containing the MINIO_ROOT_USER, default is "minioadmin", and
|
||||
MINIO_ROOT_PASSWORD (length >= 8), default is "minioadmin"; in the format of
|
||||
an EnvironmentFile=, as described by systemd.exec(5).
|
||||
an EnvironmentFile=, as described by {manpage}`systemd.exec(5)`.
|
||||
'';
|
||||
example = "/etc/nixos/minio-root-credentials";
|
||||
};
|
||||
|
||||
@@ -50,7 +50,7 @@ in
|
||||
default = null;
|
||||
description = ''
|
||||
Path to file containing secrets for Pomerium, in systemd
|
||||
EnvironmentFile format. See the systemd.exec(5) man page.
|
||||
EnvironmentFile format. See the {manpage}`systemd.exec(5)` man page.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
@@ -200,7 +200,7 @@ in
|
||||
'';
|
||||
description = ''
|
||||
Grant capabilities to the uWSGI instance. See the
|
||||
`capabilities(7)` for available values.
|
||||
{manpage}`capabilities(7)` for available values.
|
||||
|
||||
::: {.note}
|
||||
uWSGI runs as an unprivileged user (even as Emperor) with the minimal
|
||||
|
||||
@@ -27,7 +27,7 @@ in
|
||||
which allows users to start X manually via the "startx" command
|
||||
from a vt shell. The X server runs under the user's id, not as root.
|
||||
The user must provide a ~/.xinitrc file containing session startup
|
||||
commands, see startx(1). This is not automatically generated
|
||||
commands, see {manpage}`startx(1)`. This is not automatically generated
|
||||
from the desktopManager and windowManager settings.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -18,7 +18,7 @@ in
|
||||
to start manually via the "sx" command from a vt shell. The X server
|
||||
runs under the user's id, not as root. The user must provide a
|
||||
~/.config/sx/sxrc file containing session startup commands, see
|
||||
sx(1). This is not automatically generated from the desktopManager
|
||||
{manpage}`sx(1)`. This is not automatically generated from the desktopManager
|
||||
and windowManager settings. sx doesn't have a way to directly set
|
||||
X server flags, but it can be done by overriding its xorgserver
|
||||
dependency.
|
||||
|
||||
@@ -126,7 +126,7 @@ in
|
||||
];
|
||||
description = ''
|
||||
List of conditions of windows that should not be faded.
|
||||
See `picom(1)` man page for more examples.
|
||||
See {manpage}`picom(1)` man page for more examples.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -172,7 +172,7 @@ in
|
||||
];
|
||||
description = ''
|
||||
List of conditions of windows that should have no shadow.
|
||||
See `picom(1)` man page for more examples.
|
||||
See {manpage}`picom(1)` man page for more examples.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -326,7 +326,7 @@ in
|
||||
description = ''
|
||||
Picom settings. Use this option to configure Picom settings not exposed
|
||||
in a NixOS option or to bypass one. For the available options see the
|
||||
CONFIGURATION FILES section at `picom(1)`.
|
||||
CONFIGURATION FILES section at {manpage}`picom(1)`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
@@ -203,7 +203,7 @@ in
|
||||
type = types.nullOr types.path;
|
||||
visible = false;
|
||||
description = ''
|
||||
The env(1) executable that is linked system-wide to
|
||||
The {manpage}`env(1)` executable that is linked system-wide to
|
||||
`/usr/bin/env`.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ in
|
||||
type = types.lines;
|
||||
example = "Storage=journal";
|
||||
description = ''
|
||||
Extra config options for systemd-coredump. See coredump.conf(5) man page
|
||||
Extra config options for systemd-coredump. See {manpage}`coredump.conf(5)` man page
|
||||
for available options.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -163,7 +163,7 @@ in
|
||||
type = types.lines;
|
||||
example = "DefaultLimitCORE=infinity";
|
||||
description = ''
|
||||
Extra config options for systemd. See systemd-system.conf(5) man page
|
||||
Extra config options for systemd. See {manpage}`systemd-system.conf(5)` man page
|
||||
for available options.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ in
|
||||
example = "IdleAction=lock";
|
||||
description = ''
|
||||
Extra config options for systemd-logind.
|
||||
See [logind.conf(5)](https://www.freedesktop.org/software/systemd/man/logind.conf.html)
|
||||
See {manpage}`logind.conf(5)`
|
||||
for available options.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -28,7 +28,7 @@ in
|
||||
`timesyncd.conf` file as opposed to setting this option to null which
|
||||
will remove `NTP=` entirely.
|
||||
|
||||
See man:timesyncd.conf(5) for details.
|
||||
See {manpage}`timesyncd.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
fallbackServers = mkOption {
|
||||
@@ -42,7 +42,7 @@ in
|
||||
`timesyncd.conf` file as opposed to setting this option to null which
|
||||
will remove `FallbackNTP=` entirely.
|
||||
|
||||
See man:timesyncd.conf(5) for details.
|
||||
See {manpage}`timesyncd.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
extraConfig = mkOption {
|
||||
|
||||
@@ -99,7 +99,7 @@ in
|
||||
default = { };
|
||||
description = ''
|
||||
General configuration for NFS daemons and tools.
|
||||
See nfs.conf(5) and related man pages for details.
|
||||
See {manpage}`nfs.conf(5)` and related man pages for details.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
|
||||
@@ -53,28 +53,26 @@ let
|
||||
)
|
||||
);
|
||||
|
||||
genericDhcpNetworks =
|
||||
initrd:
|
||||
mkIf cfg.useDHCP {
|
||||
networks."99-ethernet-default-dhcp" = {
|
||||
matchConfig = {
|
||||
Type = "ether";
|
||||
Kind = "!*"; # physical interfaces have no kind
|
||||
};
|
||||
DHCP = "yes";
|
||||
networkConfig.IPv6PrivacyExtensions = "kernel";
|
||||
};
|
||||
networks."99-wireless-client-dhcp" = {
|
||||
matchConfig.WLANInterfaceType = "station";
|
||||
DHCP = "yes";
|
||||
networkConfig.IPv6PrivacyExtensions = "kernel";
|
||||
# We also set the route metric to one more than the default
|
||||
# of 1024, so that Ethernet is preferred if both are
|
||||
# available.
|
||||
dhcpV4Config.RouteMetric = 1025;
|
||||
ipv6AcceptRAConfig.RouteMetric = 1025;
|
||||
genericDhcpNetworks = mkIf cfg.useDHCP {
|
||||
networks."99-ethernet-default-dhcp" = {
|
||||
matchConfig = {
|
||||
Type = "ether";
|
||||
Kind = "!*"; # physical interfaces have no kind
|
||||
};
|
||||
DHCP = "yes";
|
||||
networkConfig.IPv6PrivacyExtensions = "kernel";
|
||||
};
|
||||
networks."99-wireless-client-dhcp" = {
|
||||
matchConfig.WLANInterfaceType = "station";
|
||||
DHCP = "yes";
|
||||
networkConfig.IPv6PrivacyExtensions = "kernel";
|
||||
# We also set the route metric to one more than the default
|
||||
# of 1024, so that Ethernet is preferred if both are
|
||||
# available.
|
||||
dhcpV4Config.RouteMetric = 1025;
|
||||
ipv6AcceptRAConfig.RouteMetric = 1025;
|
||||
};
|
||||
};
|
||||
|
||||
interfaceNetworks = mkMerge (
|
||||
forEach interfaces (i: {
|
||||
@@ -220,7 +218,7 @@ in
|
||||
# former, the user retains full control over the configuration.
|
||||
boot.initrd.systemd.network = mkMerge [
|
||||
defaultGateways
|
||||
(genericDhcpNetworks true)
|
||||
genericDhcpNetworks
|
||||
interfaceNetworks
|
||||
bridgeNetworks
|
||||
vlanNetworks
|
||||
@@ -271,7 +269,7 @@ in
|
||||
enable = true;
|
||||
}
|
||||
defaultGateways
|
||||
(genericDhcpNetworks false)
|
||||
genericDhcpNetworks
|
||||
interfaceNetworks
|
||||
bridgeNetworks
|
||||
(mkMerge (
|
||||
|
||||
@@ -97,7 +97,7 @@ let
|
||||
default = null;
|
||||
description = ''
|
||||
Type of the route. See the `Route types` section
|
||||
in the `ip-route(8)` manual page for the details.
|
||||
in the {manpage}`ip-route(8)` manual page for the details.
|
||||
|
||||
Note that `prohibit`, `blackhole`,
|
||||
`unreachable`, and `throw` cannot
|
||||
@@ -118,7 +118,7 @@ let
|
||||
example = { mtu = "1492"; window = "524288"; };
|
||||
description = ''
|
||||
Other route options. See the symbol `OPTIONS`
|
||||
in the `ip-route(8)` manual page for the details.
|
||||
in the {manpage}`ip-route(8)` manual page for the details.
|
||||
You may also specify `metric`,
|
||||
`src`, `protocol`,
|
||||
`scope`, `from`
|
||||
|
||||
@@ -34,7 +34,7 @@ in
|
||||
default = ["/run/docker.sock"];
|
||||
description = ''
|
||||
A list of unix and tcp docker should listen to. The format follows
|
||||
ListenStream as described in systemd.socket(5).
|
||||
ListenStream as described in {manpage}`systemd.socket(5)`.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -349,7 +349,7 @@ let
|
||||
Device node access modifier. Takes a combination
|
||||
`r` (read), `w` (write), and
|
||||
`m` (mknod). See the
|
||||
`systemd.resource-control(5)` man page for more
|
||||
{manpage}`systemd.resource-control(5)` man page for more
|
||||
information.'';
|
||||
};
|
||||
};
|
||||
@@ -563,7 +563,7 @@ in
|
||||
example = [ "CAP_NET_ADMIN" "CAP_MKNOD" ];
|
||||
description = ''
|
||||
Grant additional capabilities to the container. See the
|
||||
capabilities(7) and systemd-nspawn(1) man pages for more
|
||||
{manpage}`capabilities(7)` and {manpage}`systemd-nspawn(1)` man pages for more
|
||||
information.
|
||||
'';
|
||||
};
|
||||
@@ -644,7 +644,7 @@ in
|
||||
shall run in. The specified path should refer to a (possibly bind-mounted) network
|
||||
namespace file, as exposed by the kernel below /proc/<PID>/ns/net. This makes the
|
||||
container enter the given network namespace. One of the typical use cases is to give
|
||||
a network namespace under /run/netns created by ip-netns(8).
|
||||
a network namespace under /run/netns created by {manpage}`ip-netns(8)`.
|
||||
Note that this option cannot be used together with other network-related options,
|
||||
such as --private-network or --network-interface=.
|
||||
'';
|
||||
@@ -737,7 +737,7 @@ in
|
||||
Mounts a set of tmpfs file systems into the container.
|
||||
Multiple paths can be specified.
|
||||
Valid items must conform to the --tmpfs argument
|
||||
of systemd-nspawn. See systemd-nspawn(1) for details.
|
||||
of systemd-nspawn. See {manpage}`systemd-nspawn(1)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -747,7 +747,7 @@ in
|
||||
example = [ "--drop-capability=CAP_SYS_CHROOT" ];
|
||||
description = ''
|
||||
Extra flags passed to the systemd-nspawn command.
|
||||
See systemd-nspawn(1) for details.
|
||||
See {manpage}`systemd-nspawn(1)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ let
|
||||
[Docker engine documentation](https://docs.docker.com/engine/logging/configure/)
|
||||
|
||||
For Podman:
|
||||
Refer to the docker-run(1) man page.
|
||||
Refer to the {manpage}`docker-run(1)` man page.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@ let
|
||||
];
|
||||
description = ''
|
||||
This option specifies disk mount options to be passed to the `mount -o` command.
|
||||
For more information, see the `mount(8)` manual page.
|
||||
For more information, see the {manpage}`mount(8)` manual page.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -810,6 +810,7 @@ in {
|
||||
parsedmarc = handleTest ./parsedmarc {};
|
||||
password-option-override-ordering = handleTest ./password-option-override-ordering.nix {};
|
||||
pdns-recursor = handleTest ./pdns-recursor.nix {};
|
||||
pds = handleTest ./pds.nix {};
|
||||
peerflix = handleTest ./peerflix.nix {};
|
||||
peering-manager = handleTest ./web-apps/peering-manager.nix {};
|
||||
peertube = handleTestOn ["x86_64-linux"] ./web-apps/peertube.nix {};
|
||||
|
||||
30
nixos/tests/freshrss/caddy-sqlite.nix
Normal file
30
nixos/tests/freshrss/caddy-sqlite.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
import ../make-test-python.nix (
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
name = "freshrss-caddy-sqlite";
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
etu
|
||||
stunkymonkey
|
||||
];
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services.freshrss = {
|
||||
enable = true;
|
||||
baseUrl = "http://localhost";
|
||||
passwordFile = pkgs.writeText "password" "secret";
|
||||
dataDir = "/srv/freshrss";
|
||||
webserver = "caddy";
|
||||
virtualHost = "freshrss:80";
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_open_port(80)
|
||||
response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://localhost:80/i/")
|
||||
assert '<title>Login · FreshRSS</title>' in response, "Login page didn't load successfully"
|
||||
'';
|
||||
}
|
||||
)
|
||||
@@ -5,5 +5,6 @@
|
||||
http-auth = import ./http-auth.nix { inherit system pkgs; };
|
||||
none-auth = import ./none-auth.nix { inherit system pkgs; };
|
||||
pgsql = import ./pgsql.nix { inherit system pkgs; };
|
||||
sqlite = import ./sqlite.nix { inherit system pkgs; };
|
||||
nginx-sqlite = import ./nginx-sqlite.nix { inherit system pkgs; };
|
||||
caddy-sqlite = import ./caddy-sqlite.nix { inherit system pkgs; };
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ import ../make-test-python.nix (
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_open_port(80)
|
||||
response = machine.succeed("curl -vvv -s http://127.0.0.1:80/i/?c=extension")
|
||||
response = machine.succeed("curl -vvv -s http://localhost:80/i/?c=extension")
|
||||
assert '<span class="ext_name disabled">YouTube Video Feed</span>' in response, "Extension not present in extensions page."
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import ../make-test-python.nix (
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_open_port(80)
|
||||
response = machine.succeed("curl -vvv -s -H 'Host: freshrss' -H 'Remote-User: testuser' http://127.0.0.1:80/i/")
|
||||
response = machine.succeed("curl -vvv -s -H 'Host: freshrss' -H 'Remote-User: testuser' http://localhost:80/i/")
|
||||
assert 'Account: testuser' in response, "http_auth method didn't work."
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import ../make-test-python.nix (
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
name = "freshrss-sqlite";
|
||||
name = "freshrss-nginx-sqlite";
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
etu
|
||||
stunkymonkey
|
||||
@@ -21,7 +21,7 @@ import ../make-test-python.nix (
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_open_port(80)
|
||||
response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://127.0.0.1:80/i/")
|
||||
response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://localhost:80/i/")
|
||||
assert '<title>Login · FreshRSS</title>' in response, "Login page didn't load successfully"
|
||||
'';
|
||||
}
|
||||
@@ -17,7 +17,7 @@ import ../make-test-python.nix (
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_open_port(80)
|
||||
response = machine.succeed("curl -vvv -s http://127.0.0.1:80/i/")
|
||||
response = machine.succeed("curl -vvv -s http://localhost:80/i/")
|
||||
assert '<title>Main stream · FreshRSS</title>' in response, "FreshRSS stream page didn't load successfully"
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ import ../make-test-python.nix (
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_open_port(5432)
|
||||
machine.wait_for_open_port(80)
|
||||
response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://127.0.0.1:80/i/")
|
||||
response = machine.succeed("curl -vvv -s -H 'Host: freshrss' http://localhost:80/i/")
|
||||
assert '<title>Login · FreshRSS</title>' in response, "Login page didn't load successfully"
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -42,10 +42,11 @@ import ./make-test-python.nix (
|
||||
machine.wait_for_file("/run/user/${toString user.uid}/wayland-1")
|
||||
|
||||
with subtest("Check if MATE session components actually start"):
|
||||
for i in ["wayfire", "mate-panel", "mate-wayland.sh", "mate-wayland-components.sh"]:
|
||||
machine.wait_until_succeeds(f"pgrep -f {i}")
|
||||
# It is expected that this applet doesn't work in Wayland
|
||||
machine.wait_for_text('WorkspaceSwitcherApplet')
|
||||
for i in ["wayfire", "mate-panel", "mate-wayland.sh"]:
|
||||
machine.wait_until_succeeds(f"pgrep {i}")
|
||||
machine.wait_until_succeeds("pgrep -f mate-wayland-components.sh")
|
||||
# It is expected that WorkspaceSwitcherApplet doesn't work in Wayland
|
||||
machine.wait_for_text('(panel|Factory|Workspace|Switcher|Applet|configuration)')
|
||||
|
||||
with subtest("Check if various environment variables are set"):
|
||||
cmd = "xargs --null --max-args=1 echo < /proc/$(pgrep -xf mate-panel)/environ"
|
||||
|
||||
@@ -48,6 +48,7 @@ import ../make-test-python.nix (
|
||||
database = {
|
||||
peerAuth = lib.mkDefault true;
|
||||
};
|
||||
telemetry.enableSecurityAlerts = false;
|
||||
settings = {
|
||||
SupportSettings.AboutLink = "https://nixos.org";
|
||||
PluginSettings.AutomaticPrepackagedPlugins = false;
|
||||
@@ -93,6 +94,7 @@ import ../make-test-python.nix (
|
||||
makeMattermost
|
||||
{
|
||||
mutableConfig = true;
|
||||
preferNixConfig = false;
|
||||
settings.SupportSettings.HelpLink = "https://search.nixos.org";
|
||||
}
|
||||
{
|
||||
@@ -104,7 +106,6 @@ import ../make-test-python.nix (
|
||||
};
|
||||
postgresMostlyMutable = makeMattermost {
|
||||
mutableConfig = true;
|
||||
preferNixConfig = true;
|
||||
plugins = with pkgs; [
|
||||
# Build the demo plugin.
|
||||
(mattermost.buildPlugin {
|
||||
|
||||
29
nixos/tests/pds.nix
Normal file
29
nixos/tests/pds.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
import ./make-test-python.nix (
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "PDS";
|
||||
|
||||
nodes.machine = {
|
||||
services.pds = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PDS_PORT = 3000;
|
||||
PDS_HOSTNAME = "example.com";
|
||||
|
||||
# Snake oil testing credentials
|
||||
PDS_JWT_SECRET = "7b93fee53be046bf59c27a32a0fb2069";
|
||||
PDS_ADMIN_PASSWORD = "3a4077bc0d5f04eca945ef0509f7e809";
|
||||
PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX = "ae4f5028d04c833ba630f29debd5ff80b7700e43e9f4bf70f729a88cd6a6ce35";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("pds.service")
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.succeed("curl --fail http://localhost:3000")
|
||||
'';
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ t4ccer ];
|
||||
}
|
||||
)
|
||||
@@ -29,7 +29,8 @@ rustPlatform.buildRustPackage rec {
|
||||
sha256 = "sha256-dGQDRb7fgIkXelZKa+PdodIs9DxbgEMlVGJjK/hU3Mo=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-GScAUqALoocqvsHz4XgPytI8cl0hiuWjqaO/ItNo4v4=";
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-SqvJSHkyd1IicT6c4pE96dBJNNodULhpyG14HRGVWCk=";
|
||||
|
||||
nativeBuildInputs =
|
||||
[
|
||||
|
||||
@@ -29,6 +29,15 @@ let
|
||||
sha256 = "1w86gv6zs2cbr0731n49z8v6xxw0g8b0hzyv2iqb9mqcfh38l8zy";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace-fail 'O6' 'O3'
|
||||
substituteInPlace Misc/common.h \
|
||||
--replace-fail '|| defined(TARGET_OS_MAC)' ""
|
||||
substituteInPlace Misc/common.c \
|
||||
--replace-fail '|| defined(TARGET_OS_MAC)' ""
|
||||
'';
|
||||
|
||||
# required for cross compilation
|
||||
makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@ lib.packagesFromDirectoryRecursive {
|
||||
inherit (pkgs) codeium;
|
||||
};
|
||||
|
||||
elpaca = callPackage ./manual-packages/elpaca { inherit (pkgs) git; };
|
||||
|
||||
lsp-bridge = callPackage ./manual-packages/lsp-bridge {
|
||||
inherit (pkgs)
|
||||
basedpyright
|
||||
@@ -25,6 +27,8 @@ lib.packagesFromDirectoryRecursive {
|
||||
;
|
||||
};
|
||||
|
||||
straight = callPackage ./manual-packages/straight { inherit (pkgs) git; };
|
||||
|
||||
structured-haskell-mode = self.shm;
|
||||
|
||||
texpresso = callPackage ./manual-packages/texpresso { inherit (pkgs) texpresso; };
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
melpaBuild,
|
||||
fetchFromGitHub,
|
||||
git,
|
||||
unstableGitUpdater,
|
||||
lib,
|
||||
}:
|
||||
|
||||
melpaBuild {
|
||||
pname = "elpaca";
|
||||
version = "0-unstable-2025-01-25";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "progfolio";
|
||||
repo = "elpaca";
|
||||
rev = "db2fd7258ff69fe2d100888cb8d92cf3bf94d465";
|
||||
hash = "sha256-SseY0iU3D3cloKZy6xPp8QT0H1Cu2uGiiVG6rXq/UHg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ git ];
|
||||
|
||||
passthru.updateScript = unstableGitUpdater { };
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/progfolio/elpaca";
|
||||
description = "Elisp package manager";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ abhisheksingh0x558 ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
melpaBuild,
|
||||
fetchFromGitHub,
|
||||
git,
|
||||
unstableGitUpdater,
|
||||
lib,
|
||||
}:
|
||||
|
||||
melpaBuild {
|
||||
pname = "straight";
|
||||
version = "0-unstable-2024-10-06";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "radian-software";
|
||||
repo = "straight.el";
|
||||
rev = "33fb4695066781c634ff1c3c81ba96e880deccf7";
|
||||
hash = "sha256-3NPVLTn0ka0RvSLXW9gDKam3xajp62/mLupc8uyatzo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ git ];
|
||||
|
||||
passthru.updateScript = unstableGitUpdater { };
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/radian-software/straight.el";
|
||||
description = "Next-generation, purely functional package manager for the Emacs hacker";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ abhisheksingh0x558 ];
|
||||
};
|
||||
}
|
||||
@@ -126,6 +126,7 @@ let
|
||||
version = buildNumber;
|
||||
inherit src;
|
||||
sourceRoot = "${src.name}/native/restarter";
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = restarterHash;
|
||||
|
||||
# Allow static linking
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user