Merge master into haskell-updates
This commit is contained in:
+4
-4
@@ -24,10 +24,10 @@
|
||||
# Libraries
|
||||
/lib @edolstra @infinisil
|
||||
/lib/systems @alyssais @ericson2314 @amjoseph-nixpkgs
|
||||
/lib/generators.nix @edolstra @Profpatsch
|
||||
/lib/cli.nix @edolstra @Profpatsch
|
||||
/lib/debug.nix @edolstra @Profpatsch
|
||||
/lib/asserts.nix @edolstra @Profpatsch
|
||||
/lib/generators.nix @infinisil @edolstra @Profpatsch
|
||||
/lib/cli.nix @infinisil @edolstra @Profpatsch
|
||||
/lib/debug.nix @infinisil @edolstra @Profpatsch
|
||||
/lib/asserts.nix @infinisil @edolstra @Profpatsch
|
||||
/lib/path.* @infinisil @fricklerhandwerk
|
||||
/lib/fileset @infinisil
|
||||
/doc/functions/fileset.section.md @infinisil
|
||||
|
||||
@@ -14,7 +14,9 @@ For new packages please briefly describe the package or provide a link to its ho
|
||||
- [ ] aarch64-linux
|
||||
- [ ] x86_64-darwin
|
||||
- [ ] aarch64-darwin
|
||||
- [ ] For non-Linux: Is `sandbox = true` set in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/command-ref/conf-file.html))
|
||||
- For non-Linux: Is sandboxing enabled in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/command-ref/conf-file.html))
|
||||
- [ ] `sandbox = relaxed`
|
||||
- [ ] `sandbox = true`
|
||||
- [ ] Tested, as applicable:
|
||||
- [NixOS test(s)](https://nixos.org/manual/nixos/unstable/index.html#sec-nixos-tests) (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
|
||||
- and/or [package tests](https://nixos.org/manual/nixpkgs/unstable/#sec-package-tests)
|
||||
|
||||
@@ -2608,12 +2608,6 @@
|
||||
githubId = 200617;
|
||||
name = "Ben Sima";
|
||||
};
|
||||
bstrik = {
|
||||
email = "dutchman55@gmx.com";
|
||||
github = "bstrik";
|
||||
githubId = 7716744;
|
||||
name = "Berno Strik";
|
||||
};
|
||||
btlvr = {
|
||||
email = "btlvr@protonmail.com";
|
||||
github = "btlvr";
|
||||
@@ -3886,6 +3880,13 @@
|
||||
githubId = 107034852;
|
||||
name = "Daniyal Suri";
|
||||
};
|
||||
dannixon = {
|
||||
email = "dan@dan-nixon.com";
|
||||
github = "DanNixon";
|
||||
githubId = 4037377;
|
||||
name = "Dan Nixon";
|
||||
matrix = "@dannixon:matrix.org";
|
||||
};
|
||||
dansbandit = {
|
||||
github = "dansbandit";
|
||||
githubId = 4530687;
|
||||
@@ -11666,6 +11667,13 @@
|
||||
githubId = 149558;
|
||||
name = "Merlin Gaillard";
|
||||
};
|
||||
mirkolenz = {
|
||||
name = "Mirko Lenz";
|
||||
email = "mirko@mirkolenz.com";
|
||||
matrix = "@mlenz:matrix.org";
|
||||
github = "mirkolenz";
|
||||
githubId = 5160954;
|
||||
};
|
||||
mirrexagon = {
|
||||
email = "mirrexagon@mirrexagon.com";
|
||||
github = "mirrexagon";
|
||||
@@ -15042,6 +15050,12 @@
|
||||
githubId = 496447;
|
||||
name = "Robert Hensing";
|
||||
};
|
||||
robert-manchester = {
|
||||
email = "robert.manchester@gmail.com";
|
||||
github = "robert-manchester";
|
||||
githubId = 86313040;
|
||||
name = "Robert Manchester";
|
||||
};
|
||||
robertodr = {
|
||||
email = "roberto.diremigio@gmail.com";
|
||||
github = "robertodr";
|
||||
|
||||
@@ -786,8 +786,11 @@ def update_plugins(editor: Editor, args):
|
||||
autocommit = not args.no_commit
|
||||
|
||||
if autocommit:
|
||||
from datetime import date
|
||||
editor.nixpkgs_repo = git.Repo(editor.root, search_parent_directories=True)
|
||||
commit(editor.nixpkgs_repo, f"{editor.attr_path}: update", [args.outfile])
|
||||
updated = date.today().strftime('%m-%d-%Y')
|
||||
|
||||
commit(editor.nixpkgs_repo, f"{editor.attr_path}: updated the {updated}", [args.outfile])
|
||||
|
||||
if redirects:
|
||||
update()
|
||||
|
||||
@@ -44,6 +44,10 @@ of actions is always the same:
|
||||
- Inspect what changed during these actions and print units that failed and
|
||||
that were newly started
|
||||
|
||||
By default, some units are filtered from the outputs to make it less spammy.
|
||||
This can be disabled for development or testing by setting the environment variable
|
||||
`STC_DISPLAY_ALL_UNITS=1`
|
||||
|
||||
Most of these actions are either self-explaining but some of them have to do
|
||||
with our units or the activation script. For this reason, these topics are
|
||||
explained in the next sections.
|
||||
|
||||
@@ -254,6 +254,8 @@
|
||||
|
||||
- Garage has been upgraded to 0.9.x. `services.garage.package` now needs to be explicitly set, so version upgrades can be done in a controlled fashion. For this, we expose `garage_x_y` attributes which can be set here.
|
||||
|
||||
- `voms` and `xrootd` now moves the `$out/etc` content to the `$etc` output instead of `$out/etc.orig`, when input argument `externalEtc` is not `null`.
|
||||
|
||||
- The `woodpecker-*` CI packages have been updated to 1.0.0. This release is wildly incompatible with the 0.15.X versions that were previously packaged. Please read [upstream's documentation](https://woodpecker-ci.org/docs/next/migrations#100) to learn how to update your CI configurations.
|
||||
|
||||
- The Caddy module gained a new option named `services.caddy.enableReload` which is enabled by default. It allows reloading the service instead of restarting it, if only a config file has changed. This option must be disabled if you have turned off the [Caddy admin API](https://caddyserver.com/docs/caddyfile/options#admin). If you keep this option enabled, you should consider setting [`grace_period`](https://caddyserver.com/docs/caddyfile/options#grace-period) to a non-infinite value to prevent Caddy from delaying the reload indefinitely.
|
||||
@@ -355,6 +357,8 @@
|
||||
|
||||
- The application firewall `opensnitch` now uses the process monitor method eBPF as default as recommended by upstream. The method can be changed with the setting [services.opensnitch.settings.ProcMonitorMethod](#opt-services.opensnitch.settings.ProcMonitorMethod).
|
||||
|
||||
- `services.hedgedoc` has been heavily refactored, reducing the amount of declared options in the module. Most of the options should still work without any changes. Some options have been deprecated, as they no longer have any effect. See [#244941](https://github.com/NixOS/nixpkgs/pull/244941) for more details.
|
||||
|
||||
- The module [services.ankisyncd](#opt-services.ankisyncd.package) has been switched to [anki-sync-server-rs](https://github.com/ankicommunity/anki-sync-server-rs) from the old python version, which was difficult to update, had not been updated in a while, and did not support recent versions of anki.
|
||||
Unfortunately all servers supporting new clients (newer version of anki-sync-server, anki's built in sync server and this new rust package) do not support the older sync protocol that was used in the old server, so such old clients will also need updating and in particular the anki package in nixpkgs is also being updated in this release.
|
||||
The module update takes care of the new config syntax and the data itself (user login and cards) are compatible, so users of the module will be able to just log in again after updating both client and server without any extra action.
|
||||
|
||||
@@ -7,7 +7,7 @@ let
|
||||
in
|
||||
{
|
||||
options.networking.iproute2 = {
|
||||
enable = mkEnableOption (lib.mdDoc "copy IP route configuration files");
|
||||
enable = mkEnableOption (lib.mdDoc "copying IP route configuration files");
|
||||
rttablesExtraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
|
||||
@@ -15,7 +15,7 @@ let
|
||||
in
|
||||
{
|
||||
options.networking.stevenblack = {
|
||||
enable = mkEnableOption (mdDoc "Enable the stevenblack hosts file blocklist");
|
||||
enable = mkEnableOption (mdDoc "the stevenblack hosts file blocklist");
|
||||
|
||||
block = mkOption {
|
||||
type = types.listOf (types.enum [ "fakenews" "gambling" "porn" "social" ]);
|
||||
|
||||
@@ -8,13 +8,13 @@ in
|
||||
{
|
||||
options.programs.corectrl = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
A tool to overclock amd graphics cards and processors.
|
||||
CoreCtrl, a tool to overclock amd graphics cards and processors.
|
||||
Add your user to the corectrl group to run corectrl without needing to enter your password
|
||||
'');
|
||||
|
||||
gpuOverclock = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
true
|
||||
GPU overclocking
|
||||
'');
|
||||
ppfeaturemask = mkOption {
|
||||
type = types.str;
|
||||
|
||||
@@ -11,7 +11,7 @@ in
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
i2c devices support. By default access is granted to users in the "i2c"
|
||||
group (will be created if non-existent) and any user with a seat, meaning
|
||||
logged on the computer locally.
|
||||
logged on the computer locally
|
||||
'');
|
||||
|
||||
group = mkOption {
|
||||
|
||||
@@ -11,7 +11,7 @@ in
|
||||
non-root access to the firmware of UHK keyboards.
|
||||
You need it when you want to flash a new firmware on the keyboard.
|
||||
Access to the keyboard is granted to users in the "input" group.
|
||||
You may want to install the uhk-agent package.
|
||||
You may want to install the uhk-agent package
|
||||
'');
|
||||
|
||||
};
|
||||
|
||||
@@ -11,7 +11,7 @@ in
|
||||
udev rules for keyboards from ZSA like the ErgoDox EZ, Planck EZ and Moonlander Mark I.
|
||||
You need it when you want to flash a new configuration on the keyboard
|
||||
or use their live training in the browser.
|
||||
You may want to install the wally-cli package.
|
||||
You may want to install the wally-cli package
|
||||
'');
|
||||
};
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ in
|
||||
options = {
|
||||
hardware.openrazer = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
OpenRazer drivers and userspace daemon.
|
||||
OpenRazer drivers and userspace daemon
|
||||
'');
|
||||
|
||||
verboseLogging = mkOption {
|
||||
|
||||
@@ -9,7 +9,7 @@ in
|
||||
{
|
||||
options.hardware.tuxedo-keyboard = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
Enables the tuxedo-keyboard driver.
|
||||
the tuxedo-keyboard driver.
|
||||
|
||||
To configure the driver, pass the options to the {option}`boot.kernelParams` configuration.
|
||||
There are several parameters you can change. It's best to check at the source code description which options are supported.
|
||||
|
||||
@@ -24,7 +24,7 @@ in {
|
||||
options = {
|
||||
hardware.nvidia = {
|
||||
datacenter.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
Data Center drivers for NVIDIA cards on a NVLink topology.
|
||||
Data Center drivers for NVIDIA cards on a NVLink topology
|
||||
'');
|
||||
datacenter.settings = lib.mkOption {
|
||||
type = settingsFormat.type;
|
||||
@@ -79,18 +79,18 @@ in {
|
||||
|
||||
powerManagement.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
experimental power management through systemd. For more information, see
|
||||
the NVIDIA docs, on Chapter 21. Configuring Power Management Support.
|
||||
the NVIDIA docs, on Chapter 21. Configuring Power Management Support
|
||||
'');
|
||||
|
||||
powerManagement.finegrained = lib.mkEnableOption (lib.mdDoc ''
|
||||
experimental power management of PRIME offload. For more information, see
|
||||
the NVIDIA docs, on Chapter 22. PCI-Express Runtime D3 (RTD3) Power Management.
|
||||
the NVIDIA docs, on Chapter 22. PCI-Express Runtime D3 (RTD3) Power Management
|
||||
'');
|
||||
|
||||
dynamicBoost.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
dynamic Boost balances power between the CPU and the GPU for improved
|
||||
performance on supported laptops using the nvidia-powerd daemon. For more
|
||||
information, see the NVIDIA docs, on Chapter 23. Dynamic Boost on Linux.
|
||||
information, see the NVIDIA docs, on Chapter 23. Dynamic Boost on Linux
|
||||
'');
|
||||
|
||||
modesetting.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
@@ -99,7 +99,7 @@ in {
|
||||
Enabling this fixes screen tearing when using Optimus via PRIME (see
|
||||
{option}`hardware.nvidia.prime.sync.enable`. This is not enabled
|
||||
by default because it is not officially supported by NVIDIA and would not
|
||||
work with SLI.
|
||||
work with SLI
|
||||
'');
|
||||
|
||||
prime.nvidiaBusId = lib.mkOption {
|
||||
@@ -153,11 +153,11 @@ in {
|
||||
|
||||
Note that this configuration will only be successful when a display manager
|
||||
for which the {option}`services.xserver.displayManager.setupCommands`
|
||||
option is supported is used.
|
||||
option is supported is used
|
||||
'');
|
||||
|
||||
prime.allowExternalGpu = lib.mkEnableOption (lib.mdDoc ''
|
||||
configuring X to allow external NVIDIA GPUs when using Prime [Reverse] sync optimus.
|
||||
configuring X to allow external NVIDIA GPUs when using Prime [Reverse] sync optimus
|
||||
'');
|
||||
|
||||
prime.offload.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
@@ -166,7 +166,7 @@ in {
|
||||
If this is enabled, then the bus IDs of the NVIDIA and Intel/AMD GPUs have to
|
||||
be specified ({option}`hardware.nvidia.prime.nvidiaBusId` and
|
||||
{option}`hardware.nvidia.prime.intelBusId` or
|
||||
{option}`hardware.nvidia.prime.amdgpuBusId`).
|
||||
{option}`hardware.nvidia.prime.amdgpuBusId`)
|
||||
'');
|
||||
|
||||
prime.offload.enableOffloadCmd = lib.mkEnableOption (lib.mdDoc ''
|
||||
@@ -174,7 +174,7 @@ in {
|
||||
for offloading programs to an nvidia device. To work, should have also enabled
|
||||
{option}`hardware.nvidia.prime.offload.enable` or {option}`hardware.nvidia.prime.reverseSync.enable`.
|
||||
|
||||
Example usage `nvidia-offload sauerbraten_client`.
|
||||
Example usage `nvidia-offload sauerbraten_client`
|
||||
'');
|
||||
|
||||
prime.reverseSync.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
@@ -202,25 +202,25 @@ in {
|
||||
|
||||
Note that this configuration will only be successful when a display manager
|
||||
for which the {option}`services.xserver.displayManager.setupCommands`
|
||||
option is supported is used.
|
||||
option is supported is used
|
||||
'');
|
||||
|
||||
nvidiaSettings =
|
||||
(lib.mkEnableOption (lib.mdDoc ''
|
||||
nvidia-settings, NVIDIA's GUI configuration tool.
|
||||
nvidia-settings, NVIDIA's GUI configuration tool
|
||||
''))
|
||||
// {default = true;};
|
||||
|
||||
nvidiaPersistenced = lib.mkEnableOption (lib.mdDoc ''
|
||||
nvidia-persistenced a update for NVIDIA GPU headless mode, i.e.
|
||||
It ensures all GPUs stay awake even during headless mode.
|
||||
It ensures all GPUs stay awake even during headless mode
|
||||
'');
|
||||
|
||||
forceFullCompositionPipeline = lib.mkEnableOption (lib.mdDoc ''
|
||||
forcefully the full composition pipeline.
|
||||
This sometimes fixes screen tearing issues.
|
||||
This has been reported to reduce the performance of some OpenGL applications and may produce issues in WebGL.
|
||||
It also drastically increases the time the driver needs to clock down after load.
|
||||
It also drastically increases the time the driver needs to clock down after load
|
||||
'');
|
||||
|
||||
package = lib.mkOption {
|
||||
|
||||
@@ -12,7 +12,7 @@ in
|
||||
|
||||
{
|
||||
|
||||
options.hardware.facetimehd.enable = mkEnableOption (lib.mdDoc "facetimehd kernel module");
|
||||
options.hardware.facetimehd.enable = mkEnableOption (lib.mdDoc "the facetimehd kernel module");
|
||||
|
||||
options.hardware.facetimehd.withCalibration = mkOption {
|
||||
default = false;
|
||||
|
||||
@@ -69,7 +69,7 @@ in
|
||||
#dialout = 27; # unused
|
||||
polkituser = 28;
|
||||
#utmp = 29; # unused
|
||||
# ddclient = 30; # software removed
|
||||
# ddclient = 30; # converted to DynamicUser = true
|
||||
davfs2 = 31;
|
||||
disnix = 33;
|
||||
osgi = 34;
|
||||
@@ -394,7 +394,7 @@ in
|
||||
dialout = 27;
|
||||
#polkituser = 28; # currently unused, polkitd doesn't need a group
|
||||
utmp = 29;
|
||||
# ddclient = 30; # software removed
|
||||
# ddclient = 30; # converted to DynamicUser = true
|
||||
davfs2 = 31;
|
||||
disnix = 33;
|
||||
osgi = 34;
|
||||
|
||||
@@ -5,7 +5,7 @@ let
|
||||
|
||||
inherit (config.nixops) enableDeprecatedAutoLuks;
|
||||
in {
|
||||
options.nixops.enableDeprecatedAutoLuks = lib.mkEnableOption (lib.mdDoc "Enable the deprecated NixOps AutoLuks module");
|
||||
options.nixops.enableDeprecatedAutoLuks = lib.mkEnableOption (lib.mdDoc "the deprecated NixOps AutoLuks module");
|
||||
|
||||
config = {
|
||||
assertions = [
|
||||
|
||||
@@ -884,6 +884,7 @@
|
||||
./services/networking/dae.nix
|
||||
./services/networking/dante.nix
|
||||
./services/networking/deconz.nix
|
||||
./services/networking/ddclient.nix
|
||||
./services/networking/dhcpcd.nix
|
||||
./services/networking/dnscache.nix
|
||||
./services/networking/dnscrypt-proxy2.nix
|
||||
|
||||
@@ -8,7 +8,7 @@ in {
|
||||
options = {
|
||||
programs.calls = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
Whether to enable GNOME calls: a phone dialer and call handler.
|
||||
GNOME calls: a phone dialer and call handler
|
||||
'');
|
||||
};
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@ in
|
||||
{
|
||||
options = {
|
||||
programs.cnping = {
|
||||
enable = mkEnableOption (lib.mdDoc "Whether to install a setcap wrapper for cnping");
|
||||
enable = mkEnableOption (lib.mdDoc "a setcap wrapper for cnping");
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ in {
|
||||
enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
direnv integration. Takes care of both installation and
|
||||
setting up the sourcing of the shell. Additionally enables nix-direnv
|
||||
integration. Note that you need to logout and login for this change to apply.
|
||||
integration. Note that you need to logout and login for this change to apply
|
||||
'');
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "direnv" {};
|
||||
|
||||
@@ -8,9 +8,9 @@ in {
|
||||
options = {
|
||||
programs.feedbackd = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
Whether to enable the feedbackd D-BUS service and udev rules.
|
||||
the feedbackd D-BUS service and udev rules.
|
||||
|
||||
Your user needs to be in the `feedbackd` group to trigger effects.
|
||||
Your user needs to be in the `feedbackd` group to trigger effects
|
||||
'');
|
||||
package = mkOption {
|
||||
description = lib.mdDoc ''
|
||||
|
||||
@@ -208,7 +208,7 @@ in
|
||||
end
|
||||
|
||||
# if we haven't sourced the login config, do it
|
||||
status --is-login; and not set -q __fish_nixos_login_config_sourced
|
||||
status is-login; and not set -q __fish_nixos_login_config_sourced
|
||||
and begin
|
||||
${sourceEnv "loginShellInit"}
|
||||
|
||||
@@ -220,7 +220,7 @@ in
|
||||
end
|
||||
|
||||
# if we haven't sourced the interactive config, do it
|
||||
status --is-interactive; and not set -q __fish_nixos_interactive_config_sourced
|
||||
status is-interactive; and not set -q __fish_nixos_interactive_config_sourced
|
||||
and begin
|
||||
${fishAbbrs}
|
||||
${fishAliases}
|
||||
|
||||
@@ -9,7 +9,7 @@ with lib;
|
||||
1714 to 1764 as they are needed for it to function properly.
|
||||
You can use the {option}`package` to use
|
||||
`gnomeExtensions.gsconnect` as an alternative
|
||||
implementation if you use Gnome.
|
||||
implementation if you use Gnome
|
||||
'');
|
||||
package = mkOption {
|
||||
default = pkgs.plasma5Packages.kdeconnect-kde;
|
||||
|
||||
@@ -6,7 +6,7 @@ in
|
||||
meta.maintainers = with lib.maintainers; [ rewine ];
|
||||
|
||||
options.programs.wayfire = {
|
||||
enable = lib.mkEnableOption (lib.mdDoc "Wayfire, a wayland compositor based on wlroots.");
|
||||
enable = lib.mkEnableOption (lib.mdDoc "Wayfire, a wayland compositor based on wlroots");
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "wayfire" { };
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@ in
|
||||
(mkRemovedOptionModule [ "services" "chronos" ] "The corresponding package was removed from nixpkgs.")
|
||||
(mkRemovedOptionModule [ "services" "couchpotato" ] "The corresponding package was removed from nixpkgs.")
|
||||
(mkRemovedOptionModule [ "services" "dd-agent" ] "dd-agent was removed from nixpkgs in favor of the newer datadog-agent.")
|
||||
(mkRemovedOptionModule [ "services" "ddclient" ] "ddclient has been removed on the request of the upstream maintainer because it is unmaintained and has bugs. Please switch to a different software like `inadyn` or `knsupdate`.") # Added 2023-07-04
|
||||
(mkRemovedOptionModule [ "services" "dnscrypt-proxy" ] "Use services.dnscrypt-proxy2 instead")
|
||||
(mkRemovedOptionModule [ "services" "exhibitor" ] "The corresponding package was removed from nixpkgs.")
|
||||
(mkRemovedOptionModule [ "services" "firefox" "syncserver" ] "The corresponding package was removed from nixpkgs.")
|
||||
|
||||
@@ -359,14 +359,14 @@ in
|
||||
};
|
||||
|
||||
features.oracleMode = mkEnableOption (lib.mdDoc ''
|
||||
Destroy snapshots one by one instead of using one long argument list.
|
||||
destroying snapshots one by one instead of using one long argument list.
|
||||
If source and destination are out of sync for a long time, you may have
|
||||
so many snapshots to destroy that the argument gets is too long and the
|
||||
command fails.
|
||||
command fails
|
||||
'');
|
||||
features.recvu = mkEnableOption (lib.mdDoc ''
|
||||
recvu feature which uses `-u` on the receiving end to keep the destination
|
||||
filesystem unmounted.
|
||||
filesystem unmounted
|
||||
'');
|
||||
features.compressed = mkEnableOption (lib.mdDoc ''
|
||||
compressed feature which adds the options `-Lce` to
|
||||
@@ -377,7 +377,7 @@ in
|
||||
support and -e is for embedded data support. see
|
||||
{manpage}`znapzend(1)`
|
||||
and {manpage}`zfs(8)`
|
||||
for more info.
|
||||
for more info
|
||||
'');
|
||||
features.sendRaw = mkEnableOption (lib.mdDoc ''
|
||||
sendRaw feature which adds the options `-w` to the
|
||||
@@ -386,25 +386,25 @@ in
|
||||
backup that can't be read without the encryption key/passphrase, useful
|
||||
when the remote isn't fully trusted or not physically secure. This
|
||||
option must be used consistently, raw incrementals cannot be based on
|
||||
non-raw snapshots and vice versa.
|
||||
non-raw snapshots and vice versa
|
||||
'');
|
||||
features.skipIntermediates = mkEnableOption (lib.mdDoc ''
|
||||
Enable the skipIntermediates feature to send a single increment
|
||||
the skipIntermediates feature to send a single increment
|
||||
between latest common snapshot and the newly made one. It may skip
|
||||
several source snaps if the destination was offline for some time, and
|
||||
it should skip snapshots not managed by znapzend. Normally for online
|
||||
destinations, the new snapshot is sent as soon as it is created on the
|
||||
source, so there are no automatic increments to skip.
|
||||
source, so there are no automatic increments to skip
|
||||
'');
|
||||
features.lowmemRecurse = mkEnableOption (lib.mdDoc ''
|
||||
use lowmemRecurse on systems where you have too many datasets, so a
|
||||
recursive listing of attributes to find backup plans exhausts the
|
||||
memory available to {command}`znapzend`: instead, go the slower
|
||||
way to first list all impacted dataset names, and then query their
|
||||
configs one by one.
|
||||
configs one by one
|
||||
'');
|
||||
features.zfsGetType = mkEnableOption (lib.mdDoc ''
|
||||
use zfsGetType if your {command}`zfs get` supports a
|
||||
using zfsGetType if your {command}`zfs get` supports a
|
||||
`-t` argument for filtering by dataset type at all AND
|
||||
lists properties for snapshots by default when recursing, so that there
|
||||
is too much data to process while searching for backup plans.
|
||||
@@ -412,7 +412,7 @@ in
|
||||
`--recursive` search for backup plans can literally
|
||||
differ by hundreds of times (depending on the amount of snapshots in
|
||||
that dataset tree... and a decent backup plan will ensure you have a lot
|
||||
of those), so you would benefit from requesting this feature.
|
||||
of those), so you would benefit from requesting this feature
|
||||
'');
|
||||
};
|
||||
};
|
||||
|
||||
@@ -122,7 +122,7 @@ in
|
||||
options.services.cassandra = {
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
Apache Cassandra – Scalable and highly available database.
|
||||
Apache Cassandra – Scalable and highly available database
|
||||
'');
|
||||
|
||||
clusterName = mkOption {
|
||||
|
||||
@@ -11,7 +11,7 @@ in
|
||||
|
||||
options = {
|
||||
services.ferretdb = {
|
||||
enable = mkEnableOption "FerretDB, an Open Source MongoDB alternative.";
|
||||
enable = mkEnableOption "FerretDB, an Open Source MongoDB alternative";
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
|
||||
@@ -75,7 +75,7 @@ in {
|
||||
Note that the NixOS module for Redis disables kernel support
|
||||
for Transparent Huge Pages (THP),
|
||||
because this features causes major performance problems for Redis,
|
||||
e.g. (https://redis.io/topics/latency).
|
||||
e.g. (https://redis.io/topics/latency)
|
||||
'');
|
||||
|
||||
user = mkOption {
|
||||
|
||||
@@ -8,7 +8,7 @@ in {
|
||||
|
||||
options = {
|
||||
services.surrealdb = {
|
||||
enable = mkEnableOption (lib.mdDoc "A scalable, distributed, collaborative, document-graph database, for the realtime web ");
|
||||
enable = mkEnableOption (lib.mdDoc "SurrealDB, a scalable, distributed, collaborative, document-graph database, for the realtime web");
|
||||
|
||||
package = mkOption {
|
||||
default = pkgs.surrealdb;
|
||||
|
||||
@@ -14,7 +14,7 @@ with lib;
|
||||
|
||||
services.deepin.app-services = {
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc "Service collection of DDE applications, including dconfig-center");
|
||||
enable = mkEnableOption (lib.mdDoc "service collection of DDE applications, including dconfig-center");
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ with lib;
|
||||
services.deepin.dde-api = {
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
Provides some dbus interfaces that is used for screen zone detecting,
|
||||
thumbnail generating, and sound playing in Deepin Desktop Environment.
|
||||
some dbus interfaces that is used for screen zone detecting,
|
||||
thumbnail generating, and sound playing in Deepin Desktop Environment
|
||||
'');
|
||||
|
||||
};
|
||||
|
||||
@@ -14,7 +14,7 @@ with lib;
|
||||
|
||||
services.deepin.dde-daemon = {
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc "Daemon for handling the deepin session settings");
|
||||
enable = mkEnableOption (lib.mdDoc "daemon for handling the deepin session settings");
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ in
|
||||
|
||||
options = {
|
||||
services.gnome.gnome-browser-connector.enable = mkEnableOption (mdDoc ''
|
||||
Native host connector for the GNOME Shell browser extension, a DBus service
|
||||
allowing to install GNOME Shell extensions from a web browser.
|
||||
native host connector for the GNOME Shell browser extension, a DBus service
|
||||
allowing to install GNOME Shell extensions from a web browser
|
||||
'');
|
||||
};
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ in
|
||||
{
|
||||
options = {
|
||||
services.supergfxd = {
|
||||
enable = lib.mkEnableOption (lib.mdDoc "Enable the supergfxd service");
|
||||
enable = lib.mkEnableOption (lib.mdDoc "the supergfxd service");
|
||||
|
||||
settings = lib.mkOption {
|
||||
type = lib.types.nullOr json.type;
|
||||
|
||||
@@ -9,9 +9,9 @@ in
|
||||
{
|
||||
options = {
|
||||
hardware.tuxedo-rs = {
|
||||
enable = mkEnableOption (lib.mdDoc "Rust utilities for interacting with hardware from TUXEDO Computers.");
|
||||
enable = mkEnableOption (lib.mdDoc "Rust utilities for interacting with hardware from TUXEDO Computers");
|
||||
|
||||
tailor-gui.enable = mkEnableOption (lib.mdDoc "Alternative to TUXEDO Control Center, written in Rust.");
|
||||
tailor-gui.enable = mkEnableOption (lib.mdDoc "tailor-gui, an alternative to TUXEDO Control Center, written in Rust");
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -302,7 +302,7 @@ in
|
||||
|
||||
enablePAM = mkEnableOption (lib.mdDoc "creating a own Dovecot PAM service and configure PAM user logins") // { default = true; };
|
||||
|
||||
enableDHE = mkEnableOption (lib.mdDoc "enable ssl_dh and generation of primes for the key exchange") // { default = true; };
|
||||
enableDHE = mkEnableOption (lib.mdDoc "ssl_dh and generation of primes for the key exchange") // { default = true; };
|
||||
|
||||
sieveScripts = mkOption {
|
||||
type = types.attrsOf types.path;
|
||||
|
||||
@@ -260,7 +260,7 @@ in {
|
||||
};
|
||||
|
||||
serve = {
|
||||
enable = mkEnableOption (lib.mdDoc "Automatic nginx and uwsgi setup for mailman-web");
|
||||
enable = mkEnableOption (lib.mdDoc "automatic nginx and uwsgi setup for mailman-web");
|
||||
|
||||
virtualRoot = mkOption {
|
||||
default = "/";
|
||||
|
||||
@@ -96,8 +96,8 @@ in
|
||||
type = types.submodule {
|
||||
options = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
If true, accessToken is ignored and the username/password below will be
|
||||
used instead. The access token of the bot will be stored in the dataPath.
|
||||
ignoring the accessToken. If true, accessToken is ignored and the username/password below will be
|
||||
used instead. The access token of the bot will be stored in the dataPath
|
||||
'');
|
||||
|
||||
username = mkOption {
|
||||
|
||||
Executable → Regular
@@ -111,11 +111,11 @@ in
|
||||
(submodule {
|
||||
options = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
building of firmware for manual flashing.
|
||||
building of firmware for manual flashing
|
||||
'');
|
||||
enableKlipperFlash = mkEnableOption (lib.mdDoc ''
|
||||
flashings scripts for firmware. This will add `klipper-flash-$mcu` scripts to your environment which can be called to flash the firmware.
|
||||
Please check the configs at [klipper](https://github.com/Klipper3d/klipper/tree/master/config) whether your board supports flashing via `make flash`.
|
||||
Please check the configs at [klipper](https://github.com/Klipper3d/klipper/tree/master/config) whether your board supports flashing via `make flash`
|
||||
'');
|
||||
serial = mkOption {
|
||||
type = types.nullOr path;
|
||||
|
||||
@@ -40,9 +40,9 @@ in
|
||||
|
||||
options.services.packagekit = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
PackageKit provides a cross-platform D-Bus abstraction layer for
|
||||
PackageKit, a cross-platform D-Bus abstraction layer for
|
||||
installing software. Software utilizing PackageKit can install
|
||||
software regardless of the package manager.
|
||||
software regardless of the package manager
|
||||
'');
|
||||
|
||||
settings = mkOption {
|
||||
|
||||
@@ -12,7 +12,7 @@ let
|
||||
in
|
||||
{
|
||||
options.services.rshim = {
|
||||
enable = lib.mkEnableOption (lib.mdDoc "User-space rshim driver for the BlueField SoC");
|
||||
enable = lib.mkEnableOption (lib.mdDoc "user-space rshim driver for the BlueField SoC");
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "rshim-user-space" { };
|
||||
|
||||
|
||||
@@ -438,7 +438,7 @@ in
|
||||
};
|
||||
|
||||
options."lists.sr.ht" = commonServiceSettings "lists" // {
|
||||
allow-new-lists = mkEnableOption (lib.mdDoc "Allow creation of new lists");
|
||||
allow-new-lists = mkEnableOption (lib.mdDoc "creation of new lists");
|
||||
notify-from = mkOption {
|
||||
description = lib.mdDoc "Outgoing email for notifications generated by users.";
|
||||
type = types.str;
|
||||
|
||||
@@ -9,7 +9,7 @@ in {
|
||||
|
||||
options = {
|
||||
services.tp-auto-kbbl = {
|
||||
enable = mkEnableOption (lib.mdDoc "Auto toggle keyboard back-lighting on Thinkpads (and maybe other laptops) for Linux");
|
||||
enable = mkEnableOption (lib.mdDoc "auto toggle keyboard back-lighting on Thinkpads (and maybe other laptops) for Linux");
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
|
||||
@@ -67,14 +67,14 @@ in {
|
||||
options = {
|
||||
services.zoneminder = with lib; {
|
||||
enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
ZoneMinder
|
||||
ZoneMinder.
|
||||
|
||||
If you intend to run the database locally, you should set
|
||||
`config.services.zoneminder.database.createLocally` to true. Otherwise,
|
||||
when set to `false` (the default), you will have to create the database
|
||||
and database user as well as populate the database yourself.
|
||||
Additionally, you will need to run `zmupdate.pl` yourself when
|
||||
upgrading to a newer version.
|
||||
upgrading to a newer version
|
||||
'');
|
||||
|
||||
webserver = mkOption {
|
||||
|
||||
@@ -11,10 +11,10 @@ in {
|
||||
|
||||
# the upstream package runs as root, but doesn't seem to be strictly
|
||||
# necessary for basic functionality
|
||||
runAsRoot = mkEnableOption (lib.mdDoc "Whether to run as root");
|
||||
runAsRoot = mkEnableOption (lib.mdDoc "running as root");
|
||||
|
||||
autoRetirement = mkEnableOption (lib.mdDoc ''
|
||||
Whether to automatically retire the host upon OS shutdown.
|
||||
retiring the host upon OS shutdown
|
||||
'');
|
||||
|
||||
apiKeyFile = mkOption {
|
||||
@@ -59,7 +59,7 @@ in {
|
||||
};
|
||||
|
||||
options.diagnostic =
|
||||
mkEnableOption (lib.mdDoc "Collect memory usage for the agent itself");
|
||||
mkEnableOption (lib.mdDoc "collecting memory usage for the agent itself");
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -11,7 +11,7 @@ in {
|
||||
({ options.warnings = options.warnings; options.assertions = options.assertions; })
|
||||
];
|
||||
extraOpts = {
|
||||
verbose = mkEnableOption (lib.mdDoc "Verbose logging mode for prometheus-wireguard-exporter");
|
||||
verbose = mkEnableOption (lib.mdDoc "verbose logging mode for prometheus-wireguard-exporter");
|
||||
|
||||
wireguardConfig = mkOption {
|
||||
type = with types; nullOr (either path str);
|
||||
|
||||
@@ -177,13 +177,13 @@ in {
|
||||
|
||||
backup = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
Backup server role. When using OpenAFS built-in buserver, use in conjunction with the
|
||||
the backup server role. When using OpenAFS built-in buserver, use in conjunction with the
|
||||
`database` role to maintain the Backup
|
||||
Database. Normally only used in conjunction with tape storage
|
||||
or IBM's Tivoli Storage Manager.
|
||||
|
||||
For a modern backup server, enable this role and see
|
||||
{option}`enableFabs`.
|
||||
{option}`enableFabs`
|
||||
'');
|
||||
|
||||
enableFabs = mkEnableOption (lib.mdDoc ''
|
||||
|
||||
@@ -8,7 +8,7 @@ let
|
||||
in {
|
||||
options = {
|
||||
services.create_ap = {
|
||||
enable = mkEnableOption (lib.mdDoc "setup wifi hotspots using create_ap");
|
||||
enable = mkEnableOption (lib.mdDoc "setting up wifi hotspots using create_ap");
|
||||
settings = mkOption {
|
||||
type = with types; attrsOf (oneOf [ int bool str ]);
|
||||
default = {};
|
||||
|
||||
@@ -14,7 +14,7 @@ in
|
||||
options = {
|
||||
services.dae = with lib;{
|
||||
enable = mkEnableOption
|
||||
(mdDoc "A Linux high-performance transparent proxy solution based on eBPF");
|
||||
(mdDoc "dae, a Linux high-performance transparent proxy solution based on eBPF");
|
||||
|
||||
package = mkPackageOptionMD pkgs "dae" { };
|
||||
|
||||
@@ -46,7 +46,7 @@ in
|
||||
openFirewall = mkOption {
|
||||
type = with types; submodule {
|
||||
options = {
|
||||
enable = mkEnableOption "enable";
|
||||
enable = mkEnableOption (mdDoc "opening {option}`port` in the firewall");
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
description = ''
|
||||
@@ -91,7 +91,7 @@ in
|
||||
};
|
||||
|
||||
disableTxChecksumIpGeneric =
|
||||
mkEnableOption (mdDoc "See <https://github.com/daeuniverse/dae/issues/43>");
|
||||
mkEnableOption "" // { description = mdDoc "See <https://github.com/daeuniverse/dae/issues/43>"; };
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
@@ -0,0 +1,234 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
cfg = config.services.ddclient;
|
||||
boolToStr = bool: if bool then "yes" else "no";
|
||||
dataDir = "/var/lib/ddclient";
|
||||
StateDirectory = builtins.baseNameOf dataDir;
|
||||
RuntimeDirectory = StateDirectory;
|
||||
|
||||
configFile' = pkgs.writeText "ddclient.conf" ''
|
||||
# This file can be used as a template for configFile or is automatically generated by Nix options.
|
||||
cache=${dataDir}/ddclient.cache
|
||||
foreground=YES
|
||||
use=${cfg.use}
|
||||
login=${cfg.username}
|
||||
password=${if cfg.protocol == "nsupdate" then "/run/${RuntimeDirectory}/ddclient.key" else "@password_placeholder@"}
|
||||
protocol=${cfg.protocol}
|
||||
${lib.optionalString (cfg.script != "") "script=${cfg.script}"}
|
||||
${lib.optionalString (cfg.server != "") "server=${cfg.server}"}
|
||||
${lib.optionalString (cfg.zone != "") "zone=${cfg.zone}"}
|
||||
ssl=${boolToStr cfg.ssl}
|
||||
wildcard=YES
|
||||
quiet=${boolToStr cfg.quiet}
|
||||
verbose=${boolToStr cfg.verbose}
|
||||
${cfg.extraConfig}
|
||||
${lib.concatStringsSep "," cfg.domains}
|
||||
'';
|
||||
configFile = if (cfg.configFile != null) then cfg.configFile else configFile';
|
||||
|
||||
preStart = ''
|
||||
install --mode=600 --owner=$USER ${configFile} /run/${RuntimeDirectory}/ddclient.conf
|
||||
${lib.optionalString (cfg.configFile == null) (if (cfg.protocol == "nsupdate") then ''
|
||||
install --mode=600 --owner=$USER ${cfg.passwordFile} /run/${RuntimeDirectory}/ddclient.key
|
||||
'' else if (cfg.passwordFile != null) then ''
|
||||
"${pkgs.replace-secret}/bin/replace-secret" "@password_placeholder@" "${cfg.passwordFile}" "/run/${RuntimeDirectory}/ddclient.conf"
|
||||
'' else ''
|
||||
sed -i '/^password=@password_placeholder@$/d' /run/${RuntimeDirectory}/ddclient.conf
|
||||
'')}
|
||||
'';
|
||||
|
||||
in
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
(mkChangedOptionModule [ "services" "ddclient" "domain" ] [ "services" "ddclient" "domains" ]
|
||||
(config:
|
||||
let value = getAttrFromPath [ "services" "ddclient" "domain" ] config;
|
||||
in optional (value != "") value))
|
||||
(mkRemovedOptionModule [ "services" "ddclient" "homeDir" ] "")
|
||||
(mkRemovedOptionModule [ "services" "ddclient" "password" ] "Use services.ddclient.passwordFile instead.")
|
||||
(mkRemovedOptionModule [ "services" "ddclient" "ipv6" ] "")
|
||||
];
|
||||
|
||||
###### interface
|
||||
|
||||
options = {
|
||||
|
||||
services.ddclient = with lib.types; {
|
||||
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
type = bool;
|
||||
description = lib.mdDoc ''
|
||||
Whether to synchronise your machine's IP address with a dynamic DNS provider (e.g. dyndns.org).
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = package;
|
||||
default = pkgs.ddclient;
|
||||
defaultText = lib.literalExpression "pkgs.ddclient";
|
||||
description = lib.mdDoc ''
|
||||
The ddclient executable package run by the service.
|
||||
'';
|
||||
};
|
||||
|
||||
domains = mkOption {
|
||||
default = [ "" ];
|
||||
type = listOf str;
|
||||
description = lib.mdDoc ''
|
||||
Domain name(s) to synchronize.
|
||||
'';
|
||||
};
|
||||
|
||||
username = mkOption {
|
||||
# For `nsupdate` username contains the path to the nsupdate executable
|
||||
default = lib.optionalString (config.services.ddclient.protocol == "nsupdate") "${pkgs.bind.dnsutils}/bin/nsupdate";
|
||||
defaultText = "";
|
||||
type = str;
|
||||
description = lib.mdDoc ''
|
||||
User name.
|
||||
'';
|
||||
};
|
||||
|
||||
passwordFile = mkOption {
|
||||
default = null;
|
||||
type = nullOr str;
|
||||
description = lib.mdDoc ''
|
||||
A file containing the password or a TSIG key in named format when using the nsupdate protocol.
|
||||
'';
|
||||
};
|
||||
|
||||
interval = mkOption {
|
||||
default = "10min";
|
||||
type = str;
|
||||
description = lib.mdDoc ''
|
||||
The interval at which to run the check and update.
|
||||
See {command}`man 7 systemd.time` for the format.
|
||||
'';
|
||||
};
|
||||
|
||||
configFile = mkOption {
|
||||
default = null;
|
||||
type = nullOr path;
|
||||
description = lib.mdDoc ''
|
||||
Path to configuration file.
|
||||
When set this overrides the generated configuration from module options.
|
||||
'';
|
||||
example = "/root/nixos/secrets/ddclient.conf";
|
||||
};
|
||||
|
||||
protocol = mkOption {
|
||||
default = "dyndns2";
|
||||
type = str;
|
||||
description = lib.mdDoc ''
|
||||
Protocol to use with dynamic DNS provider (see https://sourceforge.net/p/ddclient/wiki/protocols).
|
||||
'';
|
||||
};
|
||||
|
||||
server = mkOption {
|
||||
default = "";
|
||||
type = str;
|
||||
description = lib.mdDoc ''
|
||||
Server address.
|
||||
'';
|
||||
};
|
||||
|
||||
ssl = mkOption {
|
||||
default = true;
|
||||
type = bool;
|
||||
description = lib.mdDoc ''
|
||||
Whether to use SSL/TLS to connect to dynamic DNS provider.
|
||||
'';
|
||||
};
|
||||
|
||||
quiet = mkOption {
|
||||
default = false;
|
||||
type = bool;
|
||||
description = lib.mdDoc ''
|
||||
Print no messages for unnecessary updates.
|
||||
'';
|
||||
};
|
||||
|
||||
script = mkOption {
|
||||
default = "";
|
||||
type = str;
|
||||
description = lib.mdDoc ''
|
||||
script as required by some providers.
|
||||
'';
|
||||
};
|
||||
|
||||
use = mkOption {
|
||||
default = "web, web=checkip.dyndns.com/, web-skip='Current IP Address: '";
|
||||
type = str;
|
||||
description = lib.mdDoc ''
|
||||
Method to determine the IP address to send to the dynamic DNS provider.
|
||||
'';
|
||||
};
|
||||
|
||||
verbose = mkOption {
|
||||
default = false;
|
||||
type = bool;
|
||||
description = lib.mdDoc ''
|
||||
Print verbose information.
|
||||
'';
|
||||
};
|
||||
|
||||
zone = mkOption {
|
||||
default = "";
|
||||
type = str;
|
||||
description = lib.mdDoc ''
|
||||
zone as required by some providers.
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
default = "";
|
||||
type = lines;
|
||||
description = lib.mdDoc ''
|
||||
Extra configuration. Contents will be added verbatim to the configuration file.
|
||||
|
||||
::: {.note}
|
||||
`daemon` should not be added here because it does not work great with the systemd-timer approach the service uses.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf config.services.ddclient.enable {
|
||||
systemd.services.ddclient = {
|
||||
description = "Dynamic DNS Client";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
restartTriggers = optional (cfg.configFile != null) cfg.configFile;
|
||||
path = lib.optional (lib.hasPrefix "if," cfg.use) pkgs.iproute2;
|
||||
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
RuntimeDirectoryMode = "0700";
|
||||
inherit RuntimeDirectory;
|
||||
inherit StateDirectory;
|
||||
Type = "oneshot";
|
||||
ExecStartPre = "!${pkgs.writeShellScript "ddclient-prestart" preStart}";
|
||||
ExecStart = "${lib.getExe cfg.package} -file /run/${RuntimeDirectory}/ddclient.conf";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.timers.ddclient = {
|
||||
description = "Run ddclient";
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig = {
|
||||
OnBootSec = cfg.interval;
|
||||
OnUnitInactiveSec = cfg.interval;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -54,13 +54,13 @@ in
|
||||
description = "TCP port for the WebSocket.";
|
||||
};
|
||||
|
||||
openFirewall = lib.mkEnableOption "open up the service ports in the firewall";
|
||||
openFirewall = lib.mkEnableOption "opening up the service ports in the firewall";
|
||||
|
||||
allowRebootSystem = lib.mkEnableOption "allow rebooting the system";
|
||||
allowRebootSystem = lib.mkEnableOption "rebooting the system";
|
||||
|
||||
allowRestartService = lib.mkEnableOption "allow killing/restarting processes";
|
||||
allowRestartService = lib.mkEnableOption "killing/restarting processes";
|
||||
|
||||
allowSetSystemTime = lib.mkEnableOption "allow setting the system time";
|
||||
allowSetSystemTime = lib.mkEnableOption "setting the system time";
|
||||
|
||||
extraArgs = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
|
||||
@@ -9,7 +9,7 @@ let
|
||||
configFile = settingsFormat.generate "config.yaml" cfg.config;
|
||||
in {
|
||||
options.services.go-neb = {
|
||||
enable = mkEnableOption (lib.mdDoc "Extensible matrix bot written in Go");
|
||||
enable = mkEnableOption (lib.mdDoc "an extensible matrix bot written in Go");
|
||||
|
||||
bindAddress = mkOption {
|
||||
type = types.str;
|
||||
|
||||
@@ -116,10 +116,10 @@ in {
|
||||
options = {
|
||||
services.hostapd = {
|
||||
enable = mkEnableOption (mdDoc ''
|
||||
Whether to enable hostapd. hostapd is a user space daemon for access point and
|
||||
hostapd, a user space daemon for access point and
|
||||
authentication servers. It implements IEEE 802.11 access point management,
|
||||
IEEE 802.1X/WPA/WPA2/EAP Authenticators, RADIUS client, EAP server, and RADIUS
|
||||
authentication server.
|
||||
authentication server
|
||||
'');
|
||||
|
||||
package = mkPackageOption pkgs "hostapd" {};
|
||||
|
||||
@@ -272,18 +272,18 @@ in
|
||||
};
|
||||
|
||||
faxcron.enable.spoolInit = mkEnableOption (lib.mdDoc ''
|
||||
Purge old files from the spooling area with
|
||||
purging old files from the spooling area with
|
||||
{file}`faxcron`
|
||||
each time the spooling area is initialized.
|
||||
each time the spooling area is initialized
|
||||
'');
|
||||
faxcron.enable.frequency = mkOption {
|
||||
type = nullOr nonEmptyStr;
|
||||
default = null;
|
||||
example = "daily";
|
||||
description = lib.mdDoc ''
|
||||
Purge old files from the spooling area with
|
||||
purging old files from the spooling area with
|
||||
{file}`faxcron` with the given frequency
|
||||
(see systemd.time(7)).
|
||||
(see systemd.time(7))
|
||||
'';
|
||||
};
|
||||
faxcron.infoDays = mkOption {
|
||||
|
||||
@@ -265,7 +265,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
logCLFTime = mkEnableOption (lib.mdDoc "Full CLF-formatted date and time to log");
|
||||
logCLFTime = mkEnableOption (lib.mdDoc "full CLF-formatted date and time to log");
|
||||
|
||||
address = mkOption {
|
||||
type = with types; nullOr str;
|
||||
@@ -456,7 +456,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
trust.enable = mkEnableOption (lib.mdDoc "Explicit trust options");
|
||||
trust.enable = mkEnableOption (lib.mdDoc "explicit trust options");
|
||||
|
||||
trust.family = mkOption {
|
||||
type = with types; nullOr str;
|
||||
@@ -474,7 +474,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
trust.hidden = mkEnableOption (lib.mdDoc "Router concealment");
|
||||
trust.hidden = mkEnableOption (lib.mdDoc "router concealment");
|
||||
|
||||
websocket = mkEndpointOpt "websockets" "127.0.0.1" 7666;
|
||||
|
||||
@@ -552,7 +552,7 @@ in
|
||||
|
||||
proto.http = (mkEndpointOpt "http" "127.0.0.1" 7070) // {
|
||||
|
||||
auth = mkEnableOption (lib.mdDoc "Webconsole authentication");
|
||||
auth = mkEnableOption (lib.mdDoc "webconsole authentication");
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
|
||||
@@ -7,7 +7,7 @@ in
|
||||
enable = mkEnableOption (lib.mdDoc "the openiscsi iscsi daemon");
|
||||
enableAutoLoginOut = mkEnableOption (lib.mdDoc ''
|
||||
automatic login and logout of all automatic targets.
|
||||
You probably do not want this.
|
||||
You probably do not want this
|
||||
'');
|
||||
discoverPortal = mkOption {
|
||||
type = nullOr str;
|
||||
|
||||
@@ -10,7 +10,7 @@ in
|
||||
};
|
||||
options = {
|
||||
services.nar-serve = {
|
||||
enable = mkEnableOption (lib.mdDoc "Serve NAR file contents via HTTP");
|
||||
enable = mkEnableOption (lib.mdDoc "serving NAR file contents via HTTP");
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
|
||||
@@ -103,7 +103,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
networking.nftables.flushRuleset = mkEnableOption (lib.mdDoc "Flush the entire ruleset on each reload.");
|
||||
networking.nftables.flushRuleset = mkEnableOption (lib.mdDoc "flushing the entire ruleset on each reload");
|
||||
|
||||
networking.nftables.extraDeletions = mkOption {
|
||||
type = types.lines;
|
||||
|
||||
@@ -8,7 +8,7 @@ in
|
||||
{
|
||||
options = {
|
||||
services.snowflake-proxy = {
|
||||
enable = mkEnableOption (lib.mdDoc "System to defeat internet censorship");
|
||||
enable = mkEnableOption (lib.mdDoc "snowflake-proxy, a system to defeat internet censorship");
|
||||
|
||||
broker = mkOption {
|
||||
description = lib.mdDoc "Broker URL (default \"https://snowflake-broker.torproject.net/\")";
|
||||
|
||||
@@ -116,9 +116,9 @@ in
|
||||
};
|
||||
|
||||
persistentKeys = mkEnableOption (lib.mdDoc ''
|
||||
If enabled then keys will be generated once and Yggdrasil
|
||||
persistent keys. If enabled then keys will be generated once and Yggdrasil
|
||||
will retain the same IPv6 address when the service is
|
||||
restarted. Keys are stored at ${keysPath}.
|
||||
restarted. Keys are stored at ${keysPath}
|
||||
'');
|
||||
|
||||
extraArgs = mkOption {
|
||||
|
||||
@@ -11,7 +11,7 @@ let
|
||||
in
|
||||
{
|
||||
options.services.earlyoom = {
|
||||
enable = mkEnableOption (lib.mdDoc "Early out of memory killing");
|
||||
enable = mkEnableOption (lib.mdDoc "early out of memory killing");
|
||||
|
||||
freeMemThreshold = mkOption {
|
||||
type = types.ints.between 1 100;
|
||||
|
||||
@@ -13,7 +13,7 @@ in
|
||||
|
||||
WARNING: enabling this option (while convenient) should *not* be done on a
|
||||
machine where you do not trust the other users as it allows any other
|
||||
local user to DoS your session by spamming notifications.
|
||||
local user to DoS your session by spamming notifications
|
||||
'');
|
||||
};
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ let
|
||||
in {
|
||||
options = {
|
||||
services.flexget = {
|
||||
enable = mkEnableOption (lib.mdDoc "Run FlexGet Daemon");
|
||||
enable = mkEnableOption (lib.mdDoc "FlexGet daemon");
|
||||
|
||||
package = mkPackageOptionMD pkgs "flexget" {};
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ in
|
||||
};
|
||||
|
||||
allowVideoAccess = lib.mkEnableOption (lib.mdDoc ''
|
||||
Enable access to video devices like cameras on the system.
|
||||
access to video devices like cameras on the system
|
||||
'');
|
||||
};
|
||||
};
|
||||
|
||||
@@ -69,7 +69,7 @@ let
|
||||
in
|
||||
{
|
||||
options.services.cloudlog = with types; {
|
||||
enable = mkEnableOption (mdDoc "Whether to enable Cloudlog");
|
||||
enable = mkEnableOption (mdDoc "Cloudlog");
|
||||
dataDir = mkOption {
|
||||
type = str;
|
||||
default = "/var/lib/cloudlog";
|
||||
|
||||
@@ -108,8 +108,7 @@ in
|
||||
ProtectClock = true;
|
||||
ProtectHome = true;
|
||||
ProtectHostname = true;
|
||||
# Would re-mount paths ignored by temporary root
|
||||
#ProtectSystem = "strict";
|
||||
ProtectSystem = "strict";
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
@@ -121,9 +120,7 @@ in
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallFilter = [ "@system-service" "~@privileged @setuid @keyring" ];
|
||||
TemporaryFileSystem = "/:ro";
|
||||
# Does not work well with the temporary root
|
||||
#UMask = "0066";
|
||||
UMask = "0066";
|
||||
} // optionalAttrs (cfg.environmentFile != null) {
|
||||
EnvironmentFile = cfg.environmentFile;
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ in {
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc "hledger-web service");
|
||||
|
||||
serveApi = mkEnableOption (lib.mdDoc "Serve only the JSON web API, without the web UI");
|
||||
serveApi = mkEnableOption (lib.mdDoc "serving only the JSON web API, without the web UI");
|
||||
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
|
||||
@@ -12,11 +12,11 @@ in {
|
||||
options = {
|
||||
services.isso = {
|
||||
enable = mkEnableOption (lib.mdDoc ''
|
||||
A commenting server similar to Disqus.
|
||||
isso, a commenting server similar to Disqus.
|
||||
|
||||
Note: The application's author suppose to run isso behind a reverse proxy.
|
||||
The embedded solution offered by NixOS is also only suitable for small installations
|
||||
below 20 requests per second.
|
||||
below 20 requests per second
|
||||
'');
|
||||
|
||||
settings = mkOption {
|
||||
|
||||
@@ -105,9 +105,9 @@ in
|
||||
type = bool;
|
||||
default = true;
|
||||
description = lib.mdDoc ''
|
||||
Whether to enable Jitsi Videobridge instance and configure it to connect to Prosody.
|
||||
Jitsi Videobridge instance and configure it to connect to Prosody.
|
||||
|
||||
Additional configuration is possible with {option}`services.jitsi-videobridge`.
|
||||
Additional configuration is possible with {option}`services.jitsi-videobridge`
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@ in {
|
||||
options = {
|
||||
services.meme-bingo-web = {
|
||||
enable = mkEnableOption (mdDoc ''
|
||||
A web app for the meme bingo, rendered entirely on the web server and made interactive with forms.
|
||||
a web app for the meme bingo, rendered entirely on the web server and made interactive with forms.
|
||||
|
||||
Note: The application's author suppose to run meme-bingo-web behind a reverse proxy for SSL and HTTP/3.
|
||||
Note: The application's author suppose to run meme-bingo-web behind a reverse proxy for SSL and HTTP/3
|
||||
'');
|
||||
|
||||
package = mkOption {
|
||||
|
||||
@@ -4,7 +4,7 @@ with lib;
|
||||
let cfg = config.services.phylactery;
|
||||
in {
|
||||
options.services.phylactery = {
|
||||
enable = mkEnableOption (lib.mdDoc "Whether to enable Phylactery server");
|
||||
enable = mkEnableOption (lib.mdDoc "Phylactery server");
|
||||
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
|
||||
@@ -30,7 +30,7 @@ let
|
||||
in {
|
||||
options.services.snipe-it = {
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc "A free open source IT asset/license management system");
|
||||
enable = mkEnableOption (lib.mdDoc "snipe-it, a free open source IT asset/license management system");
|
||||
|
||||
user = mkOption {
|
||||
default = "snipeit";
|
||||
|
||||
@@ -9,7 +9,7 @@ in
|
||||
options.services.zitadel =
|
||||
let inherit (lib) mkEnableOption mkOption mkPackageOption types;
|
||||
in {
|
||||
enable = mkEnableOption "ZITADEL, a user and identity access management platform.";
|
||||
enable = mkEnableOption "ZITADEL, a user and identity access management platform";
|
||||
|
||||
package = mkPackageOption pkgs "ZITADEL" { default = [ "zitadel" ]; };
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ in
|
||||
options.services.keter = {
|
||||
enable = lib.mkEnableOption (lib.mdDoc ''keter, a web app deployment manager.
|
||||
Note that this module only support loading of webapps:
|
||||
Keep an old app running and swap the ports when the new one is booted.
|
||||
Keep an old app running and swap the ports when the new one is booted
|
||||
'');
|
||||
|
||||
root = lib.mkOption {
|
||||
|
||||
@@ -8,7 +8,7 @@ in
|
||||
|
||||
options.services.rustus = {
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc "TUS protocol implementation in Rust.");
|
||||
enable = mkEnableOption (lib.mdDoc "TUS protocol implementation in Rust");
|
||||
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
|
||||
@@ -15,7 +15,7 @@ in
|
||||
options = {
|
||||
|
||||
services.xserver.desktopManager.deepin = {
|
||||
enable = mkEnableOption (lib.mdDoc "Enable Deepin desktop manager");
|
||||
enable = mkEnableOption (lib.mdDoc "Deepin desktop manager");
|
||||
extraGSettingsOverrides = mkOption {
|
||||
default = "";
|
||||
type = types.lines;
|
||||
|
||||
@@ -79,7 +79,7 @@ in
|
||||
// { default = true; internal = true; };
|
||||
enableValidation = lib.mkEnableOption (lib.mdDoc ''the validation of bootspec documents for each build.
|
||||
This will introduce Go in the build-time closure as we are relying on [Cuelang](https://cuelang.org/) for schema validation.
|
||||
Enable this option if you want to ascertain that your documents are correct.
|
||||
Enable this option if you want to ascertain that your documents are correct
|
||||
''
|
||||
);
|
||||
|
||||
|
||||
@@ -599,7 +599,9 @@ while (my ($unit, $state) = each(%{$active_cur})) {
|
||||
$units_to_start{$unit} = 1;
|
||||
record_unit($start_list_file, $unit);
|
||||
# Don't spam the user with target units that always get started.
|
||||
$units_to_filter{$unit} = 1;
|
||||
if (($ENV{"STC_DISPLAY_ALL_UNITS"} // "") ne "1") {
|
||||
$units_to_filter{$unit} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,33 +12,32 @@ with lib;
|
||||
];
|
||||
|
||||
options = {
|
||||
boot.growPartition = mkEnableOption (lib.mdDoc "grow the root partition on boot");
|
||||
boot.growPartition = mkEnableOption (lib.mdDoc "growing the root partition on boot");
|
||||
};
|
||||
|
||||
config = mkIf config.boot.growPartition {
|
||||
assertions = [
|
||||
{
|
||||
assertion = !config.boot.initrd.systemd.repart.enable && !config.systemd.repart.enable;
|
||||
message = "systemd-repart already grows the root partition and thus you should not use boot.growPartition";
|
||||
}
|
||||
];
|
||||
systemd.services.growpart = {
|
||||
wantedBy = [ "-.mount" ];
|
||||
after = [ "-.mount" ];
|
||||
before = [ "systemd-growfs-root.service" ];
|
||||
conflicts = [ "shutdown.target" ];
|
||||
unitConfig.DefaultDependencies = false;
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
TimeoutSec = "infinity";
|
||||
# growpart returns 1 if the partition is already grown
|
||||
SuccessExitStatus = "0 1";
|
||||
};
|
||||
|
||||
assertions = [{
|
||||
assertion = !config.boot.initrd.systemd.enable;
|
||||
message = "systemd stage 1 does not support 'boot.growPartition' yet.";
|
||||
}];
|
||||
|
||||
boot.initrd.extraUtilsCommands = ''
|
||||
copy_bin_and_libs ${pkgs.gawk}/bin/gawk
|
||||
copy_bin_and_libs ${pkgs.gnused}/bin/sed
|
||||
copy_bin_and_libs ${pkgs.util-linux}/sbin/sfdisk
|
||||
copy_bin_and_libs ${pkgs.util-linux}/sbin/lsblk
|
||||
|
||||
substitute "${pkgs.cloud-utils.guest}/bin/.growpart-wrapped" "$out/bin/growpart" \
|
||||
--replace "${pkgs.bash}/bin/sh" "/bin/sh" \
|
||||
--replace "awk" "gawk" \
|
||||
--replace "sed" "gnused"
|
||||
|
||||
ln -s sed $out/bin/gnused
|
||||
'';
|
||||
|
||||
boot.initrd.postDeviceCommands = ''
|
||||
rootDevice="${config.fileSystems."/".device}"
|
||||
if waitDevice "$rootDevice"; then
|
||||
script = ''
|
||||
rootDevice="${config.fileSystems."/".device}"
|
||||
rootDevice="$(readlink -f "$rootDevice")"
|
||||
parentDevice="$rootDevice"
|
||||
while [ "''${parentDevice%[0-9]}" != "''${parentDevice}" ]; do
|
||||
@@ -48,11 +47,8 @@ with lib;
|
||||
if [ "''${parentDevice%[0-9]p}" != "''${parentDevice}" ] && [ -b "''${parentDevice%p}" ]; then
|
||||
parentDevice="''${parentDevice%p}"
|
||||
fi
|
||||
TMPDIR=/run sh $(type -P growpart) "$parentDevice" "$partNum"
|
||||
udevadm settle
|
||||
fi
|
||||
'';
|
||||
|
||||
"${pkgs.cloud-utils.guest}/bin/growpart" "$parentDevice" "$partNum"
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ in
|
||||
};
|
||||
|
||||
options.boot.loader.external = {
|
||||
enable = mkEnableOption (lib.mdDoc "use an external tool to install your bootloader");
|
||||
enable = mkEnableOption (lib.mdDoc "using an external tool to install your bootloader");
|
||||
|
||||
installHook = mkOption {
|
||||
type = with types; path;
|
||||
|
||||
@@ -5,7 +5,7 @@ let
|
||||
in
|
||||
{
|
||||
options.services.homed.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
Enable systemd home area/user account manager
|
||||
systemd home area/user account manager
|
||||
'');
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
@@ -5,7 +5,7 @@ let
|
||||
in
|
||||
{
|
||||
options.services.userdbd.enable = lib.mkEnableOption (lib.mdDoc ''
|
||||
Enables the systemd JSON user/group record lookup service
|
||||
the systemd JSON user/group record lookup service
|
||||
'');
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.additionalUpstreamSystemUnits = [
|
||||
|
||||
@@ -332,6 +332,7 @@ in {
|
||||
graphite = handleTest ./graphite.nix {};
|
||||
graylog = handleTest ./graylog.nix {};
|
||||
grocy = handleTest ./grocy.nix {};
|
||||
grow-partition = runTest ./grow-partition.nix;
|
||||
grub = handleTest ./grub.nix {};
|
||||
guacamole-server = handleTest ./guacamole-server.nix {};
|
||||
gvisor = handleTest ./gvisor.nix {};
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
{ lib, ... }:
|
||||
|
||||
let
|
||||
rootFslabel = "external";
|
||||
rootFsDevice = "/dev/disk/by-label/${rootFslabel}";
|
||||
|
||||
externalModule = partitionTableType: { config, lib, pkgs, ... }: {
|
||||
virtualisation.directBoot.enable = false;
|
||||
virtualisation.mountHostNixStore = false;
|
||||
virtualisation.useEFIBoot = partitionTableType == "efi";
|
||||
|
||||
# This stops the qemu-vm module from overriding the fileSystems option
|
||||
# with virtualisation.fileSystems.
|
||||
virtualisation.fileSystems = lib.mkForce { };
|
||||
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.efiSupport = partitionTableType == "efi";
|
||||
boot.loader.grub.efiInstallAsRemovable = partitionTableType == "efi";
|
||||
boot.loader.grub.device = if partitionTableType == "efi" then "nodev" else "/dev/vda";
|
||||
|
||||
boot.growPartition = true;
|
||||
|
||||
fileSystems = {
|
||||
"/".device = rootFsDevice;
|
||||
};
|
||||
|
||||
system.build.diskImage = import ../lib/make-disk-image.nix {
|
||||
inherit config lib pkgs;
|
||||
label = rootFslabel;
|
||||
inherit partitionTableType;
|
||||
format = "raw";
|
||||
bootSize = "128M";
|
||||
additionalSpace = "0M";
|
||||
copyChannel = false;
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "grow-partition";
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ arianvp ];
|
||||
|
||||
nodes = {
|
||||
efi = externalModule "efi";
|
||||
legacy = externalModule "legacy";
|
||||
legacyGPT = externalModule "legacy+gpt";
|
||||
hybrid = externalModule "hybrid";
|
||||
};
|
||||
|
||||
|
||||
testScript = { nodes, ... }:
|
||||
lib.concatLines (lib.mapAttrsToList (name: node: ''
|
||||
import os
|
||||
import subprocess
|
||||
import tempfile
|
||||
import shutil
|
||||
|
||||
tmp_disk_image = tempfile.NamedTemporaryFile()
|
||||
|
||||
shutil.copyfile("${node.system.build.diskImage}/nixos.img", tmp_disk_image.name)
|
||||
|
||||
subprocess.run([
|
||||
"${node.virtualisation.qemu.package}/bin/qemu-img",
|
||||
"resize",
|
||||
"-f",
|
||||
"raw",
|
||||
tmp_disk_image.name,
|
||||
"+32M",
|
||||
])
|
||||
|
||||
# Set NIX_DISK_IMAGE so that the qemu script finds the right disk image.
|
||||
os.environ['NIX_DISK_IMAGE'] = tmp_disk_image.name
|
||||
|
||||
${name}.wait_for_unit("growpart.service")
|
||||
systemd_growpart_logs = ${name}.succeed("journalctl --boot --unit growpart.service")
|
||||
assert "CHANGED" in systemd_growpart_logs
|
||||
${name}.succeed("systemctl restart growpart.service")
|
||||
systemd_growpart_logs = ${name}.succeed("journalctl --boot --unit growpart.service")
|
||||
assert "NOCHANGE" in systemd_growpart_logs
|
||||
|
||||
'') nodes);
|
||||
}
|
||||
+50
-14
@@ -8,20 +8,22 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
|
||||
nodes = {
|
||||
hedgedocSqlite = { ... }: {
|
||||
services = {
|
||||
hedgedoc = {
|
||||
enable = true;
|
||||
settings.dbURL = "sqlite:///var/lib/hedgedoc/hedgedoc.db";
|
||||
};
|
||||
};
|
||||
services.hedgedoc.enable = true;
|
||||
};
|
||||
|
||||
hedgedocPostgres = { ... }: {
|
||||
hedgedocPostgresWithTCPSocket = { ... }: {
|
||||
systemd.services.hedgedoc.after = [ "postgresql.service" ];
|
||||
services = {
|
||||
hedgedoc = {
|
||||
enable = true;
|
||||
settings.dbURL = "postgres://hedgedoc:\${DB_PASSWORD}@localhost:5432/hedgedocdb";
|
||||
settings.db = {
|
||||
dialect = "postgres";
|
||||
user = "hedgedoc";
|
||||
password = "$DB_PASSWORD";
|
||||
host = "localhost";
|
||||
port = 5432;
|
||||
database = "hedgedocdb";
|
||||
};
|
||||
|
||||
/*
|
||||
* Do not use pkgs.writeText for secrets as
|
||||
@@ -40,6 +42,33 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hedgedocPostgresWithUNIXSocket = { ... }: {
|
||||
systemd.services.hedgedoc.after = [ "postgresql.service" ];
|
||||
services = {
|
||||
hedgedoc = {
|
||||
enable = true;
|
||||
settings.db = {
|
||||
dialect = "postgres";
|
||||
user = "hedgedoc";
|
||||
password = "$DB_PASSWORD";
|
||||
host = "/run/postgresql";
|
||||
database = "hedgedocdb";
|
||||
};
|
||||
|
||||
environmentFile = pkgs.writeText "hedgedoc-env" ''
|
||||
DB_PASSWORD=snakeoilpassword
|
||||
'';
|
||||
};
|
||||
postgresql = {
|
||||
enable = true;
|
||||
initialScript = pkgs.writeText "pg-init-script.sql" ''
|
||||
CREATE ROLE hedgedoc LOGIN PASSWORD 'snakeoilpassword';
|
||||
CREATE DATABASE hedgedocdb OWNER hedgedoc;
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
@@ -50,11 +79,18 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
hedgedocSqlite.wait_for_open_port(3000)
|
||||
hedgedocSqlite.wait_until_succeeds("curl -sSf http://localhost:3000/new")
|
||||
|
||||
with subtest("HedgeDoc postgres"):
|
||||
hedgedocPostgres.wait_for_unit("postgresql.service")
|
||||
hedgedocPostgres.wait_for_unit("hedgedoc.service")
|
||||
hedgedocPostgres.wait_for_open_port(5432)
|
||||
hedgedocPostgres.wait_for_open_port(3000)
|
||||
hedgedocPostgres.wait_until_succeeds("curl -sSf http://localhost:3000/new")
|
||||
with subtest("HedgeDoc postgres with TCP socket"):
|
||||
hedgedocPostgresWithTCPSocket.wait_for_unit("postgresql.service")
|
||||
hedgedocPostgresWithTCPSocket.wait_for_unit("hedgedoc.service")
|
||||
hedgedocPostgresWithTCPSocket.wait_for_open_port(5432)
|
||||
hedgedocPostgresWithTCPSocket.wait_for_open_port(3000)
|
||||
hedgedocPostgresWithTCPSocket.wait_until_succeeds("curl -sSf http://localhost:3000/new")
|
||||
|
||||
with subtest("HedgeDoc postgres with UNIX socket"):
|
||||
hedgedocPostgresWithUNIXSocket.wait_for_unit("postgresql.service")
|
||||
hedgedocPostgresWithUNIXSocket.wait_for_unit("hedgedoc.service")
|
||||
hedgedocPostgresWithUNIXSocket.wait_for_open_port(5432)
|
||||
hedgedocPostgresWithUNIXSocket.wait_for_open_port(3000)
|
||||
hedgedocPostgresWithUNIXSocket.wait_until_succeeds("curl -sSf http://localhost:3000/new")
|
||||
'';
|
||||
})
|
||||
|
||||
Executable → Regular
@@ -33,14 +33,14 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = if withGui then "bitcoin" else "bitcoind";
|
||||
version = "25.0";
|
||||
version = "25.1";
|
||||
|
||||
src = fetchurl {
|
||||
urls = [
|
||||
"https://bitcoincore.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
|
||||
];
|
||||
# hash retrieved from signed SHA256SUMS
|
||||
sha256 = "5df67cf42ca3b9a0c38cdafec5bbb517da5b58d251f32c8d2a47511f9be1ebc2";
|
||||
sha256 = "bec2a598d8dfa8c2365b77f13012a733ec84b8c30386343b7ac1996e901198c9";
|
||||
};
|
||||
|
||||
nativeBuildInputs =
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
, rustPlatform
|
||||
, Security
|
||||
, sqlite
|
||||
, rust-jemalloc-sys
|
||||
, stdenv
|
||||
, SystemConfiguration
|
||||
, testers
|
||||
@@ -70,6 +71,7 @@ rustPlatform.buildRustPackage rec {
|
||||
|
||||
buildInputs = [
|
||||
sqlite
|
||||
rust-jemalloc-sys
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
CoreFoundation
|
||||
Security
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
, lib
|
||||
, protobuf
|
||||
, rocksdb
|
||||
, rust-jemalloc-sys-unprefixed
|
||||
, rustPlatform
|
||||
, rustc-wasm32
|
||||
, stdenv
|
||||
@@ -60,7 +61,9 @@ rustPlatform.buildRustPackage rec {
|
||||
rustc-wasm32.llvmPackages.lld
|
||||
];
|
||||
|
||||
buildInputs = lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
|
||||
buildInputs = [
|
||||
rust-jemalloc-sys-unprefixed
|
||||
] ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
|
||||
|
||||
# NOTE: we need to force lld otherwise rust-lld is not found for wasm32 target
|
||||
CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_LINKER = "lld";
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "snarkos";
|
||||
version = "2.1.7";
|
||||
version = "2.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "AleoHQ";
|
||||
repo = "snarkOS";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-kW41SNbl2vckgUth+BZ6/aM03aT6MFeY4Hwi9OVWtTI=";
|
||||
sha256 = "sha256-vEoEnjVjxVnjZ3Lya1qO2kOypNu07aYSlrSya5NJZzs=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-znEAb4q9H0Doc+XYCf27hV/z2t74kjQUffl/aJzW6tI=";
|
||||
cargoHash = "sha256-CVHvBqfcTqWBtLFcEcs9y/LmQ4gXjX+dfqqZSxN+33A=";
|
||||
|
||||
# buildAndTestSubdir = "cli";
|
||||
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "hexdino";
|
||||
version = "0.1.2";
|
||||
version = "0.1.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Luz";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-OFtOa6StpOuLgkULnY5MlqDcSTEiMxogowHIBEiGr4E=";
|
||||
hash = "sha256-glbyftCJiP0/5trW7DOcVCU2q4ZH3zFK96eyGuYR8eY=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-lvLiRQNH3rpu+JTXWhQtXczmGRWGtnnLDknZaMp3d0s=";
|
||||
cargoHash = "sha256-nldA8gDMj0iO+HgatiuMqzR6ZCjbxFsTp5pDGbFKA1k=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "A hex editor with vim like keybindings written in Rust";
|
||||
|
||||
Executable → Regular
@@ -7,13 +7,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "tecoc";
|
||||
version = "unstable-2023-04-21";
|
||||
version = "unstable-2023-06-21";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "blakemcbride";
|
||||
repo = "TECOC";
|
||||
rev = "021d1d15242b9d6c84d70c9ffcf1871793898f0a";
|
||||
hash = "sha256-VGIO+uiAZkdzLYmJztmnKTS4HDIVow4AimaneHj7E1M=";
|
||||
rev = "b4a96395a18c7e64ccaef0e25fdde3b7ef33ac4b";
|
||||
hash = "sha256-KTOGsTtxJh2sneU2VoDNUHcL3m8zt+3rBZTDvK1n02A=";
|
||||
};
|
||||
|
||||
buildInputs = [ ncurses ];
|
||||
|
||||
@@ -49,10 +49,10 @@
|
||||
}:
|
||||
|
||||
let
|
||||
tzinfoVersion = "220816";
|
||||
tzinfoVersion = "221202";
|
||||
tzinfo = fetchurl {
|
||||
url = "https://github.com/lat9nq/tzdb_to_nx/releases/download/${tzinfoVersion}/${tzinfoVersion}.zip";
|
||||
hash = "sha256-yv8ykEYPu9upeXovei0u16iqQ7NasH6873KnQy4+KwI=";
|
||||
hash = "sha256-mRzW+iIwrU1zsxHmf+0RArU8BShAoEMvCz+McXFFK3c=";
|
||||
};
|
||||
in stdenv.mkDerivation {
|
||||
pname = "yuzu-${branch}";
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
# Generated by ./update.sh - do not update manually!
|
||||
# Last updated: 2023-10-07
|
||||
# Last updated: 2023-10-20
|
||||
{
|
||||
compatList = {
|
||||
rev = "156a0a80efc47069ba3360f8a1b268a1c6f2f505";
|
||||
rev = "9d17cbd71408476c6a28cbf0fa8177155c511681";
|
||||
hash = "sha256:1hdsza3wf9a0yvj6h55gsl7xqvhafvbz1i8paz9kg7l49b0gnlh1";
|
||||
};
|
||||
|
||||
mainline = {
|
||||
version = "1579";
|
||||
hash = "sha256:0689w42as1di8xbh8kq2p0cws8gdwq64zdj3i8wq612nkw0q5s60";
|
||||
version = "1595";
|
||||
hash = "sha256:09b0w6z4w9z4ms2pvik2vrmklfcx25jxcgs61bff3nflilnw9m97";
|
||||
};
|
||||
|
||||
ea = {
|
||||
version = "3911";
|
||||
distHash = "sha256:0xj642kjhj0gp9l15b3ysj3gmyy47rcvzw9amghsfl13bg5ffnwh";
|
||||
fullHash = "sha256:13rd6kwnhpvjzp67k6pqgl9fsqzwy5d8043hv6kd93gg8jbxkp38";
|
||||
version = "3940";
|
||||
distHash = "sha256:0g0vv274sh3iy56n7s324km87g302005ahi9zh2qhwkiirbnc811";
|
||||
fullHash = "sha256:0ywppc4z5d4b1zl1cr8yfnba58hgi0z2szficwpinapai7q0pyid";
|
||||
};
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user