mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-28 16:46:16 +02:00
02fa20622f
This splits files and adds new identifiers in preperation for supporting windows, but no Windows-specific code is actually added yet. Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
61 lines
1.3 KiB
C++
61 lines
1.3 KiB
C++
#include "util.hh"
|
|
#include "users.hh"
|
|
#include "environment-variables.hh"
|
|
#include "file-system.hh"
|
|
|
|
namespace nix {
|
|
|
|
Path getCacheDir()
|
|
{
|
|
auto cacheDir = getEnv("XDG_CACHE_HOME");
|
|
return cacheDir ? *cacheDir : getHome() + "/.cache";
|
|
}
|
|
|
|
|
|
Path getConfigDir()
|
|
{
|
|
auto configDir = getEnv("XDG_CONFIG_HOME");
|
|
return configDir ? *configDir : getHome() + "/.config";
|
|
}
|
|
|
|
std::vector<Path> getConfigDirs()
|
|
{
|
|
Path configHome = getConfigDir();
|
|
auto configDirs = getEnv("XDG_CONFIG_DIRS").value_or("/etc/xdg");
|
|
std::vector<Path> result = tokenizeString<std::vector<std::string>>(configDirs, ":");
|
|
result.insert(result.begin(), configHome);
|
|
return result;
|
|
}
|
|
|
|
|
|
Path getDataDir()
|
|
{
|
|
auto dataDir = getEnv("XDG_DATA_HOME");
|
|
return dataDir ? *dataDir : getHome() + "/.local/share";
|
|
}
|
|
|
|
Path getStateDir()
|
|
{
|
|
auto stateDir = getEnv("XDG_STATE_HOME");
|
|
return stateDir ? *stateDir : getHome() + "/.local/state";
|
|
}
|
|
|
|
Path createNixStateDir()
|
|
{
|
|
Path dir = getStateDir() + "/nix";
|
|
createDirs(dir);
|
|
return dir;
|
|
}
|
|
|
|
|
|
std::string expandTilde(std::string_view path)
|
|
{
|
|
// TODO: expand ~user ?
|
|
auto tilde = path.substr(0, 2);
|
|
if (tilde == "~/" || tilde == "~")
|
|
return getHome() + std::string(path.substr(1));
|
|
else
|
|
return std::string(path);
|
|
}
|
|
|
|
}
|