commit 0426212c71299f7b3a150ac4044fbea2fa480861 Author: Melorise <0d00@0721.hk> Date: Tue Oct 20 23:20:15 2026 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6517ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/result +/result-* +*.deb diff --git a/README.md b/README.md new file mode 100644 index 0000000..8ed2318 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# Tuanjie Hub For Nix + +Tuanjie Hub 1.4.7,重打包自deb包 + +## 使用 + +```sh +nix build +nix run +``` + +安装到用户环境: + +```sh +nix profile add .#tuanjiehub +``` + +软件包提供 `tuanjiehub` 命令、应用菜单条目、图标和 `tuanjiehub://` 协议关联。在 NixOS 或 Home Manager 配置中,将此项目作为 flake 输入,并将 `inputs.tuanjiehub.packages.x86_64-linux.default` 加入 `environment.systemPackages` 或 `home.packages`。 + + diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..60f345b --- /dev/null +++ b/flake.nix @@ -0,0 +1,35 @@ +{ + description = "Tuanjie Hub 1.4.7 repackaged from the official Debian release"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + tuanjiehub-deb = { + url = "file+https://public-cdn.tuanjie.cn/hub/prod/tuanjiehub-amd64.deb"; + flake = false; + }; + }; + + outputs = + { nixpkgs, tuanjiehub-deb, ... }: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + hub = pkgs.callPackage ./package.nix { src = tuanjiehub-deb; }; + in + { + packages.${system} = { + default = hub; + tuanjiehub = hub; + }; + apps.${system}.default = { + type = "app"; + program = "${hub}/bin/tuanjiehub"; + meta.description = "Tuanjie Hub"; + }; + checks.${system}.tuanjiehub = hub; + formatter.${system} = pkgs.nixfmt; + }; +} diff --git a/package.nix b/package.nix new file mode 100644 index 0000000..e91897d --- /dev/null +++ b/package.nix @@ -0,0 +1,100 @@ +{ + lib, + stdenvNoCC, + libarchive, + buildFHSEnv, + src, +}: + +let + version = "1.4.7"; + unpacked = stdenvNoCC.mkDerivation { + pname = "tuanjiehub-unpacked"; + inherit version src; + nativeBuildInputs = [ libarchive ]; + dontUnpack = true; + dontConfigure = true; + dontBuild = true; + dontFixup = true; + installPhase = '' + runHook preInstall + mkdir -p "$out" + bsdtar --extract --to-stdout --file "$src" data.tar.bz2 \ + | bsdtar --extract --file - --no-same-owner --directory "$out" + runHook postInstall + ''; + }; +in +buildFHSEnv { + pname = "tuanjiehub"; + inherit version; + + targetPkgs = + pkgs: with pkgs; [ + alsa-lib + at-spi2-core + cairo + cups + dbus + expat + fontconfig + freetype + gdk-pixbuf + glib + gtk3 + icu + libappindicator-gtk3 + libdrm + libgbm + libGL + libnotify + libsecret + libuuid + libx11 + libxcb + libxcomposite + libxcursor + libxdamage + libxext + libxfixes + libxi + libxinerama + libxkbcommon + libxrandr + libxrender + libxscrnsaver + libxtst + nspr + nss + openssl + pango + stdenv.cc.cc.lib + udev + xdg-utils + zlib + ]; + + extraBuildCommands = '' + mkdir -p "$out/opt" + cp -a "${unpacked}/opt/". "$out/opt/" + ln -s /opt/tuanjiehub/tuanjiehub "$out/usr/bin/tuanjiehub" + ''; + + runScript = "/opt/tuanjiehub/tuanjiehub"; + + extraInstallCommands = '' + mkdir -p "$out/share" + cp -a "${unpacked}/usr/share/". "$out/share/" + substituteInPlace "$out/share/applications/tuanjiehub.desktop" \ + --replace-fail 'Exec=/opt/tuanjiehub/tuanjiehub %U' "Exec=$out/bin/tuanjiehub %U" + ''; + + meta = { + description = "The official Tuanjie Hub"; + homepage = "https://tuanjie.cn/"; + license = lib.licenses.unfree; + platforms = [ "x86_64-linux" ]; + mainProgram = "tuanjiehub"; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + }; +}