This commit is contained in:
caiwx86 2026-05-10 09:47:52 +08:00
parent 4140b8f037
commit 95ac96413e
10 changed files with 810 additions and 1 deletions

9
.github/diy/convert_translation.sh vendored Normal file
View File

@ -0,0 +1,9 @@
#!/bin/bash
for e in $(ls -d luci-*/po); do
if [[ -d $e/zh-cn && ! -d $e/zh_Hans ]]; then
ln -s zh-cn $e/zh_Hans 2>/dev/null
elif [[ -d $e/zh_Hans && ! -d $e/zh-cn ]]; then
ln -s zh_Hans $e/zh-cn 2>/dev/null
fi
done

114
.github/diy/create_acl_for_luci.sh vendored Normal file
View File

@ -0,0 +1,114 @@
#!/bin/bash
# [CTCGFW]Project-OpenWrt
# Use it under GPLv3, please.
# --------------------------------------------------------
# Script for creating ACL file for each LuCI APP
error_font="\033[31m[Error]$\033[0m "
success_font="\033[32m[Success]\033[0m "
info_font="\033[36m[Info]\033[0m "
function echo_green_bg(){
echo -e "\033[42;37m$1\033[0m"
}
function echo_yellow_bg(){
echo -e "\033[43;37m$1\033[0m"
}
function echo_red_bg(){
echo -e "\033[41;37m$1\033[0m"
}
function clean_outdated_files(){
rm -f "create_acl_for_luci.err" "create_acl_for_luci.warn" "create_acl_for_luci.ok"
}
function check_if_acl_exist(){
ls "$1"/root/usr/share/rpcd/acl.d/*.json >/dev/null 2>&1 && return 0 || return 1
}
function check_config_files(){
[ "$(ls "$1"/root/etc/config/* 2>/dev/null | wc -l)" -ne "1" ] && return 0 || return 1
}
function get_config_name(){
ls "$1"/root/etc/config/* 2>/dev/null | awk -F '/' '{print $NF}'
}
function create_acl_file(){
mkdir -p "$1"
echo -e "{
\"$2\": {
\"description\": \"Grant UCI access for $2\",
\"read\": {
\"uci\": [ \"$3\" ]
},
\"write\": {
\"uci\": [ \"$3\" ]
}
}
}" > "$1/$2.json"
}
function auto_create_acl(){
luci_app_list="$(find ./ -maxdepth 2 | grep -Eo ".*luci-app-[a-zA-Z0-9_-]+" | sort -s)"
[ "$(echo -e "${luci_app_list}" | wc -l)" -gt "0" ] && for i in ${luci_app_list}
do
if check_if_acl_exist "$i"; then
echo_yellow_bg "$i: has ACL file already, skipping..." | tee -a create_acl_for_luci.warn
elif check_config_files "$i"; then
echo_red_bg "$i: has no/multi config file(s), skipping..." | tee -a create_acl_for_luci.err
else
create_acl_file "$i/root/usr/share/rpcd/acl.d" "${i##*/}" "$(get_config_name "$i")"
echo_green_bg "$i: ACL file has been generated." | tee -a create_acl_for_luci.ok
fi
done
}
while getopts "achml:n:p:" input_arg
do
case $input_arg in
a)
auto_create_acl
exit
;;
m)
manual_mode=1
;;
p)
acl_path="$OPTARG"
;;
l)
luci_name="$OPTARG"
;;
n)
conf_name="$OPTARG"
;;
c)
clean_outdated_files
exit
;;
h|?|*)
echo -e "${info_font}Usage: $0 [-a|-m (-p <path-to-acl>) -l <luci-name> -n <conf-name>|-c]"
exit 2
;;
esac
done
if [ "*${manual_mode}*" == "*1*" ] && [ -n "${luci_name}" ] && [ -n "${conf_name}" ]; then
acl_path="${acl_path:-root/usr/share/rpcd/acl.d}"
if create_acl_file "${acl_path}" "${luci_name}" "${conf_name}"; then
echo -e "${success_font}Output file: $(ls "${acl_path}/${luci_name}.json")"
echo_green_bg "$(cat "${acl_path}/${luci_name}.json")"
echo_green_bg "${luci_name}: ACL file has been generated." >> "create_acl_for_luci.ok"
[ -e "create_acl_for_luci.err" ] && sed -i "/${luci_name}/d" "create_acl_for_luci.err"
else
echo -e "${error_font}Failed to create file ${acl_path}/${luci_name}.json"
echo_red_bg "${luci_name}: Failed to create ACL file." >> "create_acl_for_luci.err"
fi
else
echo -e "${info_font}Usage: $0 [-a|-m -p <path-to-acl> -l <luci-name> -n <conf-name>|-c]"
exit 2
fi

