ieda: init at 0-unstable-2024-10-11 (#338769)
[NixPkgs.git] / pkgs / by-name / gu / gui-for-clash / package.nix
blobb4c5263a5d6db5c38b8ec79a6defb9868ced6ec9
2   stdenv,
3   nodejs,
4   pnpm,
5   fetchFromGitHub,
6   buildGoModule,
7   lib,
8   wails,
9   webkitgtk_4_0,
10   pkg-config,
11   libsoup_3,
12   wrapGAppsHook3,
13   autoPatchelfHook,
14   makeDesktopItem,
15   copyDesktopItems,
17 let
18   pname = "gui-for-clash";
19   version = "1.8.9";
20   src = fetchFromGitHub {
21     owner = "GUI-for-Cores";
22     repo = "GUI.for.Clash";
23     rev = "v${version}";
24     hash = "sha256-jNYMv3gPbZV2JlTV0v0NQ06HkXDzgHXuEdJrBgQ+p2g=";
25   };
26   frontend = stdenv.mkDerivation (finalAttrs: {
27     inherit pname version src;
29     nativeBuildInputs = [
30       nodejs
31       pnpm.configHook
32     ];
34     pnpmDeps = pnpm.fetchDeps {
35       inherit (finalAttrs) pname version src;
36       sourceRoot = "${finalAttrs.src.name}/frontend";
37       hash = "sha256-RQtU61H1YklCgJrlyHALxUZp8OvVs2MgFThWBsYk2cs=";
38     };
40     sourceRoot = "${finalAttrs.src.name}/frontend";
42     buildPhase = ''
43       runHook preBuild
45       pnpm run build
47       runHook postBuild
48     '';
50     installPhase = ''
51       runHook preInstall
53       mkdir $out/
54       cp -r ./dist/* $out/
56       runHook postInstall
57     '';
59     meta = {
60       description = "GUI program developed by vue3";
61       license = with lib.licenses; [ gpl3Plus ];
62       maintainers = with lib.maintainers; [ aucub ];
63       platforms = lib.platforms.linux;
64     };
65   });
67 buildGoModule {
68   inherit pname version src;
70   vendorHash = "sha256-rDbJOj8t/qu04Rd8J0LnXiBoIDmdzBQ9avAhImK7dFg=";
72   nativeBuildInputs = [
73     wails
74     pkg-config
75     wrapGAppsHook3
76     autoPatchelfHook
77     copyDesktopItems
78   ];
80   buildInputs = [
81     webkitgtk_4_0
82     libsoup_3
83   ];
85   desktopItems = [
86     (makeDesktopItem {
87       name = "GUI.for.Clash";
88       exec = "GUI.for.Clash";
89       icon = "GUI.for.Clash";
90       genericName = "GUI.for.Clash";
91       desktopName = "GUI.for.Clash";
92       categories = [
93         "Network"
94       ];
95       keywords = [
96         "Proxy"
97       ];
98     })
99   ];
101   postUnpack = ''
102     cp -r ${frontend} $sourceRoot/frontend/dist
103   '';
105   postPatch = ''
106     sed -i '/exePath, err := os.Executable()/,+3d' bridge/bridge.go
107     substituteInPlace bridge/bridge.go \
108       --replace-fail "Env.BasePath = filepath.Dir(exePath)" "" \
109       --replace-fail "Env.AppName = filepath.Base(exePath)" "Env.AppName = \"GUI.for.Clash\"
110         Env.BasePath = filepath.Join(os.Getenv(\"HOME\"), \".config\", Env.AppName)" \
111       --replace-fail 'exePath := Env.BasePath' 'exePath := "${placeholder "out"}/bin"'
112   '';
114   buildPhase = ''
115     runHook preBuild
117     wails build -m -s -trimpath -skipbindings -devtools -tags webkit2_40 -o GUI.for.Clash
119     runHook postBuild
120   '';
122   installPhase = ''
123     runHook preInstall
125     mkdir -p $out/share/pixmaps
126     cp -r ./build/bin $out/bin
127     cp build/appicon.png $out/share/pixmaps/GUI.for.Clash.png
129     runHook postInstall
130   '';
132   meta = {
133     description = "Clash GUI program developed by vue3 + wails";
134     homepage = "https://github.com/GUI-for-Cores/GUI.for.Clash";
135     mainProgram = "GUI.for.Clash";
136     license = with lib.licenses; [ gpl3Plus ];
137     maintainers = with lib.maintainers; [ aucub ];
138     platforms = lib.platforms.linux;
139   };