From 6df912f428ecd45bc4f1aa649e42b2ee8609f87e Mon Sep 17 00:00:00 2001 From: Alois Date: Sun, 28 Jun 2026 18:35:11 +0200 Subject: [PATCH] (feat): merge nix flakes (fix): workflows --- .forgejo/workflows/deploy-dev.yml | 66 ++++----- .forgejo/workflows/deploy-prod.yml | 70 ++++----- apps/electron/flake.lock | 61 -------- apps/electron/flake.nix | 93 ------------ apps/electron/package.json | 12 +- apps/tauri/flake.lock | 96 ------------- apps/tauri/flake.nix | 108 -------------- apps/tauri/package.json | 6 +- flake.lock | 48 ++++++- flake.nix | 222 ++++++++++++++++++++++++++++- package.json | 2 +- 11 files changed, 324 insertions(+), 460 deletions(-) delete mode 100644 apps/electron/flake.lock delete mode 100644 apps/electron/flake.nix delete mode 100644 apps/tauri/flake.lock delete mode 100644 apps/tauri/flake.nix diff --git a/.forgejo/workflows/deploy-dev.yml b/.forgejo/workflows/deploy-dev.yml index 7fa0c0b..cd0ca64 100644 --- a/.forgejo/workflows/deploy-dev.yml +++ b/.forgejo/workflows/deploy-dev.yml @@ -12,29 +12,20 @@ jobs: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#electron --command bun install --frozen-lockfile - name: Copy licenses - run: bun run copy-licenses + run: nix develop .#electron --command bun run copy-licenses - name: Build packages - run: bun run build:packages + run: nix develop .#electron --command bun run build:packages - name: Build web - run: bun run build:web - - - name: Install rsync - run: apt-get update && apt-get install -y rsync + run: nix develop .#electron --command bun run build:web - name: Deploy - run: rsync -a --delete apps/web/dist/ /var/lib/www/tensamin-web-dev/ + run: nix develop .#electron --command rsync -a --delete apps/web/dist/ /var/lib/www/tensamin-web-dev/ build-mobile: runs-on: nixos @@ -42,20 +33,14 @@ jobs: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#tauri --command bun install --frozen-lockfile - name: Copy licenses - run: bun run copy-licenses + run: nix develop .#tauri --command bun run copy-licenses - name: Build packages - run: bun run build:packages + run: nix develop .#tauri --command bun run build:packages - name: Setup Android Keystore env: @@ -112,7 +97,7 @@ jobs: fi - name: Build mobile - run: bun run build:mobile + run: nix develop .#tauri --command bun run build:mobile - name: Upload mobile artifact uses: https://data.forgejo.org/actions/upload-artifact@v3 @@ -129,23 +114,19 @@ jobs: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm xz-utils - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#electron --command bun install --frozen-lockfile - name: Copy licenses - run: bun run copy-licenses + run: nix develop .#electron --command bun run copy-licenses - name: Build packages - run: bun run build:packages + run: nix develop .#electron --command bun run build:packages - name: Set Electron dev version run: | + nix develop .#electron --command bash <<'EOF' + set -euo pipefail VERSION="$(node -p "require('./package.json').version")" SHORT_SHA="$(git rev-parse --short HEAD)" DEV_VERSION="$VERSION-dev-$SHORT_SHA" @@ -157,9 +138,10 @@ jobs: pkg.version = process.env.DEV_VERSION; fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n"); ' + EOF - name: Build Electron desktop - run: bun run build:desktop + run: nix develop .#electron --command bun run build:desktop - name: Upload desktop artifacts uses: https://data.forgejo.org/actions/upload-artifact@v3 @@ -176,14 +158,8 @@ jobs: with: fetch-depth: 0 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#electron --command bun install --frozen-lockfile - name: Download mobile artifact uses: https://data.forgejo.org/actions/download-artifact@v3 @@ -200,21 +176,27 @@ jobs: - name: Read version and hash id: version run: | + nix develop .#electron --command bash <<'EOF' + set -euo pipefail VERSION="$(node -p "require('./package.json').version")" SHORT_SHA="$(git rev-parse --short HEAD)" echo "version=$VERSION" >> "$FORGEJO_OUTPUT" echo "short_sha=$SHORT_SHA" >> "$FORGEJO_OUTPUT" echo "tag=${VERSION}-dev-${SHORT_SHA}" >> "$FORGEJO_OUTPUT" echo "title=${VERSION}-dev-${SHORT_SHA}" >> "$FORGEJO_OUTPUT" + EOF - name: Copy releases env: TENSAMIN_RELEASE_VERSION: ${{ steps.version.outputs.tag }} TENSAMIN_RELEASE_TAG: ${{ steps.version.outputs.tag }} run: | + nix develop .#electron --command bash <<'EOF' + set -euo pipefail ASSET_BASE_URL="${{ forgejo.api_url }}" ASSET_BASE_URL="${ASSET_BASE_URL%/api/v1}/${{ forgejo.repository }}/releases/download/${{ steps.version.outputs.tag }}" FORGEJO_RELEASE_ASSET_BASE_URL="$ASSET_BASE_URL" bun --bun run copy-releases + EOF - name: Create pre-release and upload files env: @@ -225,6 +207,7 @@ jobs: TAG: ${{ steps.version.outputs.tag }} TITLE: ${{ steps.version.outputs.title }} run: | + nix develop .#electron --command bash <<'EOF' set -eu test -d releases @@ -313,3 +296,4 @@ jobs: -H "Authorization: token $TOKEN" \ -F "attachment=@$file" done + EOF diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index 08e7aa5..f5339aa 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -13,29 +13,20 @@ jobs: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#electron --command bun install --frozen-lockfile - name: Copy licenses - run: bun run copy-licenses + run: nix develop .#electron --command bun run copy-licenses - name: Build packages - run: bun run build:packages + run: nix develop .#electron --command bun run build:packages - name: Build web - run: bun run build:web - - - name: Install rsync - run: apt-get update && apt-get install -y rsync + run: nix develop .#electron --command bun run build:web - name: Deploy - run: rsync -a --delete apps/web/dist/ /var/lib/www/tensamin-web-prod/ + run: nix develop .#electron --command rsync -a --delete apps/web/dist/ /var/lib/www/tensamin-web-prod/ build-mobile: runs-on: nixos @@ -43,20 +34,14 @@ jobs: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#tauri --command bun install --frozen-lockfile - name: Copy licenses - run: bun run copy-licenses + run: nix develop .#tauri --command bun run copy-licenses - name: Build packages - run: bun run build:packages + run: nix develop .#tauri --command bun run build:packages - name: Setup Android Keystore env: @@ -113,7 +98,7 @@ jobs: fi - name: Build mobile - run: bun run build:mobile + run: nix develop .#tauri --command bun run build:mobile - name: Upload mobile artifact uses: https://data.forgejo.org/actions/upload-artifact@v3 @@ -130,23 +115,19 @@ jobs: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq fakeroot dpkg rpm xz-utils - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#electron --command bun install --frozen-lockfile - name: Copy licenses - run: bun run copy-licenses + run: nix develop .#electron --command bun run copy-licenses - name: Build packages - run: bun run build:packages + run: nix develop .#electron --command bun run build:packages - name: Set Electron prod version run: | + nix develop .#electron --command bash <<'EOF' + set -euo pipefail VERSION="$(node -p "require('./package.json').version")" export VERSION node -e ' @@ -156,9 +137,10 @@ jobs: pkg.version = process.env.VERSION; fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n"); ' + EOF - name: Build Electron desktop - run: bun run build:desktop + run: nix develop .#electron --command bun run build:desktop - name: Upload desktop artifacts uses: https://data.forgejo.org/actions/upload-artifact@v3 @@ -173,14 +155,8 @@ jobs: - name: Check out repo uses: https://data.forgejo.org/actions/checkout@v4 - - name: Install Packages - run: apt-get update && apt-get install -y sudo curl jq - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - name: Install dependencies - run: bun install --frozen-lockfile + run: nix develop .#electron --command bun install --frozen-lockfile - name: Download mobile artifact uses: https://data.forgejo.org/actions/download-artifact@v3 @@ -197,18 +173,24 @@ jobs: - name: Read version id: version run: | + nix develop .#electron --command bash <<'EOF' + set -euo pipefail VERSION="$(node -p "require('./package.json').version")" echo "version=$VERSION" >> "$FORGEJO_OUTPUT" echo "tag=$VERSION" >> "$FORGEJO_OUTPUT" + EOF - name: Copy releases env: TENSAMIN_RELEASE_VERSION: ${{ steps.version.outputs.tag }} TENSAMIN_RELEASE_TAG: ${{ steps.version.outputs.tag }} run: | + nix develop .#electron --command bash <<'EOF' + set -euo pipefail ASSET_BASE_URL="${{ forgejo.api_url }}" ASSET_BASE_URL="${ASSET_BASE_URL%/api/v1}/${{ forgejo.repository }}/releases/download/${{ steps.version.outputs.tag }}" FORGEJO_RELEASE_ASSET_BASE_URL="$ASSET_BASE_URL" bun --bun run copy-releases + EOF - name: Create release and upload files env: @@ -218,6 +200,7 @@ jobs: SHA: ${{ forgejo.sha }} TAG: ${{ steps.version.outputs.tag }} run: | + nix develop .#electron --command bash <<'EOF' set -eu test -d releases @@ -271,6 +254,7 @@ jobs: -H "Authorization: token $TOKEN" \ -F "attachment=@$file" done + EOF - name: Delete dev releases env: @@ -278,6 +262,7 @@ jobs: API: ${{ forgejo.api_url }} REPO: ${{ forgejo.repository }} run: | + nix develop .#electron --command bash <<'EOF' set -eu PAGE=1 @@ -308,11 +293,13 @@ jobs: -H "Authorization: token $TOKEN" \ "$API/repos/$REPO/releases/$release_id" done < "$DELETE_RELEASES" + EOF - name: Update root flake release hash env: TAG: ${{ steps.version.outputs.tag }} run: | + nix develop .#electron --command bash <<'EOF' set -eu DEB="$(find releases -maxdepth 1 -type f -name 'Tensamin-*-linux-amd64.deb' -print -quit)" @@ -361,3 +348,4 @@ jobs: git add flake.nix git -c user.name="forgejo-actions" -c user.email="forgejo-actions@localhost" commit -m "(qol): update release flake hash" git push origin HEAD:dev + EOF diff --git a/apps/electron/flake.lock b/apps/electron/flake.lock deleted file mode 100644 index 88748a4..0000000 --- a/apps/electron/flake.lock +++ /dev/null @@ -1,61 +0,0 @@ -{ - "nodes": { - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1779508470, - "narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "29916453413845e54a65b8a1cf996842300cd299", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/apps/electron/flake.nix b/apps/electron/flake.nix deleted file mode 100644 index 7a1b3bd..0000000 --- a/apps/electron/flake.nix +++ /dev/null @@ -1,93 +0,0 @@ -{ - description = "Electron Development Environment"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - flake-utils.url = "github:numtide/flake-utils"; - }; - - outputs = {nixpkgs, flake-utils, ...}: - flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs {inherit system; config.allowUnfree = true;}; - electronRuntimeLibs = with pkgs; [ - alsa-lib - at-spi2-atk - at-spi2-core - atk - cairo - cups - dbus - expat - fontconfig - freetype - gdk-pixbuf - glib - gtk3 - libdrm - libgbm - libglvnd - libnotify - libpulseaudio - libuuid - libxkbcommon - mesa - nspr - nss - pango - pipewire - systemd - wayland - # xorg - libX11 - libXScrnSaver - libXcomposite - libXcursor - libXdamage - libXext - libXfixes - libXi - libXrandr - libXtst - libxcb - ]; - in { - devShells.default = pkgs.mkShell { - packages = with pkgs; [ - nodejs_22 - corepack_22 - bun - electron - pkg-config - python3 - gcc - gnumake - git - jq - patchelf - dpkg - rpm - fpm - sudo - curl - jq - fakeroot - xz-utils - ] ++ electronRuntimeLibs; - - shellHook = '' - export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath electronRuntimeLibs}:$LD_LIBRARY_PATH" - export ELECTRON_ENABLE_LOGGING=1 - export ELECTRON_OZONE_PLATFORM_HINT="''${ELECTRON_OZONE_PLATFORM_HINT:-auto}" - export NPM_CONFIG_TARGET_ARCH="''${NPM_CONFIG_TARGET_ARCH:-x64}" - export npm_config_build_from_source=true - export USE_SYSTEM_FPM=true - - alias electron-install='cd ../.. && bun install' - alias electron-build-web='cd ../.. && bun run build:web' - alias electron-dev='bun run dev' - alias electron-package='bun run package:linux' - alias electron-validate='bun run validate' - ''; - }; - }); -} diff --git a/apps/electron/package.json b/apps/electron/package.json index d650270..7a1780c 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -13,19 +13,19 @@ "build:web": "cd ../.. && bun run build:web", "build": "tsc -p tsconfig.json && esbuild src/preload/preload.ts --bundle --platform=node --format=cjs --external:electron --outfile=dist/preload/preload.cjs", "dev:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron . --verbose", - "dev": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run dev:raw; else bun run dev:raw; fi", + "dev": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop ../..#electron --command bun run dev:raw; else bun run dev:raw; fi", "start:raw": "bun run build && electron .", - "start": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run start:raw; else bun run start:raw; fi", + "start": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop ../..#electron --command bun run start:raw; else bun run start:raw; fi", "package:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron-builder --publish never", - "package": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run package:raw; else bun run package:raw; fi", + "package": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop ../..#electron --command bun run package:raw; else bun run package:raw; fi", "package:linux:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron-builder --linux --publish never", - "package:linux": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run package:linux:raw; else bun run package:linux:raw; fi", + "package:linux": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop ../..#electron --command bun run package:linux:raw; else bun run package:linux:raw; fi", "package:windows:raw": "cd ../.. && bun run build:web && cd apps/electron && bun run build && electron-builder --win --publish never", - "package:windows": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run package:windows:raw; else bun run package:windows:raw; fi", + "package:windows": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop ../..#electron --command bun run package:windows:raw; else bun run package:windows:raw; fi", "checksum": "bun scripts/generate-release-metadata.ts", "generate-signing-key": "bun scripts/generate-signing-key.ts", "validate:raw": "bun run build && bun run package:linux:raw", - "validate": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop --command bun run validate:raw; else bun run validate:raw; fi" + "validate": "if command -v nix >/dev/null 2>&1 && [ -z \"$IN_NIX_SHELL\" ]; then nix develop ../..#electron --command bun run validate:raw; else bun run validate:raw; fi" }, "dependencies": {}, "devDependencies": { diff --git a/apps/tauri/flake.lock b/apps/tauri/flake.lock deleted file mode 100644 index c3c71cb..0000000 --- a/apps/tauri/flake.lock +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nodes": { - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1775036866, - "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1744536153, - "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1775272153, - "narHash": "sha256-FwYb64ysv8J2TxaqsYYcDyHAHBUEaQlriPMWPMi1K7M=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "740fb0203b2852917b909a72b948d34d0b171ec0", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/apps/tauri/flake.nix b/apps/tauri/flake.nix deleted file mode 100644 index 4e491e8..0000000 --- a/apps/tauri/flake.nix +++ /dev/null @@ -1,108 +0,0 @@ -{ - description = "Tauri mobile development environment"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - rust-overlay.url = "github:oxalica/rust-overlay"; - flake-utils.url = "github:numtide/flake-utils"; - }; - - outputs = { - self, - nixpkgs, - rust-overlay, - flake-utils, - }: - flake-utils.lib.eachDefaultSystem ( - system: let - overlays = [(import rust-overlay)]; - pkgs = import nixpkgs { - inherit system overlays; - config = { - allowUnfree = true; - android_sdk.accept_license = true; - }; - }; - - projectRoot = "."; - androidHome = "${projectRoot}/.android"; - sdkRoot = "${androidHome}/sdk"; - ndkVersion = "29.0.14206865"; - - android = pkgs.androidenv.composeAndroidPackages { - cmdLineToolsVersion = "8.0"; - toolsVersion = "26.1.1"; - platformToolsVersion = "35.0.2"; - buildToolsVersions = ["35.0.0"]; - platformVersions = ["35" "36"]; - includeSources = false; - includeSystemImages = false; - includeNDK = true; - ndkVersions = [ndkVersion]; - useGoogleAPIs = false; - }; - - rustToolchain = pkgs.rust-bin.stable.latest.default.override { - extensions = ["rust-src" "rust-analyzer"]; - targets = [ - "aarch64-linux-android" - "armv7-linux-androideabi" - "i686-linux-android" - "x86_64-linux-android" - "wasm32-unknown-unknown" - ]; - }; - - in { - devShells.default = pkgs.mkShell { - buildInputs = with pkgs; - [ - jdk17 - rustToolchain - gradle - nodejs - pkg-config - ] - ++ [ - android.androidsdk - pkgs.android-studio-tools - ]; - - shellHook = '' - sdkSource="${android.androidsdk}/libexec/android-sdk" - - mkdir -p "${androidHome}" - if [ -L "${sdkRoot}" ]; then - rm -f "${sdkRoot}" - fi - mkdir -p "${sdkRoot}" - - ln -sfn "$sdkSource/build-tools" "${sdkRoot}/build-tools" - ln -sfn "$sdkSource/cmake" "${sdkRoot}/cmake" - ln -sfn "$sdkSource/licenses" "${sdkRoot}/licenses" - ln -sfn "$sdkSource/ndk" "${sdkRoot}/ndk" - ln -sfn "$sdkSource/ndk-bundle" "${sdkRoot}/ndk-bundle" - ln -sfn "$sdkSource/platforms" "${sdkRoot}/platforms" - ln -sfn "$sdkSource/platform-tools" "${sdkRoot}/platform-tools" - ln -sfn "$sdkSource/tools" "${sdkRoot}/tools" - - mkdir -p "${sdkRoot}/cmdline-tools" - ln -sfn "$sdkSource/cmdline-tools/8.0" "${sdkRoot}/cmdline-tools/8.0" - ln -sfn "8.0" "${sdkRoot}/cmdline-tools/latest" - - sdkRootAbs="$(realpath "${sdkRoot}")" - ndkRootAbs="''${sdkRootAbs}/ndk/${ndkVersion}" - - export PATH="''${sdkRootAbs}/cmdline-tools/latest/bin:''${sdkRootAbs}/platform-tools:''${ndkRootAbs}:${pkgs.android-studio-tools}/bin:$PATH" - export ANDROID_HOME="''${sdkRootAbs}" - export ANDROID_SDK_ROOT="''${sdkRootAbs}" - export ANDROID_NDK_ROOT="''${ndkRootAbs}" - export ANDROID_NDK_HOME="$ANDROID_NDK_ROOT" - export NDK_HOME="$ANDROID_NDK_ROOT" - export NDK_PATH="$ANDROID_NDK_ROOT" - export JAVA_HOME="${pkgs.jdk17}" - ''; - }; - } - ); -} diff --git a/apps/tauri/package.json b/apps/tauri/package.json index b5d89ec..6ddaaea 100644 --- a/apps/tauri/package.json +++ b/apps/tauri/package.json @@ -21,9 +21,9 @@ "dev:mobile:raw": "tauri android dev --host ${TAURI_DEV_HOST:-127.0.0.1}", "start-adb:mobile:raw": "adb devices", "build:mobile:raw": "tauri android build", - "dev:mobile": "if command -v nix >/dev/null 2>&1; then nix develop --command bun dev:mobile:raw; else bun dev:mobile:raw; fi", - "start-adb:mobile": "if command -v nix >/dev/null 2>&1; then nix develop --command bun start-adb:mobile:raw; else bun start-adb:mobile:raw; fi", - "build:mobile": "bun run render-version.ts && if command -v nix >/dev/null 2>&1; then nix develop --command bun build:mobile:raw; else bun build:mobile:raw; fi && bun run render-version.ts --unrender", + "dev:mobile": "if command -v nix >/dev/null 2>&1; then nix develop ../..#tauri --command bun dev:mobile:raw; else bun dev:mobile:raw; fi", + "start-adb:mobile": "if command -v nix >/dev/null 2>&1; then nix develop ../..#tauri --command bun start-adb:mobile:raw; else bun start-adb:mobile:raw; fi", + "build:mobile": "bun run render-version.ts && if command -v nix >/dev/null 2>&1; then nix develop ../..#tauri --command bun build:mobile:raw; else bun build:mobile:raw; fi && bun run render-version.ts --unrender", "gen-icons": "tauri icon ./logo.json && bun scripts/sync-electron-icons.ts", "format": "bunx prettier --write .", "lint": "eslint src" diff --git a/flake.lock b/flake.lock index ea7bf8c..aeb3d70 100644 --- a/flake.lock +++ b/flake.lock @@ -2,22 +2,58 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1779508470, - "narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=", + "lastModified": 1782467914, + "narHash": "sha256-pGvFkM8N0xEkIIXDe5YYfbEAvHrk4IxBrjB/x8OomhE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "29916453413845e54a65b8a1cf996842300cd299", + "rev": "e73de5be04e0eff4190a1432b946d469c794e7b4", "type": "github" }, "original": { - "id": "nixpkgs", + "owner": "NixOS", "ref": "nixos-unstable", - "type": "indirect" + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" } }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1782616745, + "narHash": "sha256-NN5B1cKBXF6h1Ec681gMGZ2o/99d7vKXAAfFNEvyOKA=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "b916d014dc57eb555f84e51172a82f7f6fb560d7", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index 7d1d820..e414f57 100644 --- a/flake.nix +++ b/flake.nix @@ -1,9 +1,17 @@ { - description = "Tensamin desktop client"; + description = "Tensamin Client"; - inputs.nixpkgs.url = "nixpkgs/nixos-unstable"; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + rust-overlay.url = "github:oxalica/rust-overlay"; + }; - outputs = {nixpkgs, ...}: let + outputs = { + self, + nixpkgs, + rust-overlay, + ... + }: let systems = ["x86_64-linux"]; forAllSystems = nixpkgs.lib.genAttrs systems; version = "0.0.10"; @@ -11,13 +19,21 @@ forgejoBaseUrl = "https://git.methanium.net/tensamin/client/releases/download/${version}"; in { packages = forAllSystems (system: let - pkgs = import nixpkgs {inherit system;}; + pkgs = import nixpkgs { + inherit system; + overlays = [(import rust-overlay)]; + config = { + allowUnfree = true; + android_sdk.accept_license = true; + }; + }; debArtifact = "Tensamin-${version}-linux-amd64.deb"; electronRuntimeLibs = with pkgs; [ alsa-lib at-spi2-atk at-spi2-core + atk cairo cups dbus @@ -29,6 +45,7 @@ gtk3 libdrm libgbm + libglvnd libnotify libpulseaudio libuuid @@ -37,6 +54,7 @@ nspr nss pango + pipewire systemd wayland libX11 @@ -92,8 +110,204 @@ url = "${forgejoBaseUrl}/${debArtifact}"; hash = x86_64DebHash; }); + localDebPath = builtins.getEnv "TENSAMIN_DEB"; + localPathPackage = + if localDebPath == "" + then + pkgs.writeShellScriptBin "tensamin" '' + echo "Set TENSAMIN_DEB to a local .deb path and run with --impure." >&2 + exit 1 + '' + else + packageDeb (builtins.path { + path = localDebPath; + name = debArtifact; + }); in { default = defaultPackage; + tensamin = defaultPackage; + electron = defaultPackage; + localPathForDev = localPathPackage; + }); + + devShells = forAllSystems (system: let + pkgs = import nixpkgs { + inherit system; + overlays = [(import rust-overlay)]; + config = { + allowUnfree = true; + android_sdk.accept_license = true; + }; + }; + + electronRuntimeLibs = with pkgs; [ + alsa-lib + at-spi2-atk + at-spi2-core + atk + cairo + cups + dbus + expat + fontconfig + freetype + gdk-pixbuf + glib + gtk3 + libdrm + libgbm + libglvnd + libnotify + libpulseaudio + libuuid + libxkbcommon + mesa + nspr + nss + pango + pipewire + systemd + wayland + libX11 + libXScrnSaver + libXcomposite + libXcursor + libXdamage + libXext + libXfixes + libXi + libXrandr + libXtst + libxcb + ]; + + ndkVersion = "29.0.14206865"; + android = pkgs.androidenv.composeAndroidPackages { + cmdLineToolsVersion = "8.0"; + toolsVersion = "26.1.1"; + platformToolsVersion = "35.0.2"; + buildToolsVersions = ["35.0.0"]; + platformVersions = ["35" "36"]; + includeSources = false; + includeSystemImages = false; + includeNDK = true; + ndkVersions = [ndkVersion]; + useGoogleAPIs = false; + }; + rustToolchain = pkgs.rust-bin.stable.latest.default.override { + extensions = ["rust-src" "rust-analyzer"]; + targets = [ + "aarch64-linux-android" + "armv7-linux-androideabi" + "i686-linux-android" + "x86_64-linux-android" + "wasm32-unknown-unknown" + ]; + }; + in rec { + default = electron; + + electron = pkgs.mkShell { + packages = with pkgs; + [ + nodejs_22 + corepack_22 + bun + electron + pkg-config + python3 + gcc + gnumake + git + jq + patchelf + dpkg + rpm + fpm + sudo + curl + fakeroot + rsync + xz-utils + ] + ++ electronRuntimeLibs; + + shellHook = '' + export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath electronRuntimeLibs}:$LD_LIBRARY_PATH" + export ELECTRON_ENABLE_LOGGING=1 + export ELECTRON_OZONE_PLATFORM_HINT="''${ELECTRON_OZONE_PLATFORM_HINT:-auto}" + export NPM_CONFIG_TARGET_ARCH="''${NPM_CONFIG_TARGET_ARCH:-x64}" + export npm_config_build_from_source=true + export USE_SYSTEM_FPM=true + + alias electron-install='cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" && bun install' + alias electron-build-web='cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" && bun run build:web' + alias electron-dev='bun run dev' + alias electron-package='bun run package:linux' + alias electron-validate='bun run validate' + ''; + }; + + tauri = pkgs.mkShell { + buildInputs = with pkgs; + [ + jdk17 + rustToolchain + gradle + bun + nodejs + pkg-config + git + jq + curl + ] + ++ [ + android.androidsdk + android-studio-tools + ]; + + shellHook = '' + sdkSource="${android.androidsdk}/libexec/android-sdk" + if [ -d apps/tauri/src-tauri ]; then + projectRoot="$PWD/apps/tauri" + else + projectRoot="$PWD" + fi + androidHome="$projectRoot/.android" + sdkRoot="$androidHome/sdk" + + mkdir -p "$androidHome" + if [ -L "$sdkRoot" ]; then + rm -f "$sdkRoot" + fi + mkdir -p "$sdkRoot" + + ln -sfn "$sdkSource/build-tools" "$sdkRoot/build-tools" + ln -sfn "$sdkSource/cmake" "$sdkRoot/cmake" + ln -sfn "$sdkSource/licenses" "$sdkRoot/licenses" + ln -sfn "$sdkSource/ndk" "$sdkRoot/ndk" + ln -sfn "$sdkSource/ndk-bundle" "$sdkRoot/ndk-bundle" + ln -sfn "$sdkSource/platforms" "$sdkRoot/platforms" + ln -sfn "$sdkSource/platform-tools" "$sdkRoot/platform-tools" + ln -sfn "$sdkSource/tools" "$sdkRoot/tools" + + mkdir -p "$sdkRoot/cmdline-tools" + ln -sfn "$sdkSource/cmdline-tools/8.0" "$sdkRoot/cmdline-tools/8.0" + ln -sfn "8.0" "$sdkRoot/cmdline-tools/latest" + + sdkRootAbs="$(realpath "$sdkRoot")" + ndkRootAbs="''${sdkRootAbs}/ndk/${ndkVersion}" + + export PATH="''${sdkRootAbs}/cmdline-tools/latest/bin:''${sdkRootAbs}/platform-tools:''${ndkRootAbs}:${pkgs.android-studio-tools}/bin:$PATH" + export ANDROID_HOME="''${sdkRootAbs}" + export ANDROID_SDK_ROOT="''${sdkRootAbs}" + export ANDROID_NDK_ROOT="''${ndkRootAbs}" + export ANDROID_NDK_HOME="$ANDROID_NDK_ROOT" + export NDK_HOME="$ANDROID_NDK_ROOT" + export NDK_PATH="$ANDROID_NDK_ROOT" + export JAVA_HOME="${pkgs.jdk17}" + ''; + }; }); }; } diff --git a/package.json b/package.json index 0458230..0fc8932 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "dev:desktop": "cd apps/electron && bun run dev", "build:desktop": "cd apps/electron && bun run package", "run:desktop": "TENSAMIN_DEB=\"$PWD/apps/electron/release/Tensamin-$(node -p \\\"require('./package.json').version\\\")-linux-amd64.deb\" nix run .#localPathForDev --impure", - "delete:mobile": "cd apps/tauri && nix develop --command adb uninstall net.tensamin.client" + "delete:mobile": "cd apps/tauri && nix develop ../..#tauri --command adb uninstall net.tensamin.client" }, "devDependencies": { "@eslint/js": "^10.0.1",