53
.github/diy/generate_ucitrack.sh vendored Normal file
View File

@ -0,0 +1,53 @@
#!/bin/bash
# 遍历所有的luci-app-*目录
for app_dir in luci-app-*; do
# 检查是否是目录
if [ -d "$app_dir" ]; then
# 首先检查ucitrack目录是否存在
if [ ! -d "$app_dir/root/usr/share/ucitrack" ]; then
# 初始化变量
config_file=""
init_file=""
# 查找init文件
if [ -d "$app_dir/root/etc/init.d" ]; then
# 获取init.d目录下的第一个文件名
init_file=$(ls "$app_dir/root/etc/init.d" 2>/dev/null | head -n 1)
# 如果找到init文件检查USE_PROCD
if [ ! -z "$init_file" ]; then
init_path="$app_dir/root/etc/init.d/$init_file"
# 如果文件包含USE_PROCD=,则跳过这个目录
if grep -sqE 'USE_PROCD=.' "$init_path"; then
echo "Skipping $app_dir - contains USE_PROCD"
continue
fi
fi
fi
# 查找config文件
if [ -d "$app_dir/root/etc/config" ]; then
# 获取config目录下的第一个文件名
config_file=$(ls "$app_dir/root/etc/config" 2>/dev/null | head -n 1)
fi
# 如果找到了任意一个文件
if [ ! -z "$config_file" ] || [ ! -z "$init_file" ]; then
# 创建ucitrack目录
mkdir -p "$app_dir/root/usr/share/ucitrack"
# 创建json文件
cat > "$app_dir/root/usr/share/ucitrack/$app_dir.json" << EOF
{
"config": "$config_file",
"init": "$init_file"
}
EOF
echo "Created ucitrack for $app_dir"
fi
else
echo "Skipping $app_dir - ucitrack directory already exists"
fi
fi
done

View File

@ -0,0 +1,8 @@
__
___ ___ ___ ___ _ ______/ /_
/ _ \/ _ \/ -_) _ \ |/|/ / __/ __/
\___/ .__/\__/_//_/__,__/_/ \__/
/_/
--------------------------------
%D %V, %C
--------------------------------

38
.github/diy/patches/quickstart.patch vendored Normal file
View File

@ -0,0 +1,38 @@
--- a/luci-app-quickstart/Makefile
+++ b/luci-app-quickstart/Makefile
@@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for quickstart
-LUCI_DEPENDS:=+quickstart +luci-app-store
+LUCI_DEPENDS:=+quickstart +luci-app-ttyd
LUCI_PKGARCH:=all
# PKG_RELEASE MUST be empty for luci.mk
--- a/luci-app-quickstart/luasrc/controller/quickstart.lua
+++ b/luci-app-quickstart/luasrc/controller/quickstart.lua
@@ -5,7 +5,7 @@ module("luci.controller.quickstart", package.seeall)
function index()
entry({"admin", "nas"}, firstchild(), _("NAS") , 45).dependent = false
if luci.sys.call("pgrep quickstart >/dev/null") == 0 then
- entry({"admin", "quickstart"}, template("quickstart/home"), _("QuickStart"), 1).leaf = true
+ entry({"admin", "quickstart"}, template("quickstart/home")).leaf = true
entry({"admin", "network_guide"}, call("networkguide_index"), _("NetworkGuide"), 2)
entry({"admin", "network_guide", "pages"}, call("quickstart_index", {index={"admin", "network_guide", "pages"}})).leaf = true
if nixio.fs.access("/usr/lib/lua/luci/view/quickstart/main_dev.htm") then
--- a/luci-app-quickstart/root/usr/share/luci/menu.d/luci-app-quickstart.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "admin/quickstart/*": {
- "title": "QuickStart",
- "order": 1,
- "action": {
- "type": "template",
- "path": "quickstart/home"
- }
- }
-}
\ No newline at end of file

