diff --git a/.gitignore b/.gitignore index b7e9d40..6ce52a4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ */target/ */result +result diff --git a/11-single-price-grid-component/default.nix b/11-single-price-grid-component/default.nix index 8852b71..62aefb5 100644 --- a/11-single-price-grid-component/default.nix +++ b/11-single-price-grid-component/default.nix @@ -1,39 +1,72 @@ -{ pkgs, sbt-derivation }: +{ pkgs, lib, sbt-derivation }: let package = sbt-derivation.lib.mkSbtDerivation { - inherit pkgs; - # ...and the rest of the arguments - pname = "price-grid-app"; - version = "0.0.1"; - src = pkgs.nix-gitignore.gitignoreSource [] ./.; - nativeBuildInputs = [ pkgs.nodePackages.tailwindcss ]; - buildPhase = '' - sbt assembly - tailwindcss -i ./src/input.css -o ./output.css - ''; - # css path different from ordinary development, - # because .gitignore makes it unavailable during nix build - # anyway copied to correct place - installPhase = '' - mkdir -p $out/bin - cp target/scala-*/priceGrid-assembly-*.jar $out/bin/ - mkdir -p $out/bin/dist - cp ./output.css $out/bin/dist/output.css - cp -r public $out/bin/public - ''; + inherit pkgs; + # ...and the rest of the arguments + pname = "price-grid-app"; + version = "0.0.1"; + src = pkgs.nix-gitignore.gitignoreSource [ ] ./.; + nativeBuildInputs = [ pkgs.nodePackages.tailwindcss ]; + buildPhase = '' + sbt assembly + tailwindcss -i ./src/input.css -o ./output.css + ''; + # css path different from ordinary development, + # because .gitignore makes it unavailable during nix build + # anyway copied to correct place + installPhase = '' + mkdir -p $out/bin + cp target/scala-*/priceGrid-assembly-*.jar $out/bin/priceGridApp.jar + mkdir -p $out/bin/dist + cp ./output.css $out/bin/dist/output.css + cp -r public $out/bin/public + ''; - depsSha256 = "sha256-aWLqnPXvchtNqpSfXo5sWyK2QFNn1GqToy58cWrML3U="; - }; - - module = { config, pkgs, ... }: { - services.price-grid-app = { - enable = true; - package = package; - }; + depsSha256 = "sha256-aWLqnPXvchtNqpSfXo5sWyK2QFNn1GqToy58cWrML3U="; }; -in -{ + + module = { config, pkgs, ... }: + let cfg = config.services.priceGridService; + in { + options.services.priceGridService = { + enable = lib.mkEnableOption "My service"; + + port = lib.mkOption { + type = lib.types.int; + default = 8080; + description = "Port to listen on."; + }; + + host = lib.mkOption { + type = lib.types.str; + default = "localhost"; + description = "Host to bind to."; + }; + }; + config = lib.mkIf cfg.enable { + users.groups.price-grid-app-group = { }; + users.users.price-grid-app-user = { + isSystemUser = true; + group = "price-grid-app-group"; + }; + + systemd.services.price-grid-app = { + description = "My Java Service"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig = { + ExecStart = + "${pkgs.jdk}/bin/java -jar ${package}/bin/priceGridApp.jar -p ${toString cfg.port} --host ${cfg.host}"; + Restart = "on-failure"; + User = "price-grid-app-user"; + Group = "price-grid-app-group"; + }; + }; + }; + }; +in { package = package; module = module; } diff --git a/flake.nix b/flake.nix index b392dd6..a1c413d 100644 --- a/flake.nix +++ b/flake.nix @@ -13,6 +13,7 @@ pkgs = nixpkgs.legacyPackages.${system}; price-grid = import ./11-single-price-grid-component/default.nix { inherit pkgs sbt-derivation; + lib = pkgs.lib; }; in { devShells.default = pkgs.mkShell {