From 637628f5f40f8b56a1809d1b250ff3ccd0511081 Mon Sep 17 00:00:00 2001 From: mtgmonkey Date: Tue, 10 Jun 2025 06:57:48 -0400 Subject: [PATCH] simplify --- flake.nix | 80 ++++++++++++++++++++++++++++++++++++++++++++-- jank-client.nix | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ result | 2 +- 3 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 jank-client.nix diff --git a/flake.nix b/flake.nix index a4a61e0..5894b80 100644 --- a/flake.nix +++ b/flake.nix @@ -12,17 +12,91 @@ pkgs.compose2nix ]; buildPhase = '' - compose2nix -runtime "docker" -inputs "compose.yaml" -output "jank-client.nix" -project "jank-client" echo "#!/usr/bin/env bash" > start-server echo "systemctl start docker-build-jank-client-jank.service" >> start-server echo "systemctl restart docker-jank-client-jank.service" >> start-server ''; installPhase = '' mkdir $out/bin -p + mkdir $out/src -p cp start-server $out/bin/jank-client - cp jank-client.nix $out/jank-client.nix + cp . $out/src ''; }; + port = 8920; + source = "${pkgs.callPackage pkg}/src"; + module = { + lib, + config, + ... + }: { + virtualisation.docker = { + enable = true; + autoPrune.enable = true; + }; + virtualisation.oci-containers.backend = "docker"; + virtualisation.oci-containers.containers."jank-client-jank" = { + image = "compose2nix/jank-client-jank"; + ports = [ + "${port}:8080/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=jank" + "--network=jank-client_default" + ]; + }; + systemd.services."docker-jank-client-jank" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-jank-client_default.service" + ]; + requires = [ + "docker-network-jank-client_default.service" + ]; + partOf = [ + "docker-compose-jank-client-root.target" + ]; + wantedBy = [ + "docker-compose-jank-client-root.target" + ]; + }; + systemd.services."docker-network-jank-client_default" = { + path = [pkgs.docker]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStop = "docker network rm -f jank-client_default"; + }; + script = '' + docker network inspect jank-client_default || docker network create jank-client_default + ''; + partOf = ["docker-compose-jank-client-root.target"]; + wantedBy = ["docker-compose-jank-client-root.target"]; + }; + systemd.services."docker-build-jank-client-jank" = { + path = [pkgs.docker pkgs.git]; + serviceConfig = { + Type = "oneshot"; + TimeoutSec = 300; + }; + script = '' + cd ${source} + docker build -t compose2nix/jank-client-jank . + ''; + }; + systemd.targets."docker-compose-jank-client-root" = { + unitConfig = { + Description = "Root target generated by compose2nix."; + }; + wantedBy = ["multi-user.target"]; + }; + }; in { packages.${system}.default = pkg; nixosModules.${system}.default = { @@ -30,7 +104,6 @@ config, ... }: { - imports = [(builtins.toPath "${config.services.jank-client.package}/jank-client.nix")]; options = { services.jank-client = { enable = lib.mkEnableOption "jank client"; @@ -46,6 +119,7 @@ (lib.getExe config.services.jank-client.package) ]; + inherit module; }; }; }; diff --git a/jank-client.nix b/jank-client.nix new file mode 100644 index 0000000..03b51b6 --- /dev/null +++ b/jank-client.nix @@ -0,0 +1,85 @@ +# Auto-generated using compose2nix v0.3.1. +{ + pkgs, + lib, + port, + ... +}: { + # Runtime + virtualisation.docker = { + enable = true; + autoPrune.enable = true; + }; + virtualisation.oci-containers.backend = "docker"; + + # Containers + virtualisation.oci-containers.containers."jank-client-jank" = { + image = "compose2nix/jank-client-jank"; + ports = [ + "${port}:8080/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=jank" + "--network=jank-client_default" + ]; + }; + systemd.services."docker-jank-client-jank" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-jank-client_default.service" + ]; + requires = [ + "docker-network-jank-client_default.service" + ]; + partOf = [ + "docker-compose-jank-client-root.target" + ]; + wantedBy = [ + "docker-compose-jank-client-root.target" + ]; + }; + + # Networks + systemd.services."docker-network-jank-client_default" = { + path = [pkgs.docker]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStop = "docker network rm -f jank-client_default"; + }; + script = '' + docker network inspect jank-client_default || docker network create jank-client_default + ''; + partOf = ["docker-compose-jank-client-root.target"]; + wantedBy = ["docker-compose-jank-client-root.target"]; + }; + + # Builds + systemd.services."docker-build-jank-client-jank" = { + path = [pkgs.docker pkgs.git]; + serviceConfig = { + Type = "oneshot"; + TimeoutSec = 300; + }; + script = '' + cd /home/mtgmonkey/JankClient + docker build -t compose2nix/jank-client-jank . + ''; + }; + + # Root service + # When started, this will automatically create all resources and start + # the containers. When stopped, this will teardown all resources. + systemd.targets."docker-compose-jank-client-root" = { + unitConfig = { + Description = "Root target generated by compose2nix."; + }; + wantedBy = ["multi-user.target"]; + }; +} diff --git a/result b/result index 596f798..5f346d4 120000 --- a/result +++ b/result @@ -1 +1 @@ -/nix/store/18pw666g2dwprq7nflnalwnb9yyh3kg3-jank-client \ No newline at end of file +/nix/store/2ry4rsr3bp9p0b7bgdwy1yh2iksc4vaz-jank-client \ No newline at end of file