mirror of
https://github.com/sstent/vmimages.git
synced 2025-12-06 06:01:51 +00:00
123 lines
3.5 KiB
Nix
123 lines
3.5 KiB
Nix
# {lib, ...}: let
|
|
# inherit
|
|
# (builtins)
|
|
# attrNames
|
|
# attrValues
|
|
# foldl'
|
|
# isPath
|
|
# pathExists
|
|
# readDir
|
|
# toString
|
|
# ;
|
|
|
|
# inherit
|
|
# (lib)
|
|
# flatten
|
|
# filterAttrs
|
|
# forEach
|
|
# getAttrFromPath
|
|
# hasPrefix
|
|
# hasSuffix
|
|
# id
|
|
# mapAttrs'
|
|
# mapAttrsToList
|
|
# mkIf
|
|
# nameValuePair
|
|
# removeSuffix
|
|
# ;
|
|
# in rec {
|
|
# ## Mapping Functions ##
|
|
# array = list: func: forEach list (name: getAttrFromPath [name] func);
|
|
# filter = name: func: attrs: filterAttrs name (mapAttrs' func attrs);
|
|
# list = func: foldl' (x: y: x + y + " ") "" (attrNames func);
|
|
|
|
# ## Files Map
|
|
# # Top Level
|
|
# files = dir: func: extension:
|
|
# filter (name: type: type != null && !(hasPrefix "_" name)) (name: type: let
|
|
# path = "${toString dir}/${name}";
|
|
# in
|
|
# if
|
|
# (type == "directory" || type == "symlink")
|
|
# && (
|
|
# if (extension == ".nix")
|
|
# then pathExists "${path}/default.nix"
|
|
# else true
|
|
# )
|
|
# then nameValuePair name (func path)
|
|
# else if
|
|
# type
|
|
# == "regular"
|
|
# && (
|
|
# if (extension == ".nix")
|
|
# then name != "default.nix"
|
|
# else true
|
|
# )
|
|
# && hasSuffix extension name
|
|
# then nameValuePair (removeSuffix extension name) (func path)
|
|
# else nameValuePair "" null) (readDir dir);
|
|
|
|
# # Recursive
|
|
# files' = dir: func: extension:
|
|
# filter (name: type: type != null && !(hasPrefix "_" name)) (name: type: let
|
|
# path = "${toString dir}/${name}";
|
|
# in
|
|
# if (type == "directory" || type == "symlink")
|
|
# then nameValuePair name (files' path func)
|
|
# else if
|
|
# type
|
|
# == "regular"
|
|
# && (
|
|
# if (extension == ".nix")
|
|
# then name != "default.nix"
|
|
# else true
|
|
# )
|
|
# && hasSuffix extension name
|
|
# then nameValuePair (removeSuffix extension name) (func path)
|
|
# else nameValuePair "" null) (readDir dir);
|
|
|
|
# # Package Patches
|
|
# patches = patch:
|
|
# if isPath patch
|
|
# then
|
|
# flatten (mapAttrsToList (name: type:
|
|
# if
|
|
# type
|
|
# == "regular"
|
|
# && (hasSuffix ".diff" name || hasSuffix ".patch" name)
|
|
# then patch + "/${name}"
|
|
# else null) (readDir patch))
|
|
# else patch;
|
|
|
|
# # Module Imports
|
|
# module = dir: attrValues (modules dir id);
|
|
# module' = dir: attrNames (modules dir id);
|
|
# modules = dir: func: files dir func ".nix";
|
|
# modules' = dir: func: files' dir func ".nix";
|
|
|
|
# # 'sops' Encrypted Secrets
|
|
# secrets = dir: neededForUsers:
|
|
# filter (name: type: type != null && !(hasPrefix "_" name)) (name: type:
|
|
# if type == "regular" && hasSuffix ".secret" name
|
|
# then
|
|
# nameValuePair name {
|
|
# sopsFile = dir + "/${name}";
|
|
# format = "binary";
|
|
# inherit neededForUsers;
|
|
# }
|
|
# else nameValuePair "" null) (readDir dir);
|
|
|
|
|
|
# # 'sops' Encrypted Secrets
|
|
# hm_secrets = dir: out_dir:
|
|
# filter (name: type: type != null && !(hasPrefix "_" name)) (name: type:
|
|
# if type == "regular" && hasSuffix ".age" name
|
|
# then
|
|
# nameValuePair name {
|
|
# sopsFile = dir + "/${name}";
|
|
# format = "binary";
|
|
# path = out_dir + "/${name}";
|
|
|
|
# }
|
|
# else nameValuePair "" null) (readDir dir);
|
|
# } |