Move foreign dev shells to flake outputs
This commit is contained in:
parent
b451416d6f
commit
311770ad2e
11 changed files with 61 additions and 215 deletions
|
@ -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.
|
||||||
|
|
||||||
|
|
73
flake.nix
73
flake.nix
|
@ -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 ];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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/"
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -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"
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
let
|
|
||||||
pkgs = import <nixpkgs> { };
|
|
||||||
in
|
|
||||||
pkgs.mkShell {
|
|
||||||
buildInputs = with pkgs; [
|
|
||||||
nodejs-12_x
|
|
||||||
python38
|
|
||||||
yarn
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -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"
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -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"
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -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
|
|
|
@ -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
|
|
||||||
];
|
|
||||||
}
|
|
20
shells/r.nix
20
shells/r.nix
|
@ -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
|
|
||||||
];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue