{ description = "A flake to install sTodo"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; }; outputs = { self, nixpkgs, }: let tarball = fetchTarball { url = "https://git.stuce.ch/stuce/sTodo/releases/download/Release1/release1.tar.gz"; sha256 = "10jyldwmcs5zyz1k8lp3jscn7nhlvn56g0709l5jp91qimw7xiqz"; }; in { packages.x86_64-linux.sTodo = with nixpkgs.legacyPackages.x86_64-linux; stdenv.mkDerivation { pname = "sTodo"; version = "1.0.0"; src = tarball; buildInputs = [zlib gmp libffi openssl]; installPhase = '' mkdir -p $out/bin cp $src/sTodo $out/bin ''; mainProgram = "sTodo"; }; nixosModules.sTodo = { config, lib, pkgs, ... }: let cfg = config.services.sTodo; in { options.services.sTodo = { # options.programs.sTodo = { enable = lib.mkEnableOption "sTodo"; package = lib.mkOption { type = lib.types.package; default = self.packages.x86_64-linux.sTodo; }; appRoot = lib.mkOption { type = lib.types.str; default = "http://localhost:6901"; description = "Link used to access the webapp"; }; clientSessionKey = lib.mkOption { type = lib.types.str; default = "/etc/sTodo/client_session_key.aes"; description = "Location of the client session key"; }; port = lib.mkOption { type = lib.types.int; default = 6901; description = "Default port of the app"; }; }; # Systemd Service config = lib.mkIf cfg.enable { environment.etc."sTodo" = { source = "${tarball.out}/config"; }; environment.systemPackages = [pkgs.openssl]; systemd.services.sTodo.preStart = '' [ -f /etc/sTodo/client_session_key.aes ] || { "${pkgs.openssl}/bin/openssl" rand -base64 32 > /etc/sTodo/client_session_key.aes } ''; systemd.services.sTodo = { description = "Launch a sTodo app to have a online todolist"; after = ["network.target"]; wantedBy = ["multi-user.target"]; serviceConfig = { ExecStart = "${cfg.package}/bin/sTodo"; Restart = "always"; }; environment = { YESOD_PORT = "${toString cfg.port}"; YESOD_APPROOT = "${cfg.appRoot}"; YESOD_SQLITE_DATABASE = "/etc/sTodo/sTodo.sqlite3"; YESOD_STATIC_DIR = "/etc/sTodo/static"; YESOD_SESSION_KEY = "/etc/sTodo/client_session_key.aes"; }; }; }; }; }; }