13
.github/diy/patches/samba4.patch vendored Normal file
View File

@ -0,0 +1,13 @@
--- a/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js
+++ b/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js
@@ -113,6 +113,10 @@ return view.extend({
o.rmempty = false;
s.option(form.Flag, 'force_root', _('Force Root'));
+ o.enabled = 'yes';
+ o.disabled = 'no';
+ o.default = 'yes';
+ o.rmempty = false;
o = s.option(form.Value, 'users', _('Allowed users'));
o.rmempty = true;

233
.github/diy/patches/ssr-plus.patch vendored Normal file
View File

@ -0,0 +1,233 @@
--- a/luci-app-ssr-plus/Makefile
+++ b/luci-app-ssr-plus/Makefile
@@ -118,7 +118,7 @@ endchoice
choice
prompt "V2ray-core Selection"
- default PACKAGE_$(PKG_NAME)_INCLUDE_Xray if aarch64||arm||i386||x86_64
+ default PACKAGE_$(PKG_NAME)_INCLUDE_Xray
default PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY
config PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY
--- a/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua
+++ b/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua
@@ -26,6 +26,62 @@ function index()
entry({"admin", "services", "shadowsocksr", "reset"}, call("act_reset"))
entry({"admin", "services", "shadowsocksr", "restart"}, call("act_restart"))
entry({"admin", "services", "shadowsocksr", "delete"}, call("act_delete"))
+ entry({'admin', 'services', "shadowsocksr", 'ip'}, call('check_ip')) -- 获取ip情况
+end
+
+function check_site(host, port)
+ local nixio = require "nixio"
+ local socket = nixio.socket("inet", "stream")
+ socket:setopt("socket", "rcvtimeo", 2)
+ socket:setopt("socket", "sndtimeo", 2)
+ local ret = socket:connect(host, port)
+ socket:close()
+ return ret
+end
+
+function get_ip_geo_info()
+ local result = luci.sys.exec('curl --retry 3 -m 10 -LfsA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36" http://ip-api.com/json/')
+ local json = require "luci.jsonc"
+ local info = json.parse(result)
+
+ return {
+ flag = string.lower(info.countryCode) or "un",
+ country = get_country_name(info.countryCode) or "Unknown",
+ ip = info.query,
+ isp = info.isp
+ }
+end
+
+function get_country_name(countryCode)
+ local country_names = {
+ US = "美国", CN = "中国", JP = "日本", GB = "英国", DE = "德国",
+ FR = "法国", BR = "巴西", IT = "意大利", RU = "俄罗斯", CA = "加拿大",
+ KR = "韩国", ES = "西班牙", AU = "澳大利亚", MX = "墨西哥", ID = "印度尼西亚",
+ NL = "荷兰", TR = "土耳其", CH = "瑞士", SA = "沙特阿拉伯", SE = "瑞典",
+ PL = "波兰", BE = "比利时", AR = "阿根廷", NO = "挪威", AT = "奥地利",
+ TW = "台湾", ZA = "南非", TH = "泰国", DK = "丹麦", MY = "马来西亚",
+ PH = "菲律宾", SG = "新加坡", IE = "爱尔兰", HK = "香港", FI = "芬兰",
+ CL = "智利", PT = "葡萄牙", GR = "希腊", IL = "以色列", NZ = "新西兰",
+ CZ = "捷克", RO = "罗马尼亚", VN = "越南", UA = "乌克兰", HU = "匈牙利",
+ AE = "阿联酋", CO = "哥伦比亚", IN = "印度", EG = "埃及", PE = "秘鲁", TW = "台湾"
+ }
+ return country_names[countryCode]
+end
+
+function check_ip()
+ local e = {}
+ local port = 80
+ local geo_info = get_ip_geo_info(ip)
+ e.ip = geo_info.ip
+ e.flag = geo_info.flag
+ e.country = geo_info.country
+ e.isp = geo_info.isp
+ e.baidu = check_site('www.baidu.com', port)
+ e.taobao = check_site('www.taobao.com', port)
+ e.google = check_site('www.google.com', port)
+ e.youtube = check_site('www.youtube.com', port)
+ luci.http.prepare_content('application/json')
+ luci.http.write_json(e)
end
function subscribe()
--- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua
+++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua
@@ -168,5 +168,6 @@ if is_finded("chinadns-ng") then
end
end
+m:section(SimpleSection).template = "shadowsocksr/status_bottom"
return m
diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/status_bottom.htm b/luci-app-passwall/luasrc/view/shadowsocksr/status_bottom.htm
new file mode 100644
index 000000000000..a00fff9c79b3
--- /dev/null
+++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/status_bottom.htm
@@ -0,0 +1,128 @@
+<style>
+.pure-img {
+ max-height: 100%;
+ width: auto;
+}
+.flag .pure-img {
+ max-height: none;
+ margin-top: -0.34rem;
+}
+.status-bar {
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .3);
+ color: #525f7f;
+ background: #fff;
+ z-index: 5;
+ box-sizing: border-box;
+}
+
+.status-bar .inner {
+ margin: 0.5em;
+}
+
+.status-bar .inner .flag {
+ height: 2.6em;
+ display: block;
+ float: left;
+ margin-right: 1em;
+}
+
+.status-bar .inner .status-info {
+ font-weight: bold;
+}
+
+.status-bar .icon-con {
+ height: 2.6em;
+ text-align: right;
+}
+
+#cbi-passwall+.cbi-page-actions.control-group.fixed {
+ bottom: 3.3rem;
+}
+
+footer{
+display:block !important;
+}
+
+@media screen and (max-width: 700px) {
+.status-bar .icon-con {
+ height: 2.5em;
+}
+}
+</style>
+<div class="status-bar">
+ <div class="inner">
+ <div class="pure-g">
+ <div class="pure-u-1-2">
+ <span class="flag"><img src="/luci-static/passwall/flags/loading.svg" class="pure-img"></span> <span
+ class="status-info">获取中...</span>
+ </div>
+ <div class="pure-u-1-2">
+ <div class="icon-con">
+ <img src="/luci-static/passwall/img/site_icon1_01.png" class="pure-img i1">
+ <img src="/luci-static/passwall/img/site_icon1_02.png" class="pure-img i2">
+ <img src="/luci-static/passwall/img/site_icon1_03.png" class="pure-img i3">
+ <img src="/luci-static/passwall/img/site_icon1_04.png" class="pure-img i4">
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script>
+const _ASSETS = '/luci-static/passwall/';
+const CHECK_IP_URL = '<%=url([[admin]], [[services]], [[passwall]], [[ip]])%>';
+
+let wW = window.innerWidth;
+
+function resize() {
+ wW = window.innerWidth;
+ let lw = document.querySelector(".main-left").offsetWidth;
+ let statusBar = document.querySelector(".status-bar");
+ statusBar.style.width = (wW - lw) + 'px';
+ let flagElement = statusBar.querySelector(".flag");
+ flagElement.style.width = (flagElement.offsetHeight / 3 * 4) + 'px';
+
+ document.querySelectorAll(".flag-icon").forEach(function(el) {
+ if (el.offsetHeight < 60) {
+ el.parentElement.style.height = '60px';
+ el.style.width = '60px';
+ } else {
+ el.style.width = el.offsetHeight + 'px';
+ }
+ });
+}
+
+function write_status(data) {
+ document.querySelector(".flag img").src = _ASSETS + "flags/" + data.flag + ".svg";
+ document.querySelector(".status-info").innerHTML = data.ip + "<br>" + data.country + "&nbsp;" + data.isp;
+ document.querySelector(".i1").src = data.baidu ? _ASSETS + "img/site_icon_01.png" : _ASSETS + "img/site_icon1_01.png";
+ document.querySelector(".i2").src = data.taobao ? _ASSETS + "img/site_icon_02.png" : _ASSETS + "img/site_icon1_02.png";
+ document.querySelector(".i3").src = data.google ? _ASSETS + "img/site_icon_03.png" : _ASSETS + "img/site_icon1_03.png";
+ document.querySelector(".i4").src = data.youtube ? _ASSETS + "img/site_icon_04.png" : _ASSETS + "img/site_icon1_04.png";
+ setTimeout(function() {
+ let event = new Event('iploaded');
+ document.body.dispatchEvent(event);
+ }, 200);
+}
+
+XHR.poll(5, CHECK_IP_URL, null,
+ function (x, data) {
+ write_status(data);
+ }
+ );
+
+document.addEventListener('DOMContentLoaded', function() {
+ setTimeout("resize()",100)
+ fetch(CHECK_IP_URL)
+ .then(response => response.json())
+ .then(data => {
+ write_status(data);
+ })
+ .catch(error => console.error('Error:', error));
+});
+
+window.addEventListener('resize', resize);
+</script>
--- a/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus
+++ b/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus
@@ -43,5 +43,8 @@ if [ -s "/etc/uwsgi/vassals/luci-webui.ini" ];then
/etc/init.d/uwsgi restart
fi
+grep -q ip-api.com /etc/ssrplus/black.list ||
+ sed -i '$a ip-api.com' /etc/ssrplus/black.list
+
rm -rf /tmp/luci-modulecache /tmp/luci-indexcache
exit 0

