{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, config, nixpkgs, lib, flake-utils, }: let cfg = config.services.wishlist; supportedSystems = ["x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"]; in { # TODO: 1. add options (ie one to set whether the server should be enabled), # 2. create a systemd service # 3. create a main program # 4. celibrate # TODO: do I need to make this a home-manager option and set the yaml config? # define what settings a user can change options = { services.wishlist = with lib; { enable = mkEnableOption "wishlist"; port = mkOption { type = types.port; default = 2222; description = "Port to listen on"; }; package = mkOption { type = types.package; default = self.packages.${nixpkgs.system}.default; description = "Package to use"; }; }; }; # define a systemd service for wishlist ^_^ config = lib.mkIf cfg.enable { systemd.services.wishlist = { description = "Single entrypoint for multiple SSH endpoints"; wantedBy = ["multi-user.target"]; serviceConfig = { DynamicUser = "yes"; ExecStart = "${cfg.package}/bin/wishlist serve"; Restart = "always"; RestartSec = "2s"; }; }; }; packages = flake-utils.lib.eachSystem supportedSystems ( system: let version = "0.15.1"; #pkgs = nixpkgs.legacyPackages.${system}; pkgs = import nixpkgs { inherit system; config.allowUnfree = false; }; #lib = pkgs.lib; in rec { defaultPackage = self.packages.${system}.wishlist; wishlist = pkgs.buildGoModule { pname = "wishlist"; inherit version; meta = with lib; { description = "Single entrypoint for multiple SSH endpoints"; homepage = "https://github.com/charmbracelet/wishlist"; changelog = "https://github.com/charmbracelet/wishlist/releases/tag/v${version}"; license = licenses.mit; maintainers = with maintainers; [caarlos0 penguwin]; mainProgram = "wishlist"; }; src = pkgs.fetchFromGitHub { owner = "charmbracelet"; repo = "wishlist"; rev = "v${version}"; # rev = "d7f058e115a8b4a4131406d01dde84fb4a8e93c4"; hash = "53fojA+gdvpSVNjx6QncH16F8/x+lpY5SkNs7obW2XQ="; }; vendorSha256 = "0x6rss3fwv2398wrd5kyzkrqaphzvh4ykwfqai9glxm01y6fhxz7"; }; } ); }; }