Merge master into haskell-updates

This commit is contained in:
github-actions[bot] 2023-12-02 00:12:18 +00:00 committed by GitHub
commit 57ea53ecca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
390 changed files with 11187 additions and 5332 deletions

View File

@ -16,6 +16,9 @@ jobs:
# This is x86_64-linux, for which the tool is always prebuilt on the nixos-* channels,
# as specified in nixos/release-combined.nix
runs-on: ubuntu-latest
# This should take 1 minute at most, but let's be generous.
# The default of 6 hours is definitely too long
timeout-minutes: 10
steps:
- name: Resolving the merge commit
env:
@ -23,6 +26,11 @@ jobs:
run: |
# This checks for mergeability of a pull request as recommended in
# https://docs.github.com/en/rest/guides/using-the-rest-api-to-interact-with-your-git-database?apiVersion=2022-11-28#checking-mergeability-of-pull-requests
# Retry the API query this many times
retryCount=3
# Start with 5 seconds, but double every retry
retryInterval=5
while true; do
echo "Checking whether the pull request can be merged"
prInfo=$(gh api \
@ -33,10 +41,19 @@ jobs:
mergedSha=$(jq -r .merge_commit_sha <<< "$prInfo")
if [[ "$mergeable" == "null" ]]; then
# null indicates that GitHub is still computing whether it's mergeable
# Wait a couple seconds before trying again
echo "GitHub is still computing whether this PR can be merged, waiting 5 seconds before trying again"
sleep 5
if (( retryCount == 0 )); then
echo "Not retrying anymore, probably GitHub is having internal issues"
exit 1
else
(( retryCount -= 1 )) || true
# null indicates that GitHub is still computing whether it's mergeable
# Wait a couple seconds before trying again
echo "GitHub is still computing whether this PR can be merged, waiting $retryInterval seconds before trying again ($retryCount retries left)"
sleep "$retryInterval"
(( retryInterval *= 2 )) || true
fi
else
break
fi

View File

@ -616,6 +616,12 @@
githubId = 1229027;
name = "Andreas Schrägle";
};
ajwhouse = {
email = "adam@ajwh.chat";
github = "ajwhouse";
githubId = 56616368;
name = "Adam House";
};
ak = {
email = "ak@formalprivacy.com";
github = "alexanderkjeldaas";
@ -6026,6 +6032,12 @@
githubId = 74379;
name = "Florian Pester";
};
fmhoeger = {
email = "fmhoeger@mirsem.org";
name = "fmhoeger";
github = "fmhoeger";
githubId = 59626853;
};
fmoda3 = {
email = "fmoda3@mac.com";
github = "fmoda3";
@ -12616,6 +12628,12 @@
githubId = 9636071;
name = "Myrl Hex";
};
n00b0ss = {
email = "nixpkgs@n00b0ss.de";
github = "n00b0ss";
githubId = 61601147;
name = "basti n00b0ss";
};
n0emis = {
email = "nixpkgs@n0emis.network";
github = "n0emis";
@ -13214,6 +13232,13 @@
githubId = 40049608;
name = "Andy Chun";
};
noodlez1232 = {
email = "contact@nathanielbarragan.xyz";
matrix = "@noodlez1232:matrix.org";
github = "Noodlez1232";
githubId = 12480453;
name = "Nathaniel Barragan";
};
nook = {
name = "Tom Nook";
email = "0xnook@protonmail.com";
@ -13232,6 +13257,12 @@
githubId = 3521180;
name = "Tom Sydney Kerckhove";
};
nosewings = {
name = "Nicholas Coltharp";
email = "coltharpnicholas@gmail.com";
github = "nosewings";
githubId = 24929858;
};
NotAShelf = {
name = "NotAShelf";
email = "raf@notashelf.dev";
@ -15265,6 +15296,12 @@
githubId = 3302;
name = "Renzo Carbonara";
};
rettetdemdativ = {
email = "michael@koeppl.dev";
github = "rettetdemdativ";
githubId = 5265630;
name = "Michael Köppl";
};
revol-xut = {
email = "revol-xut@protonmail.com";
name = "Tassilo Tanneberger";
@ -16292,6 +16329,12 @@
githubId = 4927883;
matrix = "@seirl:matrix.org";
};
selfuryon = {
name = "Sergei Iakovlev";
email = "siakovlev@pm.me";
github = "selfuryon";
githubId = 2993917;
};
sellout = {
email = "greg@technomadic.org";
github = "sellout";
@ -16986,6 +17029,12 @@
githubId = 9720532;
name = "Sergei K";
};
sontek = {
email = "sontek@gmail.com";
github = "sontek";
githubId = 151924;
name = "John Anderson";
};
sophrosyne = {
email = "joshuaortiz@tutanota.com";
github = "sophrosyne97";
@ -17341,6 +17390,12 @@
githubId = 1694705;
name = "Sam Stites";
};
stnley = {
email = "michael@stnley.io";
github = "stnley";
githubId = 64174376;
name = "Michael Stanley";
};
strager = {
email = "strager.nds@gmail.com";
github = "strager";
@ -17755,6 +17810,11 @@
githubId = 7914437;
name = "Thomas Cheronneau";
};
tc-kaluza = {
github = "tc-kaluza";
githubId = 101565936;
name = "Tautvydas Cerniauskas";
};
tckmn = {
email = "andy@tck.mn";
github = "tckmn";
@ -18531,6 +18591,12 @@
github = "Trundle";
githubId = 332418;
};
tsandrini = {
email = "tomas.sandrini@seznam.cz";
name = "Tomáš Sandrini";
github = "tsandrini";
githubId = 21975189;
};
tscholak = {
email = "torsten.scholak@googlemail.com";
github = "tscholak";

View File

@ -1308,6 +1308,9 @@ Make sure to also check the many updates in the [Nixpkgs library](#sec-release-2
qemu-vm module from overriding `fileSystems` by setting
`virtualisation.fileSystems = lib.mkForce { };`.
- When using [split parity files](https://www.snapraid.it/manual#7.1) in `snapraid`,
the snapraid-sync systemd service will no longer fail to run.
## Nixpkgs Library {#sec-release-23.11-nixpkgs-lib}
### Breaking Changes {#sec-release-23.11-lib-breaking}

View File

@ -16,6 +16,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [maubot](https://github.com/maubot/maubot), a plugin-based Matrix bot framework. Available as [services.maubot](#opt-services.maubot.enable).
- [Anki Sync Server](https://docs.ankiweb.net/sync-server.html), the official sync server built into recent versions of Anki. Available as [services.anki-sync-server](#opt-services.anki-sync-server.enable).
## Backward Incompatibilities {#sec-release-24.05-incompatibilities}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@ -35,3 +37,5 @@ In addition to numerous new and upgraded packages, this release has the followin
non-child processes. This means you will not be able to attach gdb to an
existing process, but will need to start that process from gdb (so it is a
child). Or you can set `boot.kernel.sysctl."kernel.yama.ptrace_scope"` to 0.
- The `hardware.pulseaudio` module now sets permission of pulse user home directory to 755 when running in "systemWide" mode. It fixes [issue 114399](https://github.com/NixOS/nixpkgs/issues/114399).

View File

@ -305,6 +305,7 @@ in {
extraGroups = [ "audio" ];
description = "PulseAudio system service user";
home = stateDir;
homeMode = "755";
createHome = true;
isSystemUser = true;
};

View File

@ -637,6 +637,7 @@
./services/misc/amazon-ssm-agent.nix
./services/misc/ananicy.nix
./services/misc/ankisyncd.nix
./services/misc/anki-sync-server.nix
./services/misc/apache-kafka.nix
./services/misc/atuin.nix
./services/misc/autofs.nix

View File

@ -27,7 +27,7 @@ in
'';
};
package = mkPackageOptionMD pkgs "1Password GUI" {
package = mkPackageOption pkgs "1Password GUI" {
default = [ "_1password-gui" ];
};
};

View File

@ -18,7 +18,7 @@ in
programs._1password = {
enable = mkEnableOption (lib.mdDoc "the 1Password CLI tool");
package = mkPackageOptionMD pkgs "1Password CLI" {
package = mkPackageOption pkgs "1Password CLI" {
default = [ "_1password" ];
};
};

View File

@ -6,7 +6,7 @@ in {
options = {
programs.darling = {
enable = lib.mkEnableOption (lib.mdDoc "Darling, a Darwin/macOS compatibility layer for Linux");
package = lib.mkPackageOptionMD pkgs "darling" {};
package = lib.mkPackageOption pkgs "darling" {};
};
};

View File

@ -14,7 +14,7 @@ in {
integration. Note that you need to logout and login for this change to apply
'');
package = lib.mkPackageOptionMD pkgs "direnv" {};
package = lib.mkPackageOption pkgs "direnv" {};
direnvrcExtra = lib.mkOption {
type = lib.types.lines;
@ -49,7 +49,7 @@ in {
default = true;
};
package = lib.mkPackageOptionMD pkgs "nix-direnv" {};
package = lib.mkPackageOption pkgs "nix-direnv" {};
};
};

View File

@ -16,7 +16,7 @@ in
group.
'';
};
package = mkPackageOptionMD pkgs "flashrom" { };
package = mkPackageOption pkgs "flashrom" { };
};
config = mkIf cfg.enable {

View File

@ -23,7 +23,7 @@ in
'';
};
package = mkPackageOptionMD pkgs "hyprland" { };
package = mkPackageOption pkgs "hyprland" { };
finalPackage = mkOption {
type = types.package;
@ -39,7 +39,7 @@ in
'';
};
portalPackage = mkPackageOptionMD pkgs "xdg-desktop-portal-hyprland" { };
portalPackage = mkPackageOption pkgs "xdg-desktop-portal-hyprland" { };
xwayland.enable = mkEnableOption (mdDoc "XWayland") // { default = true; };

View File

@ -2,11 +2,11 @@
let
cfg = config.programs.iay;
inherit (lib) mkEnableOption mkIf mkOption mkPackageOptionMD optionalString types;
inherit (lib) mkEnableOption mkIf mkOption mkPackageOption optionalString types;
in {
options.programs.iay = {
enable = mkEnableOption (lib.mdDoc "iay");
package = mkPackageOptionMD pkgs "iay" {};
package = mkPackageOption pkgs "iay" {};
minimalPrompt = mkOption {
type = types.bool;

View File

@ -0,0 +1,17 @@
{ lib, pkgs, config, ... }:
with lib;
{
options.programs.joycond-cemuhook = {
enable = mkEnableOption (lib.mdDoc "joycond-cemuhook, a program to enable support for cemuhook's UDP protocol for joycond devices.");
};
config = lib.mkIf config.programs.joycond-cemuhook.enable {
assertions = [
{
assertion = config.services.joycond.enable;
message = "joycond must be enabled through `services.joycond.enable`";
}
];
environment.systemPackages = [ pkgs.joycond-cemuhook ];
};
}

View File

@ -13,7 +13,7 @@ in
'';
};
package = lib.mkPackageOptionMD pkgs "minipro" { };
package = lib.mkPackageOption pkgs "minipro" { };
};
};

View File

@ -11,7 +11,7 @@ in
default = true;
};
package = lib.mkPackageOptionMD pkgs "nano" { };
package = lib.mkPackageOption pkgs "nano" { };
nanorc = lib.mkOption {
type = lib.types.lines;

View File

@ -8,7 +8,7 @@ in
options = {
programs.nexttrace = {
enable = lib.mkEnableOption (lib.mdDoc "Nexttrace to the global environment and configure a setcap wrapper for it");
package = lib.mkPackageOptionMD pkgs "nexttrace" { };
package = lib.mkPackageOption pkgs "nexttrace" { };
};
};

View File

@ -37,7 +37,7 @@ in
meta.maintainers = [ lib.maintainers.mic92 ];
options.programs.nix-ld = {
enable = lib.mkEnableOption (lib.mdDoc ''nix-ld, Documentation: <https://github.com/Mic92/nix-ld>'');
package = lib.mkPackageOptionMD pkgs "nix-ld" { };
package = lib.mkPackageOption pkgs "nix-ld" { };
libraries = lib.mkOption {
type = lib.types.listOf lib.types.package;
description = lib.mdDoc "Libraries that automatically become available to all programs. The default set includes common libraries.";

View File

@ -10,11 +10,6 @@ in
};
config = lib.mkIf cfg.enable {
assertions = [
{ assertion = false;
message = "The oddjob service was found to be broken without NixOS test or maintainer. Please take ownership of this service.";
}
];
systemd.packages = [ cfg.package ];
systemd.services.oddjobd = {
@ -30,4 +25,6 @@ in
};
};
};
meta.maintainers = with lib.maintainers; [ SohamG ];
}

View File

@ -6,7 +6,7 @@ in
{
options.programs.projecteur = {
enable = lib.mkEnableOption (lib.mdDoc "projecteur");
package = lib.mkPackageOptionMD pkgs "projecteur" { };
package = lib.mkPackageOption pkgs "projecteur" { };
};
config = lib.mkIf cfg.enable {

View File

@ -13,7 +13,7 @@ in {
options = {
programs.qdmr = {
enable = lib.mkEnableOption (lib.mdDoc "QDMR - a GUI application and command line tool for programming DMR radios");
package = lib.mkPackageOptionMD pkgs "qdmr" { };
package = lib.mkPackageOption pkgs "qdmr" { };
};
};

View File

@ -24,7 +24,7 @@ in
'';
};
package = lib.mkPackageOptionMD pkgs [ "greetd" "regreet" ] { };
package = lib.mkPackageOption pkgs [ "greetd" "regreet" ] { };
settings = lib.mkOption {
type = lib.types.either lib.types.path settingsFormat.type;

View File

@ -7,7 +7,7 @@ in
{
options = with types; {
security.loginDefs = {
package = mkPackageOptionMD pkgs "shadow" { };
package = mkPackageOption pkgs "shadow" { };
chfnRestrict = mkOption {
description = mdDoc ''

View File

@ -1,6 +1,6 @@
{ pkgs, config, lib, ... }:
let
inherit (lib) mdDoc mkEnableOption mkPackageOptionMD optional optionalString;
inherit (lib) mdDoc mkEnableOption mkPackageOption optional optionalString;
cfg = config.programs.skim;
in
{
@ -8,7 +8,7 @@ in
programs.skim = {
fuzzyCompletion = mkEnableOption (mdDoc "fuzzy completion with skim");
keybindings = mkEnableOption (mdDoc "skim keybindings");
package = mkPackageOptionMD pkgs "skim" {};
package = mkPackageOption pkgs "skim" {};
};
};

View File

@ -15,7 +15,7 @@ in
description = lib.mdDoc "Whether streamdeck-ui should be started automatically.";
};
package = mkPackageOptionMD pkgs "streamdeck-ui" {
package = mkPackageOption pkgs "streamdeck-ui" {
default = [ "streamdeck-ui" ];
};

View File

@ -9,7 +9,7 @@ in
options.programs.cardboard = {
enable = lib.mkEnableOption (lib.mdDoc "cardboard");
package = lib.mkPackageOptionMD pkgs "cardboard" { };
package = lib.mkPackageOption pkgs "cardboard" { };
};
config = lib.mkIf cfg.enable (lib.mkMerge [

View File

@ -8,7 +8,7 @@ in
{
options.programs.waybar = {
enable = mkEnableOption (lib.mdDoc "waybar");
package = mkPackageOptionMD pkgs "waybar" { };
package = mkPackageOption pkgs "waybar" { };
};
config = mkIf cfg.enable {

View File

@ -8,7 +8,7 @@ in
options.programs.wayfire = {
enable = lib.mkEnableOption (lib.mdDoc "Wayfire, a wayland compositor based on wlroots");
package = lib.mkPackageOptionMD pkgs "wayfire" { };
package = lib.mkPackageOption pkgs "wayfire" { };
plugins = lib.mkOption {
type = lib.types.listOf lib.types.package;

View File

@ -11,7 +11,7 @@ in
options.programs.yazi = {
enable = lib.mkEnableOption (lib.mdDoc "yazi terminal file manager");
package = lib.mkPackageOptionMD pkgs "yazi" { };
package = lib.mkPackageOption pkgs "yazi" { };
settings = lib.mkOption {
type = with lib.types; submodule {

View File

@ -41,7 +41,7 @@ in
'';
};
package = mkPackageOptionMD pkgs "gmediarender" {
package = mkPackageOption pkgs "gmediarender" {
default = "gmrender-resurrect";
};

View File

@ -16,7 +16,7 @@ with lib;
Whether to enable goxlr-utility for controlling your TC-Helicon GoXLR or GoXLR Mini
'';
};
package = mkPackageOptionMD pkgs "goxlr-utility" { };
package = mkPackageOption pkgs "goxlr-utility" { };
autoStart.xdg = mkOption {
default = true;
type = with types; bool;

View File

@ -11,7 +11,7 @@ in {
enable = mkEnableOption (lib.mdDoc "Navidrome music server");
package = mkPackageOptionMD pkgs "navidrome" { };
package = mkPackageOption pkgs "navidrome" { };
settings = mkOption rec {
type = settingsFormat.type;

View File

@ -12,7 +12,7 @@ let
mkOption
mdDoc
mkEnableOption
mkPackageOptionMD
mkPackageOption
types
;
@ -24,7 +24,7 @@ in
{
options.services.wyoming.faster-whisper = with types; {
package = mkPackageOptionMD pkgs "wyoming-faster-whisper" { };
package = mkPackageOption pkgs "wyoming-faster-whisper" { };
servers = mkOption {
default = {};

View File

@ -15,7 +15,7 @@ let
mdDoc
mkEnableOption
mkIf
mkPackageOptionMD
mkPackageOption
mkRemovedOptionModule
types
;
@ -36,7 +36,7 @@ in
options.services.wyoming.openwakeword = with types; {
enable = mkEnableOption (mdDoc "Wyoming openWakeWord server");
package = mkPackageOptionMD pkgs "wyoming-openwakeword" { };
package = mkPackageOption pkgs "wyoming-openwakeword" { };
uri = mkOption {
type = strMatching "^(tcp|unix)://.*$";

View File

@ -12,7 +12,7 @@ let
mkOption
mdDoc
mkEnableOption
mkPackageOptionMD
mkPackageOption
types
;
@ -26,7 +26,7 @@ in
meta.buildDocsInSandbox = false;
options.services.wyoming.piper = with types; {
package = mkPackageOptionMD pkgs "wyoming-piper" { };
package = mkPackageOption pkgs "wyoming-piper" { };
servers = mkOption {
default = {};
@ -38,7 +38,7 @@ in
options = {
enable = mkEnableOption (mdDoc "Wyoming Piper server");
piper = mkPackageOptionMD pkgs "piper-tts" { };
piper = mkPackageOption pkgs "piper-tts" { };
voice = mkOption {
type = str;

View File

@ -231,7 +231,7 @@ in {
###### interface
options.services.borgbackup.package = mkPackageOptionMD pkgs "borgbackup" { };
options.services.borgbackup.package = mkPackageOption pkgs "borgbackup" { };
options.services.borgbackup.jobs = mkOption {
description = lib.mdDoc ''

View File

@ -10,7 +10,7 @@ in
services.duplicati = {
enable = mkEnableOption (lib.mdDoc "Duplicati");
package = mkPackageOptionMD pkgs "duplicati" { };
package = mkPackageOption pkgs "duplicati" { };
port = mkOption {
default = 8200;

View File

@ -17,8 +17,8 @@ let
compressCmd = getAttr cfg.compression {
"none" = "cat";
"gzip" = "${pkgs.gzip}/bin/gzip -c -${toString cfg.compressionLevel}";
"zstd" = "${pkgs.zstd}/bin/zstd -c -${toString cfg.compressionLevel}";
"gzip" = "${pkgs.gzip}/bin/gzip -c -${toString cfg.compressionLevel} --rsyncable";
"zstd" = "${pkgs.zstd}/bin/zstd -c -${toString cfg.compressionLevel} --rsyncable";
};
mkSqlPath = prefix: suffix: "${cfg.location}/${db}${prefix}.sql${suffix}";
@ -178,4 +178,5 @@ in {
})
];
meta.maintainers = with lib.maintainers; [ Scrumplex ];
}

View File

@ -114,7 +114,7 @@ in
options.services.sanoid = {
enable = mkEnableOption (lib.mdDoc "Sanoid ZFS snapshotting service");
package = lib.mkPackageOptionMD pkgs "sanoid" {};
package = lib.mkPackageOption pkgs "sanoid" {};
interval = mkOption {
type = types.str;

View File

@ -87,7 +87,7 @@ in
options.services.syncoid = {
enable = mkEnableOption (lib.mdDoc "Syncoid ZFS synchronization service");
package = lib.mkPackageOptionMD pkgs "sanoid" {};
package = lib.mkPackageOption pkgs "sanoid" {};
interval = mkOption {
type = types.str;

View File

@ -13,7 +13,7 @@ in {
services.erigon = {
enable = mkEnableOption (lib.mdDoc "Ethereum implementation on the efficiency frontier");
package = mkPackageOptionMD pkgs "erigon" { };
package = mkPackageOption pkgs "erigon" { };
extraArgs = mkOption {
type = types.listOf types.str;

View File

@ -19,7 +19,7 @@ let
mapAttrs'
mkEnableOption
mkOption
mkPackageOptionMD
mkPackageOption
mkIf
nameValuePair
types
@ -56,7 +56,7 @@ in
];
options.services.gitea-actions-runner = with types; {
package = mkPackageOptionMD pkgs "gitea-actions-runner" { };
package = mkPackageOption pkgs "gitea-actions-runner" { };
instances = mkOption {
default = {};

View File

@ -11,7 +11,7 @@ let
options = {
enable = lib.mkEnableOption (lib.mdDoc "this Woodpecker-Agent. Agents execute tasks generated by a Server, every install will need one server and at least one agent");
package = lib.mkPackageOptionMD pkgs "woodpecker-agent" { };
package = lib.mkPackageOption pkgs "woodpecker-agent" { };
environment = lib.mkOption {
default = { };

View File

@ -14,7 +14,7 @@ in
options = {
services.woodpecker-server = {
enable = lib.mkEnableOption (lib.mdDoc "the Woodpecker-Server, a CI/CD application for automatic builds, deployments and tests");
package = lib.mkPackageOptionMD pkgs "woodpecker-server" { };
package = lib.mkPackageOption pkgs "woodpecker-server" { };
environment = lib.mkOption {
default = { };
type = lib.types.attrsOf lib.types.str;

View File

@ -55,7 +55,7 @@ in
services.dgraph = {
enable = mkEnableOption (lib.mdDoc "Dgraph native GraphQL database with a graph backend");
package = lib.mkPackageOptionMD pkgs "dgraph" { };
package = lib.mkPackageOption pkgs "dgraph" { };
settings = mkOption {
type = settingsFormat.type;

View File

@ -8,7 +8,7 @@ in
options.services.lldap = with lib; {
enable = mkEnableOption (mdDoc "lldap");
package = mkPackageOptionMD pkgs "lldap" { };
package = mkPackageOption pkgs "lldap" { };
environment = mkOption {
type = with types; attrsOf str;

View File

@ -172,9 +172,9 @@ nix-env -f "<nixpkgs>" -qaP -A emacs.pkgs.orgPackages
:::
If you are on NixOS, you can install this particular Emacs for all users by
adding it to the list of system packages (see
[](#sec-declarative-package-mgmt)). Simply modify your file
{file}`configuration.nix` to make it contain:
putting the `emacs.nix` file in `/etc/nixos` and adding it to the list of
system packages (see [](#sec-declarative-package-mgmt)). Simply modify your
file {file}`configuration.nix` to make it contain:
::: {.example #module-services-emacs-configuration-nix}
### Custom Emacs in `configuration.nix`
@ -182,7 +182,7 @@ adding it to the list of system packages (see
{
environment.systemPackages = [
# [...]
(import /path/to/emacs.nix { inherit pkgs; })
(import ./emacs.nix { inherit pkgs; })
];
}
```
@ -197,8 +197,8 @@ https://nixos.org/nixpkgs/manual/#sec-modify-via-packageOverrides
-->
If you are not on NixOS or want to install this particular Emacs only for
yourself, you can do so by adding it to your
{file}`~/.config/nixpkgs/config.nix` (see
yourself, you can do so by putting `emacs.nix` in `~/.config/nixpkgs` and
adding it to your {file}`~/.config/nixpkgs/config.nix` (see
[Nixpkgs manual](https://nixos.org/nixpkgs/manual/#sec-modify-via-packageOverrides)):
::: {.example #module-services-emacs-config-nix}
### Custom Emacs in `~/.config/nixpkgs/config.nix`
@ -206,7 +206,7 @@ yourself, you can do so by adding it to your
```
{
packageOverrides = super: let self = super.pkgs; in {
myemacs = import /path/to/emacs.nix { pkgs = self; };
myemacs = import ./emacs.nix { pkgs = self; };
};
}
```
@ -264,7 +264,6 @@ To install and enable the {command}`systemd` user service for Emacs
daemon, add the following to your {file}`configuration.nix`:
```
services.emacs.enable = true;
services.emacs.package = import /home/cassou/.emacs.d { pkgs = pkgs; };
```
The {var}`services.emacs.package` option allows a custom

View File

@ -8,7 +8,7 @@ in
options = {
services.openarena = {
enable = mkEnableOption (lib.mdDoc "OpenArena");
package = lib.mkPackageOptionMD pkgs "openarena" { };
package = lib.mkPackageOption pkgs "openarena" { };
openPorts = mkOption {
type = types.bool;

View File

@ -41,7 +41,7 @@ in {
options = {
services.quake3-server = {
enable = mkEnableOption (lib.mdDoc "Quake 3 dedicated server");
package = lib.mkPackageOptionMD pkgs "ioquake3" { };
package = lib.mkPackageOption pkgs "ioquake3" { };
port = mkOption {
type = types.port;

View File

@ -14,7 +14,7 @@ let
mdDoc
mkEnableOption
mkIf
mkPackageOptionMD
mkPackageOption
types
;
@ -38,7 +38,7 @@ in
options.services.homeassistant-satellite = with types; {
enable = mkEnableOption (mdDoc "Home Assistant Satellite");
package = mkPackageOptionMD pkgs "homeassistant-satellite" { };
package = mkPackageOption pkgs "homeassistant-satellite" { };
user = mkOption {
type = str;

View File

@ -10,7 +10,7 @@ in {
options.services.zwave-js = {
enable = mkEnableOption (mdDoc "the zwave-js server on boot");
package = mkPackageOptionMD pkgs "zwave-js-server" { };
package = mkPackageOption pkgs "zwave-js-server" { };
port = mkOption {
type = types.port;

View File

@ -8,7 +8,7 @@ in
options.services.vector = {
enable = mkEnableOption (lib.mdDoc "Vector");
package = mkPackageOptionMD pkgs "vector" { };
package = mkPackageOption pkgs "vector" { };
journaldAccess = mkOption {
type = types.bool;

View File

@ -128,7 +128,7 @@ in {
'';
};
};
package = mkPackageOptionMD pkgs "listmonk" {};
package = mkPackageOption pkgs "listmonk" {};
settings = mkOption {
type = types.submodule { freeformType = tomlFormat.type; };
description = lib.mdDoc ''

View File

@ -120,7 +120,7 @@ in
${lib.optionalString (!localDB) ''
$password = file('${cfg.database.passwordFile}')[0];
$password = preg_split('~\\\\.(*SKIP)(*FAIL)|\:~s', $password);
$password = end($password);
$password = rtrim(end($password));
$password = str_replace("\\:", ":", $password);
$password = str_replace("\\\\", "\\", $password);
''}

View File

@ -11,7 +11,7 @@ let
in {
options.services.stalwart-mail = {
enable = mkEnableOption (mdDoc "the Stalwart all-in-one email server");
package = mkPackageOptionMD pkgs "stalwart-mail" { };
package = mkPackageOption pkgs "stalwart-mail" { };
settings = mkOption {
inherit (configFormat) type;

View File

@ -7,7 +7,7 @@ in
options.services.matrix-synapse.sliding-sync = {
enable = lib.mkEnableOption (lib.mdDoc "sliding sync");
package = lib.mkPackageOptionMD pkgs "matrix-sliding-sync" { };
package = lib.mkPackageOption pkgs "matrix-sliding-sync" { };
settings = lib.mkOption {
type = lib.types.submodule {

View File

@ -59,7 +59,7 @@ in
options.services.maubot = with lib; {
enable = mkEnableOption (mdDoc "maubot");
package = lib.mkPackageOptionMD pkgs "maubot" { };
package = lib.mkPackageOption pkgs "maubot" { };
plugins = mkOption {
type = types.listOf types.package;

View File

@ -0,0 +1,68 @@
# Anki Sync Server {#module-services-anki-sync-server}
[Anki Sync Server](https://docs.ankiweb.net/sync-server.html) is the built-in
sync server, present in recent versions of Anki. Advanced users who cannot or
do not wish to use AnkiWeb can use this sync server instead of AnkiWeb.
This module is compatible only with Anki versions >=2.1.66, due to [recent
enhancements to the Nix anki
package](https://github.com/NixOS/nixpkgs/commit/05727304f8815825565c944d012f20a9a096838a).
## Basic Usage {#module-services-anki-sync-server-basic-usage}
By default, the module creates a
[`systemd`](https://www.freedesktop.org/wiki/Software/systemd/)
unit which runs the sync server with an isolated user using the systemd
`DynamicUser` option.
This can be done by enabling the `anki-sync-server` service:
```
{ ... }:
{
services.anki-sync-server.enable = true;
}
```
It is necessary to set at least one username-password pair under
{option}`services.anki-sync-server.users`. For example
```
{
services.anki-sync-server.users = [
{
username = "user";
passwordFile = /etc/anki-sync-server/user;
}
];
}
```
Here, `passwordFile` is the path to a file containing just the password in
plaintext. Make sure to set permissions to make this file unreadable to any
user besides root.
By default, the server listen address {option}`services.anki-sync-server.host`
is set to localhost, listening on port
{option}`services.anki-sync-server.port`, and does not open the firewall. This
is suitable for purely local testing, or to be used behind a reverse proxy. If
you want to expose the sync server directly to other computers (not recommended
in most circumstances, because the sync server doesn't use HTTPS), then set the
following options:
```
{
services.anki-sync-server.host = "0.0.0.0";
services.anki-sync-server.openFirewall = true;
}
```
## Alternatives {#module-services-anki-sync-server-alternatives}
The [`ankisyncd` NixOS
module](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/misc/ankisyncd.nix)
provides similar functionality, but using a third-party implementation,
[`anki-sync-server-rs`](https://github.com/ankicommunity/anki-sync-server-rs/).
According to that project's README, it is "no longer maintained", and not
recommended for Anki 2.1.64+.

View File

@ -0,0 +1,140 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.services.anki-sync-server;
name = "anki-sync-server";
specEscape = replaceStrings ["%"] ["%%"];
usersWithIndexes =
lists.imap1 (i: user: {
i = i;
user = user;
})
cfg.users;
usersWithIndexesFile = filter (x: x.user.passwordFile != null) usersWithIndexes;
usersWithIndexesNoFile = filter (x: x.user.passwordFile == null && x.user.password != null) usersWithIndexes;
anki-sync-server-run = pkgs.writeShellScriptBin "anki-sync-server-run" ''
# When services.anki-sync-server.users.passwordFile is set,
# each password file is passed as a systemd credential, which is mounted in
# a file system exposed to the service. Here we read the passwords from
# the credential files to pass them as environment variables to the Anki
# sync server.
${
concatMapStringsSep
"\n"
(x: ''export SYNC_USER${toString x.i}=${escapeShellArg x.user.username}:"''$(cat "''${CREDENTIALS_DIRECTORY}/"${escapeShellArg x.user.username})"'')
usersWithIndexesFile
}
# For users where services.anki-sync-server.users.password isn't set,
# export passwords in environment variables in plaintext.
${
concatMapStringsSep
"\n"
(x: ''export SYNC_USER${toString x.i}=${escapeShellArg x.user.username}:${escapeShellArg x.user.password}'')
usersWithIndexesNoFile
}
exec ${cfg.package}/bin/anki-sync-server
'';
in {
options.services.anki-sync-server = {
enable = mkEnableOption "anki-sync-server";
package = mkPackageOption pkgs "anki-sync-server" { };
address = mkOption {
type = types.str;
default = "::1";
description = ''
IP address anki-sync-server listens to.
Note host names are not resolved.
'';
};
port = mkOption {
type = types.port;
default = 27701;
description = "Port number anki-sync-server listens to.";
};
openFirewall = mkOption {
default = false;
type = types.bool;
description = "Whether to open the firewall for the specified port.";
};
users = mkOption {
type = with types;
listOf (submodule {
options = {
username = mkOption {
type = str;
description = "User name accepted by anki-sync-server.";
};
password = mkOption {
type = nullOr str;
default = null;
description = ''
Password accepted by anki-sync-server for the associated username.
**WARNING**: This option is **not secure**. This password will
be stored in *plaintext* and will be visible to *all users*.
See {option}`services.anki-sync-server.users.passwordFile` for
a more secure option.
'';
};
passwordFile = mkOption {
type = nullOr path;
default = null;
description = ''
File containing the password accepted by anki-sync-server for
the associated username. Make sure to make readable only by
root.
'';
};
};
});
description = "List of user-password pairs to provide to the sync server.";
};
};
config = mkIf cfg.enable {
assertions = [
{
assertion = (builtins.length usersWithIndexesFile) + (builtins.length usersWithIndexesNoFile) > 0;
message = "At least one username-password pair must be set.";
}
];
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [cfg.port];
systemd.services.anki-sync-server = {
description = "anki-sync-server: Anki sync server built into Anki";
after = ["network.target"];
wantedBy = ["multi-user.target"];
path = [cfg.package];
environment = {
SYNC_BASE = "%S/%N";
SYNC_HOST = specEscape cfg.address;
SYNC_PORT = toString cfg.port;
};
serviceConfig = {
Type = "simple";
DynamicUser = true;
StateDirectory = name;
ExecStart = "${anki-sync-server-run}/bin/anki-sync-server-run";
Restart = "always";
LoadCredential =
map
(x: "${specEscape x.user.username}:${specEscape (toString x.user.passwordFile)}")
usersWithIndexesFile;
};
};
};
meta = {
maintainers = with maintainers; [telotortium];
doc = ./anki-sync-server.md;
};
}

View File

@ -1,7 +1,7 @@
{ config, pkgs, lib, ... }:
let
inherit (lib) mapAttrs' nameValuePair filterAttrs types mkEnableOption
mdDoc mkPackageOptionMD mkOption literalExpression mkIf flatten
mdDoc mkPackageOption mkOption literalExpression mkIf flatten
maintainers attrValues;
cfg = config.services.autosuspend;
@ -96,7 +96,7 @@ in
services.autosuspend = {
enable = mkEnableOption (mdDoc "the autosuspend daemon");
package = mkPackageOptionMD pkgs "autosuspend" { };
package = mkPackageOption pkgs "autosuspend" { };
settings = mkOption {
type = types.submodule {

View File

@ -33,7 +33,7 @@ in
services.calibre-server = {
enable = mkEnableOption (lib.mdDoc "calibre-server");
package = lib.mkPackageOptionMD pkgs "calibre" { };
package = lib.mkPackageOption pkgs "calibre" { };
libraries = mkOption {
type = types.listOf types.path;

View File

@ -15,7 +15,7 @@ in {
type = types.bool;
};
package = mkPackageOptionMD pkgs "etcd" { };
package = mkPackageOption pkgs "etcd" { };
name = mkOption {
description = lib.mdDoc "Etcd unique node name.";

View File

@ -21,7 +21,7 @@ let
mkIf
mkMerge
mkOption
mkPackageOptionMD
mkPackageOption
mkRemovedOptionModule
mkRenamedOptionModule
optionalAttrs
@ -57,7 +57,7 @@ in
services.forgejo = {
enable = mkEnableOption (mdDoc "Forgejo");
package = mkPackageOptionMD pkgs "forgejo" { };
package = mkPackageOption pkgs "forgejo" { };
useWizard = mkOption {
default = false;

View File

@ -12,7 +12,7 @@ in
services.homepage-dashboard = {
enable = lib.mkEnableOption (lib.mdDoc "Homepage Dashboard");
package = lib.mkPackageOptionMD pkgs "homepage-dashboard" { };
package = lib.mkPackageOption pkgs "homepage-dashboard" { };
openFirewall = lib.mkOption {
type = lib.types.bool;

View File

@ -7,7 +7,7 @@ let cfg = config.services.input-remapper; in
options = {
services.input-remapper = {
enable = mkEnableOption (lib.mdDoc "input-remapper, an easy to use tool to change the mapping of your input device buttons");
package = mkPackageOptionMD pkgs "input-remapper" { };
package = mkPackageOption pkgs "input-remapper" { };
enableUdevRules = mkEnableOption (lib.mdDoc "udev rules added by input-remapper to handle hotplugged devices. Currently disabled by default due to https://github.com/sezanzeb/input-remapper/issues/140");
serviceWantedBy = mkOption {
default = [ "graphical.target" ];

View File

@ -13,7 +13,7 @@ in
services.polaris = {
enable = mkEnableOption (lib.mdDoc "Polaris Music Server");
package = mkPackageOptionMD pkgs "polaris" { };
package = mkPackageOption pkgs "polaris" { };
user = mkOption {
type = types.str;

View File

@ -11,7 +11,7 @@ in
services.prowlarr = {
enable = mkEnableOption (lib.mdDoc "Prowlarr");
package = mkPackageOptionMD pkgs "prowlarr" { };
package = mkPackageOption pkgs "prowlarr" { };
openFirewall = mkOption {
type = types.bool;

View File

@ -33,7 +33,7 @@ in
'';
};
package = lib.mkPackageOptionMD pkgs "pufferpanel" { };
package = lib.mkPackageOption pkgs "pufferpanel" { };
extraGroups = lib.mkOption {
type = lib.types.listOf lib.types.str;

View File

@ -14,7 +14,7 @@ in
options.services.rshim = {
enable = lib.mkEnableOption (lib.mdDoc "user-space rshim driver for the BlueField SoC");
package = lib.mkPackageOptionMD pkgs "rshim-user-space" { };
package = lib.mkPackageOption pkgs "rshim-user-space" { };
backend = lib.mkOption {
type = with lib.types; nullOr (enum [ "usb" "pcie" "pcie_lf" ]);

View File

@ -7,7 +7,7 @@ in
options = {
services.spice-autorandr = {
enable = lib.mkEnableOption (lib.mdDoc "spice-autorandr service that will automatically resize display to match SPICE client window size.");
package = lib.mkPackageOptionMD pkgs "spice-autorandr" { };
package = lib.mkPackageOption pkgs "spice-autorandr" { };
};
};

View File

@ -28,7 +28,7 @@ in
options.services.certspotter = {
enable = lib.mkEnableOption "Cert Spotter, a Certificate Transparency log monitor";
package = lib.mkPackageOptionMD pkgs "certspotter" { };
package = lib.mkPackageOption pkgs "certspotter" { };
startAtEnd = lib.mkOption {
type = lib.types.bool;

View File

@ -2,14 +2,14 @@
let
cfg = config.services.cockpit;
inherit (lib) types mkEnableOption mkOption mkIf mdDoc literalMD mkPackageOptionMD;
inherit (lib) types mkEnableOption mkOption mkIf mdDoc literalMD mkPackageOption;
settingsFormat = pkgs.formats.ini {};
in {
options = {
services.cockpit = {
enable = mkEnableOption (mdDoc "Cockpit");
package = mkPackageOptionMD pkgs "Cockpit" {
package = mkPackageOption pkgs "Cockpit" {
default = [ "cockpit" ];
};

View File

@ -16,7 +16,7 @@ in {
services.goss = {
enable = lib.mkEnableOption (lib.mdDoc "Goss daemon");
package = lib.mkPackageOptionMD pkgs "goss" { };
package = lib.mkPackageOption pkgs "goss" { };
environment = lib.mkOption {
type = lib.types.attrsOf lib.types.str;

View File

@ -13,7 +13,7 @@ in
options.services.grafana-agent = {
enable = mkEnableOption (lib.mdDoc "grafana-agent");
package = mkPackageOptionMD pkgs "grafana-agent" { };
package = mkPackageOption pkgs "grafana-agent" { };
credentials = mkOption {
description = lib.mdDoc ''

View File

@ -22,7 +22,7 @@ in {
'';
};
package = lib.mkPackageOptionMD pkgs "grafana-loki" { };
package = lib.mkPackageOption pkgs "grafana-loki" { };
group = mkOption {
type = types.str;

View File

@ -18,7 +18,7 @@ in
services.ocsinventory-agent = {
enable = lib.mkEnableOption (lib.mdDoc "OCS Inventory Agent");
package = lib.mkPackageOptionMD pkgs "ocsinventory-agent" { };
package = lib.mkPackageOption pkgs "ocsinventory-agent" { };
settings = lib.mkOption {
type = lib.types.submodule {

View File

@ -29,7 +29,7 @@ in
'';
};
package = lib.mkPackageOptionMD pkgs "exportarr" { };
package = lib.mkPackageOption pkgs "exportarr" { };
environment = lib.mkOption {
type = lib.types.attrsOf lib.types.str;

View File

@ -10,7 +10,7 @@ let
in {
port = 9253;
extraOpts = {
package = lib.mkPackageOptionMD pkgs "prometheus-php-fpm-exporter" {};
package = lib.mkPackageOption pkgs "prometheus-php-fpm-exporter" {};
telemetryPath = lib.mkOption {
type = lib.types.str;

View File

@ -19,7 +19,7 @@ let
mkIf
mkMerge
mkOption
mkPackageOptionMD
mkPackageOption
optional
optionalAttrs
optionalString
@ -682,7 +682,7 @@ in {
options.services.thanos = {
package = mkPackageOptionMD pkgs "thanos" {};
package = mkPackageOption pkgs "thanos" {};
sidecar = paramsToOptions params.sidecar // {
enable = mkEnableOption

View File

@ -210,7 +210,7 @@ in
to the id part in ceph i.e. [ "name1" ] would result in mgr.name1
'';
};
package = mkPackageOptionMD pkgs "ceph" { };
package = mkPackageOption pkgs "ceph" { };
extraConfig = mkOption {
type = with types; attrsOf str;
default = {};
@ -231,7 +231,7 @@ in
to the id part in ceph i.e. [ "name1" ] would result in mon.name1
'';
};
package = mkPackageOptionMD pkgs "ceph" { };
package = mkPackageOption pkgs "ceph" { };
extraConfig = mkOption {
type = with types; attrsOf str;
default = {};
@ -252,7 +252,7 @@ in
to the id part in ceph i.e. [ "name1" ] would result in osd.name1
'';
};
package = mkPackageOptionMD pkgs "ceph" { };
package = mkPackageOption pkgs "ceph" { };
extraConfig = mkOption {
type = with types; attrsOf str;
default = {
@ -280,7 +280,7 @@ in
to the id part in ceph i.e. [ "name1" ] would result in mds.name1
'';
};
package = mkPackageOptionMD pkgs "ceph" { };
package = mkPackageOption pkgs "ceph" { };
extraConfig = mkOption {
type = with types; attrsOf str;
default = {};
@ -292,7 +292,7 @@ in
rgw = {
enable = mkEnableOption (lib.mdDoc "Ceph RadosGW daemon");
package = mkPackageOptionMD pkgs "ceph" { };
package = mkPackageOption pkgs "ceph" { };
daemons = mkOption {
type = with types; listOf str;
default = [];

View File

@ -12,7 +12,7 @@ let
mdDoc
mkEnableOption
mkOption
mkPackageOptionMD
mkPackageOption
types
;
domain = "acme-dns.example.com";
@ -21,7 +21,7 @@ in
options.services.acme-dns = {
enable = mkEnableOption (mdDoc "acme-dns");
package = mkPackageOptionMD pkgs "acme-dns" { };
package = mkPackageOption pkgs "acme-dns" { };
settings = mkOption {
description = mdDoc ''

View File

@ -11,7 +11,7 @@ in
services.alice-lg = {
enable = mkEnableOption (lib.mdDoc "Alice Looking Glass");
package = mkPackageOptionMD pkgs "alice-lg" { };
package = mkPackageOption pkgs "alice-lg" { };
settings = mkOption {
type = settingsFormat.type;

View File

@ -10,7 +10,7 @@ in
options.services.centrifugo = {
enable = lib.mkEnableOption (lib.mdDoc "Centrifugo messaging server");
package = lib.mkPackageOptionMD pkgs "centrifugo" { };
package = lib.mkPackageOption pkgs "centrifugo" { };
settings = lib.mkOption {
type = settingsFormat.type;

View File

@ -102,7 +102,7 @@ in
options = {
enable = mkEnableOption (mdDoc "cgit");
package = mkPackageOptionMD pkgs "cgit" {};
package = mkPackageOption pkgs "cgit" {};
nginx.virtualHost = mkOption {
description = mdDoc "VirtualHost to serve cgit on, defaults to the attribute name.";

View File

@ -16,7 +16,7 @@ in
enable = mkEnableOption
(mdDoc "dae, a Linux high-performance transparent proxy solution based on eBPF");
package = mkPackageOptionMD pkgs "dae" { };
package = mkPackageOption pkgs "dae" { };
assets = mkOption {

View File

@ -53,7 +53,7 @@ in
'';
};
package = mkPackageOptionMD pkgs "dnsmasq" {};
package = mkPackageOption pkgs "dnsmasq" {};
resolveLocalQueries = mkOption {
type = types.bool;

View File

@ -17,7 +17,7 @@ in
options.services.envoy = {
enable = mkEnableOption (lib.mdDoc "Envoy reverse proxy");
package = mkPackageOptionMD pkgs "envoy" { };
package = mkPackageOption pkgs "envoy" { };
requireValidConfig = mkOption {
type = types.bool;

View File

@ -14,7 +14,7 @@ in
services.frp = {
enable = mkEnableOption (mdDoc "frp");
package = mkPackageOptionMD pkgs "frp" { };
package = mkPackageOption pkgs "frp" { };
role = mkOption {
type = types.enum [ "server" "client" ];

View File

@ -19,7 +19,7 @@ with lib;
enable = mkEnableOption (lib.mdDoc "HAProxy, the reliable, high performance TCP/HTTP load balancer.");
package = mkPackageOptionMD pkgs "haproxy" { };
package = mkPackageOption pkgs "haproxy" { };
user = mkOption {
type = types.str;

View File

@ -14,7 +14,7 @@ in
description = lib.mdDoc "Path to the signing key that will be used for signing the cache";
};
package = lib.mkPackageOptionMD pkgs "harmonia" { };
package = lib.mkPackageOption pkgs "harmonia" { };
settings = lib.mkOption {
inherit (format) type;

View File

@ -7,7 +7,7 @@ let
mdDoc
mkIf
mkOption
mkPackageOptionMD
mkPackageOption
optionalAttrs
optional
types;
@ -25,7 +25,7 @@ in
options.services.legit = {
enable = mkEnableOption (mdDoc "legit git web frontend");
package = mkPackageOptionMD pkgs "legit-web" { };
package = mkPackageOption pkgs "legit-web" { };
user = mkOption {
type = types.str;

View File

@ -7,7 +7,7 @@ in
options.services.netclient = {
enable = lib.mkEnableOption (lib.mdDoc "Netclient Daemon");
package = lib.mkPackageOptionMD pkgs "netclient" { };
package = lib.mkPackageOption pkgs "netclient" { };
};
config = lib.mkIf cfg.enable {

View File

@ -117,7 +117,7 @@ let
};
in {
options.networking.openconnect = {
package = mkPackageOptionMD pkgs "openconnect" { };
package = mkPackageOption pkgs "openconnect" { };
interfaces = mkOption {
description = lib.mdDoc "OpenConnect interfaces.";

View File

@ -11,7 +11,7 @@ in
options.services.peroxide = {
enable = mkEnableOption (lib.mdDoc "peroxide");
package = mkPackageOptionMD pkgs "peroxide" {
package = mkPackageOption pkgs "peroxide" {
default = [ "peroxide" ];
};

View File

@ -14,7 +14,7 @@ in
enable = mkEnableOption (lib.mdDoc "ShellHub Agent daemon");
package = mkPackageOptionMD pkgs "shellhub-agent" { };
package = mkPackageOption pkgs "shellhub-agent" { };
preferredHostname = mkOption {
type = types.str;

View File

@ -13,7 +13,7 @@ in
services.sing-box = {
enable = lib.mkEnableOption (lib.mdDoc "sing-box universal proxy platform");
package = lib.mkPackageOptionMD pkgs "sing-box" { };
package = lib.mkPackageOption pkgs "sing-box" { };
settings = lib.mkOption {
type = lib.types.submodule {

View File

@ -29,7 +29,7 @@ in {
description = lib.mdDoc "Username or user ID of the user allowed to to fetch Tailscale TLS certificates for the node.";
};
package = lib.mkPackageOptionMD pkgs "tailscale" {};
package = lib.mkPackageOption pkgs "tailscale" {};
openFirewall = mkOption {
default = false;

View File

@ -25,7 +25,7 @@ in
options.services.thelounge = {
enable = mkEnableOption (lib.mdDoc "The Lounge web IRC client");
package = mkPackageOptionMD pkgs "thelounge" { };
package = mkPackageOption pkgs "thelounge" { };
public = mkOption {
type = types.bool;

View File

@ -28,7 +28,7 @@ in
options = {
services.tinyproxy = {
enable = mkEnableOption (lib.mdDoc "Tinyproxy daemon");
package = mkPackageOptionMD pkgs "tinyproxy" {};
package = mkPackageOption pkgs "tinyproxy" {};
settings = mkOption {
description = lib.mdDoc "Configuration for [tinyproxy](https://tinyproxy.github.io/).";
default = { };

View File

@ -6,7 +6,7 @@ in
{
options.services.twingate = {
enable = lib.mkEnableOption (lib.mdDoc "Twingate Client daemon");
package = lib.mkPackageOptionMD pkgs "twingate" { };
package = lib.mkPackageOption pkgs "twingate" { };
};
config = lib.mkIf cfg.enable {

Some files were not shown because too many files have changed in this diff Show More