+lib +portshelper
This commit is contained in:
12
lib/default.nix
Normal file
12
lib/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
# Library of helper functions for m3ta-nixpkgs
|
||||
# Usage in your configuration:
|
||||
# let
|
||||
# m3taLib = inputs.m3ta-nixpkgs.lib.${system};
|
||||
# in ...
|
||||
{lib}: {
|
||||
# Port management utilities
|
||||
ports = import ./ports.nix {inherit lib;};
|
||||
|
||||
# Add more helper modules here as needed
|
||||
# example = import ./example.nix { inherit lib; };
|
||||
}
|
113
lib/ports.nix
Normal file
113
lib/ports.nix
Normal file
@@ -0,0 +1,113 @@
|
||||
# Port management utilities
|
||||
#
|
||||
# This module provides functions to manage service ports across multiple hosts
|
||||
# in a centralized way. Ports are defined in your configuration and can have
|
||||
# host-specific overrides.
|
||||
#
|
||||
# Usage in your configuration:
|
||||
#
|
||||
# # In your flake or configuration, define your ports:
|
||||
# let
|
||||
# m3taLib = inputs.m3ta-nixpkgs.lib.${system};
|
||||
#
|
||||
# myPorts = {
|
||||
# ports = {
|
||||
# nginx = 80;
|
||||
# grafana = 3000;
|
||||
# prometheus = 9090;
|
||||
# homepage = 8080;
|
||||
# };
|
||||
# hostPorts = {
|
||||
# laptop = {
|
||||
# nginx = 8080; # Override nginx port on laptop
|
||||
# };
|
||||
# server = {
|
||||
# homepage = 3001; # Override homepage port on server
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
#
|
||||
# portHelpers = m3taLib.ports.mkPortHelpers myPorts;
|
||||
# in {
|
||||
# # Use in your config:
|
||||
# services.nginx.port = portHelpers.getPort "nginx" "laptop";
|
||||
# # Returns: 8080 (host-specific override)
|
||||
#
|
||||
# services.grafana.port = portHelpers.getPort "grafana" "laptop";
|
||||
# # Returns: 3000 (default port)
|
||||
#
|
||||
# # Get all ports for a specific host (defaults + overrides):
|
||||
# allLaptopPorts = portHelpers.getHostPorts "laptop";
|
||||
# # Returns: { nginx = 8080; grafana = 3000; prometheus = 9090; homepage = 8080; }
|
||||
# }
|
||||
{lib}: {
|
||||
# Create port helper functions from a ports configuration
|
||||
#
|
||||
# Args:
|
||||
# portsConfig: An attribute set with structure:
|
||||
# {
|
||||
# ports = { service-name = port-number; ... };
|
||||
# hostPorts = { hostname = { service-name = port-number; ... }; ... };
|
||||
# }
|
||||
#
|
||||
# Returns:
|
||||
# An attribute set containing helper functions:
|
||||
# - getPort: Get port for a service with optional host override
|
||||
# - getHostPorts: Get all ports for a specific host
|
||||
# - listServices: List all defined services
|
||||
mkPortHelpers = portsConfig: let
|
||||
ports = portsConfig.ports or {};
|
||||
hostPorts = portsConfig.hostPorts or {};
|
||||
in {
|
||||
# Get port for a service, with optional host-specific override
|
||||
#
|
||||
# Args:
|
||||
# service: The service name (string)
|
||||
# host: The hostname (string)
|
||||
#
|
||||
# Returns:
|
||||
# Port number (int) or null if service not found
|
||||
#
|
||||
# Example:
|
||||
# getPort "nginx" "laptop" # Returns host-specific port if defined
|
||||
# getPort "nginx" null # Returns default port
|
||||
getPort = service: host:
|
||||
if host != null && hostPorts ? ${host} && hostPorts.${host} ? ${service}
|
||||
then hostPorts.${host}.${service}
|
||||
else ports.${service} or null;
|
||||
|
||||
# Get all ports for a specific host (merges defaults with host overrides)
|
||||
#
|
||||
# Args:
|
||||
# host: The hostname (string)
|
||||
#
|
||||
# Returns:
|
||||
# Attribute set of all ports for the host
|
||||
#
|
||||
# Example:
|
||||
# getHostPorts "laptop" # { nginx = 8080; grafana = 3000; ... }
|
||||
getHostPorts = host:
|
||||
ports // (hostPorts.${host} or {});
|
||||
|
||||
# List all defined service names
|
||||
#
|
||||
# Returns:
|
||||
# List of service names (strings)
|
||||
listServices = lib.attrNames ports;
|
||||
};
|
||||
|
||||
# Simple helper to get a port without host override
|
||||
# Useful when you don't need host-specific ports
|
||||
#
|
||||
# Args:
|
||||
# portsConfig: Same structure as mkPortHelpers
|
||||
# service: The service name (string)
|
||||
#
|
||||
# Returns:
|
||||
# Port number (int) or null if service not found
|
||||
#
|
||||
# Example:
|
||||
# getDefaultPort myPorts "nginx" # Returns default port only
|
||||
getDefaultPort = portsConfig: service:
|
||||
portsConfig.ports.${service} or null;
|
||||
}
|
Reference in New Issue
Block a user