{ config, lib, ... }: let cfg = config.my.cli.shell.starship; in { options.my.cli.shell.starship = { enable = lib.mkEnableOption "starship prompt"; format = lib.mkOption { type = with lib.types; listOf singleLineStr; }; }; config = lib.mkMerge [ (lib.mkIf cfg.enable { my.hm = { programs.starship = { enable = true; settings = lib.recursiveUpdate (with builtins; fromTOML (readFile ./starship-preset.toml)) { add_newline = false; command_timeout = 2000; nix_shell.disabled = true; format = let dedupDollar = list: let result = builtins.foldl' ( acc: elem: if lib.hasPrefix "$" elem then if builtins.elem elem acc.seen then acc else acc // { result = acc.result ++ [ elem ]; seen = acc.seen ++ [ elem ]; } else acc // { result = acc.result ++ [ elem ]; } ) { result = [ ]; seen = [ ]; } (lib.reverseList list); in lib.reverseList result.result; in "$all" + lib.concatStrings (dedupDollar cfg.format); }; }; }; }) ]; }