text: #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;
  
    /* 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);
  
    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_);
  
    std::string config_file_;
  
    Json::Value config_;
  };
  }  // namespace waybar
  