271
.github/workflows/jell.yml vendored Normal file
View File

@ -0,0 +1,271 @@
#
# This is free software, lisence use MIT.
name: marry-jell
on:
push:
paths:
- '.github/workflows/jell.yml'
- '.gitignore'
- '.github/diy/**'
schedule:
- cron: 0 */4 * * *
repository_dispatch:
workflow_dispatch:
inputs:
ssh:
description: 'ssh'
required: false
default: 'true'
jobs:
merge:
if: github.event.repository.owner.id == github.event.sender.id || ! github.event.sender.id
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@main
with:
fetch-depth: 0
- name: Set git identity
run : |
git config --global user.email "actions@github.com"
git config --global user.name "action"
sudo timedatectl set-timezone "Asia/Shanghai"
- name: Syn jell
run : |
shopt -s extglob
set +e
git rm -r --cache * >/dev/null 2>&1 &
rm -rf `find ./* -maxdepth 0 -type d ! -name ".github/diy"` >/dev/null 2>&1
function git_clone() {
git clone --depth 1 $1 $2
if [ "$?" != 0 ]; then
echo "error on $1"
exit 1
fi
}
function git_sparse_clone() {
trap 'rm -rf "$tmpdir"' EXIT
branch="$1" curl="$2" && shift 2
rootdir="$PWD"
tmpdir="$(mktemp -d)" || exit 1
# Clone repo based on branch length
if [ ${#branch} -lt 10 ]; then
git clone -b "$branch" --depth 1 --filter=blob:none --sparse "$curl" "$tmpdir"
cd "$tmpdir"
else
git clone --filter=blob:none --sparse "$curl" "$tmpdir"
cd "$tmpdir"
git checkout $branch
fi
if [ "$?" != 0 ]; then
echo "error on $curl"
exit 1
fi
git sparse-checkout init --cone
git sparse-checkout set "$@"
mv -n $@ $rootdir/ || true
cd $rootdir
}
function mvdir() {
mv -n `find $1/* -maxdepth 0 -type d` ./
rm -rf $1
}
(
# Clone repositories
git_clone https://github.com/kiddin9/my-packages my-packages && mvdir my-packages
git_clone https://github.com/kiddin9/luci-app-dnsfilter luci-app-dnsfilter
git_clone https://github.com/kiddin9/aria2 aria2
git_clone https://github.com/kiddin9/autoshare && mvdir autoshare
git_clone https://github.com/kiddin9/luci-app-wizard
git_clone https://github.com/kiddin9/openwrt-adguardhome && mvdir openwrt-adguardhome
git_clone https://github.com/kiddin9/openwrt-clouddrive2 && mvdir openwrt-clouddrive2
git_clone https://github.com/kiddin9/openwrt-filebrowser && mvdir openwrt-filebrowser
) &
(
git_clone https://github.com/Lienol/openwrt-package liep
git_clone https://github.com/rufengsuixing/luci-app-autoipsetadder
git_clone https://github.com/riverscn/openwrt-iptvhelper && mvdir openwrt-iptvhelper
git_clone https://github.com/kongfl888/luci-app-timedreboot
) &
(
git_clone https://github.com/sirpdboy/luci-app-advancedplus
git_clone https://github.com/sirpdboy/luci-app-autotimeset
git_clone https://github.com/sirpdboy/luci-app-lucky oplucky && mvdir oplucky
git_clone https://github.com/sirpdboy/luci-app-partexp partexp && mvdir partexp
git_clone https://github.com/sirpdboy/luci-app-ddns-go ddns-go1 && mvdir ddns-go1
git_clone https://github.com/sirpdboy/luci-app-parentcontrol
git_clone https://github.com/sirpdboy/luci-app-poweroffdevice poweroffdevice && mvdir poweroffdevice
) &
(
git_clone https://github.com/destan19/OpenAppFilter && mvdir OpenAppFilter
git_clone https://github.com/lvqier/luci-app-dnsmasq-ipset
git_clone https://github.com/walkingsky/luci-wifidog luci-app-wifidog
git_clone https://github.com/peter-tank/luci-app-autorepeater
git_clone https://github.com/sirpdboy/luci-app-cupsd cupsd1 && mv -n cupsd1/{luci-app-cupsd,cups} ./ ; rm -rf cupsd1
git_sparse_clone v5 https://github.com/sbwml/luci-app-mosdns \
mosdns luci-app-mosdns v2dat
) &
(
git_clone https://github.com/esirplayground/LingTiGameAcc
git_clone https://github.com/esirplayground/luci-app-LingTiGameAcc
git_clone https://github.com/jerrykuku/luci-app-go-aliyundrive-webdav
git_clone https://github.com/doushang/luci-app-shortcutmenu luci-shortcutmenu && mv -n luci-shortcutmenu/luci-app-shortcutmenu ./ ; rm -rf luci-shortcutmenu
git_clone https://github.com/messense/aliyundrive-webdav aliyundrive && mv -n aliyundrive/openwrt/* ./ ; rm -rf aliyundrive
git_clone https://github.com/sbilly/netmaker-openwrt && mv -n netmaker-openwrt/netmaker ./; rm -rf netmaker-openwrt
git_clone https://github.com/lisaac/luci-app-dockerman dockerman && mv -n dockerman/applications/* ./; rm -rf dockerman
) &
(
git_clone https://github.com/ophub/luci-app-amlogic amlogic && mv -n amlogic/luci-app-amlogic ./;rm -rf amlogic
git_clone https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest cloudflarespeedtest && mv -n cloudflarespeedtest/applications/* ./;rm -rf cloudflarespeedtest
git_clone https://github.com/linkease/nas-packages-luci && mv -n nas-packages-luci/luci/* ./; rm -rf nas-packages-luci
git_clone https://github.com/linkease/istore && mv -n istore/luci/* ./; rm -rf istore
git_clone https://github.com/kiddin9/openwrt-tailscale && mvdir openwrt-tailscale
) &
(
git_clone https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic
) &
(
git_clone https://github.com/tty228/luci-app-wechatpush
git_clone https://github.com/ZeaKyX/speedtest-web
git_clone https://github.com/ZeaKyX/luci-app-speedtest-web
) &
(
git_clone https://github.com/izilzty/luci-app-chinadns-ng
git_clone https://github.com/Diciya/luci-app-broadbandacc
git_clone https://github.com/brvphoenix/luci-app-wrtbwmon wrtbwmon1 && mvdir wrtbwmon1
git_clone https://github.com/brvphoenix/wrtbwmon wrtbwmon2 && mvdir wrtbwmon2
git_clone https://github.com/VIKINGYFY/homeproxy
) &
(
git_clone https://github.com/QiuSimons/vmlinux-btf
git_sparse_clone kix https://github.com/QiuSimons/luci-app-daed \
luci-app-daed daed
git_sparse_clone kix https://github.com/QiuSimons/luci-app-dae \
luci-app-dae dae
git_sparse_clone main https://github.com/djylb/nps-openwrt \
npc luci-app-npc
git_clone https://github.com/sirpdboy/luci-app-chatgpt-web
git_clone https://github.com/sirpdboy/luci-app-eqosplus
git_sparse_clone master "https://github.com/coolsnowwolf/lede" package/wwan package/lean package/network/services/shellsync package/qca/shortcut-fe && cp -rf wwan/*/* ./ ; rm -Rf wwan
git_clone https://github.com/danchexiaoyang/luci-app-syncthing
) &
(
git_sparse_clone main https://github.com/sirpdboy/luci-app-watchdog \
watchdog luci-app-watchdog
git_sparse_clone main https://github.com/sirpdboy/netspeedtest \
luci-app-netspeedtest ookla-speedtest homebox
git_sparse_clone main https://github.com/sirpdboy/luci-app-taskplan \
luci-app-taskplan
git_sparse_clone main https://github.com/sbwml/luci-app-openlist2 \
openlist2 luci-app-openlist2
git_sparse_clone master https://github.com/zfdx123/msd_lite \
msd_lite luci-app-msd_lite
)
(
git_clone https://github.com/muink/luci-app-dnsproxy
) &
(
git_clone https://github.com/gSpotx2f/luci-app-temp-status
git_clone https://github.com/gSpotx2f/luci-app-cpu-perf
git_clone https://github.com/gSpotx2f/luci-app-log
git_clone https://github.com/gSpotx2f/luci-app-internet-detector idetector && mv idetector/*internet-detector* ./;rm -rf idetector
git_clone https://github.com/gSpotx2f/luci-app-disks-info
git_clone https://github.com/gSpotx2f/luci-app-interfaces-statistics
git_clone https://github.com/gSpotx2f/luci-app-cpu-status-mini
git_clone https://github.com/gSpotx2f/luci-app-cpu-status
) &
(
git_clone https://github.com/lwb1978/openwrt-gecoosac && mvdir openwrt-gecoosac
git_clone https://github.com/ilxp/luci-app-ikoolproxy
git_clone https://github.com/animegasan/luci-app-ipinfo
) &
(
git_clone https://github.com/EasyTier/luci-app-easytier
) &
(
git_clone https://github.com/kenzok78/luci-theme-argone
git_clone https://github.com/kenzok78/luci-app-argone-config
git_clone https://github.com/kenzok8/wall && mv -n wall/* ./ ; rm -rf wall
) &
(
git_clone https://github.com/caiwx86/luci-app-netdata
git_clone https://github.com/caiwx86/openwrt-netdata-ssl netdata-ssl
git_clone https://github.com/sirpdboy/luci-app-taskplan taskplan && mvdir taskplan
) &
(
#git_clone https://github.com/morytyann/OpenWrt-mihomo && mvdir OpenWrt-mihomo
git clone --depth 1 https://github.com/nikkinikki-org/OpenWrt-momo OpenWrt-momo && mv -n OpenWrt-momo/*momo ./ ; rm -rf OpenWrt-momo
git_clone https://github.com/nikkinikki-org/OpenWrt-nikki && mv -f OpenWrt-nikki/{luci-app-nikki,nikki} ./;rm -rf OpenWrt-nikki
git_clone https://github.com/pymumu/luci-app-smartdns
git_clone https://github.com/Openwrt-Passwall/openwrt-passwall2 passwall2 && mv -n passwall2/luci-app-passwall2 ./;rm -rf passwall2
git_clone https://github.com/Openwrt-Passwall/openwrt-passwall passwall1 && mv -n passwall1/luci-app-passwall ./;rm -rf passwall1
git_clone https://github.com/fw876/helloworld && mv -n helloworld/luci-app-ssr-plus ./ ; rm -rf helloworld
git_clone https://github.com/sbwml/luci-app-qbittorrent openwrt-qb && mv -n openwrt-qb/* ./ && rm -rf openwrt-qb
git_clone https://github.com/timsaya/luci-app-bandix bandix1 && mv -f bandix1/luci-app-bandix ./;rm -rf bandix1
git_clone https://github.com/timsaya/openwrt-bandix bandix2 && mv -f bandix2/openwrt-bandix ./;rm -rf bandix2
) &
(
git_sparse_clone master "https://github.com/coolsnowwolf/packages" multimedia/UnblockNeteaseMusic-Go \
multimedia/aliyundrive-webdav net/gowebdav net/kismet net/mstpd \
net/qBittorrent-static net/phtunnel net/headscale net/clouddrive2 net/baidupcs-go net/daemonlogger net/geth net/gnurl \
net/uugamebooster net/pgyvpn net/ooniprobe net/polipo net/rosy-file-server net/qiyougamebooster \
net/sqm-scripts-extra net/tor-fw-helper net/vncrepeater net/verysync \
net/vpnbypass net/vpn-policy-routing utils/qfirehose
git_sparse_clone master "https://github.com/lunatickochiya/Matrix-Action-Openwrt" package/kochiya/brlaser package/kochiya/luci-app-banmac-ipt package/kochiya/luci-app-banmac-nft package/kochiya/luci-app-nvr package/kochiya/luci-app-openvpn-server package/kochiya/luci-app-openvpn-server-client
git_sparse_clone main https://github.com/sbwml/openwrt_pkgs luci-app-socat
) &
git_sparse_clone openwrt-25.12 "https://github.com/immortalwrt/packages" net/frp
- name: Delete duplicated packages
run: |
shopt -s extglob
rm -Rf */.git
for pkg in $(ls -d .github/diy/packages/*); do
mv -f $pkg/Makefile.k $pkg/Makefile >/dev/null 2>&1 || true
done
cp -rf .github/diy/packages/* ./ || true
for pkg in $(ls -d .github/diy/packages/*); do
mv -f $pkg/Makefile $pkg/Makefile.k >/dev/null 2>&1 || true
done
- name: SSH connection to Actions
uses: caiwx86/debugger-action@master
if: github.event.inputs.ssh == 'true'
- name: Apply patches
run: |
find ".github/diy/patches" -type f -name '*.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -p1 -E --forward --no-backup-if-mismatch" || true
# - name: Modify
# run: |
# shopt -s extglob
# set +e
- name: update jell
run: |
if git status --porcelain | grep .; then
git add .
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
git push -f
else
echo "nothing to commit"
exit 0
fi || exit 0
- name: Delete workflow runs
uses: Mattraks/delete-workflow-runs@main
continue-on-error: true
with:
retain_days: 1
keep_minimum_runs: 3

41
.gitignore vendored Normal file
View File

@ -0,0 +1,41 @@
/create_acl_for_luci.ok
/create_acl_for_luci.warn
/create_acl_for_luci.err
/luci-app-godproxy/rulesupdate.log
/qt5
/luci-app-advancedsetting
/luci-app-softether
/luci-app-cifs
/luci-app-cifsd
/luci-app-smstool
/luci-app-mosquitto
/luci-app-appfilter
/luci-app-babeld
/luci-app-siitwizard
/luci-app-ttyd
/luci-app-k3screenctrl
/ddns-scripts_aliyun
/ddns-scripts_dnspod
/mentohust
/subweb
/wget
/mt
/autosamba
/amule
/fcgiwrap
/ipv6-helper
/ChinaDNS
/luci-theme-netgear
/csstidy
/UnblockNeteaseMusicGo
/default-settings
/luci-proto-bonding
/rclone
/luci-lib-docker
/rclone-*
/mtk-eip93
/ndpi-netfilter
/ntfs3-oot
/qtools
/libcups
/nat64

View File

@ -1 +1,30 @@
# small-packages
<div align="center">
<h1 align="center">openwrt主流软件包合集</h1>
<img src="https://img.shields.io/github/issues/kenzok8/jell?color=green">
<img src="https://img.shields.io/github/stars/kenzok8/jell?color=yellow">
<img src="https://img.shields.io/github/forks/kenzok8/jell?color=orange">
<img src="https://img.shields.io/github/license/kenzok8/jell?color=ff69b4">
<img src="https://img.shields.io/github/languages/code-size/kenzok8/jell?color=blueviolet">
</div>
<a href="https://t.me/joinchat/JjxmyRZZXJWb74I-sCrryA" target="_blank">Telegram</a>
#### 源码来源:
[![kiddin9](https://img.shields.io/badge/package-garypang13-red.svg?style=flat&logo=appveyor)](https://github.com/garypang13/openwrt-packages)
[![Lienol](https://img.shields.io/badge/passwall-xiaorouji-blueviolet.svg?style=flat&logo=appveyor)](https://github.com/xiaorouji/openwrt-passwall)
[![immortalwrt](https://img.shields.io/badge/packages-immortalwrt-orange.svg?style=flat&logo=appveyor)](https://github.com/immortalwrt/immortalwrt)
[![Lean](https://img.shields.io/badge/package-Lean-blueviolet.svg?style=flat&logo=appveyor)](https://github.com/coolsnowwolf/lede)
##### 插件下载:
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/kenzok78/compile-small?style=for-the-badge&label=插件下载)](https://github.com/kenzok78/compile-small/releases/latest)
#### 特色:
+ 自用仓库
##### 安装:
```sh
sed -i '$a src-git jell https://github.com/caiwx86/small-packages' feeds.conf.default && ./scripts/feeds update -a && ./scripts/feeds install -a
```