Merge pull request #96316 from aanderse/redmine
nixos/redmine: replace extraConfig option with settings option
This commit is contained in:
commit
af25b37814
@ -1,12 +1,12 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (lib) mkDefault mkEnableOption mkIf mkOption types;
|
inherit (lib) mkBefore mkDefault mkEnableOption mkIf mkOption mkRemovedOptionModule types;
|
||||||
inherit (lib) concatStringsSep literalExample mapAttrsToList;
|
inherit (lib) concatStringsSep literalExample mapAttrsToList;
|
||||||
inherit (lib) optional optionalAttrs optionalString singleton versionAtLeast;
|
inherit (lib) optional optionalAttrs optionalString;
|
||||||
|
|
||||||
cfg = config.services.redmine;
|
cfg = config.services.redmine;
|
||||||
|
format = pkgs.formats.yaml {};
|
||||||
bundle = "${cfg.package}/share/redmine/bin/bundle";
|
bundle = "${cfg.package}/share/redmine/bin/bundle";
|
||||||
|
|
||||||
databaseYml = pkgs.writeText "database.yml" ''
|
databaseYml = pkgs.writeText "database.yml" ''
|
||||||
@ -20,24 +20,8 @@ let
|
|||||||
${optionalString (cfg.database.type == "mysql2" && cfg.database.socket != null) "socket: ${cfg.database.socket}"}
|
${optionalString (cfg.database.type == "mysql2" && cfg.database.socket != null) "socket: ${cfg.database.socket}"}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
configurationYml = pkgs.writeText "configuration.yml" ''
|
configurationYml = format.generate "configuration.yml" cfg.settings;
|
||||||
default:
|
additionalEnvironment = pkgs.writeText "additional_environment.rb" cfg.extraEnv;
|
||||||
scm_subversion_command: ${pkgs.subversion}/bin/svn
|
|
||||||
scm_mercurial_command: ${pkgs.mercurial}/bin/hg
|
|
||||||
scm_git_command: ${pkgs.gitAndTools.git}/bin/git
|
|
||||||
scm_cvs_command: ${pkgs.cvs}/bin/cvs
|
|
||||||
scm_bazaar_command: ${pkgs.breezy}/bin/bzr
|
|
||||||
scm_darcs_command: ${pkgs.darcs}/bin/darcs
|
|
||||||
|
|
||||||
${cfg.extraConfig}
|
|
||||||
'';
|
|
||||||
|
|
||||||
additionalEnvironment = pkgs.writeText "additional_environment.rb" ''
|
|
||||||
config.logger = Logger.new("${cfg.stateDir}/log/production.log", 14, 1048576)
|
|
||||||
config.logger.level = Logger::INFO
|
|
||||||
|
|
||||||
${cfg.extraEnv}
|
|
||||||
'';
|
|
||||||
|
|
||||||
unpackTheme = unpack "theme";
|
unpackTheme = unpack "theme";
|
||||||
unpackPlugin = unpack "plugin";
|
unpackPlugin = unpack "plugin";
|
||||||
@ -56,8 +40,13 @@ let
|
|||||||
pgsqlLocal = cfg.database.createLocally && cfg.database.type == "postgresql";
|
pgsqlLocal = cfg.database.createLocally && cfg.database.type == "postgresql";
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
|
imports = [
|
||||||
|
(mkRemovedOptionModule [ "services" "redmine" "extraConfig" ] "Use services.redmine.settings instead.")
|
||||||
|
(mkRemovedOptionModule [ "services" "redmine" "database" "password" ] "Use services.redmine.database.passwordFile instead.")
|
||||||
|
];
|
||||||
|
|
||||||
|
# interface
|
||||||
options = {
|
options = {
|
||||||
services.redmine = {
|
services.redmine = {
|
||||||
enable = mkEnableOption "Redmine";
|
enable = mkEnableOption "Redmine";
|
||||||
@ -93,21 +82,24 @@ in
|
|||||||
description = "The state directory, logs and plugins are stored here.";
|
description = "The state directory, logs and plugins are stored here.";
|
||||||
};
|
};
|
||||||
|
|
||||||
extraConfig = mkOption {
|
settings = mkOption {
|
||||||
type = types.lines;
|
type = format.type;
|
||||||
default = "";
|
default = {};
|
||||||
description = ''
|
description = ''
|
||||||
Extra configuration in configuration.yml.
|
Redmine configuration (<filename>configuration.yml</filename>). Refer to
|
||||||
|
<link xlink:href="https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration"/>
|
||||||
See <link xlink:href="https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration"/>
|
|
||||||
for details.
|
for details.
|
||||||
'';
|
'';
|
||||||
example = literalExample ''
|
example = literalExample ''
|
||||||
email_delivery:
|
{
|
||||||
delivery_method: smtp
|
email_delivery = {
|
||||||
smtp_settings:
|
delivery_method = "smtp";
|
||||||
address: mail.example.com
|
smtp_settings = {
|
||||||
port: 25
|
address = "mail.example.com";
|
||||||
|
port = 25;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -186,16 +178,6 @@ in
|
|||||||
description = "Database user.";
|
description = "Database user.";
|
||||||
};
|
};
|
||||||
|
|
||||||
password = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "";
|
|
||||||
description = ''
|
|
||||||
The password corresponding to <option>database.user</option>.
|
|
||||||
Warning: this is stored in cleartext in the Nix store!
|
|
||||||
Use <option>database.passwordFile</option> instead.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
passwordFile = mkOption {
|
passwordFile = mkOption {
|
||||||
type = types.nullOr types.path;
|
type = types.nullOr types.path;
|
||||||
default = null;
|
default = null;
|
||||||
@ -226,11 +208,12 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# implementation
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
assertions = [
|
assertions = [
|
||||||
{ assertion = cfg.database.passwordFile != null || cfg.database.password != "" || cfg.database.socket != null;
|
{ assertion = cfg.database.passwordFile != null || cfg.database.socket != null;
|
||||||
message = "one of services.redmine.database.socket, services.redmine.database.passwordFile, or services.redmine.database.password must be set";
|
message = "one of services.redmine.database.socket or services.redmine.database.passwordFile must be set";
|
||||||
}
|
}
|
||||||
{ assertion = cfg.database.createLocally -> cfg.database.user == cfg.user;
|
{ assertion = cfg.database.createLocally -> cfg.database.user == cfg.user;
|
||||||
message = "services.redmine.database.user must be set to ${cfg.user} if services.redmine.database.createLocally is set true";
|
message = "services.redmine.database.user must be set to ${cfg.user} if services.redmine.database.createLocally is set true";
|
||||||
@ -243,6 +226,22 @@ in
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
services.redmine.settings = {
|
||||||
|
production = {
|
||||||
|
scm_subversion_command = "${pkgs.subversion}/bin/svn";
|
||||||
|
scm_mercurial_command = "${pkgs.mercurial}/bin/hg";
|
||||||
|
scm_git_command = "${pkgs.gitAndTools.git}/bin/git";
|
||||||
|
scm_cvs_command = "${pkgs.cvs}/bin/cvs";
|
||||||
|
scm_bazaar_command = "${pkgs.breezy}/bin/bzr";
|
||||||
|
scm_darcs_command = "${pkgs.darcs}/bin/darcs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.redmine.extraEnv = mkBefore ''
|
||||||
|
config.logger = Logger.new("${cfg.stateDir}/log/production.log", 14, 1048576)
|
||||||
|
config.logger.level = Logger::INFO
|
||||||
|
'';
|
||||||
|
|
||||||
services.mysql = mkIf mysqlLocal {
|
services.mysql = mkIf mysqlLocal {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = mkDefault pkgs.mariadb;
|
package = mkDefault pkgs.mariadb;
|
||||||
@ -338,7 +337,7 @@ in
|
|||||||
|
|
||||||
|
|
||||||
# handle database.passwordFile & permissions
|
# handle database.passwordFile & permissions
|
||||||
DBPASS=$(head -n1 ${cfg.database.passwordFile})
|
DBPASS=${optionalString (cfg.database.passwordFile != null) "$(head -n1 ${cfg.database.passwordFile})"}
|
||||||
cp -f ${databaseYml} "${cfg.stateDir}/config/database.yml"
|
cp -f ${databaseYml} "${cfg.stateDir}/config/database.yml"
|
||||||
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
||||||
chmod 440 "${cfg.stateDir}/config/database.yml"
|
chmod 440 "${cfg.stateDir}/config/database.yml"
|
||||||
@ -379,17 +378,6 @@ in
|
|||||||
redmine.gid = config.ids.gids.redmine;
|
redmine.gid = config.ids.gids.redmine;
|
||||||
};
|
};
|
||||||
|
|
||||||
warnings = optional (cfg.database.password != "")
|
|
||||||
''config.services.redmine.database.password will be stored as plaintext
|
|
||||||
in the Nix store. Use database.passwordFile instead.'';
|
|
||||||
|
|
||||||
# Create database passwordFile default when password is configured.
|
|
||||||
services.redmine.database.passwordFile =
|
|
||||||
(mkDefault (toString (pkgs.writeTextFile {
|
|
||||||
name = "redmine-database-password";
|
|
||||||
text = cfg.database.password;
|
|
||||||
})));
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user