main
  1{
  2  den.aspects.services.mihomo.proxy-groups = {
  3    nixos = {
  4      services.mihomo = {
  5        config = {
  6          proxy-groups = let
  7            nonsenseKeywords = "回国|校园|网站|地址|剩余|过期|时间|有效|网址|禁止|邮箱|发布|客服|订阅|节点";
  8
  9            filterHK = "^(?=.*((?i)🇭🇰|香港|\\b(HK|Hong)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 10            filterTW = "^(?=.*((?i)🇹🇼|台湾|\\b(TW|Tai|Taiwan)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 11            filterJP = "^(?=.*((?i)🇯🇵|日本|川日|东京|大阪|泉日|埼玉|\\b(JP|Japan)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 12            filterKR = "^(?=.*((?i)🇰🇷|韩国|韓|首尔|\\b(KR|Korea)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 13            filterSG = "^(?=.*((?i)🇸🇬|新加坡|狮|\\b(SG|Singapore)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 14            filterUS = "^(?=.*((?i)🇺🇸|美国|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥|\\b(US|United States)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 15            filterUK = "^(?=.*((?i)🇬🇧|英国|伦敦|\\b(UK|United Kingdom)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 16            filterFR = "^(?=.*((?i)🇫🇷|法国|\\b(FR|France)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 17            filterDE = "^(?=.*((?i)🇩🇪|德国|\\b(DE|Germany)(\\d+)?\\b))(?!.*((?i)${nonsenseKeywords})).*$";
 18            filterOthers = "^(?!.*(🇭🇰|HK|Hong|香港|🇹🇼|TW|Taiwan|Wan|🇯🇵|JP|Japan|日本|🇸🇬|SG|Singapore|狮城|🇺🇸|US|United States|America|美国|🇩🇪|DE|Germany|德国|🇬🇧|UK|United Kingdom|英国|🇰🇷|KR|Korea|韩国|韓|🇫🇷|FR|France|法国)).*$";
 19            filterAll = "^(?=.*(.))(?!.*((?i)群|邀请|返利|循环|官网|客服|网站|网址|获取|订阅|流量|到期|机场|下次|版本|官址|备用|过期|已用|联系|邮箱|工单|贩卖|通知|倒卖|防止|国内|地址|频道|无法|说明|使用|提示|特别|访问|支持|教程|关注|更新|作者|加入|(\\b(USE|USED|TOTAL|EXPIRE|EMAIL|Panel|Channel|Author)\\b|(\\d{4}-\\d{2}-\\d{2}|\\d+G)))).*$";
 20
 21            select = {
 22              type = "select";
 23              url = "https://connectivitycheck.platform.hicloud.com/generate_204";
 24              disable-udp = false;
 25              hidden = false;
 26              include-all = true;
 27            };
 28            urlTest = {
 29              type = "url-test";
 30              url = "https://connectivitycheck.platform.hicloud.com/generate_204";
 31              interval = 300;
 32              tolerance = 50;
 33              disable-udp = false;
 34              hidden = true;
 35              include-all = true;
 36            };
 37
 38            regions = {
 39              HK.filter = filterHK;
 40              TW.filter = filterTW;
 41              JP.filter = filterJP;
 42              KR.filter = filterKR;
 43              SG.filter = filterSG;
 44              US.filter = filterUS;
 45              UK.filter = filterUK;
 46              FR.filter = filterFR;
 47              DE.filter = filterDE;
 48            };
 49          in
 50            [
 51              {
 52                name = "SELECT";
 53                type = "select";
 54                proxies = ["AUTO" "MANUAL" "DIRECT"];
 55                url = "http://connectivitycheck.platform.hicloud.com/generate_204";
 56                icon = "https://raw.githubusercontent.com/Orz-3/mini/master/Color/Static.png";
 57              }
 58              {
 59                name = "MANUAL";
 60                type = "select";
 61                proxies =
 62                  ["AllIn - MANUAL"]
 63                  ++ (map (x: "${x} - MANUAL") (builtins.attrNames regions))
 64                  ++ ["Others - MANUAL"];
 65                url = "http://connectivitycheck.platform.hicloud.com/generate_204";
 66                icon = "https://raw.githubusercontent.com/Orz-3/mini/master/Color/Cylink.png";
 67              }
 68              {
 69                name = "AUTO";
 70                type = "select";
 71                proxies = ["AllIn - AUTO"] ++ (map (x: "${x} - AUTO") (builtins.attrNames regions));
 72                url = "http://connectivitycheck.platform.hicloud.com/generate_204";
 73                icon = "https://raw.githubusercontent.com/Orz-3/mini/master/Color/Urltest.png";
 74              }
 75            ]
 76            ++ (map (x:
 77              urlTest
 78              // {
 79                name = "${x} - AUTO";
 80                filter = regions.${x}.filter;
 81              }) (builtins.attrNames regions))
 82            ++ (map (x:
 83              select
 84              // {
 85                name = "${x} - MANUAL";
 86                filter = regions.${x}.filter;
 87              }) (builtins.attrNames regions))
 88            ++ [
 89              (select
 90                // {
 91                  name = "Others - MANUAL";
 92                  filter = filterOthers;
 93                })
 94              (urlTest
 95                // {
 96                  name = "AllIn - AUTO";
 97                  filter = filterAll;
 98                })
 99              (select
100                // {
101                  name = "AllIn - MANUAL";
102                  filter = filterAll;
103                })
104            ];
105        };
106      };
107    };
108  };
109}