diff --git a/lib/meat.ml b/lib/meat.ml index 1e6c13d..188a176 100644 --- a/lib/meat.ml +++ b/lib/meat.ml @@ -44,7 +44,7 @@ let cook () = let poke () = print_string header; meat_print "PREPARING SUSPICIOUS MEATS.."; - do_cmd "nh os build --show-trace"; + do_cmd "nh os build -- --show-trace"; print_string footer let gut () = @@ -64,16 +64,15 @@ let look () = (* let all_flag () = Array.mem "-a" argv || Array.mem "--all" argv let sub_flag () = Array.mem "-s" argv || Array.mem "--subflake" argv *) -let all_flag () = if Array.length argv >= 3 then match Array.get argv 2 with - | "-a" | "--all" -> true - | _ -> false -else - false -let sub_flag () = if Array.length argv >= 3 then match Array.get argv 2 with - | "-s" | "--sub" -> true - | _ -> false -else - false +let all_flag () = + if Array.length argv >= 3 then + match Array.get argv 2 with "-a" | "--all" -> true | _ -> false + else false + +let sub_flag () = + if Array.length argv >= 3 then + match Array.get argv 2 with "-s" | "--sub" -> true | _ -> false + else false let derelativise base = List.map (fun a -> base ^ "/" ^ a) @@ -84,15 +83,16 @@ let filter_dirs fullpath dirs = let readdir d = try Sys.readdir d with Sys_error _ -> [||] let walk entry = + let open List in let rec loop dir : string list = let contents = readdir dir |> Array.to_list in - let is_flake = List.mem "flake.nix" contents in + let is_flake = mem "flake.nix" contents in if dir = entry then let subdirs = contents |> filter_dirs dir in - List.flatten (List.map loop subdirs) + flatten (map loop subdirs) else if is_flake then let subdirs = contents |> filter_dirs dir in - let children = List.flatten (List.map loop subdirs) in + let children = flatten (map loop subdirs) in [ dir ] @ children else [] in @@ -125,15 +125,15 @@ let fresh () = (match (sub_flag (), all_flag ()) with | false, false -> (* no flags, plain flake inputs *) - (if argv_len > 3 then - let flakes = Array.sub argv 2 (argv_len - 2) in + if argv_len >= 3 then + let open Array in + let flakes = sub argv 2 (argv_len - 2) in flakes - |> Array.iter (fun f -> - meat_print ("PROCESSING FRESH MEAT " ^ all_caps f ^ ".."); - do_cmd ~args:false - ("nix flake update " ^ all_low f ^ " --flake $NH_FLAKE")); - else - do_cmd ("nix flake update --flake $NH_FLAKE")) + |> iter (fun f -> + if all_low f = "meat" then meat_print "PROCESSING REAL MEAT.." + else meat_print ("PROCESSING FRESH MEAT " ^ all_caps f ^ ".."); + do_cmd ~args:false ("nix flake update " ^ f ^ " --flake " ^ root)) + else do_cmd ("nix flake update --flake " ^ root) | _, true -> (* all flag, update all subflakes and main flake inputs *) walk base_dir |> List.sort compdepth |> List.rev |> submeats; @@ -143,17 +143,18 @@ let fresh () = | true, _ when argv_len >= 4 -> (* sub flag, update inputs as subflakes *) let subflakes = - (match argv_len with + match argv_len with | 4 -> [ argv.(3) ] - | _ -> Array.sub argv 4 (argv_len - 4) |> Array.to_list) + | _ -> Array.sub argv 4 (argv_len - 4) |> Array.to_list in + let open List in let sf_full = subflakes |> derelativise base_dir in - sf_full |> List.map walk |> List.flatten |> List.sort compdepth - |> List.rev |> List.append sf_full |> submeats; + sf_full |> map walk |> flatten |> sort compdepth |> rev |> append sf_full + |> submeats; print_string footer; meat_print "PROCESSING FRESH MEATS.."; subflakes - |> List.iter (fun f -> + |> iter (fun f -> do_cmd ~args:false ("nix flake update " ^ all_low f ^ " --flake $NH_FLAKE")) | _ -> print_string help);