Merge master into haskell-updates
This commit is contained in:
commit
57ea53ecca
25
.github/workflows/check-by-name.yml
vendored
25
.github/workflows/check-by-name.yml
vendored
@ -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
|
||||
|
@ -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";
|
||||
|
@ -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}
|
||||
|
@ -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).
|
||||
|
@ -305,6 +305,7 @@ in {
|
||||
extraGroups = [ "audio" ];
|
||||
description = "PulseAudio system service user";
|
||||
home = stateDir;
|
||||
homeMode = "755";
|
||||
createHome = true;
|
||||
isSystemUser = true;
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -27,7 +27,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkPackageOptionMD pkgs "1Password GUI" {
|
||||
package = mkPackageOption pkgs "1Password GUI" {
|
||||
default = [ "_1password-gui" ];
|
||||
};
|
||||
};
|
||||
|
@ -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" ];
|
||||
};
|
||||
};
|
||||
|
@ -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" {};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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" {};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -16,7 +16,7 @@ in
|
||||
group.
|
||||
'';
|
||||
};
|
||||
package = mkPackageOptionMD pkgs "flashrom" { };
|
||||
package = mkPackageOption pkgs "flashrom" { };
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
@ -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; };
|
||||
|
||||
|
@ -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;
|
||||
|
17
nixos/modules/programs/joycond-cemuhook.nix
Normal file
17
nixos/modules/programs/joycond-cemuhook.nix
Normal 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 ];
|
||||
};
|
||||
}
|
@ -13,7 +13,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "minipro" { };
|
||||
package = lib.mkPackageOption pkgs "minipro" { };
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -11,7 +11,7 @@ in
|
||||
default = true;
|
||||
};
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "nano" { };
|
||||
package = lib.mkPackageOption pkgs "nano" { };
|
||||
|
||||
nanorc = lib.mkOption {
|
||||
type = lib.types.lines;
|
||||
|
@ -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" { };
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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.";
|
||||
|
@ -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 ];
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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" { };
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -7,7 +7,7 @@ in
|
||||
{
|
||||
options = with types; {
|
||||
security.loginDefs = {
|
||||
package = mkPackageOptionMD pkgs "shadow" { };
|
||||
package = mkPackageOption pkgs "shadow" { };
|
||||
|
||||
chfnRestrict = mkOption {
|
||||
description = mdDoc ''
|
||||
|
@ -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" {};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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" ];
|
||||
};
|
||||
|
||||
|
@ -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 [
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -41,7 +41,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkPackageOptionMD pkgs "gmediarender" {
|
||||
package = mkPackageOption pkgs "gmediarender" {
|
||||
default = "gmrender-resurrect";
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 = {};
|
||||
|
@ -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)://.*$";
|
||||
|
@ -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;
|
||||
|
@ -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 ''
|
||||
|
@ -10,7 +10,7 @@ in
|
||||
services.duplicati = {
|
||||
enable = mkEnableOption (lib.mdDoc "Duplicati");
|
||||
|
||||
package = mkPackageOptionMD pkgs "duplicati" { };
|
||||
package = mkPackageOption pkgs "duplicati" { };
|
||||
|
||||
port = mkOption {
|
||||
default = 8200;
|
||||
|
@ -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 ];
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 = {};
|
||||
|
@ -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 = { };
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -128,7 +128,7 @@ in {
|
||||
'';
|
||||
};
|
||||
};
|
||||
package = mkPackageOptionMD pkgs "listmonk" {};
|
||||
package = mkPackageOption pkgs "listmonk" {};
|
||||
settings = mkOption {
|
||||
type = types.submodule { freeformType = tomlFormat.type; };
|
||||
description = lib.mdDoc ''
|
||||
|
@ -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);
|
||||
''}
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
68
nixos/modules/services/misc/anki-sync-server.md
Normal file
68
nixos/modules/services/misc/anki-sync-server.md
Normal 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+.
|
140
nixos/modules/services/misc/anki-sync-server.nix
Normal file
140
nixos/modules/services/misc/anki-sync-server.nix
Normal 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;
|
||||
};
|
||||
}
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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.";
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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" ];
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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" ]);
|
||||
|
@ -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" { };
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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" ];
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 ''
|
||||
|
@ -22,7 +22,7 @@ in {
|
||||
'';
|
||||
};
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "grafana-loki" { };
|
||||
package = lib.mkPackageOption pkgs "grafana-loki" { };
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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 = [];
|
||||
|
@ -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 ''
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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.";
|
||||
|
@ -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 {
|
||||
|
@ -53,7 +53,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkPackageOptionMD pkgs "dnsmasq" {};
|
||||
package = mkPackageOption pkgs "dnsmasq" {};
|
||||
|
||||
resolveLocalQueries = mkOption {
|
||||
type = types.bool;
|
||||
|
@ -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;
|
||||
|
@ -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" ];
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -117,7 +117,7 @@ let
|
||||
};
|
||||
in {
|
||||
options.networking.openconnect = {
|
||||
package = mkPackageOptionMD pkgs "openconnect" { };
|
||||
package = mkPackageOption pkgs "openconnect" { };
|
||||
|
||||
interfaces = mkOption {
|
||||
description = lib.mdDoc "OpenConnect interfaces.";
|
||||
|
@ -11,7 +11,7 @@ in
|
||||
options.services.peroxide = {
|
||||
enable = mkEnableOption (lib.mdDoc "peroxide");
|
||||
|
||||
package = mkPackageOptionMD pkgs "peroxide" {
|
||||
package = mkPackageOption pkgs "peroxide" {
|
||||
default = [ "peroxide" ];
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 = { };
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user