From d25514add11b6199de3afcf2518cccd446d4cdc4 Mon Sep 17 00:00:00 2001 From: linsui Date: Mon, 1 Apr 2024 23:16:45 +0800 Subject: [PATCH] sing-geosite: add rule-set --- pkgs/data/misc/sing-geosite/default.nix | 1 + pkgs/data/misc/sing-geosite/main.go | 33 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/pkgs/data/misc/sing-geosite/default.nix b/pkgs/data/misc/sing-geosite/default.nix index ac521f3ec280..8540eb534001 100644 --- a/pkgs/data/misc/sing-geosite/default.nix +++ b/pkgs/data/misc/sing-geosite/default.nix @@ -38,6 +38,7 @@ buildGoModule { installPhase = '' runHook preInstall install -Dm644 geosite.db $out/share/sing-box/geosite.db + install -Dm644 rule-set/* -t $out/share/sing-box/rule-set runHook postInstall ''; diff --git a/pkgs/data/misc/sing-geosite/main.go b/pkgs/data/misc/sing-geosite/main.go index d059d99ffe1e..e6ca57275adb 100644 --- a/pkgs/data/misc/sing-geosite/main.go +++ b/pkgs/data/misc/sing-geosite/main.go @@ -16,4 +16,37 @@ func main() { if err != nil { panic(err) } + + ruleSetOutput := "rule-set" + err = os.MkdirAll(ruleSetOutput, 0o755) + if err != nil { + panic(err) + } + for code, domains := range domainMap { + var headlessRule option.DefaultHeadlessRule + defaultRule := geosite.Compile(domains) + headlessRule.Domain = defaultRule.Domain + headlessRule.DomainSuffix = defaultRule.DomainSuffix + headlessRule.DomainKeyword = defaultRule.DomainKeyword + headlessRule.DomainRegex = defaultRule.DomainRegex + var plainRuleSet option.PlainRuleSet + plainRuleSet.Rules = []option.HeadlessRule{ + { + Type: C.RuleTypeDefault, + DefaultOptions: headlessRule, + }, + } + srsPath, _ := filepath.Abs(filepath.Join(ruleSetOutput, "geosite-"+code+".srs")) + os.Stderr.WriteString("write " + srsPath + "\n") + outputRuleSet, err := os.Create(srsPath) + if err != nil { + panic(err) + } + err = srs.Write(outputRuleSet, plainRuleSet) + if err != nil { + outputRuleSet.Close() + panic(err) + } + outputRuleSet.Close() + } }