From 6da237a56004149188c63ff79c5991d2c3aa1f16 Mon Sep 17 00:00:00 2001 From: mtgmonkey Date: Tue, 10 Jun 2025 09:51:49 -0400 Subject: [PATCH] split up flake --- flake.nix | 115 +--------------------------------------------------- module.nix | 94 ++++++++++++++++++++++++++++++++++++++++++ package.nix | 23 +++++++++++ 3 files changed, 119 insertions(+), 113 deletions(-) create mode 100644 module.nix create mode 100644 package.nix diff --git a/flake.nix b/flake.nix index 7cf41e4..db04884 100644 --- a/flake.nix +++ b/flake.nix @@ -5,119 +5,8 @@ outputs = {nixpkgs, ...}: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; - pkg = {pkgs, ...}: - pkgs.stdenv.mkDerivation { - name = "jank-client"; - src = ./.; - nativeBuildInputs = [ - pkgs.compose2nix - ]; - buildPhase = '' - 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 . $out/src -r - ''; - }; in { - packages.${system}.default = pkg; - nixosModules.${system}.default = { - lib, - config, - ... - }: { - options = { - services.jank-client = { - enable = lib.mkEnableOption "jank client"; - package = lib.mkOption { - description = "jank client package"; - default = pkg; - type = lib.types.package; - }; - port = lib.mkOption { - description = "port to bind to"; - default = 8080; - type = lib.types.int; - }; - }; - }; - config = lib.mkIf config.services.jank-client.enable { - environment.systemPackages = [ - (lib.getExe - config.services.jank-client.package) - ]; - 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 = [ - "${builtins.toString config.services.jank-client.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 ${pkgs.callPackage pkg {}}/src - 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"]; - }; - }; - }; + packages.${system}.default = pkgs.callPackage ./package.nix {}; + nixosModules.${system}.default = ./module.nix; }; } diff --git a/module.nix b/module.nix new file mode 100644 index 0000000..0c19981 --- /dev/null +++ b/module.nix @@ -0,0 +1,94 @@ +{ + pkgs, + lib, + config, + ... +}: { + options = { + services.jank-client = { + enable = lib.mkEnableOption "jank client"; + package = lib.mkOption { + description = "jank client package"; + default = pkg; + type = lib.types.package; + }; + port = lib.mkOption { + description = "port to bind to"; + default = 8080; + type = lib.types.int; + }; + }; + }; + config = lib.mkIf config.services.jank-client.enable { + environment.systemPackages = [ + (lib.getExe + config.services.jank-client.package) + ]; + 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 = [ + "${builtins.toString config.services.jank-client.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 ${pkgs.callPackage config.services.jank-client.package {}}/src + 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"]; + }; + }; +} diff --git a/package.nix b/package.nix new file mode 100644 index 0000000..d0de379 --- /dev/null +++ b/package.nix @@ -0,0 +1,23 @@ +{ + stdenv, + compose2nix, + ... +}: +stdenv.mkDerivation { + name = "jank-client"; + src = ./.; + nativeBuildInputs = [ + compose2nix + ]; + buildPhase = '' + 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 . $out/src -r + ''; +}