mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
zsh: lib better docstrings
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit is contained in:
parent
a1b7e7f510
commit
f49e872f55
1 changed files with 62 additions and 7 deletions
|
|
@ -5,10 +5,35 @@ in
|
||||||
rec {
|
rec {
|
||||||
homeDir = config.home.homeDirectory;
|
homeDir = config.home.homeDirectory;
|
||||||
|
|
||||||
# escapes for shell and cleans trailing slashes that can mess with test regex
|
/*
|
||||||
|
Escape a path string for shell usage and remove trailing slashes.
|
||||||
|
|
||||||
|
This function prepares path strings for safe shell usage by escaping
|
||||||
|
special characters and removing trailing slashes that can interfere
|
||||||
|
with test regex patterns.
|
||||||
|
|
||||||
|
Type: String -> String
|
||||||
|
|
||||||
|
Example:
|
||||||
|
cleanPathStr "/path/to/dir/" => "'/path/to/dir'"
|
||||||
|
cleanPathStr "path with spaces" => "'path with spaces'"
|
||||||
|
*/
|
||||||
cleanPathStr = pathStr: lib.escapeShellArg (lib.removeSuffix "/" pathStr);
|
cleanPathStr = pathStr: lib.escapeShellArg (lib.removeSuffix "/" pathStr);
|
||||||
|
|
||||||
# strips home directory prefix from absolute path.
|
/*
|
||||||
|
Convert an absolute path to a relative path by stripping the home directory prefix.
|
||||||
|
|
||||||
|
This function converts absolute paths within the home directory to relative paths
|
||||||
|
by removing the home directory prefix. Paths already relative are returned as-is.
|
||||||
|
Absolute paths outside the home directory cause an error.
|
||||||
|
|
||||||
|
Type: String -> String
|
||||||
|
|
||||||
|
Example:
|
||||||
|
mkRelPathStr "/home/user/config" => "'config'"
|
||||||
|
mkRelPathStr "config" => "'config'"
|
||||||
|
mkRelPathStr "/etc/config" => <error>
|
||||||
|
*/
|
||||||
mkRelPathStr =
|
mkRelPathStr =
|
||||||
pathStr:
|
pathStr:
|
||||||
# is already a relative path
|
# is already a relative path
|
||||||
|
|
@ -28,12 +53,36 @@ rec {
|
||||||
${homeDir}
|
${homeDir}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# given a relative (or unknown) path, returns absolute by prepending home dir
|
/*
|
||||||
# if path doesn't begin with "/"
|
Convert a relative path to an absolute path by prepending the home directory.
|
||||||
|
|
||||||
|
This function ensures paths are absolute by prepending the home directory
|
||||||
|
to relative paths. Already absolute paths are returned unchanged (after cleaning).
|
||||||
|
This function does NOT support shell variables.
|
||||||
|
|
||||||
|
Type: String -> String
|
||||||
|
|
||||||
|
Example:
|
||||||
|
mkAbsPathStr "config" => "'/home/user/config'"
|
||||||
|
mkAbsPathStr "/absolute/path" => "'/absolute/path'"
|
||||||
|
*/
|
||||||
mkAbsPathStr =
|
mkAbsPathStr =
|
||||||
pathStr: cleanPathStr ((lib.optionalString (!lib.hasPrefix "/" pathStr) "${homeDir}/") + pathStr);
|
pathStr: cleanPathStr ((lib.optionalString (!lib.hasPrefix "/" pathStr) "${homeDir}/") + pathStr);
|
||||||
|
|
||||||
# For shell variable paths like history.path that get expanded at runtime
|
/*
|
||||||
|
Convert a path to absolute form while preserving shell variables for runtime expansion.
|
||||||
|
|
||||||
|
This function handles both literal paths and shell variable expressions.
|
||||||
|
Shell variables (containing '$') are preserved unescaped to allow runtime expansion.
|
||||||
|
Literal paths are made absolute and properly escaped for shell usage.
|
||||||
|
|
||||||
|
Type: String -> String
|
||||||
|
|
||||||
|
Example:
|
||||||
|
mkShellVarPathStr "config" => "'/home/user/config'"
|
||||||
|
mkShellVarPathStr "$HOME/config" => "$HOME/config"
|
||||||
|
mkShellVarPathStr "\${XDG_CONFIG_HOME:-$HOME/.config}/app" => "\${XDG_CONFIG_HOME:-$HOME/.config}/app"
|
||||||
|
*/
|
||||||
mkShellVarPathStr =
|
mkShellVarPathStr =
|
||||||
pathStr:
|
pathStr:
|
||||||
let
|
let
|
||||||
|
|
@ -50,7 +99,13 @@ rec {
|
||||||
dotDirAbs = mkAbsPathStr cfg.dotDir;
|
dotDirAbs = mkAbsPathStr cfg.dotDir;
|
||||||
dotDirRel = mkRelPathStr cfg.dotDir;
|
dotDirRel = mkRelPathStr cfg.dotDir;
|
||||||
|
|
||||||
# If dotDir is default (i.e., the user's home dir) plugins are stored in
|
/*
|
||||||
# ~/.zsh/plugins -- otherwise, in `programs.zsh.dotDir`/plugins
|
Determine the plugins directory path based on dotDir configuration.
|
||||||
|
|
||||||
|
If dotDir is the default (user's home directory), plugins are stored in
|
||||||
|
~/.zsh/plugins. Otherwise, they are stored in `dotDir`/plugins.
|
||||||
|
|
||||||
|
Type: String
|
||||||
|
*/
|
||||||
pluginsDir = dotDirAbs + (lib.optionalString (homeDir == dotDirAbs) "/.zsh") + "/plugins";
|
pluginsDir = dotDirAbs + (lib.optionalString (homeDir == dotDirAbs) "/.zsh") + "/plugins";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue