Files
m3tm3re 44485c4c72 docs: update zellij-ps to reflect project switcher functionality
- Update package description and fix mainProgram typo
- Rewrite documentation to describe project switching, not process viewing
- Add PROJECT_FOLDERS configuration and usage examples
- Update all references across docs (README, guides, module overviews)
2025-12-30 15:42:52 +01:00

4.3 KiB

ports Home Manager Module

Port management module for Home Manager.

Overview

This module provides centralized port management for user-level services, similar to the NixOS version but with additional support for generating environment variables.

See Port Management Guide for detailed usage.

Quick Start

{config, ...}: {
  m3ta.ports = {
    enable = true;

    # Define default ports
    definitions = {
      dev-server = 3000;
      nextjs = 3001;
      vite = 5173;
    };

    # Host-specific overrides
    hostOverrides = {
      laptop = {
        vite = 5174;
      };
    };

    # Current host
    currentHost = "desktop";

    # Generate environment variables (Home Manager only)
    generateEnvVars = true;
  };
}

Module Options

m3ta.ports.enable

Enable port management.

  • Type: boolean
  • Default: false

m3ta.ports.definitions

Default port definitions.

  • Type: attrsOf int
  • Default: {}

Example:

definitions = {
  dev-server = 3000;
  nextjs = 3001;
  vite = 5173;
};

m3ta.ports.hostOverrides

Host-specific port overrides.

  • Type: attrsOf (attrsOf int)
  • Default: {}

Example:

hostOverrides = {
  laptop = {
    vite = 5174;
  };
  desktop = {
    vite = 5173;
  };
};

m3ta.ports.currentHost

Current hostname.

  • Type: string
  • Example: "desktop"

m3ta.ports.generateEnvVars

Generate environment variables from ports.

  • Type: boolean
  • Default: false
  • Home Manager only

When enabled, generates environment variables like:

PORT_DEV_SERVER=3000
PORT_NEXTJS=3001
PORT_VITE=5173

Functions

config.m3ta.ports.get "service"

Get port for a service with host-specific override.

home.sessionVariables = {
  DEV_PORT = toString (config.m3ta.ports.get "dev-server");
};

config.m3ta.ports.getHostPorts "hostname"

Get all ports for a specific host.

laptopPorts = config.m3ta.ports.getHostPorts "laptop";
# Returns: { dev-server = 3000; vite = 5174; ... }

config.m3ta.ports.listServices

List all defined service names.

allServices = config.m3ta.ports.listServices;
# Returns: ["dev-server" "nextjs" "vite"]

Environment Variables

When generateEnvVars = true, the following environment variables are generated:

PORT_<SERVICE_UPPERCASE>=<port_number>

Example:

m3ta.ports = {
  enable = true;
  definitions = {
    dev-server = 3000;
    nextjs = 3001;
  };
  generateEnvVars = true;
};

Generates:

PORT_DEV_SERVER=3000
PORT_NEXTJS=3001

You can then use these in scripts:

#!/usr/bin/env bash
# Use environment variable directly
npm start --port=$PORT_DEV_SERVER

Usage Examples

Basic Usage

{config, ...}: {
  m3ta.ports = {
    enable = true;
    definitions = {
      dev-server = 3000;
    };
    currentHost = "desktop";
  };

  home.sessionVariables = {
    DEV_PORT = toString (config.m3ta.ports.get "dev-server");
  };
}

With Environment Variables

{config, ...}: {
  m3ta.ports = {
    enable = true;
    definitions = {
      dev-server = 3000;
      nextjs = 3001;
      vite = 5173;
    };
    currentHost = "desktop";
    generateEnvVars = true;
  };

  # Now available as environment variables
  # PORT_DEV_SERVER=3000
  # PORT_NEXTJS=3001
  # PORT_VITE=5173
}

With Multi-Host Setup

{config, ...}: {
  m3ta.ports = {
    enable = true;
    definitions = {
      dev-server = 3000;
      vite = 5173;
    };
    hostOverrides = {
      laptop = {
        vite = 5174;
      };
      desktop = {
        vite = 5173;
      };
    };
    currentHost = config.networking.hostName;
    generateEnvVars = true;
  };
}

With Shell Scripts

Create ~/.config/zellij/scripts/dev.ksh:

#!/usr/bin/env ksh
# Start dev server using environment variable
cd ~/projects/my-app
npm start --port=$PORT_DEV_SERVER

Difference from NixOS Module

The Home Manager version has one additional feature:

generateEnvVars

Not available in NixOS module. Generates environment variables for all defined ports:

# Home Manager
m3ta.ports.generateEnvVars = true;  # Available

# NixOS
# Not available