#pragma once | |||||
#include <dds/util/fs.hpp> | |||||
namespace dds { | |||||
fs::path user_home_dir(); | |||||
fs::path user_data_dir(); | |||||
fs::path user_cache_dir(); | |||||
fs::path user_config_dir(); | |||||
inline fs::path dds_data_dir() { return user_data_dir() / "ddslim"; } | |||||
inline fs::path dds_cache_dir() { return user_cache_dir() / "ddslim-cache"; } | |||||
inline fs::path dds_config_dir() { return user_config_dir() / "ddslim"; } | |||||
} // namespace dds |
#ifdef __linux__ | |||||
#include "./paths.hpp" | |||||
#include <spdlog/spdlog.h> | |||||
#include <cstdlib> | |||||
using namespace dds; | |||||
fs::path dds::user_home_dir() { | |||||
static auto ret = []() -> fs::path { | |||||
auto home_env = std::getenv("HOME"); | |||||
if (!home_env) { | |||||
spdlog::warn("No HOME environment variable set!"); | |||||
return "/"; | |||||
} | |||||
return fs::absolute(fs::path(home_env)); | |||||
}(); | |||||
return ret; | |||||
} | |||||
fs::path dds::user_data_dir() { | |||||
static auto ret = []() -> fs::path { | |||||
auto xdg_data_home = std::getenv("XDG_DATA_HOME"); | |||||
if (xdg_data_home) { | |||||
return fs::absolute(fs::path(xdg_data_home)); | |||||
} | |||||
return user_home_dir() / ".local/share"; | |||||
}(); | |||||
return ret; | |||||
} | |||||
fs::path dds::user_cache_dir() { | |||||
static auto ret = []() -> fs::path { | |||||
auto xdg_cache_home = std::getenv("XDG_CACHE_HOME"); | |||||
if (xdg_cache_home) { | |||||
return fs::absolute(fs::path(xdg_cache_home)); | |||||
} | |||||
return user_home_dir() / ".cache"; | |||||
}(); | |||||
return ret; | |||||
} | |||||
fs::path dds::user_config_dir() { | |||||
static auto ret = []() -> fs::path { | |||||
auto xdg_config_home = std::getenv("XDG_CONFIG_HOME"); | |||||
if (xdg_config_home) { | |||||
return fs::absolute(fs::path(xdg_config_home)); | |||||
} | |||||
return user_home_dir() / ".config"; | |||||
}(); | |||||
return ret; | |||||
} | |||||
#endif |
#ifdef __APPLE__ | |||||
#include "./paths.hpp" | |||||
#include <spdlog/spdlog.h> | |||||
#include <cstdlib> | |||||
using namespace dds; | |||||
fs::path dds::user_home_dir() { | |||||
static auto ret = []() -> fs::path { | |||||
auto home_env = std::getenv("HOME"); | |||||
if (!home_env) { | |||||
spdlog::warn("No HOME environment variable set!"); | |||||
return "/"; | |||||
} | |||||
return fs::absolute(fs::path(home_env)); | |||||
}(); | |||||
return ret; | |||||
} | |||||
fs::path dds::user_data_dir() { return user_home_dir() / "Library/Application Support"; } | |||||
fs::path dds::user_cache_dir() { return user_home_dir() / "Library/Caches"; } | |||||
fs::path dds::user_config_dir() { return user_home_dir() / "Preferences"; } | |||||
#endif |
#ifdef _WIN32 | |||||
#include "./paths.hpp" | |||||
#include <spdlog/spdlog.h> | |||||
#include <cstdlib> | |||||
using namespace dds; | |||||
fs::path dds::user_home_dir() { | |||||
static auto ret = []() -> fs::path { | |||||
auto userprofile_env = std::getenv("USERPROFILE"); | |||||
if (!userprofile_env) { | |||||
spdlog::warn("No USERPROFILE environment variable set!"); | |||||
return "/"; | |||||
} | |||||
return fs::absolute(fs::path(userprofile_env)); | |||||
}(); | |||||
return ret; | |||||
} | |||||
namespace { | |||||
fs::path appdatalocal_dir() { | |||||
auto env = std::getenv("LocalAppData"); | |||||
assert(env); | |||||
return fs::absolute(fs::path(env)); | |||||
} | |||||
fs::path appdata_dir() { | |||||
auto env = std::getenv("LocalAppData"); | |||||
assert(env); | |||||
return fs::absolute(fs::path(env)); | |||||
} | |||||
} // namespace | |||||
fs::path dds::user_data_dir() { return appdata_local_dir(); } | |||||
fs::path dds::user_cache_dir() { return appdata_local_dir(); } | |||||
fs::path dds::user_config_dir() { return appdata_dir(); } | |||||
#endif |