From d69d3c4f2e87acb51f75d6f1a30f704de9a97b31 Mon Sep 17 00:00:00 2001 From: a-kenji Date: Sat, 27 Jan 2024 15:57:00 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20nixos-module=20for=20the=20gi?= =?UTF-8?q?t-index=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check.nix | 25 ++++++++++++++++++++ flake.nix | 7 ++++++ nixos-module.nix | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 check.nix create mode 100644 nixos-module.nix diff --git a/check.nix b/check.nix new file mode 100644 index 00000000..64524b65 --- /dev/null +++ b/check.nix @@ -0,0 +1,25 @@ +{ nixosModule, pkgs }: +pkgs.nixosTest { + name = "centerpiece"; + + nodes.machine = { ... }: { + imports = [ + nixosModule + { + programs.centerpiece = { + enable = true; + services.index-git-repositories = { + enable = true; + interval = "hourly"; + }; + }; + } + ]; + }; + + testScript = '' + start_all() + # with subtest("wait for indexer unit"): + # machine.wait_for_unit("index-git-repositories-service.service") + ''; +} diff --git a/flake.nix b/flake.nix index 5933cb5d..ee72b414 100644 --- a/flake.nix +++ b/flake.nix @@ -103,6 +103,9 @@ default index-git-repositories; shell = self.outputs.devShells.${system}.default; treefmt = treefmt.check self; + nixosTest = pkgs.callPackage ./check.nix { + nixosModule = self.outputs.nixosModules.${system}.default; + }; inherit cargoClippy; hmModule = (nixpkgs.lib.nixosSystem { system = "x86_64-linux"; @@ -135,5 +138,9 @@ inherit (self.outputs.packages.${system}) index-git-repositories; }; formatter.${system} = treefmt.wrapper; + nixosModules.${system}.default = import ./nixos-module.nix { + centerpiece = self.outputs.packages.${system}.default; + inherit (self.outputs.packages.${system}) index-git-repositories; + }; }; } diff --git a/nixos-module.nix b/nixos-module.nix new file mode 100644 index 00000000..a69b11cc --- /dev/null +++ b/nixos-module.nix @@ -0,0 +1,59 @@ +{ index-git-repositories, centerpiece }: +{ lib, pkgs, config, ... }: +let + cfg = config.programs.centerpiece; + git-index-name = "index-git-repositories"; +in { + options.programs.centerpiece = { + enable = lib.mkEnableOption (lib.mdDoc "Centerpiece"); + services.index-git-repositories = { + enable = lib.mkEnableOption (lib.mdDoc "enable timer"); + interval = lib.mkOption { + default = "5min"; + type = lib.types.str; + example = "hourly"; + description = lib.mdDoc '' + Frequency of index creation. + + The format is described in + {manpage}`systemd.time(7)`. + ''; + }; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf cfg.enable { environment.systemPackages = [ centerpiece ]; }) + + (lib.mkIf cfg.services.index-git-repositories.enable { + systemd.user = { + services = { + index-git-repositories-service = { + description = "Centerpiece - your trusty omnibox search"; + + serviceConfig = { + ExecStart = "${pkgs.writeShellScript + "${git-index-name}-service-ExecStart" '' + exec ${lib.getExe index-git-repositories} + ''}"; + Type = "oneshot"; + Documentation = "https://github.com/friedow/centerpiece"; + }; + }; + }; + timers = { + index-git-repositories-timer = { + description = "Activate the git repository indexer"; + wantedBy = [ "timers.target" ]; + timerConfig = { + OnUnitActiveSec = cfg.services.index-git-repositories.interval; + OnBootSec = "0min"; + Persistent = true; + Unit = "${git-index-name}-service.service"; + }; + }; + }; + }; + }) + ]; +}