Move foreign dev shells to flake outputs

This commit is contained in:
Charlotte Van Petegem 2022-04-30 16:06:29 +02:00
parent b451416d6f
commit 311770ad2e
No known key found for this signature in database
GPG key ID: 019E764B7184435A
11 changed files with 61 additions and 215 deletions

View file

@ -9,11 +9,9 @@ store.
## Setting up a new dev environment ## Setting up a new dev environment
* Create a new `*.nix` file in the shells directory that describes the environment (this is the hard part). * Add a shell to the devShells output in `flake.nix`.
* Execute `use_nix > .envrc` to initialize the `.envrc` file. * Execute `use_flake /path/to/repo#name-of-shell > .envrc` to initialize the `.envrc` file.
* Execute `ln -s /path/to/correct/file.nix shell.nix`.
* Execute `direnv allow` to load the `.envrc` file which in turn loads your environment. * Execute `direnv allow` to load the `.envrc` file which in turn loads your environment.

View file

@ -90,21 +90,7 @@
}; };
hostDefaults = { hostDefaults = {
modules = [ modules = [
({ lib, pkgs, ... }: { { nix.generateRegistryFromInputs = true; }
environment.etc = lib.mapAttrs'
(key: val: {
name = "channels/${key}";
value = {
source = pkgs.runCommandNoCC "${key}-channel" { } ''
mkdir $out
echo "${val.rev or (toString val.lastModified)}" > $out/.version-suffix
echo "import ${val.outPath}/default.nix" > $out/default.nix
'';
};
})
inputs;
nix.nixPath = [ "/etc/channels" ];
})
accentor.nixosModule accentor.nixosModule
agenix.nixosModules.age agenix.nixosModules.age
home-manager.nixosModule home-manager.nixosModule
@ -132,6 +118,63 @@
agenix.defaultPackage.x86_64-linux agenix.defaultPackage.x86_64-linux
]; ];
}; };
accentor-api-client-js = pkgs.devshell.mkShell {
name = "Accentor API client in JavaScript";
packages = with pkgs; [ nodejs yarn ];
};
dodona = pkgs.devshell.mkShell {
name = "Dodona";
imports = [ "${devshell}/extra/language/c.nix" ];
packages = with pkgs; [
(pkgs.lowPrio binutils)
chromedriver
findutils
gnumake
nodejs
ruby_3_0
yarn
];
env = [
{ name = "DATABASE_URL"; value = "mysql2://root:dodona@127.0.0.1:3306/dodona"; }
{ name = "TEST_DATABASE_URL"; value = "mysql2://root:dodona@127.0.0.1:3306/dodona_test"; }
{ name = "GEM_HOME"; eval = "$PRJ_DATA_DIR/bundle/$(ruby -e 'puts RUBY_VERSION')"; }
{ name = "PATH"; prefix = "$GEM_HOME/bin"; }
];
commands = [
{
name = "start-dockers";
category = "general commands";
help = "Start mysql and memcached in docker containers";
command = ''
trap "systemd-run --user --no-block docker stop dodona-db dodona-cache" 0
docker run -d --name dodona-db -p 3306:3306 --rm -v dodona-db-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=dodona mariadb:latest
docker run -d --name dodona-cache -p 11211:11211 --rm memcached:latest
while [ 1 -eq 1 ]
do
sleep 1000
done
'';
}
];
language.c = {
compiler = pkgs.gcc;
includes = [ pkgs.libmysqlclient pkgs.zlib ];
libraries = [ pkgs.libmysqlclient pkgs.zlib ];
};
};
dodona-docs = pkgs.devshell.mkShell {
name = "Dodona Docs";
env = [{ name = "PUPPETEER_EXECUTABLE_PATH"; eval = "${pkgs.ungoogled-chromium}/bin/chromium"; }];
packages = with pkgs; [ nodejs yarn ];
};
dodona-judge-r = pkgs.devshell.mkShell {
name = "R judge";
packages = [
(pkgs.rWrapper.override {
packages = with pkgs.rPackages; [ base64enc dplyr dslabs jsonlite knitr lintr R6 rlang styler ];
})
];
};
}; };
}; };
}; };

View file

