treewide: Format all Nix files
Format all Nix files using the officially approved formatter,
making the CI check introduced in the previous commit succeed:
nix-build ci -A fmt.check
This is the next step of the of the [implementation](https://github.com/NixOS/nixfmt/issues/153)
of the accepted [RFC 166](https://github.com/NixOS/rfcs/pull/166).
This commit will lead to merge conflicts for a number of PRs,
up to an estimated ~1100 (~33%) among the PRs with activity in the past 2
months, but that should be lower than what it would be without the previous
[partial treewide format](https://github.com/NixOS/nixpkgs/pull/322537).
Merge conflicts caused by this commit can now automatically be resolved while rebasing using the
[auto-rebase script](8616af08d9/maintainers/scripts/auto-rebase).
If you run into any problems regarding any of this, please reach out to the
[formatting team](https://nixos.org/community/teams/formatting/) by
pinging @NixOS/nix-formatting.
This commit is contained in:
@@ -1,79 +1,86 @@
|
||||
{ lib
|
||||
, config
|
||||
, pkgs
|
||||
, ...
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (lib) mkEnableOption mkOption mkIf types;
|
||||
inherit (lib)
|
||||
mkEnableOption
|
||||
mkOption
|
||||
mkIf
|
||||
types
|
||||
;
|
||||
format = pkgs.formats.toml { };
|
||||
cfg = config.services.hebbot;
|
||||
settingsFile = format.generate "config.toml" cfg.settings;
|
||||
mkTemplateOption = templateName: mkOption {
|
||||
type = types.path;
|
||||
description = ''
|
||||
A path to the Markdown file for the ${templateName}.
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.maintainers.raitobezarius ];
|
||||
options.services.hebbot = {
|
||||
enable = mkEnableOption "hebbot";
|
||||
package = lib.mkPackageOption pkgs "hebbot" {};
|
||||
botPasswordFile = mkOption {
|
||||
type = types.path;
|
||||
description = ''
|
||||
A path to the password file for your bot.
|
||||
|
||||
Consider using a path that does not end up in your Nix store
|
||||
as it would be world readable.
|
||||
'';
|
||||
};
|
||||
templates = {
|
||||
project = mkTemplateOption "project template";
|
||||
report = mkTemplateOption "report template";
|
||||
section = mkTemplateOption "section template";
|
||||
};
|
||||
settings = mkOption {
|
||||
type = format.type;
|
||||
default = { };
|
||||
description = ''
|
||||
Configuration for Hebbot, see, for examples:
|
||||
|
||||
- <https://github.com/matrix-org/twim-config/blob/master/config.toml>
|
||||
- <https://gitlab.gnome.org/Teams/Websites/thisweek.gnome.org/-/blob/main/hebbot/config.toml>
|
||||
'';
|
||||
};
|
||||
mkTemplateOption =
|
||||
templateName:
|
||||
mkOption {
|
||||
type = types.path;
|
||||
description = ''
|
||||
A path to the Markdown file for the ${templateName}.
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.maintainers.raitobezarius ];
|
||||
options.services.hebbot = {
|
||||
enable = mkEnableOption "hebbot";
|
||||
package = lib.mkPackageOption pkgs "hebbot" { };
|
||||
botPasswordFile = mkOption {
|
||||
type = types.path;
|
||||
description = ''
|
||||
A path to the password file for your bot.
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.hebbot = {
|
||||
description = "hebbot - a TWIM-style Matrix bot written in Rust";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
Consider using a path that does not end up in your Nix store
|
||||
as it would be world readable.
|
||||
'';
|
||||
};
|
||||
templates = {
|
||||
project = mkTemplateOption "project template";
|
||||
report = mkTemplateOption "report template";
|
||||
section = mkTemplateOption "section template";
|
||||
};
|
||||
settings = mkOption {
|
||||
type = format.type;
|
||||
default = { };
|
||||
description = ''
|
||||
Configuration for Hebbot, see, for examples:
|
||||
|
||||
preStart = ''
|
||||
ln -sf ${cfg.templates.project} ./project_template.md
|
||||
ln -sf ${cfg.templates.report} ./report_template.md
|
||||
ln -sf ${cfg.templates.section} ./section_template.md
|
||||
ln -sf ${settingsFile} ./config.toml
|
||||
'';
|
||||
- <https://github.com/matrix-org/twim-config/blob/master/config.toml>
|
||||
- <https://gitlab.gnome.org/Teams/Websites/thisweek.gnome.org/-/blob/main/hebbot/config.toml>
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
script = ''
|
||||
export BOT_PASSWORD="$(cat $CREDENTIALS_DIRECTORY/bot-password-file)"
|
||||
${lib.getExe cfg.package}
|
||||
'';
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.hebbot = {
|
||||
description = "hebbot - a TWIM-style Matrix bot written in Rust";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
Restart = "on-failure";
|
||||
LoadCredential = "bot-password-file:${cfg.botPasswordFile}";
|
||||
RestartSec = "10s";
|
||||
StateDirectory = "hebbot";
|
||||
WorkingDirectory = "/var/lib/hebbot";
|
||||
preStart = ''
|
||||
ln -sf ${cfg.templates.project} ./project_template.md
|
||||
ln -sf ${cfg.templates.report} ./report_template.md
|
||||
ln -sf ${cfg.templates.section} ./section_template.md
|
||||
ln -sf ${settingsFile} ./config.toml
|
||||
'';
|
||||
|
||||
script = ''
|
||||
export BOT_PASSWORD="$(cat $CREDENTIALS_DIRECTORY/bot-password-file)"
|
||||
${lib.getExe cfg.package}
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
Restart = "on-failure";
|
||||
LoadCredential = "bot-password-file:${cfg.botPasswordFile}";
|
||||
RestartSec = "10s";
|
||||
StateDirectory = "hebbot";
|
||||
WorkingDirectory = "/var/lib/hebbot";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
cfg = config.services.mautrix-whatsapp;
|
||||
dataDir = "/var/lib/mautrix-whatsapp";
|
||||
registrationFile = "${dataDir}/whatsapp-registration.yaml";
|
||||
settingsFile = "${dataDir}/config.json";
|
||||
settingsFileUnsubstituted = settingsFormat.generate "mautrix-whatsapp-config-unsubstituted.json" cfg.settings;
|
||||
settingsFormat = pkgs.formats.json {};
|
||||
settingsFormat = pkgs.formats.json { };
|
||||
appservicePort = 29318;
|
||||
|
||||
mkDefaults = lib.mapAttrsRecursive (n: v: lib.mkDefault v);
|
||||
@@ -29,8 +30,8 @@
|
||||
bridge = {
|
||||
username_template = "whatsapp_{{.}}";
|
||||
displayname_template = "{{if .BusinessName}}{{.BusinessName}}{{else if .PushName}}{{.PushName}}{{else}}{{.JID}}{{end}} (WA)";
|
||||
double_puppet_server_map = {};
|
||||
login_shared_secret_map = {};
|
||||
double_puppet_server_map = { };
|
||||
login_shared_secret_map = { };
|
||||
command_prefix = "!wa";
|
||||
permissions."*" = "relay";
|
||||
relay.enabled = true;
|
||||
@@ -45,7 +46,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
in {
|
||||
in
|
||||
{
|
||||
options.services.mautrix-whatsapp = {
|
||||
enable = lib.mkEnableOption "mautrix-whatsapp, a puppeting/relaybot bridge between Matrix and WhatsApp";
|
||||
|
||||
@@ -129,7 +131,7 @@ in {
|
||||
description = "Mautrix-WhatsApp bridge user";
|
||||
};
|
||||
|
||||
users.groups.mautrix-whatsapp = {};
|
||||
users.groups.mautrix-whatsapp = { };
|
||||
|
||||
services.matrix-synapse = lib.mkIf cfg.registerToSynapse {
|
||||
settings.app_service_config_files = [ registrationFile ];
|
||||
@@ -138,18 +140,20 @@ in {
|
||||
serviceConfig.SupplementaryGroups = [ "mautrix-whatsapp" ];
|
||||
};
|
||||
|
||||
services.mautrix-whatsapp.settings = lib.mkMerge (map mkDefaults [
|
||||
defaultConfig
|
||||
# Note: this is defined here to avoid the docs depending on `config`
|
||||
{ homeserver.domain = config.services.matrix-synapse.settings.server_name; }
|
||||
]);
|
||||
services.mautrix-whatsapp.settings = lib.mkMerge (
|
||||
map mkDefaults [
|
||||
defaultConfig
|
||||
# Note: this is defined here to avoid the docs depending on `config`
|
||||
{ homeserver.domain = config.services.matrix-synapse.settings.server_name; }
|
||||
]
|
||||
);
|
||||
|
||||
systemd.services.mautrix-whatsapp = {
|
||||
description = "Mautrix-WhatsApp Service - A WhatsApp bridge for Matrix";
|
||||
|
||||
wantedBy = ["multi-user.target"];
|
||||
wants = ["network-online.target"] ++ cfg.serviceDependencies;
|
||||
after = ["network-online.target"] ++ cfg.serviceDependencies;
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ] ++ cfg.serviceDependencies;
|
||||
after = [ "network-online.target" ] ++ cfg.serviceDependencies;
|
||||
|
||||
preStart = ''
|
||||
# substitute the settings file by environment variables
|
||||
@@ -216,12 +220,12 @@ in {
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallErrorNumber = "EPERM";
|
||||
SystemCallFilter = ["@system-service"];
|
||||
SystemCallFilter = [ "@system-service" ];
|
||||
Type = "simple";
|
||||
UMask = 0027;
|
||||
UMask = 27;
|
||||
};
|
||||
restartTriggers = [settingsFileUnsubstituted];
|
||||
restartTriggers = [ settingsFileUnsubstituted ];
|
||||
};
|
||||
};
|
||||
meta.maintainers = with lib.maintainers; [frederictobiasc];
|
||||
meta.maintainers = with lib.maintainers; [ frederictobiasc ];
|
||||
}
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.mjolnir;
|
||||
|
||||
@@ -23,8 +28,15 @@ let
|
||||
};
|
||||
|
||||
moduleConfigFile = pkgs.writeText "module-config.yaml" (
|
||||
lib.generators.toYAML { } (lib.filterAttrs (_: v: v != null)
|
||||
(lib.fold lib.recursiveUpdate { } [ yamlConfig cfg.settings ])));
|
||||
lib.generators.toYAML { } (
|
||||
lib.filterAttrs (_: v: v != null) (
|
||||
lib.fold lib.recursiveUpdate { } [
|
||||
yamlConfig
|
||||
cfg.settings
|
||||
]
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
# these config files will be merged one after the other to build the final config
|
||||
configFiles = [
|
||||
@@ -36,7 +48,9 @@ let
|
||||
# replace all secret strings using replace-secret
|
||||
generateConfig = pkgs.writeShellScript "mjolnir-generate-config" (
|
||||
let
|
||||
yqEvalStr = lib.concatImapStringsSep " * " (pos: _: "select(fileIndex == ${toString (pos - 1)})") configFiles;
|
||||
yqEvalStr = lib.concatImapStringsSep " * " (
|
||||
pos: _: "select(fileIndex == ${toString (pos - 1)})"
|
||||
) configFiles;
|
||||
yqEvalArgs = lib.concatStringsSep " " configFiles;
|
||||
in
|
||||
''
|
||||
@@ -190,15 +204,20 @@ in
|
||||
# which breaks older configs using pantalaimon or access tokens
|
||||
services.mjolnir.settings.encryption.use = lib.mkDefault false;
|
||||
|
||||
services.pantalaimon-headless.instances."mjolnir" = lib.mkIf cfg.pantalaimon.enable
|
||||
{
|
||||
services.pantalaimon-headless.instances."mjolnir" =
|
||||
lib.mkIf cfg.pantalaimon.enable {
|
||||
homeserver = cfg.homeserverUrl;
|
||||
} // cfg.pantalaimon.options;
|
||||
}
|
||||
// cfg.pantalaimon.options;
|
||||
|
||||
systemd.services.mjolnir = {
|
||||
description = "mjolnir - a moderation tool for Matrix";
|
||||
wants = [ "network-online.target" ] ++ lib.optionals (cfg.pantalaimon.enable) [ "pantalaimon-mjolnir.service" ];
|
||||
after = [ "network-online.target" ] ++ lib.optionals (cfg.pantalaimon.enable) [ "pantalaimon-mjolnir.service" ];
|
||||
wants = [
|
||||
"network-online.target"
|
||||
] ++ lib.optionals (cfg.pantalaimon.enable) [ "pantalaimon-mjolnir.service" ];
|
||||
after = [
|
||||
"network-online.target"
|
||||
] ++ lib.optionals (cfg.pantalaimon.enable) [ "pantalaimon-mjolnir.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
@@ -215,15 +234,16 @@ in
|
||||
User = "mjolnir";
|
||||
Restart = "on-failure";
|
||||
|
||||
/* TODO: wait for #102397 to be resolved. Then load secrets from $CREDENTIALS_DIRECTORY+"/NAME"
|
||||
DynamicUser = true;
|
||||
LoadCredential = [] ++
|
||||
lib.optionals (cfg.accessTokenFile != null) [
|
||||
"access_token:${cfg.accessTokenFile}"
|
||||
] ++
|
||||
lib.optionals (cfg.pantalaimon.passwordFile != null) [
|
||||
"pantalaimon_password:${cfg.pantalaimon.passwordFile}"
|
||||
];
|
||||
/*
|
||||
TODO: wait for #102397 to be resolved. Then load secrets from $CREDENTIALS_DIRECTORY+"/NAME"
|
||||
DynamicUser = true;
|
||||
LoadCredential = [] ++
|
||||
lib.optionals (cfg.accessTokenFile != null) [
|
||||
"access_token:${cfg.accessTokenFile}"
|
||||
] ++
|
||||
lib.optionals (cfg.pantalaimon.passwordFile != null) [
|
||||
"pantalaimon_password:${cfg.pantalaimon.passwordFile}"
|
||||
];
|
||||
*/
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user