diff --git a/flake.nix b/flake.nix index 1ff635b..805f831 100644 --- a/flake.nix +++ b/flake.nix @@ -7,21 +7,20 @@ inputs.gomod2nix.inputs.nixpkgs.follows = "nixpkgs"; inputs.gomod2nix.inputs.flake-utils.follows = "flake-utils"; - outputs = inputs @ { self, nixpkgs, flake-utils, gomod2nix }: - (flake-utils.lib.eachDefaultSystem - (system: - let - pkgs = nixpkgs.legacyPackages.${system}; - callPackage = pkgs.darwin.apple_sdk_11_0.callPackage or pkgs.callPackage; - in - { - packages.default = callPackage ./. { - inherit (gomod2nix.legacyPackages.${system}) buildGoApplication; - }; - devShells.default = callPackage ./shell.nix { - inherit (gomod2nix.legacyPackages.${system}) mkGoEnv gomod2nix; - }; - nixosModules.default = import ./module.nix inputs; - }) - ); + outputs = inputs@{ self, nixpkgs, flake-utils, gomod2nix }: + (flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + callPackage = + pkgs.darwin.apple_sdk_11_0.callPackage or pkgs.callPackage; + in { + packages.default = callPackage ./. { + inherit (gomod2nix.legacyPackages.${system}) buildGoApplication; + }; + devShells.default = callPackage ./shell.nix { + inherit (gomod2nix.legacyPackages.${system}) mkGoEnv gomod2nix; + }; + })) // { + nixosModules.default = import ./module.nix inputs; + }; } diff --git a/module.nix b/module.nix index 5cbd33c..84bcf7d 100644 --- a/module.nix +++ b/module.nix @@ -4,61 +4,62 @@ let inherit (pkgs.stdenv.hostPlatform) system; cfg = config.services.birdtown-visit-counter; inherit (lib) types mkOption mkIf; - package = inputs.self.packages."${system}".birdtown-visit-counter; + package = inputs.self.packages."${system}".default; in { options.services.birdtown-visit-counter = { - enable = mkOption { - type = types.bool; - default = false; - }; - listenPort = mkOption { - type = types.int; - default = 11567; + enable = mkOption { + type = types.bool; + default = false; + }; + listenPort = mkOption { + type = types.int; + default = 11568; + }; + }; + config = mkIf cfg.enable { + users.users.birdtown-visit-counter = { + group = "birdtown-visit-counter"; + home = "/var/lib/birdtown-visit-counter"; + isSystemUser = true; + createHome = true; + }; + users.groups.birdtown-visit-counter = { }; + + systemd.services.birdtown-visit-counter = { + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = + "${package}/bin/birdtown-visit-counter -addr :${toString cfg.listenPort} -file visits.json"; + User = "birdtown-visit-counter"; + Group = "birdtown-visit-counter"; + WorkingDirectory = "/var/lib/birdtown-visit-counter"; }; }; - config = { - users.users.birdtown-visit-counter = { - group = "birdtown-visit-counter"; - home = "/var/lib/birdtown-visit-counter"; - isSystemUser = true; - createHome = true; - }; - users.groups.birdtown-visit-counter = { }; - systemd.services.birdtown-visit-counter = { - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - ExecStart = "${package}/bin/birdtown-visit-counter -addr :${cfg.listenPort} -file visits.json"; - User = "birdtown-visit-counter"; - Group = "birdtown-visit-counter"; - WorkingDirectory = "/var/lib/birdtown-visit-counter"; - }; + systemd.timers.birdtown-visits-saver = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnBootSec = "10m"; + OnUnitActiveSec = "10m"; + Unit = "birdtown-visits-saver.service"; }; + }; - systemd.timers.birdtown-visits-saver = { - wantedBy = [ "timers.target" ]; - timerConfig = { - OnBootSec = "10m"; - OnUnitActiveSec = "10m"; - Unit = "birdtown-visits-saver.service"; - }; - }; - - systemd.services.birdtown-visits-saver = { - script = '' - set -eu - if ${pkgs.curl}/bin/curl http://localhost:${cfg.listenPort}/visits > visits-new.json; then - cp visits-new.json "$(date +"%Y-%m-%d-%H-%M").json" - mv visits-new.json visits.json - fi - ''; - serviceConfig = { - Type = "oneshot"; - User = "birdtown-visit-counter"; - Group = "birdtown-visit-counter"; - WorkingDirectory = "/var/lib/birdtown-visit-counter"; - }; + systemd.services.birdtown-visits-saver = { + script = '' + set -eu + if ${pkgs.curl}/bin/curl http://localhost:${toString cfg.listenPort}/visits > visits-new.json; then + cp visits-new.json "$(date +"%Y-%m-%d-%H-%M").json" + mv visits-new.json visits.json + fi + ''; + serviceConfig = { + Type = "oneshot"; + User = "birdtown-visit-counter"; + Group = "birdtown-visit-counter"; + WorkingDirectory = "/var/lib/birdtown-visit-counter"; }; + }; }; }