build.nix (1884B)
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | ## Builder Functions ## lib: let inherit (builtins) concatStringsSep filter hasAttr listToAttrs map readFile ; inherit (lib) flatten hasPrefix mapAttrsToList nameValuePair replaceStrings splitString ; in { # Mime Types Handler mime = option: listToAttrs ( flatten ( mapAttrsToList ( name: types: if hasAttr name option then map (type: nameValuePair type option."${name}") types else [] ) (import ./_mime.nix) ) ); # Script Builder script = file: concatStringsSep "\n" ( (filter (line: line != "" && !(hasPrefix "#!" line))) (splitString "\n" (readFile file)) ); # Theme Substituter theme = { accent ? "base0D", colors ? null, fonts ? null, file, }: let color = [ "@accent" "@white" "@base00" "@base01" "@base02" "@base03" "@base04" "@base05" "@base06" "@base07" "@base08" "@base09" "@base0A" "@base0B" "@base0C" "@base0D" "@base0E" "@base0F" ]; color' = with colors; [ colors."${accent}" "FFFFFF" base00 base01 base02 base03 base04 base05 base06 base07 base08 base09 base0A base0B base0C base0D base0E base0F ]; font = [ "@font" "@monospace" ]; font' = with fonts; [ sansSerif.name monospace.name ]; in if (colors != null && fonts != null) then replaceStrings (color ++ font) (color' ++ font') file else if (colors != null) then replaceStrings color color' file else if (fonts != null) then replaceStrings font font' file else throw "One of 'colors' or 'fonts' must be declared"; } |