fix(nix): get nix devshell working (#4883)
* fix: update flake lock and properly pass zlib to pkgconfig * chore: install nixfmt formatter * chore: add startup script * fix: ignore files in the nix store * docs: change required node version to v24 * chore: upgrade to node v24 * fix: specify XDG_DATA_DIRS to fix webkitgtk issues * fix: add required config to get android emulator working - Add a `postInit` script for the android shell to auto-configure an Android emulator - Required compile-time dependencies - Required compilation targets for app to successfully build and run. * fix: silence warning by using stdenv.hostPlatform.system instead of system * chore: remove android-studio
This commit is contained in:
+2
-2
@@ -20,8 +20,8 @@ Basically you need to install or update the following development tools:
|
||||
- **Rust** and **Cargo** for Tauri development
|
||||
|
||||
```bash
|
||||
nvm install v22
|
||||
nvm use v22
|
||||
nvm install v24
|
||||
nvm use v24
|
||||
npm install -g pnpm
|
||||
rustup update
|
||||
```
|
||||
|
||||
+2
-1
@@ -40,7 +40,8 @@
|
||||
"!**/*.mjs",
|
||||
"!**/*.cjs",
|
||||
"!**/*.mts",
|
||||
"!pnpm-lock.yaml"
|
||||
"!pnpm-lock.yaml",
|
||||
"!**/nix/store/**"
|
||||
]
|
||||
},
|
||||
"assist": { "enabled": false },
|
||||
|
||||
Generated
+24
-24
@@ -7,11 +7,11 @@
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1737231446,
|
||||
"narHash": "sha256-5lwp4VeKe0/rZzz7tew6egj1f80cY6xQtqf929iscyU=",
|
||||
"lastModified": 1782941279,
|
||||
"narHash": "sha256-ayqk9KFIFa1TacPfQxLFpbFWiqEhL811Jx/+/gjHKVA=",
|
||||
"owner": "tadfisher",
|
||||
"repo": "android-nixpkgs",
|
||||
"rev": "11344fbb813770ff8f8b8de5e4d512c0c4910a78",
|
||||
"rev": "9d13340524e2df1448d3b3599ee6b9159a0f8f87",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -29,11 +29,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1735644329,
|
||||
"narHash": "sha256-tO3HrHriyLvipc4xr+Ewtdlo7wM1OjXNjlWRgmM7peY=",
|
||||
"lastModified": 1768818222,
|
||||
"narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=",
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"rev": "f7795ede5b02664b57035b3b757876703e2c3eac",
|
||||
"rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -47,11 +47,11 @@
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1735644329,
|
||||
"narHash": "sha256-tO3HrHriyLvipc4xr+Ewtdlo7wM1OjXNjlWRgmM7peY=",
|
||||
"lastModified": 1768818222,
|
||||
"narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=",
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"rev": "f7795ede5b02664b57035b3b757876703e2c3eac",
|
||||
"rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -68,11 +68,11 @@
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765003156,
|
||||
"narHash": "sha256-k4YrPUhRj7Ciq385vREU57RHiDFycY5RaJwdCOmsLhU=",
|
||||
"lastModified": 1782900513,
|
||||
"narHash": "sha256-GHrsl1+ysDFgmDQtQSqWS7TiYD2Q58VlwLvnf1+crJM=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "e8361cc010853d17740a63aae00385061ac9de51",
|
||||
"rev": "16810aa8f4ad89ca480b1513774e8b6f485fe368",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -119,11 +119,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1737062831,
|
||||
"narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=",
|
||||
"lastModified": 1782723713,
|
||||
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c",
|
||||
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -135,11 +135,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1722073938,
|
||||
"narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=",
|
||||
"lastModified": 1762156382,
|
||||
"narHash": "sha256-Yg7Ag7ov5+36jEFC1DaZh/12SEXo6OO3/8rqADRxiqs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae",
|
||||
"rev": "7241bcbb4f099a66aafca120d37c65e8dda32717",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -151,11 +151,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1737062831,
|
||||
"narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=",
|
||||
"lastModified": 1782723713,
|
||||
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c",
|
||||
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -177,11 +177,11 @@
|
||||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1764925941,
|
||||
"narHash": "sha256-zldc1SrUIhGMdQp+0woSqvBS51Mi8PW6JukONBQXZBY=",
|
||||
"lastModified": 1782864348,
|
||||
"narHash": "sha256-NVYhLbaefeIUftPlo3kS6qr0xd8eFJRodEiaHrvFKR4=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "2cbf3587d36dfc7b701ebb744d3dd5064355d04f",
|
||||
"rev": "0d381ca097a8e0375a19387874d952c0a230ac4f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
+80
-21
@@ -17,7 +17,7 @@
|
||||
outputs = { self, nixpkgs, flake-utils, android, devshell, fenix }:
|
||||
{
|
||||
overlay = final: prev: {
|
||||
inherit (self.packages.${final.system}) android-sdk android-studio;
|
||||
inherit (self.packages.${final.stdenv.hostPlatform.system}) android-sdk;
|
||||
};
|
||||
}
|
||||
//
|
||||
@@ -36,22 +36,15 @@
|
||||
self.overlay
|
||||
];
|
||||
};
|
||||
# android-studio is not available in aarch64-darwin
|
||||
androidConditionalPackages = if pkgs.system != "aarch64-darwin" then [ pkgs.android-studio ] else [ ];
|
||||
|
||||
commonPackages = with pkgs; [
|
||||
pnpm
|
||||
nodejs_22
|
||||
nodejs_24
|
||||
clang
|
||||
pkg-config
|
||||
(pkgs.fenix.complete.withComponents [
|
||||
"cargo"
|
||||
"clippy"
|
||||
"rust-src"
|
||||
"rustc"
|
||||
"rustfmt"
|
||||
])
|
||||
pkgs.rust-analyzer-nightly
|
||||
xdg-utils
|
||||
self.formatter.${pkgs.stdenv.hostPlatform.system}
|
||||
];
|
||||
|
||||
systemDeps = with pkgs; [
|
||||
@@ -79,12 +72,26 @@
|
||||
getDev = pkg: if pkg ? dev then pkg.dev else pkg;
|
||||
getLib = pkg: if pkg ? lib then pkg.lib else pkg;
|
||||
|
||||
pkgConfigPath = lib.makeSearchPath "lib/pkgconfig" (map getDev systemDeps);
|
||||
# zlib stores zlib.pc in share/pkgconfig while everything else is stored in lib/pkgconfig
|
||||
pkgConfigPath = lib.concatStringsSep ":" [
|
||||
(lib.makeSearchPath "lib/pkgconfig" (map getDev systemDeps))
|
||||
(lib.makeSearchPath "share/pkgconfig" (map getDev systemDeps))
|
||||
];
|
||||
|
||||
xdgPath = "${
|
||||
lib.makeSearchPath "share/gsettings-schemas" [
|
||||
pkgs.gsettings-desktop-schemas
|
||||
pkgs.gtk3
|
||||
]
|
||||
}:$XDG_DATA_DIRS";
|
||||
|
||||
libPath = lib.makeLibraryPath (map getLib systemDeps);
|
||||
|
||||
mkCommonShell =
|
||||
{ name
|
||||
, postInit ? ""
|
||||
, extraPackages ? [ ]
|
||||
, extraTargets ? [ ]
|
||||
, extraEnv ? [
|
||||
{
|
||||
name = "PKG_CONFIG_PATH";
|
||||
@@ -98,7 +105,12 @@
|
||||
name = "LIBRARY_PATH";
|
||||
value = libPath;
|
||||
}
|
||||
] ++ (optionals isDarwin [
|
||||
{
|
||||
name = "XDG_DATA_DIRS";
|
||||
eval = xdgPath;
|
||||
}
|
||||
]
|
||||
++ (optionals isDarwin [
|
||||
{
|
||||
name = "RUSTFLAGS";
|
||||
eval = "\"-L framework=$DEVSHELL_DIR/Library/Frameworks\"";
|
||||
@@ -122,18 +134,42 @@
|
||||
}:
|
||||
pkgs.devshell.mkShell {
|
||||
inherit name;
|
||||
packages = commonPackages ++ extraPackages;
|
||||
packages =
|
||||
commonPackages
|
||||
++ extraPackages
|
||||
++ [
|
||||
(
|
||||
with pkgs.fenix;
|
||||
pkgs.fenix.combine [
|
||||
complete.cargo
|
||||
complete.clippy
|
||||
complete.rust-src
|
||||
complete.rustc
|
||||
complete.rustfmt
|
||||
extraTargets
|
||||
]
|
||||
)
|
||||
];
|
||||
env = extraEnv;
|
||||
devshell.startup.init_project.text = ''
|
||||
git submodule update --init --recursive
|
||||
pnpm install
|
||||
pnpm --filter @readest/readest-app setup-vendors
|
||||
'' + postInit;
|
||||
};
|
||||
in
|
||||
{
|
||||
packages = {
|
||||
android-sdk = android.sdk.${system} (sdkPkgs: with sdkPkgs; [
|
||||
android-sdk = android.sdk.${pkgs.stdenv.hostPlatform.system} (sdkPkgs: with sdkPkgs; [
|
||||
# Useful packages for building and testing.
|
||||
build-tools-36-0-0
|
||||
build-tools-35-0-0
|
||||
build-tools-34-0-0
|
||||
cmdline-tools-latest
|
||||
emulator
|
||||
platform-tools
|
||||
platforms-android-36
|
||||
platforms-android-35
|
||||
platforms-android-34
|
||||
ndk-26-1-10909125
|
||||
]
|
||||
@@ -145,9 +181,6 @@
|
||||
system-images-android-34-google-apis-x86-64
|
||||
system-images-android-34-google-apis-playstore-x86-64
|
||||
]);
|
||||
} // lib.optionalAttrs (system == "x86_64-linux") {
|
||||
# Android Studio in nixpkgs is currently packaged for x86_64-linux only.
|
||||
android-studio = pkgs.androidStudioPackages.stable;
|
||||
};
|
||||
|
||||
devShells = {
|
||||
@@ -160,13 +193,33 @@
|
||||
extraPackages = [ pkgs.cocoapods ];
|
||||
};
|
||||
|
||||
android = mkCommonShell {
|
||||
android = mkCommonShell rec {
|
||||
name = "readest-android";
|
||||
postInit = ''
|
||||
rm -rf apps/readest-app/src-tauri/gen/android
|
||||
pnpm tauri android init
|
||||
git checkout apps/readest-app/src-tauri/gen/android
|
||||
pnpm tauri icon ../../data/icons/readest-book.png
|
||||
|
||||
if [ ! -d "$ANDROID_AVD_HOME/${name}.avd" ]; then
|
||||
avdmanager create avd \
|
||||
-n ${name} \
|
||||
-k "system-images;android-34;google_apis;x86_64" \
|
||||
-d "pixel" \
|
||||
--force
|
||||
fi
|
||||
'';
|
||||
extraTargets = with pkgs.fenix.targets; [
|
||||
aarch64-linux-android.latest.rust-std
|
||||
armv7-linux-androideabi.latest.rust-std
|
||||
i686-linux-android.latest.rust-std
|
||||
x86_64-linux-android.latest.rust-std
|
||||
];
|
||||
extraPackages = [
|
||||
pkgs.android-sdk
|
||||
pkgs.gradle
|
||||
pkgs.jdk
|
||||
] ++ androidConditionalPackages;
|
||||
];
|
||||
extraEnv = [
|
||||
{
|
||||
name = "ANDROID_HOME";
|
||||
@@ -184,10 +237,16 @@
|
||||
name = "JAVA_HOME";
|
||||
value = pkgs.jdk.home;
|
||||
}
|
||||
{
|
||||
name = "ANDROID_AVD_HOME";
|
||||
eval = "$XDG_CONFIG_HOME/.android/avd";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
default = self.devShells.${system}.web;
|
||||
default = self.devShells.${pkgs.stdenv.hostPlatform.system}.web;
|
||||
};
|
||||
|
||||
formatter = pkgs.nixfmt;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user