Skip to content

Instantly share code, notes, and snippets.

@qzchenwl
Last active November 17, 2023 14:52
Show Gist options
  • Save qzchenwl/6eacbb474f4e3ef58903362c2aea1aeb to your computer and use it in GitHub Desktop.
Save qzchenwl/6eacbb474f4e3ef58903362c2aea1aeb to your computer and use it in GitHub Desktop.
合并多份clash订阅到一份中,支持复用规则、自定义规则。
# 基础订阅
subscribers:
nzl: &nzl !include https://path/to/your/subscription.yaml
mewu: &mewu !include https://path/to/your/another/subscription.yaml
proxies: &proxies !flatten
- !jq { object: *nzl, filter: '[.proxies[] | (.name += "-nzl")]' }
- !jq { object: *mewu, filter: '[.proxies[] | (.name += "-mewu")]' }
proxy-names: &all !jq { object: *proxies, filter: '[.[].name]' }
hk-proxy-names: &hk !jq { object: *all, filter: '[.[] | select(contains("香港"))]' }
tw-proxy-names: &tw !jq { object: *all, filter: '[.[] | select(contains("台湾"))]' }
kr-proxy-names: &kr !jq { object: *all, filter: '[.[] | select(contains("韩国"))]' }
jp-proxy-names: &jp !jq { object: *all, filter: '[.[] | select(contains("日本"))]' }
sg-proxy-names: &sg !jq { object: *all, filter: '[.[] | select(contains("新加坡"))]' }
us-proxy-names: &us !jq { object: *all, filter: '[.[] | select(contains("美国"))]' }
ru-proxy-names: &ru !jq { object: *all, filter: '[.[] | select(contains("俄罗斯"))]' }
de-proxy-names: &de !jq { object: *all, filter: '[.[] | select(contains("德国"))]' }
uk-proxy-names: &uk !jq { object: *all, filter: '[.[] | select(contains("英国"))]' }
fr-proxy-names: &fr !jq { object: *all, filter: '[.[] | select(contains("法国"))]' }
ca-proxy-names: &ca !jq { object: *all, filter: '[.[] | select(contains("加拿大"))]' }
es-proxy-names: &es !jq { object: *all, filter: '[.[] | select(contains("西班牙"))]' }
au-proxy-names: &au !jq { object: *all, filter: '[.[] | select(contains("澳大利亚"))]' }
it-proxy-names: &it !jq { object: *all, filter: '[.[] | select(contains("意大利"))]' }
tk-proxy-names: &tk !jq { object: *all, filter: '[.[] | select(contains("土耳其"))]' }
openai-proxy-names: &openai !flatten [*tw, *kr, *jp, *sg, *us, *de, *uk, *fr, *ca, *es, *au, *it]
group-proxy-names: &group !flatten [[🚀 节点选择, 🎯 全球直连, ♻️ 自动选择], *all]
# 输出订阅
port: 7890
socks-port: 7891
allow-lan: true
mode: rule
log-level: info
external-controller: :9090
proxies: *proxies
proxy-groups:
- name: 🛠️ 手动切换
type: select
proxies: *all
- name: 🚀 节点选择
type: select
proxies:
- ♻️ 自动选择
- ♻️ OpenAI自动选择
- 🛠️ 手动切换
- 🇭🇰 香港节点
- 🇺🇲 美国节点
- 🇯🇵 日本节点
- DIRECT
- name: 🎯 全球直连
type: select
proxies:
- DIRECT
- 🚀 节点选择
- ♻️ 自动选择
- name: 🛑 全球拦截
type: select
proxies:
- REJECT
- DIRECT
- name: 🍃 应用净化
type: select
proxies:
- REJECT
- DIRECT
- name: 🐟 漏网之鱼
type: select
proxies: !flatten
- - 🚀 节点选择
- 🎯 全球直连
- ♻️ 自动选择
- *all
- name: 🇯🇵 日本节点
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50
proxies: *jp
- name: 🇭🇰 香港节点
type: url-test
url: http://www.gstatic.com/generate_204
interval: 600
tolerance: 50
proxies: *hk
- name: 🇺🇲 美国节点
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 150
proxies: *us
- name: ♻️ 自动选择
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50
proxies: *all
- name: ♻️ OpenAI自动选择
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 150
proxies: *openai
- name: 🤖 OpenAI
type: select
proxies: !flatten
- - ♻️ OpenAI自动选择
- *openai
- name: 📢 谷歌FCM
type: select
proxies: *group
- name: 📲 电报信息
type: select
proxies: *group
- name: 🌍 国外媒体
type: select
proxies: *group
- name: Ⓜ️ 微软服务
type: select
proxies: *group
- name: 🍎 苹果服务
type: select
proxies: *group
rules: !flatten
- - DOMAIN-SUFFIX,openai.com,🤖 OpenAI
- DOMAIN-SUFFIX,auth0.com,🤖 OpenAI
- DOMAIN-SUFFIX,bing.com,🤖 OpenAI
- DOMAIN-SUFFIX,live.com,🤖 OpenAI
- DOMAIN-SUFFIX,oaistatic.com,🤖 OpenAI
- !jq {object: *nzl, filter: '[.rules[] | select(contains("openai")|not)]'}
#!/usr/bin/env python
# pip install yaml-transformer
from http.server import BaseHTTPRequestHandler, HTTPServer
import yaml
from yaml_transformer import TransformerLoader
class Server(BaseHTTPRequestHandler):
def do_GET(self):
with open('config.yaml') as f:
result = yaml.load(f, Loader=TransformerLoader)
del result['subscribers']
content = yaml.dump(result, allow_unicode=True, sort_keys=False)
self.send_response(200)
self.send_header('Content-type', 'text/yaml')
self.end_headers()
self.wfile.write(bytes(content, 'utf-8'))
if __name__ == '__main__':
server = HTTPServer(('localhost', 8080), Server)
print('Listen localhost:8080')
server.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment