From 25540cad90eb6d7d4246ba5cdf34fd8d8ada3480 Mon Sep 17 00:00:00 2001 From: Aaron Bieber Date: Mon, 22 May 2023 19:39:52 -0600 Subject: [PATCH] add module, fix 'nix-build' --- flake.nix | 15 ++++++----- module.nix | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++ pr-status.pl | 2 +- 3 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 module.nix diff --git a/flake.nix b/flake.nix index 7eec506..d4ba0dd 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,6 @@ { - description = "pr-status: a tool to query NixOS/nixpkgs pull request status as they move along the build chain"; + description = + "pr-status: a tool to query NixOS/nixpkgs pull request status as they move along the build chain"; inputs.nixpkgs.url = "nixpkgs/nixos-22.11"; @@ -10,16 +11,17 @@ forAllSystems = nixpkgs.lib.genAttrs supportedSystems; nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); in { + overlay = final: prev: { + pr-status = self.packages.${prev.system}.pr-status; + }; + nixosModule = import ./module.nix; packages = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in { - pr-status = pkgs.stdenv.mkDerivation { + pr-status = pkgs.perlPackages.buildPerlPackage { pname = "pr-status"; version = "v0.0.1"; src = ./.; - buildInputs = with pkgs.perlPackages; [ PerlTidy ]; - nativeBuildInputs = with pkgs.perlPackages; [ perl ]; - propagatedBuildInputs = with pkgs.perlPackages; [ Mojolicious JSON @@ -30,7 +32,8 @@ }; }); - defaultPackage = forAllSystems (system: self.packages.${system}.pr-status); + defaultPackage = + forAllSystems (system: self.packages.${system}.pr-status); devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in { diff --git a/module.nix b/module.nix new file mode 100644 index 0000000..8e5e314 --- /dev/null +++ b/module.nix @@ -0,0 +1,70 @@ +{ lib, config, pkgs, ... }: +let cfg = config.services.pr-status; +in { + options = with lib; { + services.pr-status = { + enable = lib.mkEnableOption "Enable pr-status"; + + port = mkOption { + type = types.int; + default = 3003; + description = '' + Port to listen on + ''; + }; + + user = mkOption { + type = with types; oneOf [ str int ]; + default = "pr-status"; + description = '' + The user the service will use. + ''; + }; + + group = mkOption { + type = with types; oneOf [ str int ]; + default = "pr-status"; + description = '' + The group the service will use. + ''; + }; + + package = mkOption { + type = types.package; + default = pkgs.pr-status; + defaultText = literalExpression "pkgs.pr-status"; + description = "The package to use for pr-status"; + }; + }; + }; + + config = lib.mkIf (cfg.enable) { + users.groups.${cfg.group} = { }; + users.users.${cfg.user} = { + description = "pr-status service user"; + isSystemUser = true; + home = "/var/lib/pr-status"; + createHome = true; + group = "${cfg.group}"; + }; + + systemd.services.pr-status = { + enable = true; + description = "pr-status server"; + wantedBy = [ "network-online.target" ]; + after = [ "network-online.target" ]; + + environment = { HOME = "/var/lib/pr-status"; }; + + serviceConfig = { + User = cfg.user; + Group = cfg.group; + + ExecStart = + "${cfg.package}/bin/pr-status.pl daemon -m production -l http://127.0.0.1:${ + toString cfg.port + }"; + }; + }; + }; +} diff --git a/pr-status.pl b/pr-status.pl index 820a198..c784482 100755 --- a/pr-status.pl +++ b/pr-status.pl @@ -14,7 +14,7 @@ use Time::HiRes qw( time ); my $VERSION = 'v0.0.1'; -my $repo_dir = "/home/qbit/gostart_nixpkgs"; +my $repo_dir = "/var/lib/pr-status/nixpkgs"; $ENV{"GIT_CONFIG_SYSTEM"} = ""; # Ignore insteadOf rules $ENV{"HOME"} = "/tmp"; # Ignore ~/.netrc