@ -32,11 +32,9 @@
tag.gpgSign = true; tag.gpgSign = true;
}; };
ignores = [ ignores = [
".data"
".direnv" ".direnv"
".envrc" ".envrc"
"shell.nix"
# Ruby dependencies in source tree
"/vendor/bundle"
]; ];
signing = { signing = {
key = "charlotte@vanpetegem.me"; key = "charlotte@vanpetegem.me";

View file

@ -1,64 +0,0 @@
let
pkgs = import <nixpkgs> { config.android_sdk.accept_license = true; };
buildToolsVersion = "29.0.2";
composed = pkgs.androidenv.composeAndroidPackages {
toolsVersion = "26.1.1";
platformToolsVersion = "29.0.6";
buildToolsVersions = [ buildToolsVersion ];
# includeEmulator = false;
# emulatorVersion = "27.2.0";
platformVersions = [ "29" ];
includeSources = true;
includeDocs = true;
# 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" ];
};
gradle-fhs-nix = pkgs.writeText "gradle-fhs.nix" ''
{ run }:
let
pkgs = import <nixpkgs> {};
in
(pkgs.buildFHSUserEnv {
name = "android-sdk-env";
targetPkgs = pkgs: (with pkgs; [ glibc ]);
profile = '''
export ANDROID_SDK_ROOT="${composed.androidsdk}/libexec/android-sdk/"
''';
runScript = "bash -c '''''${run}'''";
}).env
'';
gradle-run-script = pkgs.writeShellScriptBin "gradle" ''
REPO_ROOT="$(git rev-parse --show-toplevel)"
nix-shell --argstr run "\"$REPO_ROOT/gradlew $@\"" "${gradle-fhs-nix}"
'';
sign-release = pkgs.writeShellScriptBin "sign-release" ''
BUILD_TOOLS_PATH="${composed.androidsdk}/libexec/android-sdk/build-tools/${buildToolsVersion}"
REPO_ROOT="$(git rev-parse --show-toplevel)"
APK_DIR="$REPO_ROOT/app/build/outputs/apk/release"
rm "$APK_DIR/"*
${gradle-run-script}/bin/gradle assembleRelease
"$BUILD_TOOLS_PATH/zipalign" -v -p 4 "$APK_DIR/app-release-unsigned.apk" "$APK_DIR/app-release-unsigned-aligned.apk"
"$BUILD_TOOLS_PATH/apksigner" sign --ks "$REPO_ROOT/keystore.jks" --out "$APK_DIR/app-release.apk" "$APK_DIR/app-release-unsigned-aligned.apk"
"$BUILD_TOOLS_PATH/apksigner" verify "$APK_DIR/app-release.apk"
'';
in
pkgs.mkShell {
buildInputs = with pkgs; [
gradle-run-script
sign-release
jdk11
];
shellHook = ''
export ANDROID_SDK_ROOT="${composed.androidsdk}/libexec/android-sdk/"
'';
}

View file

@ -1,29 +0,0 @@
let
pkgs = import <nixpkgs> { };
in
pkgs.mkShell {
buildInputs = with pkgs; [
ffmpeg
imagemagick
postgresql
ruby_3_1
taglib
zlib
(
pkgs.writeShellScriptBin "start-db" ''
trap "systemd-run --user --no-block docker stop accentor-db" 0
docker run -d --name accentor-db -p 5432:5432 --rm -v accentor-db-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=accentor postgres:latest
while [ 1 -eq 1 ]
do
sleep 1000
done
''
)
];
shellHook = ''
export DATABASE_URL="postgres://postgres:accentor@127.0.0.1:5432/accentor"
export GEM_HOME="$PWD/vendor/bundle/$(ruby -e 'puts RUBY_VERSION')"
export PATH="$GEM_HOME/bin:$PATH"
'';
}

View file

@ -1,10 +0,0 @@
let
pkgs = import <nixpkgs> { };
in
pkgs.mkShell {
buildInputs = with pkgs; [
nodejs-12_x
python38
yarn
];
}

View file

@ -1,12 +0,0 @@
let
pkgs = import <nixpkgs> { };
in
pkgs.mkShell {
buildInputs = with pkgs; [
nodejs-12_x
yarn
];
shellHook = ''
export PUPPETEER_EXECUTABLE_PATH="${pkgs.ungoogled-chromium}/bin/chromium"
'';
}

View file

@ -1,32 +0,0 @@
let
pkgs = import <nixpkgs> { };
in
pkgs.mkShell {
buildInputs = with pkgs; [
chromedriver
libmysqlclient
nodejs-14_x
ruby_3_0
yarn
zlib
(
pkgs.writeShellScriptBin "start-dockers" ''
trap "systemd-run --user --no-block docker stop dodona-db dodona-cache" 0
docker run -d --name dodona-db -p 3306:3306 --rm -v dodona-db-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=dodona mariadb:latest
docker run -d --name dodona-cache -p 11211:11211 --rm memcached:latest
while [ 1 -eq 1 ]
do
sleep 1000
done
''
)
];
shellHook = ''
export TEST_DATABASE_URL="mysql2://root:dodona@127.0.0.1:3306/dodona_test"
export DATABASE_URL="mysql2://root:dodona@127.0.0.1:3306/dodona"
export GEM_HOME="$PWD/vendor/bundle/$(ruby -e 'puts RUBY_VERSION')"
export PATH="$GEM_HOME/bin:$PATH"
'';
}

View file

@ -1,7 +0,0 @@
let
pkgs = import <nixpkgs> { };
in
(pkgs.buildFHSUserEnv {
name = "idea-env";
targetPkgs = pkgs: [ pkgs.jdk11 pkgs.wget pkgs.bash pkgs.zlib pkgs.xlibs.libXext pkgs.xlibs.libX11 pkgs.xlibs.libXrender pkgs.xlibs.libXtst pkgs.xlibs.libXi pkgs.freetype pkgs.fontconfig ];
}).env

View file

@ -1,19 +0,0 @@
let
pkgs = import <nixpkgs> { };
in
pkgs.mkShell {
buildInputs = with pkgs; [
(
pkgs.writeShellScriptBin "compile" ''
find src -name '*.java' -print0 | xargs --no-run-if-empty -0 ${jdk17}/bin/javac -d out -sourcepath src
find src -type d -printf '%P\0' | xargs -0 -I \{\} mkdir -p out/\{\}
find resources -type d -printf '%P\0' | xargs -0 -I \{\} mkdir -p out/\{\}
find src -type f -not -name '*.java' -printf '%P\0' | xargs -0 -I \{\} cp src/\{\} out/\{\}
find resources -type f -not -name '*.java' -printf '%P\0' | xargs -0 -I \{\} cp resources/\{\} out/\{\}
(cd out && ${jdk17}/bin/java polis.Main)
''
)
jdk17
openjfx17
];
}

View file

@ -1,20 +0,0 @@
let
pkgs = import <nixpkgs> { };
in
pkgs.mkShell {
buildInputs = [
(pkgs.rWrapper.override {
packages = with pkgs.rPackages; [
base64enc
dplyr
dslabs
jsonlite
knitr
lintr
R6
rlang
styler
];
})
];
}