be5a0b8202
Reads $XDG_CONFIG_HOME/slocker-lite/config.yaml (falling back to $HOME/.config/slocker-lite/config.yaml), organized into sections. Only the "global" section's log-level is supported for now -- other options are one-shot flags, not standing preferences. An explicit --log-level on the command line always overrides the config file, the same way SPDLOG_LEVEL already does. Uses libyaml directly (yaml_dep was already declared in meson.build but unused). A missing config file isn't an error; unknown sections/keys are ignored for forward-compatibility; malformed YAML syntax is a hard error. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gv3s5jckJKzh6JkMoi2Akz
40 lines
1.7 KiB
C++
40 lines
1.7 KiB
C++
// Copyright (C) 2026 Viorel Munteanu
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License along
|
|
// with this program; if not, write to the Free Software Foundation, Inc.,
|
|
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
#pragma once
|
|
|
|
#include <filesystem>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
// Fields that make sense to persist across invocations (one-shot flags like
|
|
// -m/-r/--user don't belong here). Only the "global" section's log-level is
|
|
// supported today; add more optional fields as more long options gain config-file
|
|
// support.
|
|
struct AppConfig {
|
|
std::optional<std::string> log_level; // global.log-level
|
|
};
|
|
|
|
// $XDG_CONFIG_HOME/slocker-lite/config.yaml, or $HOME/.config/slocker-lite/config.yaml
|
|
// if XDG_CONFIG_HOME is unset/empty.
|
|
std::filesystem::path config_file_path();
|
|
|
|
// Loads and parses `path`'s "global" section. A missing file is not an error --
|
|
// returns a default-constructed AppConfig (nothing set). Unknown sections/keys are
|
|
// ignored, so the format stays forward-compatible. Malformed YAML syntax logs a
|
|
// specific error and returns nullopt.
|
|
std::optional<AppConfig> load_config_file(const std::filesystem::path& path);
|