diff --git a/README.md b/README.md index a4c62ab0..c1f38272 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,9 @@ store. ## 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 `ln -s /path/to/correct/file.nix shell.nix`. +* Execute `use_flake /path/to/repo#name-of-shell > .envrc` to initialize the `.envrc` file. * Execute `direnv allow` to load the `.envrc` file which in turn loads your environment. diff --git a/flake.nix b/flake.nix index 394a1fe2..1eebfef3 100644 --- a/flake.nix +++ b/flake.nix @@ -90,21 +90,7 @@ }; hostDefaults = { modules = [ - ({ lib, pkgs, ... }: { - 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" ]; - }) + { nix.generateRegistryFromInputs = true; } accentor.nixosModule agenix.nixosModules.age home-manager.nixosModule @@ -132,6 +118,63 @@ 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 ]; + }) + ]; + }; }; }; }; diff --git a/modules/development/git/default.nix b/modules/development/git/default.nix index 78a74bde..819aa572 100644 --- a/modules/development/git/default.nix +++ b/modules/development/git/default.nix @@ -32,11 +32,9 @@ tag.gpgSign = true; }; ignores = [ + ".data" ".direnv" ".envrc" - "shell.nix" - # Ruby dependencies in source tree - "/vendor/bundle" ]; signing = { key = "charlotte@vanpetegem.me"; diff --git a/shells/accentor-android.nix b/shells/accentor-android.nix deleted file mode 100644 index fc204814..00000000 --- a/shells/accentor-android.nix +++ /dev/null @@ -1,64 +0,0 @@ -let - pkgs = import { 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 {}; - 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/" - ''; -} diff --git a/shells/accentor-api.nix b/shells/accentor-api.nix deleted file mode 100644 index 05707c22..00000000 --- a/shells/accentor-api.nix +++ /dev/null @@ -1,29 +0,0 @@ -let - pkgs = import { }; -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" - ''; -} diff --git a/shells/accentor-web.nix b/shells/accentor-web.nix deleted file mode 100644 index 3856032f..00000000 --- a/shells/accentor-web.nix +++ /dev/null @@ -1,10 +0,0 @@ -let - pkgs = import { }; -in -pkgs.mkShell { - buildInputs = with pkgs; [ - nodejs-12_x - python38 - yarn - ]; -} diff --git a/shells/dodona-docs.nix b/shells/dodona-docs.nix deleted file mode 100644 index 2099dc92..00000000 --- a/shells/dodona-docs.nix +++ /dev/null @@ -1,12 +0,0 @@ -let - pkgs = import { }; -in -pkgs.mkShell { - buildInputs = with pkgs; [ - nodejs-12_x - yarn - ]; - shellHook = '' - export PUPPETEER_EXECUTABLE_PATH="${pkgs.ungoogled-chromium}/bin/chromium" - ''; -} diff --git a/shells/dodona.nix b/shells/dodona.nix deleted file mode 100644 index 19884f16..00000000 --- a/shells/dodona.nix +++ /dev/null @@ -1,32 +0,0 @@ -let - pkgs = import { }; -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" - ''; -} diff --git a/shells/idea-code-with-me.nix b/shells/idea-code-with-me.nix deleted file mode 100644 index 11ac8d68..00000000 --- a/shells/idea-code-with-me.nix +++ /dev/null @@ -1,7 +0,0 @@ -let - pkgs = import { }; -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 diff --git a/shells/javafx.nix b/shells/javafx.nix deleted file mode 100644 index 7d1a2651..00000000 --- a/shells/javafx.nix +++ /dev/null @@ -1,19 +0,0 @@ -let - pkgs = import { }; -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 - ]; -} diff --git a/shells/r.nix b/shells/r.nix deleted file mode 100644 index 360e1985..00000000 --- a/shells/r.nix +++ /dev/null @@ -1,20 +0,0 @@ -let - pkgs = import { }; -in -pkgs.mkShell { - buildInputs = [ - (pkgs.rWrapper.override { - packages = with pkgs.rPackages; [ - base64enc - dplyr - dslabs - jsonlite - knitr - lintr - R6 - rlang - styler - ]; - }) - ]; -}