28 lines
671 B
Nix
28 lines
671 B
Nix
|
{ lib }:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
{
|
||
|
# Figures out a valid Nix store name for the given path.
|
||
|
storeFileName = path:
|
||
|
let
|
||
|
# All characters that are considered safe. Note "-" is not
|
||
|
# included to avoid "-" followed by digit being interpreted as a
|
||
|
# version.
|
||
|
safeChars =
|
||
|
[ "+" "." "_" "?" "=" ]
|
||
|
++ lowerChars
|
||
|
++ upperChars
|
||
|
++ stringToCharacters "0123456789";
|
||
|
|
||
|
empties = l: genList (x: "") (length l);
|
||
|
|
||
|
unsafeInName = stringToCharacters (
|
||
|
replaceStrings safeChars (empties safeChars) path
|
||
|
);
|
||
|
|
||
|
safeName = replaceStrings unsafeInName (empties unsafeInName) path;
|
||
|
in
|
||
|
"hm_" + safeName;
|
||
|
}
|