Android development for accentor
This commit is contained in:
parent
f0853adde2
commit
16cf2672c1
6 changed files with 2783 additions and 2 deletions
18
packages/kotlin-language-server/default.nix
Normal file
18
packages/kotlin-language-server/default.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
|
||||||
|
with pkgs;
|
||||||
|
let
|
||||||
|
buildGradle = callPackage ./gradle-env.nix {};
|
||||||
|
in
|
||||||
|
buildGradle {
|
||||||
|
envSpec = ./gradle-env.json;
|
||||||
|
src = fetchTarball {
|
||||||
|
url = "https://github.com/fwcd/kotlin-language-server/archive/master.tar.gz";
|
||||||
|
sha256 = "0spcxrk6gyxrrwnffsmr2f5y8zs0nq1fq2pkscih56zxz0v3dm50";
|
||||||
|
};
|
||||||
|
gradleFlags = [ "server:installDist" ];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
cp -r server/build/install/server/* $out/
|
||||||
|
'';
|
||||||
|
}
|
2396
packages/kotlin-language-server/gradle-env.json
Normal file
2396
packages/kotlin-language-server/gradle-env.json
Normal file
File diff suppressed because it is too large
Load diff
283
packages/kotlin-language-server/gradle-env.nix
Normal file
283
packages/kotlin-language-server/gradle-env.nix
Normal file
|
@ -0,0 +1,283 @@
|
||||||
|
# This file is generated by gradle2nix.
|
||||||
|
#
|
||||||
|
# Example usage (e.g. in default.nix):
|
||||||
|
#
|
||||||
|
# with (import <nixpkgs> {});
|
||||||
|
# let
|
||||||
|
# buildGradle = callPackage ./gradleEnv.nix {};
|
||||||
|
# in
|
||||||
|
# buildGradle {
|
||||||
|
# envSpec = ./gradle-env.json;
|
||||||
|
#
|
||||||
|
# src = ./.;
|
||||||
|
#
|
||||||
|
# gradleFlags = [ "installDist" ];
|
||||||
|
#
|
||||||
|
# installPhase = ''
|
||||||
|
# mkdir -p $out
|
||||||
|
# cp -r app/build/install/myproject $out
|
||||||
|
# '';
|
||||||
|
# }
|
||||||
|
|
||||||
|
{ stdenv, buildEnv, fetchurl, gradleGen, writeText, writeTextDir }:
|
||||||
|
|
||||||
|
{ envSpec
|
||||||
|
, pname ? null
|
||||||
|
, version ? null
|
||||||
|
, enableParallelBuilding ? true
|
||||||
|
, gradleFlags ? [ "build" ]
|
||||||
|
, gradlePackage ? null
|
||||||
|
, enableDebug ? false
|
||||||
|
, ...
|
||||||
|
} @ args:
|
||||||
|
let
|
||||||
|
inherit (builtins)
|
||||||
|
filter sort replaceStrings attrValues match fromJSON
|
||||||
|
concatStringsSep
|
||||||
|
;
|
||||||
|
|
||||||
|
inherit (stdenv.lib)
|
||||||
|
versionOlder unique mapAttrs last concatMapStringsSep removeSuffix
|
||||||
|
optionalString groupBy' readFile hasSuffix
|
||||||
|
;
|
||||||
|
|
||||||
|
mkDep = depSpec: stdenv.mkDerivation {
|
||||||
|
inherit (depSpec) name;
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
inherit (depSpec) urls sha256;
|
||||||
|
};
|
||||||
|
|
||||||
|
phases = "installPhase";
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/${depSpec.path}
|
||||||
|
ln -s $src $out/${depSpec.path}/${depSpec.name}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
mkModuleMetadata = deps:
|
||||||
|
let
|
||||||
|
ids = filter
|
||||||
|
(id: id.type == "pom")
|
||||||
|
(map (dep: dep.id) deps);
|
||||||
|
|
||||||
|
modules = groupBy'
|
||||||
|
(
|
||||||
|
meta: id:
|
||||||
|
let
|
||||||
|
isNewer = versionOlder meta.latest id.version;
|
||||||
|
isNewerRelease =
|
||||||
|
!(hasSuffix "-SNAPSHOT" id.version)
|
||||||
|
&& versionOlder meta.release id.version;
|
||||||
|
in {
|
||||||
|
groupId = id.group;
|
||||||
|
artifactId = id.name;
|
||||||
|
latest = if isNewer then id.version else meta.latest;
|
||||||
|
release = if isNewerRelease then id.version else meta.release;
|
||||||
|
versions = meta.versions ++ [ id.version ];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
{
|
||||||
|
latest = "";
|
||||||
|
release = "";
|
||||||
|
versions = [];
|
||||||
|
}
|
||||||
|
(id: "${replaceStrings [ "." ] [ "/" ] id.group}/${id.name}/maven-metadata.xml")
|
||||||
|
ids;
|
||||||
|
in
|
||||||
|
attrValues (
|
||||||
|
mapAttrs (
|
||||||
|
path: meta:
|
||||||
|
let
|
||||||
|
versions' = sort versionOlder (unique meta.versions);
|
||||||
|
in
|
||||||
|
with meta; writeTextDir path ''
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<metadata modelVersion="1.1">
|
||||||
|
<groupId>${groupId}</groupId>
|
||||||
|
<artifactId>${artifactId}</artifactId>
|
||||||
|
<versioning>
|
||||||
|
${optionalString (latest != "") "<latest>${latest}</latest>"}
|
||||||
|
${optionalString (release != "") "<release>${release}</release>"}
|
||||||
|
<versions>
|
||||||
|
${concatMapStringsSep "\n " (v: "<version>${v}</version>") versions'}
|
||||||
|
</versions>
|
||||||
|
</versioning>
|
||||||
|
</metadata>
|
||||||
|
''
|
||||||
|
) modules
|
||||||
|
);
|
||||||
|
|
||||||
|
mkSnapshotMetadata = deps:
|
||||||
|
let
|
||||||
|
snapshotDeps = filter (dep: dep ? build && dep ? timestamp) deps;
|
||||||
|
|
||||||
|
modules = groupBy'
|
||||||
|
(
|
||||||
|
meta: dep:
|
||||||
|
let
|
||||||
|
id = dep.id;
|
||||||
|
isNewer = dep.build > meta.buildNumber;
|
||||||
|
# Timestamp values can be bogus, e.g. jitpack.io
|
||||||
|
updated = if (match "[0-9]{8}\.[0-9]{6}" dep.timestamp) != null
|
||||||
|
then replaceStrings [ "." ] [ "" ] dep.timestamp
|
||||||
|
else "";
|
||||||
|
in {
|
||||||
|
groupId = id.group;
|
||||||
|
artifactId = id.name;
|
||||||
|
version = id.version;
|
||||||
|
timestamp = if isNewer then dep.timestamp else meta.timestamp;
|
||||||
|
buildNumber = if isNewer then dep.build else meta.buildNumber;
|
||||||
|
lastUpdated = if isNewer then updated else meta.lastUpdated;
|
||||||
|
versions = meta.versions or [] ++ [
|
||||||
|
{
|
||||||
|
classifier = id.classifier or "";
|
||||||
|
extension = id.extension;
|
||||||
|
value = "${removeSuffix "-SNAPSHOT" id.version}-${dep.timestamp}-${toString dep.build}";
|
||||||
|
updated = updated;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
{
|
||||||
|
timestamp = "";
|
||||||
|
buildNumber = -1;
|
||||||
|
lastUpdated = "";
|
||||||
|
}
|
||||||
|
(dep: "${replaceStrings [ "." ] [ "/" ] dep.id.group}/${dep.id.name}/${dep.id.version}/maven-metadata.xml")
|
||||||
|
snapshotDeps;
|
||||||
|
|
||||||
|
mkSnapshotVersion = version: ''
|
||||||
|
<snapshotVersion>
|
||||||
|
${optionalString (version.classifier != "") "<classifier>${version.classifier}</classifier>"}
|
||||||
|
<extension>${version.extension}</extension>
|
||||||
|
<value>${version.value}</value>
|
||||||
|
${optionalString (version.updated != "") "<updated>${version.updated}</updated>"}
|
||||||
|
</snapshotVersion>
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
attrValues (
|
||||||
|
mapAttrs (
|
||||||
|
path: meta:
|
||||||
|
with meta; writeTextDir path ''
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<metadata modelVersion="1.1">
|
||||||
|
<groupId>${groupId}</groupId>
|
||||||
|
<artifactId>${artifactId}</artifactId>
|
||||||
|
<version>${version}</version>
|
||||||
|
<versioning>
|
||||||
|
<snapshot>
|
||||||
|
${optionalString (timestamp != "") "<timestamp>${timestamp}</timestamp>"}
|
||||||
|
${optionalString (buildNumber != -1) "<buildNumber>${toString buildNumber}</buildNumber>"}
|
||||||
|
</snapshot>
|
||||||
|
${optionalString (lastUpdated != "") "<lastUpdated>${lastUpdated}</lastUpdated>"}
|
||||||
|
<snapshotVersions>
|
||||||
|
${concatMapStringsSep "\n " mkSnapshotVersion versions}
|
||||||
|
</snapshotVersions>
|
||||||
|
</versioning>
|
||||||
|
</metadata>
|
||||||
|
''
|
||||||
|
) modules
|
||||||
|
);
|
||||||
|
|
||||||
|
mkRepo = project: type: deps: buildEnv {
|
||||||
|
name = "${project}-gradle-${type}-env";
|
||||||
|
paths = map mkDep deps ++ mkModuleMetadata deps ++ mkSnapshotMetadata deps;
|
||||||
|
};
|
||||||
|
|
||||||
|
mkInitScript = projectSpec:
|
||||||
|
let
|
||||||
|
repos = mapAttrs (mkRepo projectSpec.name) projectSpec.dependencies;
|
||||||
|
in
|
||||||
|
writeText "init.gradle" ''
|
||||||
|
static def offlineRepo(RepositoryHandler repositories, String env, String path) {
|
||||||
|
repositories.clear()
|
||||||
|
repositories.maven {
|
||||||
|
name "Nix''${env.capitalize()}MavenOffline"
|
||||||
|
url path
|
||||||
|
metadataSources {
|
||||||
|
it.gradleMetadata()
|
||||||
|
it.mavenPom()
|
||||||
|
it.artifact()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
repositories.ivy {
|
||||||
|
name "Nix''${env.capitalize()}IvyOffline"
|
||||||
|
url path
|
||||||
|
layout "maven"
|
||||||
|
metadataSources {
|
||||||
|
it.gradleMetadata()
|
||||||
|
it.ivyDescriptor()
|
||||||
|
it.artifact()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gradle.settingsEvaluated {
|
||||||
|
offlineRepo(it.pluginManagement.repositories, "plugin", "${repos.plugin}")
|
||||||
|
}
|
||||||
|
|
||||||
|
gradle.projectsLoaded {
|
||||||
|
allprojects {
|
||||||
|
buildscript {
|
||||||
|
offlineRepo(repositories, "buildscript", "${repos.buildscript}")
|
||||||
|
}
|
||||||
|
offlineRepo(repositories, "project", "${repos.project}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
mkGradle = gradleSpec:
|
||||||
|
gradleGen.gradleGen {
|
||||||
|
inherit (gradleSpec) nativeVersion;
|
||||||
|
|
||||||
|
name = "gradle-${gradleSpec.version}-${gradleSpec.type}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
inherit (gradleSpec) url sha256;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mkProjectEnv = projectSpec: {
|
||||||
|
inherit (projectSpec) name version;
|
||||||
|
initScript = mkInitScript projectSpec;
|
||||||
|
gradle = args.gradlePackage or mkGradle projectSpec.gradle;
|
||||||
|
};
|
||||||
|
|
||||||
|
gradleEnv = mapAttrs
|
||||||
|
(_: p: mkProjectEnv p)
|
||||||
|
(fromJSON (readFile envSpec));
|
||||||
|
|
||||||
|
projectEnv = gradleEnv."";
|
||||||
|
pname = args.pname or projectEnv.name;
|
||||||
|
version = args.version or projectEnv.version;
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation (
|
||||||
|
args // {
|
||||||
|
|
||||||
|
inherit pname version;
|
||||||
|
|
||||||
|
nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ projectEnv.gradle ];
|
||||||
|
|
||||||
|
buildPhase = args.buildPhase or ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
env \
|
||||||
|
"GRADLE_USER_HOME=$(mktemp -d)" \
|
||||||
|
gradle --offline --no-daemon --no-build-cache \
|
||||||
|
--info --full-stacktrace --warning-mode=all \
|
||||||
|
${optionalString enableParallelBuilding "--parallel"} \
|
||||||
|
${optionalString enableDebug "-Dorg.gradle.debug=true"} \
|
||||||
|
--init-script ${projectEnv.initScript} \
|
||||||
|
${concatStringsSep " " gradleFlags}
|
||||||
|
)
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
dontStrip = true;
|
||||||
|
}
|
||||||
|
)
|
|
@ -51,11 +51,20 @@
|
||||||
|
|
||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
users.users.charlotte.extraGroups = [ "docker" "video" "input" "networkmanager" ];
|
users.users.charlotte.extraGroups = [
|
||||||
|
"adbusers"
|
||||||
|
"docker"
|
||||||
|
"input"
|
||||||
|
"networkmanager"
|
||||||
|
"video"
|
||||||
|
];
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ eid-mw ];
|
environment.systemPackages = with pkgs; [ eid-mw ];
|
||||||
|
|
||||||
programs.gnupg.package = pkgs.gnupg.override { guiSupport = true; };
|
programs = {
|
||||||
|
gnupg.package = pkgs.gnupg.override { guiSupport = true; };
|
||||||
|
adb.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
home-manager.users.charlotte = { pkgs, ... }: {
|
home-manager.users.charlotte = { pkgs, ... }: {
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
|
@ -13,6 +13,12 @@ windows:
|
||||||
panes:
|
panes:
|
||||||
- nvim
|
- nvim
|
||||||
- git status
|
- git status
|
||||||
|
- android:
|
||||||
|
root: "/home/charlotte/repos/accentor/android"
|
||||||
|
layout: main-vertical
|
||||||
|
panes:
|
||||||
|
- nvim
|
||||||
|
- git status
|
||||||
- desktop:
|
- desktop:
|
||||||
root: "/home/charlotte/repos/accentor/desktop"
|
root: "/home/charlotte/repos/accentor/desktop"
|
||||||
layout: main-vertical
|
layout: main-vertical
|
||||||
|
|
69
shells/android.nix
Normal file
69
shells/android.nix
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
let
|
||||||
|
pkgs = import <nixpkgs> { config.android_sdk.accept_license = true; };
|
||||||
|
baseVimConfig = import ../programs/neovim/base.nix { inherit pkgs; };
|
||||||
|
jdtls = import ../packages/jdtls/default.nix { inherit pkgs; stdenv = pkgs.stdenv; };
|
||||||
|
kotlinls = import ../packages/kotlin-language-server/default.nix { inherit pkgs; };
|
||||||
|
composed = pkgs.androidenv.composeAndroidPackages {
|
||||||
|
toolsVersion = "26.1.1";
|
||||||
|
platformToolsVersion = "28.0.1";
|
||||||
|
buildToolsVersions = [ "28.0.3" ];
|
||||||
|
# includeEmulator = false;
|
||||||
|
# emulatorVersion = "27.2.0";
|
||||||
|
platformVersions = [ "29" ];
|
||||||
|
includeSources = false;
|
||||||
|
includeDocs = false;
|
||||||
|
# includeSystemImages = false;
|
||||||
|
# systemImageTypes = [ "default" ];
|
||||||
|
# abiVersions = [ "armeabi-v7a" ];
|
||||||
|
# lldbVersions = [ "2.0.2558144" ];
|
||||||
|
# cmakeVersions = [ "3.6.4111459" ];
|
||||||
|
# includeNDK = false;
|
||||||
|
# ndkVersion = "16.1.4479499";
|
||||||
|
# useGoogleAPIs = false;
|
||||||
|
# useGoogleTVAddOns = false;
|
||||||
|
# includeExtras = [ "extras;google;gcm" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
customPlugins.kotlin-vim = pkgs.vimUtils.buildVimPlugin {
|
||||||
|
name = "kotlin-vim";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "udalov";
|
||||||
|
repo = "kotlin-vim";
|
||||||
|
rev = "b9fa728701a0aa0b9a2ffe92f10880348fc27a8f";
|
||||||
|
sha256 = "1yqzxabhpc4jbdlzhsysp0vi1ayqg0vnpysvx4ynd9961q2fk3sz";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.mkShell {
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
jdk11
|
||||||
|
jdtls
|
||||||
|
(
|
||||||
|
neovim.override {
|
||||||
|
configure = {
|
||||||
|
customRC = baseVimConfig.customRC + ''
|
||||||
|
" Required for operations modifying multiple buffers like rename
|
||||||
|
set hidden
|
||||||
|
|
||||||
|
let g:LanguageClient_serverCommands = {
|
||||||
|
\ 'java': ['${jdtls}/bin/jdtls'],
|
||||||
|
\ 'kotlin': ['${kotlinls}/bin/kotlin-language-server']
|
||||||
|
\ }
|
||||||
|
'';
|
||||||
|
vam.knownPlugins = baseVimConfig.vam.knownPlugins // customPlugins;
|
||||||
|
vam.pluginDictionaries = (baseVimConfig.vam.pluginDictionaries or []) ++ [
|
||||||
|
{
|
||||||
|
names = [
|
||||||
|
"kotlin-vim"
|
||||||
|
"LanguageClient-neovim"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
)
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
export ANDROID_SDK_ROOT="${composed.androidsdk}/libexec/android-sdk/"
|
||||||
|
'';
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue