{ description = "ISO7010 Twitter bot"; inputs = { utils.url = "github:numtide/flake-utils"; devshell = { url = "github:numtide/devshell"; inputs.nixpkgs.follows = "nixpkgs"; }; naersk = { url = "github:nix-community/naersk"; inputs.nixpkgs.follows = "nixpkgs"; }; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, utils, naersk, devshell, rust-overlay, }: utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [(import rust-overlay)]; }; rust = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" ]; }; # Override naersk to use our chosen rust version from rust-overlay naersk-lib = naersk.lib.${system}.override { cargo = rust; rustc = rust; }; packig = naersk-lib.buildPackage { pname = "iso7010-a-day"; root = ./.; buildInputs = [pkgs.openssl pkgs.pkg-config]; }; in { packages.default = packig; apps.default = utils.lib.mkApp {drv = packig;}; hydraJobs.build = packig; # Provide a dev env with rust and rls devShells.default = let pkgs = import nixpkgs { inherit system; overlays = [devshell.overlays.default]; }; in pkgs.devshell.mkShell { packages = with pkgs; [rust rust-analyzer]; }; formatter = pkgs.alejandra; }) // { overlays.default = final: prev: { iso7010-a-day = self.packages.${prev.system}.default; }; nixosModules.default = { config, lib, pkgs, ... }: with lib; let cfg = config.services.iso7010-a-day; in { options.services.iso7010-a-day = { enable = mkEnableOption "Enable the iso7010 bot"; environmentFile = mkOption { type = types.path; description = "Path to the environment file"; }; }; config = mkIf cfg.enable { nixpkgs.overlays = [self.overlays.default]; systemd.services.iso7010-a-day = { description = "Samw's ISO7010 bot"; serviceConfig = { Type = "oneshot"; DynamicUser = true; User = "iso7010"; ExecStart = "${pkgs.iso7010-a-day}/bin/iso7010_a_day run-bot"; EnvironmentFile = cfg.environmentFile; }; }; systemd.timers.iso7010-a-day = { wantedBy = [ "timers.target" ]; partOf = [ "iso7010-a-day.service" ]; timerConfig.OnCalendar = [ "*-*-* 12:00:00" ]; }; }; }; }; }