{ pkgs, lib, config, inputs, ... }: { imports = [ ./nix/kafka.nix ]; # https://devenv.sh/packages/ packages = [ pkgs.git pkgs.jetbrains.idea-community-bin pkgs.yaml-language-server ]; languages.java.enable = true; languages.java.maven.enable = true; languages.nix.enable = true; scripts = let datasource = "-Dspring.datasource.url=jdbc:postgresql://${config.services.postgres.listen_addresses}:5432"; startFlexinale = name: db: '' java ${datasource}/${db} -jar flex-training-flexinale/flexinale-${name}/target/flexinale-${name}-2024.3.0-spring-boot-fat-jar.jar ''; in { "monolith-run".exec = startFlexinale "monolith" "monolith"; "modulith-1-run".exec = startFlexinale "modulith-1-onion" "modulith-1"; "modulith-2-run".exec = startFlexinale "modulith-2-components" "modulith-2"; "monolith-init".exec = '' cd ${config.env.DEVENV_ROOT}/flex-training-flexinale mvn test -Dtest=testdata.TestDataLoader -pl flexinale-monolith -am ''; "modulith-1-init".exec = '' cd ${config.env.DEVENV_ROOT}/flex-training-flexinale mvn test -Dtest=testdata.TestDataLoader -pl flexinale-modulith-1-onion -am ''; "modulith-2-init".exec = '' cd ${config.env.DEVENV_ROOT}/flex-training-flexinale mvn test -Dtest=testdata.AllTestDataLoader -pl flexinale-modulith-2-components -am ''; "distributed-init".exec = '' cd ${config.env.DEVENV_ROOT}/flex-training-flexinale mvn test -Dtest=testdata.AllTestDataLoader -pl flexinale-distributed -am mvn test -Dtest=testdata.FKKsVTestDataLoader -pl flexinale-distributed -am ''; "distributed-portal".exec = '' java ${datasource}/distributed-besucherportal \ -Dbootstrap.servers=localhost:9092 \ -Dspring.kafka.consumer.bootstrap-servers=localhost:9092 \ -Dspring.kafka.producer.bootstrap-servers=localhost:9092 \ -jar flex-training-flexinale/flexinale-distributed/flexinale-distributed-besucherportal/target/flexinale-distributed-besucherportal-2024.3.0-spring-boot-fat-jar.jar ''; "distributed-backoffice".exec = '' java ${datasource}/distributed-backoffice \ -Dbootstrap.servers=localhost:9092 \ -Dspring.kafka.consumer.bootstrap-servers=localhost:9092 \ -Dspring.kafka.producer.bootstrap-servers=localhost:9092 \ -jar flex-training-flexinale/flexinale-distributed/flexinale-distributed-backoffice/target/flexinale-distributed-backoffice-2024.3.0-spring-boot-fat-jar.jar ''; "distributed-ticketing".exec = '' java ${datasource}/distributed-ticketing \ -Dbootstrap.servers=localhost:9092 \ -Dspring.kafka.consumer.bootstrap-servers=localhost:9092 \ -Dspring.kafka.producer.bootstrap-servers=localhost:9092 \ -jar flex-training-flexinale/flexinale-distributed/flexinale-distributed-ticketing/target/flexinale-distributed-ticketing-2024.3.0-spring-boot-fat-jar.jar ''; }; services.kafka = { enable = true; clusterId = "foobar"; settings = { "broker.id" = 1; "node.id" = 1; "offsets.topic.replication.factor" = 1; "transaction.state.log.replication.factor" = 1; "transaction.state.log.min.isr" = 1; "process.roles" = [ "broker" "controller" ]; "listeners" = [ "PLAINTEXT://:9092" "FLEXINALE://:29092" "CONTROLLER://:9093" ]; "listener.security.protocol.map" = [ "PLAINTEXT:PLAINTEXT" "FLEXINALE:PLAINTEXT" "CONTROLLER:PLAINTEXT" ]; "controller.quorum.voters" = [ "1@localhost:9093" ]; "controller.listener.names" = [ "CONTROLLER" ]; }; }; services.postgres = { enable = true; listen_addresses = "127.0.0.1"; initialScript = let createDB = n: '' CREATE DATABASE "${n}"; GRANT ALL PRIVILEGES ON DATABASE "${n}" TO "flexinale"; ''; in '' CREATE USER flexinale WITH SUPERUSER PASSWORD 'flexinale'; '' + (lib.strings.concatMapStringsSep "\n" createDB [ "monolith" "modulith-1" "modulith-2" "distributed-backoffice" "distributed-besucherportal" "distributed-ticketing" "distributed-test" ]); }; # https://devenv.sh/processes/ processes.distributed-portal.exec = config.scripts.distributed-portal.exec; processes.distributed-backoffice.exec = config.scripts.distributed-backoffice.exec; processes.distributed-ticketing.exec = config.scripts.distributed-ticketing.exec; # https://devenv.sh/tests/ enterTest = '' echo "Running tests" git --version | grep --color=auto "${pkgs.git.version}" ''; # https://devenv.sh/pre-commit-hooks/ pre-commit.hooks.shellcheck.enable = true; # See full reference at https://devenv.sh/reference/options/ }