{ description = "A flake for calDAVtoCSV, a middleman program between my Radicale server and my ESP32"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # Specify the version or channel as needed flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; in { packages.default = pkgs.python3.pkgs.buildPythonApplication rec { pname = "calDAVtoCSV"; version = "0.1.0"; pyproject = true; src = builtins.fetchGit { url = "git+https://git.stuce.ch/Stuce/calDAVtoCSV.git"; rev = "ca6bdb889085893cd4494cd1612a00f8e164ffac"; }; build-system = with pkgs.python3.pkgs; [ setuptools ]; dependencies = with pkgs.python3.pkgs; [ caldav flask gunicorn ]; meta = { description = "middleman program between my radicale server and my esp32"; license = pkgs.lib.licenses.mit; maintainers = with pkgs.lib.maintainers; [ stuce-bot ]; }; }; nixosModules.caldavToCsv = { config, lib, ... }: let cfg = config.services.caldavToCsv; in { options.calDavtoCSV = { enable = lib.mkOption { type = lib.types.bool; default = false; description = "Enable myService"; }; config = lib.mkOption { type = lib.types.attrs; default = { calDAV = { address = "localhost:5232"; username = "username"; password = "password"; passwordFile = "/path/to/password"; }; server = { port = 8000; }; }; description = "User-defined configuration for the service"; }; }; # options.NixosModule = { # enable = lib.mkEnableOption "Enable calDAVtoCSV service"; # port = lib.mkOption { # type = lib.types.int; # default = 8000; # description = "Port on which calDAVtoCSV will listen"; # }; # url = lib.mkOption { # type = lib.types.str; # description = "url of the calendar"; # }; # calendarUsername = lib.mkOption { # type = lib.types.str; # description = "username of the calendar account"; # }; # calendarName = lib.mkOption { # type = lib.types.str; # description = # "name of the calendar we will fetch the todo items from"; # }; # calendarPasswordFile = lib.mkOption { # type = lib.types.str; # description = # "file where we need to look for password to connect, needs to be readeable by the service user"; # }; # }; config = lib.mkIf config.myModule.enable { environment.etc."config.ini".text = '' ${lib.toIni config.myService.config} ''; systemd.services.calDAVtoCSV = { description = "calDAV to CSV Service"; after = [ "network.target" ]; serviceConfig = { ExecStart = "${pkgs.python3.pkgs.gunicorn}/bin/gunicorn -w 1 -b 0.0.0.0:${cfg.port} main:app"; Restart = "on-failure"; }; wantedBy = [ "multi-user.target" ]; }; }; }; }); }