diff --git a/pkgs/by-name/gu/gui-for-singbox/frontend-runtime-path.patch b/pkgs/by-name/gu/gui-for-singbox/frontend-runtime-path.patch index e4909b9aa0cf..66cc8a421dc6 100644 --- a/pkgs/by-name/gu/gui-for-singbox/frontend-runtime-path.patch +++ b/pkgs/by-name/gu/gui-for-singbox/frontend-runtime-path.patch @@ -27,31 +27,33 @@ diff -ruN a/src/stores/env.ts b/src/stores/env.ts diff -ruN a/src/stores/kernelApi.ts b/src/stores/kernelApi.ts --- a/src/stores/kernelApi.ts +++ b/src/stores/kernelApi.ts -@@ -248,8 +248,12 @@ - const runCoreProcess = (isAlpha: boolean) => { - return new Promise((resolve, reject) => { - let output: string -+ const coreWorkingDirectory = -+ envStore.env.os === 'linux' && envStore.env.configPath -+ ? `${envStore.env.configPath}/${CoreWorkingDirectory}` -+ : CoreWorkingDirectory - const pid = ExecBackground( -- CoreWorkingDirectory + '/' + getKernelFileName(isAlpha), -+ coreWorkingDirectory + '/' + getKernelFileName(isAlpha), - getKernelRuntimeArgs(isAlpha), - (out) => { - output = out -@@ -263,8 +267,9 @@ - reject(output) - }, - { -- PidFile: CorePidFilePath, -+ PidFile: coreWorkingDirectory + '/pid.txt', - StopOutputKeyword: CoreStopOutputKeyword, -+ WorkingDirectory: envStore.env.configPath || envStore.env.basePath, - Env: getKernelRuntimeEnv(isAlpha), - }, - ).catch((e) => reject(e)) +@@ -271,19 +271,24 @@ + const runCoreProcess = async (isAlpha: boolean) => { + let stopped = false ++ const coreWorkingDirectory = ++ envStore.env.os === 'linux' && envStore.env.configPath ++ ? `${envStore.env.configPath}/${CoreWorkingDirectory}` ++ : CoreWorkingDirectory + const pid = await ExecBackground( +- CoreWorkingDirectory + '/' + getKernelFileName(isAlpha), ++ coreWorkingDirectory + '/' + getKernelFileName(isAlpha), + getKernelRuntimeArgs(isAlpha), + undefined, + async (end) => { + stopped = true + const logs = await ReadFile(CoreLogFilePath, { Range: '-4096' }).catch((err) => String(err)) + logs.split('\n').forEach((line) => line && logsStore.recordKernelLog(line)) + end && logsStore.recordKernelLog(end) + onCoreStopped() + }, + { +- PidFile: CorePidFilePath, + LogFile: CoreLogFilePath, ++ PidFile: coreWorkingDirectory + '/pid.txt', ++ WorkingDirectory: envStore.env.configPath || envStore.env.basePath, + Env: getKernelRuntimeEnv(isAlpha), + }, + ) diff -ruN a/src/types/app.d.ts b/src/types/app.d.ts --- a/src/types/app.d.ts +++ b/src/types/app.d.ts @@ -63,6 +65,30 @@ diff -ruN a/src/types/app.d.ts b/src/types/app.d.ts appPath: string os: OS arch: string +diff -ruN a/src/views/PluginsView/index.vue b/src/views/PluginsView/index.vue +--- a/src/views/PluginsView/index.vue ++++ b/src/views/PluginsView/index.vue +@@ -37,7 +37,7 @@ + label: 'common.openFile', + handler: async (id: string) => { + const plugin = pluginsStore.getPluginById(id) +- await OpenURI(envStore.env.basePath + '/' + plugin!.path) ++ await OpenURI(`${envStore.env.configPath || envStore.env.basePath}/${plugin!.path}`) + }, + }, + ] +diff -ruN a/src/views/RulesetsView/index.vue b/src/views/RulesetsView/index.vue +--- a/src/views/RulesetsView/index.vue ++++ b/src/views/RulesetsView/index.vue +@@ -27,7 +27,7 @@ + label: 'common.openFile', + handler: async (id: string) => { + const ruleset = rulesetsStore.getRulesetById(id) +- await OpenURI(envStore.env.basePath + '/' + ruleset!.path) ++ await OpenURI(`${envStore.env.configPath || envStore.env.basePath}/${ruleset!.path}`) + }, + }, + { diff -ruN a/src/utils/helper.ts b/src/utils/helper.ts --- a/src/utils/helper.ts +++ b/src/utils/helper.ts diff --git a/pkgs/by-name/gu/gui-for-singbox/package.nix b/pkgs/by-name/gu/gui-for-singbox/package.nix index e259f199abde..11b2ef7cf184 100644 --- a/pkgs/by-name/gu/gui-for-singbox/package.nix +++ b/pkgs/by-name/gu/gui-for-singbox/package.nix @@ -20,13 +20,13 @@ let pname = "gui-for-singbox"; - version = "1.23.2"; + version = "1.25.4"; src = fetchFromGitHub { owner = "GUI-for-Cores"; repo = "GUI.for.SingBox"; tag = "v${version}"; - hash = "sha256-CEJ0yzF2smBlLgZ4EH5UWV4Pc4vA2ZH80TjoudUKWZM="; + hash = "sha256-+2MdFF1iufbPJvf5XGrM9t9vaY7BNdIu/vSWgAKcbvQ="; }; metaCommon = { @@ -58,7 +58,7 @@ let ; pnpm = pnpm_10; fetcherVersion = 3; - hash = "sha256-m9Rmc9Ww4jb2aQ+RXOwF71daZ6puspdMM/xidnk/YHs="; + hash = "sha256-BrDO9xdMuMnhXPAd9QvtU4R1W1WacnsVcGde+WFjvGA="; }; buildPhase = '' @@ -89,7 +89,7 @@ buildGo126Module { patches = [ ./xdg-path-and-restart-patch.patch ]; - vendorHash = "sha256-9uWrctbQ+vujb1Q8zT7Bv7rVyNY1rCM577c9caOKRNo="; + vendorHash = "sha256-Xi/EgMLex25p2tmRHEldCv6hgUKIpLJTmrMpHPGLY5M="; nativeBuildInputs = [ autoPatchelfHook diff --git a/pkgs/by-name/gu/gui-for-singbox/xdg-path-and-restart-patch.patch b/pkgs/by-name/gu/gui-for-singbox/xdg-path-and-restart-patch.patch index f2cdd3b28229..dc1bfe5bfa32 100644 --- a/pkgs/by-name/gu/gui-for-singbox/xdg-path-and-restart-patch.patch +++ b/pkgs/by-name/gu/gui-for-singbox/xdg-path-and-restart-patch.patch @@ -1,7 +1,7 @@ diff -ruN a/bridge/bridge.go b/bridge/bridge.go --- a/bridge/bridge.go +++ b/bridge/bridge.go -@@ -50,6 +50,7 @@ +@@ -51,6 +51,7 @@ Env.BasePath = filepath.ToSlash(filepath.Dir(exePath)) Env.AppName = filepath.Base(exePath) @@ -13,7 +13,7 @@ diff -ruN a/bridge/bridge.go b/bridge/bridge.go func (a *App) RestartApp() FlagResult { log.Printf("RestartApp") -- exePath := Env.BasePath + "/" + Env.AppName +- exePath := resolvePath(Env.AppName) + exePath, err := os.Executable() + if err != nil { + exePath = filepath.Join(Env.BasePath, Env.AppName) @@ -29,15 +29,6 @@ diff -ruN a/bridge/bridge.go b/bridge/bridge.go OS: Env.OS, ARCH: Env.ARCH, IsPrivileged: Env.IsPrivileged, -@@ -258,7 +263,7 @@ - } - - func loadConfig() { -- b, err := os.ReadFile(Env.BasePath + "/data/user.yaml") -+ b, err := os.ReadFile(GetPath("data/user.yaml")) - if err == nil { - yaml.Unmarshal(b, &Config) - } diff -ruN a/bridge/types.go b/bridge/types.go --- a/bridge/types.go +++ b/bridge/types.go @@ -52,9 +43,8 @@ diff -ruN a/bridge/types.go b/bridge/types.go diff -ruN a/bridge/utils.go b/bridge/utils.go --- a/bridge/utils.go +++ b/bridge/utils.go -@@ -13,7 +13,29 @@ - "golang.org/x/text/encoding/simplifiedchinese" - ) +@@ -23,7 +23,29 @@ + var requestTransportCache sync.Map +func GetConfigPath() string { + if Env.OS == "linux" { @@ -69,7 +59,7 @@ diff -ruN a/bridge/utils.go b/bridge/utils.go + return Env.BasePath +} + - func GetPath(path string) string { + func resolvePath(path string) string { + if Env.OS == "linux" && !filepath.IsAbs(path) { + cleanPath := filepath.ToSlash(filepath.Clean(path)) + if cleanPath == "data" { @@ -82,3 +72,4 @@ diff -ruN a/bridge/utils.go b/bridge/utils.go if !filepath.IsAbs(path) { path = filepath.Join(Env.BasePath, path) } + return filepath.ToSlash(filepath.Clean(path))