libutil: return std::filesystem::path from XDG directory helpers#15311
Merged
Ericson2314 merged 1 commit intoNixOS:masterfrom Feb 21, 2026
Merged
libutil: return std::filesystem::path from XDG directory helpers#15311Ericson2314 merged 1 commit intoNixOS:masterfrom
std::filesystem::path from XDG directory helpers#15311Ericson2314 merged 1 commit intoNixOS:masterfrom
Conversation
std::filesystem::path from XDG directory helpers
0404992 to
b4cbdf6
Compare
`getCacheDir`, `getConfigDir`, `getDataDir`, `getStateDir`, and related functions now return `std::filesystem::path` and use `getEnvOs` for native OS string handling, letting callsites replace string concatenation with `operator/` and drop the ad-hoc `namespace nix::fs` alias from six CLI files. `expandTilde` is fixed to strip both `~` and `/` before joining with `operator/` (an absolute right-hand operand silently replaces the left-hand side), and `ExecutablePath` gains `parseAppend` for incremental `PATH` construction. Co-authored-by: Amaan Qureshi <git@amaanq.com>
b4cbdf6 to
6808bfa
Compare
Ericson2314
approved these changes
Feb 21, 2026
xokdvium
reviewed
Feb 21, 2026
| return {store.requireStoreObjectAccessor(storePath)}; | ||
| } else { | ||
| return SourcePath{getFSSourceAccessor(), CanonPath{path}}.resolveSymlinks(); | ||
| return SourcePath{makeFSSourceAccessor(path)}.resolveSymlinks(); |
Contributor
There was a problem hiding this comment.
As in, this breaks symlinks that themselves point to an absolute path/escape the root of the accessor
Member
There was a problem hiding this comment.
Oh good point, thanks and sorry. We can add a functional test.
xokdvium
reviewed
Feb 21, 2026
Comment on lines
+89
to
+90
| auto suffix = path.size() >= 2 ? std::string(path.substr(2)) : std::string{}; | ||
| return (getHome() / suffix).string(); |
Contributor
There was a problem hiding this comment.
Not sure this behaves correctly when suffix ends up being an empty string tho.
Contributor
There was a problem hiding this comment.
Like, we could end up with an extra trailing slash.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
getCacheDir,getConfigDir,getDataDir,getStateDir, and related functions now returnstd::filesystem::pathand usegetEnvOsfor native OS string handling, letting callsites replace string concatenation withoperator/and drop the ad-hocnamespace nix::fsalias from six CLI files.expandTildeis fixed to strip both~and/before joining withoperator/(an absolute right-hand operand silently replaces the left-hand side), andExecutablePathgainsparseAppendfor incrementalPATHconstruction.Add 👍 to pull requests you find important.
The Nix maintainer team uses a GitHub project board to schedule and track reviews.