zaphyra's git: haumea

fork of https://github.com/nix-community/haumea

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
{ lib }:

let
  inherit (builtins)
    filter
    genList
    stringLength
    substring
    tail
    ;
  inherit (lib)
    hasPrefix
    hasSuffix
    id
    pipe
    last
    removePrefix
    ;
in

path: type:

let
  stripped = removePrefix "_" (removePrefix "_" path);
in

if stripped == "" then
  null
else {
  inherit stripped;

  name = {
    directory = stripped;

    regular =
      let
        dots = pipe stripped [
          stringLength
          (genList id)
          tail
          (filter (i: substring i 1 stripped == "."))
        ];
      in
      if hasSuffix "." stripped || dots == [ ] then
        stripped
      else
        substring 0 (last dots) stripped;
  }.${type};

  visibility =
    if hasPrefix "__" path then
      "super"
    else if hasPrefix "_" path then
      "root"
    else
      "public";
}