| @@ -0,0 +1,16 @@ | |||
| #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 | |||
| @@ -0,0 +1,56 @@ | |||
| #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 | |||
| @@ -0,0 +1,27 @@ | |||
| #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 | |||
| @@ -0,0 +1,45 @@ | |||
| #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 | |||