{ description = "frajtano: an ssh agent multiplexer"; outputs = { self, nixpkgs, systems, }: let inherit (nixpkgs) lib; eachSystem = f: lib.genAttrs (import systems) (system: f { inherit system; pkgs = nixpkgs.legacyPackages.${system}; ownPkgs = self.packages.${system}; }); in { devShells = eachSystem ({ pkgs, ownPkgs, ... }: { default = pkgs.beam.packages.erlang_26.callPackage ./shell.nix { inherit ownPkgs; }; }); packages = eachSystem ({pkgs, ...}: { default = pkgs.beam.packages.erlang_26.callPackage ./default.nix {}; }); homeModules.default = { config, lib, pkgs, ... }: let cfg = config.bluepython508.frajtano; in { options.bluepython508.frajtano = { enable = lib.mkEnableOption "frajtano"; dir = lib.mkOption { description = "directory in which to place the listening socket"; default = "${config.home.homeDirectory}/.ssh/frajtano"; }; }; config = lib.mkIf cfg.enable { home.sessionVariables.FRAJTANO_DIR = cfg.dir; home.packages = [self.packages.${pkgs.system}.default]; systemd.user.services.frajtano = { Unit.Description = "frajtano"; Unit.After = ["default.target"]; Service.Environment = "'FRAJTANO_DIR=${cfg.dir}'"; Service.ExecStart = "${self.packages.${pkgs.system}.default} start"; Install.WantedBy = ["default.target"]; }; launchd.agents.frajtano = { enable = true; config = { EnvironmentVariables = { FRAJTANO_DIR = cfg.dir; }; ProgramArguments = ["${lib.getExe self.packages.${pkgs.system}.default}" "start"]; RunAtLoad = true; KeepAlive = true; }; }; }; }; }; }