46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <json/json.h>
|
|
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
#ifndef SYSCONFDIR
|
|
#define SYSCONFDIR "/etc"
|
|
#endif
|
|
|
|
namespace waybar {
|
|
|
|
class Config {
|
|
public:
|
|
static const std::vector<std::string> CONFIG_DIRS;
|
|
static const char* CONFIG_PATH_ENV;
|
|
|
|
/* Try to find any of provided names in the supported set of config directories */
|
|
static std::optional<std::string> findConfigPath(
|
|
const std::vector<std::string>& names, const std::vector<std::string>& dirs = CONFIG_DIRS);
|
|
|
|
static std::vector<std::string> tryExpandPath(const std::string& base,
|
|
const std::string& filename);
|
|
|
|
Config() = default;
|
|
|
|
void load(const std::string& config);
|
|
|
|
Json::Value& getConfig() { return config_; }
|
|
|
|
std::vector<Json::Value> getOutputConfigs(const std::string& name, const std::string& identifier);
|
|
|
|
private:
|
|
void setupConfig(Json::Value& dst, const std::string& config_file, int depth);
|
|
void resolveConfigIncludes(Json::Value& config, int depth);
|
|
void mergeConfig(Json::Value& a_config_, Json::Value& b_config_);
|
|
static std::vector<std::string> findIncludePath(
|
|
const std::string& name, const std::vector<std::string>& dirs = CONFIG_DIRS);
|
|
|
|
std::string config_file_;
|
|
|
|
Json::Value config_;
|
|
};
|
|
} // namespace waybar
|