require config path via cli, remove env var

This commit is contained in:
Charles Hall 2024-06-06 21:34:51 -07:00
parent 3650fde0ac
commit 9b115b4110
No known key found for this signature in database
GPG key ID: 7B8E0645816E07CF
4 changed files with 11 additions and 23 deletions

View file

@ -85,17 +85,12 @@ in
systemd.services.grapevine = {
description = "Grapevine (Matrix homeserver)";
wantedBy = [ "multi-user.target" ];
environment = lib.mkMerge [
{
GRAPEVINE_CONFIG = configFile;
}
cfg.extraEnvironment
];
environment = cfg.extraEnvironment;
# Keep sorted
serviceConfig = {
DynamicUser = true;
ExecStart = "${lib.getExe cfg.package}";
ExecStart = "${lib.getExe cfg.package} --config ${configFile}";
LockPersonality = true;
MemoryDenyWriteExecute = true;
PrivateDevices = true;

View file

@ -1,11 +1,17 @@
//! Integration with `clap`
use std::path::PathBuf;
use clap::Parser;
/// Command line arguments
#[derive(Parser)]
#[clap(about, version = crate::version())]
pub(crate) struct Args;
pub(crate) struct Args {
/// Path to the configuration file
#[clap(long, short)]
pub(crate) config: PathBuf,
}
/// Parse command line arguments into structured data
pub(crate) fn parse() -> Args {

View file

@ -38,13 +38,6 @@ impl fmt::Display for DisplayWithSources<'_> {
#[allow(missing_docs)]
#[derive(Error, Debug)]
pub(crate) enum Main {
#[error(
"the `{0}` environment variable must either be set to a configuration \
file path or set to an empty string to force configuration through \
environment variables"
)]
ConfigPathUnset(&'static str),
#[error("invalid configuration")]
ConfigInvalid(#[from] figment::Error),

View file

@ -108,17 +108,11 @@ async fn main() -> ExitCode {
async fn try_main() -> Result<(), error::Main> {
use error::Main as Error;
args::parse();
let args = args::parse();
// Initialize config
let raw_config = Figment::new()
.merge(
Toml::file({
let name = "GRAPEVINE_CONFIG";
Env::var(name).ok_or(Error::ConfigPathUnset(name))?
})
.nested(),
)
.merge(Toml::file(&args.config).nested())
.merge(Env::prefixed("GRAPEVINE_").global());
let config = raw_config.extract::<Config>()?;