-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflake.nix
113 lines (104 loc) · 3.76 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# SPDX-FileCopyrightText: 2024 Collegiate Edu-Nation
#
# SPDX-License-Identifier: GPL-3.0-or-later
{
description = "FTC Development Environment via Nix Flake";
inputs = {
nixpkgs = {
url = "github:nixos/nixpkgs/nixos-24.05";
};
android-nixpkgs = {
url = "github:tadfisher/android-nixpkgs";
# The main branch follows the "canary" channel of the Android SDK
# repository. Use another android-nixpkgs branch to explicitly
# track an SDK release channel.
#
# .../android-nixpkgs/stable, beta, preview, canary";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
android-nixpkgs,
}:
let
supportedSystems = [
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
forEachSupportedSystem =
function:
nixpkgs.lib.genAttrs supportedSystems (
system:
function {
pkgs = nixpkgs.legacyPackages.${system};
android-sdk = android-nixpkgs.sdk.${system} (
sdkPkgs:
with sdkPkgs;
[
# Useful packages for building and testing.
build-tools-34-0-0
cmdline-tools-13-0
platform-tools
platforms-android-30
# Other useful packages for a development environment.
# emulator
# ndk-26-1-10909125
# skiaparser-3
# sources-android-34
]
++ nixpkgs.lib.optionals (system == "x86_64-darwin" || system == "x86_64-linux") [
# system-images-android-29-google-apis-x86-64
# system-images-android-29-google-apis-playstore-x86-64
]
++ nixpkgs.lib.optionals (system == "aarch64-darwin") [
# system-images-android-29-google-apis-arm64-v8a
# system-images-android-29-google-apis-playstore-arm64-v8a
]
);
}
);
in
{
devShells = forEachSupportedSystem (
{ pkgs, android-sdk }:
{
default = pkgs.mkShell {
packages =
[
android-sdk
]
++ (with pkgs; [
bashInteractive
jdk21
aapt
]);
# override aapt2 binary w/ nixpkgs'
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${pkgs.aapt}/bin/aapt2";
shellHook = ''
echo -e "\nFTC Development Environment via Nix Flake\n"
echo -e "Build app: ./gradlew assemble"
echo -e "Test app: ./gradlew test"
echo -e "WiFi Connect: adb connect 192.168.43.1:5555"
echo -e "Uninstall app: adb uninstall com.qualcomm.ftcrobotcontroller"
echo -e "Install app: adb install ./TeamCode/build/outputs/apk/release/TeamCode-release.apk\n"
if ! test -d ./FtcRobotController; then
echo -e "Fetching FTC SDK..." && git clone https://github.com/FIRST-Tech-Challenge/FtcRobotController.git && echo ""
fi
java --version && echo ""
adb --version && echo ""
'';
# prints emu. info and cmds if desired
# echo -e "Useful commands:\nAdd avd: avdmanager create avd -n test -k \"system-images;android-29;google_apis;x86_64\""
# echo -e "List emulators: emulator -list-avds"
# echo -e "Run emulator: emulator -avd test -no-metrics"
# echo -e "Run stateless emulator (allows for 2+ as well): postfix -read-only"
# emulator -version | sed '1d;2d;6d;7d;8d;9d;10d;11d;12d;13d;14d;'
};
}
);
};
}