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)
This commit is contained in:
81
docs/modules/home-manager/cli/zellij-ps.md
Normal file
81
docs/modules/home-manager/cli/zellij-ps.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# zellij-ps Home Manager Module
|
||||
|
||||
Zellij project switcher for Home Manager.
|
||||
|
||||
## Overview
|
||||
|
||||
This module configures the zellij-ps tool, a Fish script that provides a fast, interactive way to switch between project folders in Zellij terminal multiplexer sessions.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [m3ta-nixpkgs.homeManagerModules.default];
|
||||
|
||||
m3ta.cli.zellij-ps = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Module Options
|
||||
|
||||
### `m3ta.cli.zellij-ps.enable`
|
||||
|
||||
Enable zellij-ps module.
|
||||
|
||||
- Type: `boolean`
|
||||
- Default: `false`
|
||||
|
||||
### `m3ta.cli.zellij-ps.package`
|
||||
|
||||
Custom package to use.
|
||||
|
||||
- Type: `package`
|
||||
- Default: `pkgs.zellij-ps`
|
||||
|
||||
## Usage
|
||||
|
||||
After enabling, zellij-ps will be available in your path:
|
||||
|
||||
```bash
|
||||
# Run from outside Zellij to start a project session
|
||||
zellij-ps
|
||||
|
||||
# Or pass a project path directly
|
||||
zellij-ps ~/projects/my-project
|
||||
```
|
||||
|
||||
### Basic Usage
|
||||
|
||||
1. Set `$PROJECT_FOLDERS` in your shell config (e.g., `~/projects:~/code`)
|
||||
2. Run `zellij-ps` from outside a Zellij session
|
||||
3. Use fzf to select a project from your configured folders
|
||||
4. Zellij will create or attach to a session for that project
|
||||
|
||||
## Configuration
|
||||
|
||||
### Custom Package
|
||||
|
||||
Use a custom or modified package:
|
||||
|
||||
```nix
|
||||
m3ta.cli.zellij-ps = {
|
||||
enable = true;
|
||||
package = pkgs.callPackage ./my-zellij-ps {};
|
||||
};
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
The module ensures these are installed:
|
||||
|
||||
- `fish` - Shell for script execution
|
||||
- `fd` - Fast file search
|
||||
- `fzf` - Fuzzy finder
|
||||
- `zellij` - Terminal multiplexer
|
||||
|
||||
## Related
|
||||
|
||||
- [zellij-ps Package](../../packages/zellij-ps.md) - Package documentation
|
||||
- [Using Modules Guide](../../guides/using-modules.md) - Module usage patterns
|
||||
317
docs/modules/home-manager/coding/editors.md
Normal file
317
docs/modules/home-manager/coding/editors.md
Normal file
@@ -0,0 +1,317 @@
|
||||
# editors Home Manager Module
|
||||
|
||||
Editor configurations for Home Manager.
|
||||
|
||||
## Overview
|
||||
|
||||
This module provides pre-configured settings for various code editors, making it easy to set up your development environment.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [m3ta-nixpkgs.homeManagerModules.default];
|
||||
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
neovim.enable = true;
|
||||
zed.enable = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Module Options
|
||||
|
||||
### `m3ta.coding.editors.enable`
|
||||
|
||||
Enable the editors module.
|
||||
|
||||
- Type: `boolean`
|
||||
- Default: `false`
|
||||
|
||||
### `m3ta.coding.editors.neovim.enable`
|
||||
|
||||
Enable Neovim configuration.
|
||||
|
||||
- Type: `boolean`
|
||||
- Default: `false`
|
||||
|
||||
### `m3ta.coding.editors.neovim.package`
|
||||
|
||||
Custom Neovim package.
|
||||
|
||||
- Type: `package`
|
||||
- Default: `pkgs.neovim`
|
||||
|
||||
### `m3ta.coding.editors.zed.enable`
|
||||
|
||||
Enable Zed editor configuration.
|
||||
|
||||
- Type: `boolean`
|
||||
- Default: `false`
|
||||
|
||||
### `m3ta.coding.editors.zed.package`
|
||||
|
||||
Custom Zed package.
|
||||
|
||||
- Type: `package`
|
||||
- Default: `pkgs.zed`
|
||||
|
||||
## Supported Editors
|
||||
|
||||
### Neovim
|
||||
|
||||
Neovim is a highly extensible Vim-based text editor.
|
||||
|
||||
```nix
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
neovim = {
|
||||
enable = true;
|
||||
package = pkgs.neovim;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
**Features**:
|
||||
- Vim-style editing
|
||||
- Plugin system
|
||||
- Lua scripting
|
||||
- Fast performance
|
||||
- Built-in LSP support
|
||||
|
||||
**Configuration**: The module provides sensible defaults. You can customize by adding your own configuration.
|
||||
|
||||
### Zed
|
||||
|
||||
Zed is a high-performance, multiplayer code editor.
|
||||
|
||||
```nix
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
zed = {
|
||||
enable = true;
|
||||
package = pkgs.zed;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
**Features**:
|
||||
- Fast startup
|
||||
- Built-in collaboration
|
||||
- AI assistance (optional)
|
||||
- Modern UI
|
||||
- Low memory usage
|
||||
|
||||
**Configuration**: Zed uses JSON configuration files that can be customized.
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Minimal Neovim Setup
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
neovim.enable = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Minimal Zed Setup
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
zed.enable = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Multiple Editors
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
neovim.enable = true;
|
||||
zed.enable = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Custom Package
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
neovim = {
|
||||
enable = true;
|
||||
package = pkgs.neovim-unwrapped; # Use unwrapped version
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Configuration Files
|
||||
|
||||
### Neovim
|
||||
|
||||
The module sets up Neovim configuration in:
|
||||
|
||||
```
|
||||
~/.config/nvim/
|
||||
```
|
||||
|
||||
You can extend it with:
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
xdg.configFile."nvim/init.lua".text = ''
|
||||
-- Your custom Neovim configuration
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
### Zed
|
||||
|
||||
Zed configuration is in:
|
||||
|
||||
```
|
||||
~/.config/zed/settings.json
|
||||
```
|
||||
|
||||
You can customize it with:
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
xdg.configFile."zed/settings.json".text = builtins.toJSON {
|
||||
# Your custom Zed settings
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Migration Guide
|
||||
|
||||
### From Manual Configuration
|
||||
|
||||
If you have existing editor configurations, you can:
|
||||
|
||||
1. Backup your current config
|
||||
2. Enable the module
|
||||
3. Test it out
|
||||
4. Gradually migrate custom settings
|
||||
|
||||
**Backup**:
|
||||
|
||||
```bash
|
||||
# Backup Neovim
|
||||
cp -r ~/.config/nvim ~/.config/nvim.backup
|
||||
|
||||
# Backup Zed
|
||||
cp -r ~/.config/zed ~/.config/zed.backup
|
||||
```
|
||||
|
||||
### From Other Editors
|
||||
|
||||
**Vim to Neovim**:
|
||||
- Most Vim configurations work with Neovim
|
||||
- Enable module and test
|
||||
- Migrate plugins to modern Lua versions
|
||||
|
||||
**VSCode to Zed**:
|
||||
- Zed has built-in keybinding presets
|
||||
- Enable module and check keybindings
|
||||
- Adjust as needed
|
||||
|
||||
## Keybindings
|
||||
|
||||
### Neovim
|
||||
|
||||
Default keybindings (Vim-style):
|
||||
|
||||
| Mode | Key | Action |
|
||||
|-------|------|---------|
|
||||
| Normal | `i` | Enter insert mode |
|
||||
| Normal | `ESC` | Exit insert mode |
|
||||
| Normal | `:w` | Save |
|
||||
| Normal | `:q` | Quit |
|
||||
| Normal | `u` | Undo |
|
||||
| Normal | `Ctrl+r` | Redo |
|
||||
|
||||
### Zed
|
||||
|
||||
Default keybindings:
|
||||
|
||||
| Mode | Key | Action |
|
||||
|-------|------|---------|
|
||||
| General | `Ctrl+S` | Save |
|
||||
| General | `Ctrl+P` | Command palette |
|
||||
| General | `Ctrl+Shift+P` | File palette |
|
||||
| Navigation | `Ctrl+B` | Toggle sidebar |
|
||||
| Navigation | `Ctrl+Shift+B` | Toggle activity bar |
|
||||
|
||||
## Plugins and Extensions
|
||||
|
||||
### Neovim
|
||||
|
||||
The module provides a base. You can add plugins using:
|
||||
|
||||
```nix
|
||||
{pkgs, ...}: {
|
||||
programs.neovim.plugins = with pkgs.vimPlugins; [
|
||||
nvim-lspconfig
|
||||
nvim-treesitter
|
||||
telescope-nvim
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
### Zed
|
||||
|
||||
Zed extensions are managed through the editor:
|
||||
|
||||
1. Open Zed
|
||||
2. Go to Extensions (Ctrl+Shift+X)
|
||||
3. Browse and install extensions
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Editor Not Found
|
||||
|
||||
Ensure the editor package is installed:
|
||||
|
||||
```bash
|
||||
# Check Neovim
|
||||
which nvim
|
||||
|
||||
# Check Zed
|
||||
which zed
|
||||
```
|
||||
|
||||
### Configuration Not Applied
|
||||
|
||||
Check if the module is enabled:
|
||||
|
||||
```bash
|
||||
# Check Home Manager state
|
||||
home-manager show
|
||||
|
||||
# View current config
|
||||
nix eval .#homeConfigurations.username.config.m3ta.coding.editors --apply builtins.attrNames
|
||||
```
|
||||
|
||||
### Conflicts with Existing Config
|
||||
|
||||
If you have existing configuration:
|
||||
|
||||
1. Backup current config
|
||||
2. Test module with fresh config
|
||||
3. Gradually add custom settings
|
||||
|
||||
## Related
|
||||
|
||||
- [Using Modules Guide](../../guides/using-modules.md) - How to use modules
|
||||
- [Adding Packages](../../guides/adding-packages.md) - How to add new packages
|
||||
206
docs/modules/home-manager/overview.md
Normal file
206
docs/modules/home-manager/overview.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# Home Manager Modules Overview
|
||||
|
||||
Overview of available Home Manager modules in m3ta-nixpkgs.
|
||||
|
||||
## Available Modules
|
||||
|
||||
### Core Modules
|
||||
|
||||
- [ports](./ports.md) - Port management across hosts
|
||||
|
||||
### CLI Modules (`cli/`)
|
||||
|
||||
- [zellij-ps](./cli/zellij-ps.md) - Zellij project switcher
|
||||
|
||||
### Coding Modules (`coding/`)
|
||||
|
||||
- [editors](./coding/editors.md) - Editor configurations
|
||||
|
||||
## Importing Modules
|
||||
|
||||
### Import All Modules
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [
|
||||
m3ta-nixpkgs.homeManagerModules.default
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
### Import Specific Module
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [
|
||||
m3ta-nixpkgs.homeManagerModules.ports
|
||||
m3ta-nixpkgs.homeManagerModules.zellij-ps
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
### Import Category
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [
|
||||
m3ta-nixpkgs.homeManagerModules.cli.zellij-ps
|
||||
m3ta-nixpkgs.homeManagerModules.coding.editors
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
## Module Namespace
|
||||
|
||||
All Home Manager modules use the `m3ta.*` namespace:
|
||||
|
||||
```nix
|
||||
# Port management
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {dev-server = 3000;};
|
||||
};
|
||||
|
||||
# CLI tools
|
||||
m3ta.cli.zellij-ps = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
# Coding tools
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
neovim.enable = true;
|
||||
};
|
||||
```
|
||||
|
||||
## Module Categories
|
||||
|
||||
### Core
|
||||
|
||||
Essential modules for all users:
|
||||
|
||||
- **ports** - Port management with optional environment variable generation
|
||||
|
||||
### CLI (`cli/`)
|
||||
|
||||
Command-line interface tools and utilities:
|
||||
|
||||
- **zellij-ps** - Project switcher for Zellij terminal multiplexer
|
||||
|
||||
### Coding (`coding/`)
|
||||
|
||||
Development tools and configurations:
|
||||
|
||||
- **editors** - Editor configurations (Neovim, Zed, etc.)
|
||||
|
||||
## Integration Examples
|
||||
|
||||
### With NixOS
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
# NixOS modules
|
||||
imports = [
|
||||
m3ta-nixpkgs.nixosModules.default
|
||||
];
|
||||
|
||||
# Home Manager integration
|
||||
home-manager.users.myusername = {
|
||||
imports = [
|
||||
m3ta-nixpkgs.homeManagerModules.default
|
||||
];
|
||||
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
dev-server = 3000;
|
||||
};
|
||||
currentHost = config.networking.hostName;
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Standalone Home Manager
|
||||
|
||||
```nix
|
||||
{config, pkgs, ...}: {
|
||||
imports = [
|
||||
m3ta-nixpkgs.homeManagerModules.default
|
||||
];
|
||||
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
dev-server = 3000;
|
||||
};
|
||||
currentHost = "desktop";
|
||||
};
|
||||
|
||||
m3ta.cli.zellij-ps = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
m3ta.coding.editors = {
|
||||
enable = true;
|
||||
neovim.enable = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Module Locations
|
||||
|
||||
### Core
|
||||
|
||||
- `modules/home-manager/ports.nix` - Port management module
|
||||
|
||||
### CLI
|
||||
|
||||
- `modules/home-manager/cli/default.nix` - CLI module aggregator
|
||||
- `modules/home-manager/cli/zellij-ps.nix` - Zellij project switcher
|
||||
|
||||
### Coding
|
||||
|
||||
- `modules/home-manager/coding/default.nix` - Coding module aggregator
|
||||
- `modules/home-manager/coding/editors.nix` - Editor configurations
|
||||
|
||||
## Adding New Modules
|
||||
|
||||
### Core Module
|
||||
|
||||
1. Create: `modules/home-manager/my-module.nix`
|
||||
2. Add to `modules/home-manager/default.nix`
|
||||
|
||||
### CLI Module
|
||||
|
||||
1. Create: `modules/home-manager/cli/my-tool.nix`
|
||||
2. Add to `modules/home-manager/cli/default.nix`
|
||||
|
||||
### Coding Module
|
||||
|
||||
1. Create: `modules/home-manager/coding/my-tool.nix`
|
||||
2. Add to `modules/home-manager/coding/default.nix`
|
||||
|
||||
### Module Template
|
||||
|
||||
```nix
|
||||
{ config, lib, pkgs, ... }:
|
||||
with lib; let
|
||||
cfg = config.m3ta.category.myModule;
|
||||
in {
|
||||
options.m3ta.category.myModule = {
|
||||
enable = mkEnableOption "my module";
|
||||
# ... options
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# Configuration
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [Using Modules Guide](../../guides/using-modules.md) - How to use modules
|
||||
- [NixOS Modules](./nixos/overview.md) - System-level modules
|
||||
- [Port Management Guide](../../guides/port-management.md) - Detailed port management
|
||||
272
docs/modules/home-manager/ports.md
Normal file
272
docs/modules/home-manager/ports.md
Normal file
@@ -0,0 +1,272 @@
|
||||
# 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](../../guides/port-management.md) for detailed usage.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```nix
|
||||
{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:
|
||||
|
||||
```nix
|
||||
definitions = {
|
||||
dev-server = 3000;
|
||||
nextjs = 3001;
|
||||
vite = 5173;
|
||||
};
|
||||
```
|
||||
|
||||
### `m3ta.ports.hostOverrides`
|
||||
|
||||
Host-specific port overrides.
|
||||
|
||||
- Type: `attrsOf (attrsOf int)`
|
||||
- Default: `{}`
|
||||
|
||||
Example:
|
||||
|
||||
```nix
|
||||
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:
|
||||
|
||||
```bash
|
||||
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.
|
||||
|
||||
```nix
|
||||
home.sessionVariables = {
|
||||
DEV_PORT = toString (config.m3ta.ports.get "dev-server");
|
||||
};
|
||||
```
|
||||
|
||||
### `config.m3ta.ports.getHostPorts "hostname"`
|
||||
|
||||
Get all ports for a specific host.
|
||||
|
||||
```nix
|
||||
laptopPorts = config.m3ta.ports.getHostPorts "laptop";
|
||||
# Returns: { dev-server = 3000; vite = 5174; ... }
|
||||
```
|
||||
|
||||
### `config.m3ta.ports.listServices`
|
||||
|
||||
List all defined service names.
|
||||
|
||||
```nix
|
||||
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:
|
||||
|
||||
```nix
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
dev-server = 3000;
|
||||
nextjs = 3001;
|
||||
};
|
||||
generateEnvVars = true;
|
||||
};
|
||||
```
|
||||
|
||||
Generates:
|
||||
|
||||
```bash
|
||||
PORT_DEV_SERVER=3000
|
||||
PORT_NEXTJS=3001
|
||||
```
|
||||
|
||||
You can then use these in scripts:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
# Use environment variable directly
|
||||
npm start --port=$PORT_DEV_SERVER
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Basic Usage
|
||||
|
||||
```nix
|
||||
{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
|
||||
|
||||
```nix
|
||||
{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
|
||||
|
||||
```nix
|
||||
{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`:
|
||||
|
||||
```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:
|
||||
|
||||
```nix
|
||||
# Home Manager
|
||||
m3ta.ports.generateEnvVars = true; # Available
|
||||
|
||||
# NixOS
|
||||
# Not available
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [Port Management Guide](../../guides/port-management.md) - Detailed guide
|
||||
- [NixOS Ports Module](../nixos/ports.md) - System-level port management
|
||||
508
docs/modules/nixos/mem0.md
Normal file
508
docs/modules/nixos/mem0.md
Normal file
@@ -0,0 +1,508 @@
|
||||
# mem0 NixOS Module
|
||||
|
||||
Mem0 REST API server module for AI memory management.
|
||||
|
||||
## Overview
|
||||
|
||||
This module provides a systemd service for the Mem0 REST API server, enabling AI agents to maintain persistent memory across conversations.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [m3ta-nixpkgs.nixosModules.mem0];
|
||||
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
port = 8000;
|
||||
llm = {
|
||||
provider = "openai";
|
||||
apiKeyFile = "/run/secrets/openai-api-key";
|
||||
model = "gpt-4o-mini";
|
||||
};
|
||||
vectorStore = {
|
||||
provider = "qdrant";
|
||||
config = {
|
||||
host = "localhost";
|
||||
port = 6333;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Module Options
|
||||
|
||||
### `m3ta.mem0.enable`
|
||||
|
||||
Enable the Mem0 REST API server.
|
||||
|
||||
- Type: `boolean`
|
||||
- Default: `false`
|
||||
|
||||
### `m3ta.mem0.package`
|
||||
|
||||
The mem0 package to use.
|
||||
|
||||
- Type: `package`
|
||||
- Default: `pkgs.mem0`
|
||||
|
||||
### `m3ta.mem0.host`
|
||||
|
||||
Host address to bind the server to.
|
||||
|
||||
- Type: `string`
|
||||
- Default: `"127.0.0.1"`
|
||||
|
||||
### `m3ta.mem0.port`
|
||||
|
||||
Port to run the REST API server on.
|
||||
|
||||
- Type: `port`
|
||||
- Default: `8000`
|
||||
|
||||
### `m3ta.mem0.workers`
|
||||
|
||||
Number of worker processes.
|
||||
|
||||
- Type: `integer`
|
||||
- Default: `1`
|
||||
|
||||
### `m3ta.mem0.logLevel`
|
||||
|
||||
Logging level for the server.
|
||||
|
||||
- Type: `enum` ["critical" "error" "warning" "info" "debug" "trace"]
|
||||
- Default: `"info"`
|
||||
|
||||
### `m3ta.mem0.stateDir`
|
||||
|
||||
Directory to store mem0 data and state.
|
||||
|
||||
- Type: `path`
|
||||
- Default: `"/var/lib/mem0"`
|
||||
|
||||
### `m3ta.mem0.user`
|
||||
|
||||
User account under which mem0 runs.
|
||||
|
||||
- Type: `string`
|
||||
- Default: `"mem0"`
|
||||
|
||||
### `m3ta.mem0.group`
|
||||
|
||||
Group under which mem0 runs.
|
||||
|
||||
- Type: `string`
|
||||
- Default: `"mem0"`
|
||||
|
||||
### `m3ta.mem0.environmentFile`
|
||||
|
||||
Environment file containing additional configuration.
|
||||
|
||||
- Type: `nullOr path`
|
||||
- Default: `null`
|
||||
|
||||
## LLM Configuration
|
||||
|
||||
### `m3ta.mem0.llm.provider`
|
||||
|
||||
LLM provider to use.
|
||||
|
||||
- Type: `enum` ["openai" "anthropic" "azure" "groq" "together" "ollama" "litellm"]
|
||||
- Default: `"openai"`
|
||||
|
||||
### `m3ta.mem0.llm.model`
|
||||
|
||||
Model name to use.
|
||||
|
||||
- Type: `string`
|
||||
- Default: `"gpt-4o-mini"`
|
||||
|
||||
### `m3ta.mem0.llm.apiKeyFile`
|
||||
|
||||
Path to file containing the API key.
|
||||
|
||||
- Type: `nullOr path`
|
||||
- Default: `null`
|
||||
- Example: `"/run/secrets/openai-api-key"`
|
||||
|
||||
### `m3ta.mem0.llm.temperature`
|
||||
|
||||
Temperature parameter for LLM generation.
|
||||
|
||||
- Type: `nullOr float`
|
||||
- Default: `null`
|
||||
|
||||
### `m3ta.mem0.llm.maxTokens`
|
||||
|
||||
Maximum tokens for LLM generation.
|
||||
|
||||
- Type: `nullOr int`
|
||||
- Default: `null`
|
||||
|
||||
### `m3ta.mem0.llm.extraConfig`
|
||||
|
||||
Additional LLM configuration options.
|
||||
|
||||
- Type: `attrs`
|
||||
- Default: `{}`
|
||||
|
||||
## Vector Store Configuration
|
||||
|
||||
### `m3ta.mem0.vectorStore.provider`
|
||||
|
||||
Vector database provider.
|
||||
|
||||
- Type: `enum` ["qdrant" "chroma" "pinecone" "weaviate" "faiss" "pgvector" "redis" "elasticsearch" "milvus"]
|
||||
- Default: `"qdrant"`
|
||||
|
||||
### `m3ta.mem0.vectorStore.config`
|
||||
|
||||
Configuration for the vector store.
|
||||
|
||||
- Type: `attrs`
|
||||
- Default: `{}`
|
||||
|
||||
Example for Qdrant:
|
||||
|
||||
```nix
|
||||
vectorStore.config = {
|
||||
host = "localhost";
|
||||
port = 6333;
|
||||
collection_name = "mem0_memories";
|
||||
};
|
||||
```
|
||||
|
||||
Example for pgvector:
|
||||
|
||||
```nix
|
||||
vectorStore.config = {
|
||||
host = "localhost";
|
||||
port = 5432;
|
||||
dbname = "postgres";
|
||||
user = "postgres";
|
||||
password = "postgres";
|
||||
};
|
||||
```
|
||||
|
||||
## Embedder Configuration
|
||||
|
||||
### `m3ta.mem0.embedder.provider`
|
||||
|
||||
Embedding model provider.
|
||||
|
||||
- Type: `nullOr (enum` ["openai" "huggingface" "ollama" "vertexai"])
|
||||
- Default: `null`
|
||||
|
||||
### `m3ta.mem0.embedder.model`
|
||||
|
||||
Embedding model name.
|
||||
|
||||
- Type: `nullOr string`
|
||||
- Default: `null`
|
||||
|
||||
### `m3ta.mem0.embedder.config`
|
||||
|
||||
Configuration for the embedder.
|
||||
|
||||
- Type: `attrs`
|
||||
- Default: `{}`
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Minimal Configuration
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### With OpenAI
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
llm = {
|
||||
provider = "openai";
|
||||
apiKeyFile = "/run/secrets/openai-api-key";
|
||||
model = "gpt-4";
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### With Local LLM (Ollama)
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
llm = {
|
||||
provider = "ollama";
|
||||
model = "llama2";
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### With Port Management
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
mem0 = 8000;
|
||||
};
|
||||
currentHost = config.networking.hostName;
|
||||
};
|
||||
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
port = config.m3ta.ports.get "mem0";
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### With Qdrant
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
vectorStore = {
|
||||
provider = "qdrant";
|
||||
config = {
|
||||
host = "localhost";
|
||||
port = 6333;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
services.qdrant = {
|
||||
enable = true;
|
||||
port = 6333;
|
||||
};
|
||||
```
|
||||
|
||||
### With Secrets (agenix)
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
age.secrets.openai-api-key = {
|
||||
file = ./secrets/openai-api-key.age;
|
||||
};
|
||||
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
llm = {
|
||||
apiKeyFile = config.age.secrets.openai-api-key.path;
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Service Management
|
||||
|
||||
### Start/Stop/Restart
|
||||
|
||||
```bash
|
||||
# Start service
|
||||
sudo systemctl start mem0
|
||||
|
||||
# Stop service
|
||||
sudo systemctl stop mem0
|
||||
|
||||
# Restart service
|
||||
sudo systemctl restart mem0
|
||||
|
||||
# Check status
|
||||
sudo systemctl status mem0
|
||||
```
|
||||
|
||||
### View Logs
|
||||
|
||||
```bash
|
||||
# View logs
|
||||
sudo journalctl -u mem0 -f
|
||||
|
||||
# View last 100 lines
|
||||
sudo journalctl -u mem0 -n 100
|
||||
```
|
||||
|
||||
### Service File
|
||||
|
||||
The module creates a systemd service at `/etc/systemd/system/mem0.service` with:
|
||||
|
||||
- Security hardening enabled
|
||||
- Automatic restart on failure
|
||||
- Proper user/group setup
|
||||
|
||||
## API Usage
|
||||
|
||||
### Add Memory
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/v1/memories \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"content": "User prefers coffee over tea",
|
||||
"metadata": {"user_id": "123"}
|
||||
}'
|
||||
```
|
||||
|
||||
### Search Memories
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/v1/memories/search?q=coffee
|
||||
```
|
||||
|
||||
### Update Memory
|
||||
|
||||
```bash
|
||||
curl -X PATCH http://localhost:8000/v1/memories/memory_id \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"content": "User prefers coffee over tea, but also likes chai"
|
||||
}'
|
||||
```
|
||||
|
||||
### Delete Memory
|
||||
|
||||
```bash
|
||||
curl -X DELETE http://localhost:8000/v1/memories/memory_id
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Required Services
|
||||
|
||||
Depending on your configuration, you may need:
|
||||
|
||||
- **qdrant** service (if using qdrant vector store)
|
||||
- **postgresql** with pgvector (if using pgvector)
|
||||
- **chroma** service (if using chroma)
|
||||
- **ollama** (if using local LLMs)
|
||||
|
||||
### Example: Qdrant
|
||||
|
||||
```nix
|
||||
services.qdrant = {
|
||||
enable = true;
|
||||
port = 6333;
|
||||
};
|
||||
```
|
||||
|
||||
### Example: PostgreSQL
|
||||
|
||||
```nix
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
enableTCPIP = true;
|
||||
package = pkgs.postgresql_15;
|
||||
|
||||
extensions = ["pgvector"];
|
||||
|
||||
settings = {
|
||||
port = 5432;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
## Firewall
|
||||
|
||||
The module automatically opens the firewall port if binding to non-localhost addresses:
|
||||
|
||||
```nix
|
||||
# Opens port if host is not "127.0.0.1" or "localhost"
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
host = "0.0.0.0"; # Binds to all interfaces
|
||||
port = 8000;
|
||||
};
|
||||
# Firewall automatically opens port 8000
|
||||
```
|
||||
|
||||
## Security
|
||||
|
||||
### User/Group
|
||||
|
||||
Creates dedicated user and group:
|
||||
|
||||
- User: `mem0`
|
||||
- Group: `mem0`
|
||||
- Home: `/var/lib/mem0`
|
||||
|
||||
### Hardening
|
||||
|
||||
Systemd service includes security hardening:
|
||||
|
||||
- `NoNewPrivileges`
|
||||
- `PrivateTmp`
|
||||
- `ProtectSystem=strict`
|
||||
- `ProtectHome=true`
|
||||
- `RestrictRealtime=true`
|
||||
- `RestrictNamespaces=true`
|
||||
- `LockPersonality=true`
|
||||
|
||||
### Secrets
|
||||
|
||||
Use `apiKeyFile` for API keys instead of plain text:
|
||||
|
||||
```nix
|
||||
# Good
|
||||
llm.apiKeyFile = "/run/secrets/openai-api-key";
|
||||
|
||||
# Bad (insecure)
|
||||
llm.apiKey = "sk-xxx";
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Service Won't Start
|
||||
|
||||
Check logs:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u mem0 -n 50
|
||||
```
|
||||
|
||||
Common issues:
|
||||
|
||||
1. **API key missing**: Ensure `apiKeyFile` exists and is readable
|
||||
2. **Vector store unavailable**: Ensure qdrant/other store is running
|
||||
3. **Port in use**: Check if port is available
|
||||
|
||||
### API Not Responding
|
||||
|
||||
Check service status:
|
||||
|
||||
```bash
|
||||
sudo systemctl status mem0
|
||||
|
||||
# Check if port is open
|
||||
ss -tuln | grep 8000
|
||||
```
|
||||
|
||||
### Memory Issues
|
||||
|
||||
Increase memory limit in systemd override:
|
||||
|
||||
```bash
|
||||
sudo systemctl edit mem0
|
||||
|
||||
[Service]
|
||||
MemoryMax=2G
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [mem0 Package](../../packages/mem0.md) - Package documentation
|
||||
- [Port Management Guide](../../guides/port-management.md) - Using with port management
|
||||
- [Using Modules Guide](../../guides/using-modules.md) - Module usage patterns
|
||||
166
docs/modules/nixos/overview.md
Normal file
166
docs/modules/nixos/overview.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# NixOS Modules Overview
|
||||
|
||||
Overview of available NixOS modules in m3ta-nixpkgs.
|
||||
|
||||
## Available Modules
|
||||
|
||||
- [ports](./ports.md) - Port management across hosts
|
||||
- [mem0](./mem0.md) - Mem0 REST API server
|
||||
|
||||
## Importing Modules
|
||||
|
||||
### Import All Modules
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [
|
||||
m3ta-nixpkgs.nixosModules.default
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
### Import Specific Module
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [
|
||||
m3ta-nixpkgs.nixosModules.ports
|
||||
m3ta-nixpkgs.nixosModules.mem0
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
## Module Namespace
|
||||
|
||||
All NixOS modules use the `m3ta.*` namespace:
|
||||
|
||||
```nix
|
||||
# Port management
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {nginx = 80;};
|
||||
};
|
||||
|
||||
# Mem0 service
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
port = 8000;
|
||||
};
|
||||
```
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### Enable Module
|
||||
|
||||
All modules follow the pattern:
|
||||
|
||||
```nix
|
||||
m3ta.moduleName = {
|
||||
enable = true;
|
||||
# ... options
|
||||
};
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
||||
Modules typically provide these sections:
|
||||
|
||||
- `enable` - Enable/disable module
|
||||
- `package` - Custom package (optional)
|
||||
- Configuration options specific to module
|
||||
|
||||
## Integration Examples
|
||||
|
||||
### With Port Management
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
imports = [
|
||||
m3ta-nixpkgs.nixosModules.default
|
||||
];
|
||||
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
nginx = 80;
|
||||
grafana = 3000;
|
||||
mem0 = 8000;
|
||||
};
|
||||
currentHost = config.networking.hostName;
|
||||
};
|
||||
|
||||
m3ta.mem0 = {
|
||||
enable = true;
|
||||
port = config.m3ta.ports.get "mem0";
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
httpConfig = ''
|
||||
server {
|
||||
listen ${toString (config.m3ta.ports.get "nginx")};
|
||||
root /var/www;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### With Home Manager
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
# NixOS modules
|
||||
imports = [
|
||||
m3ta-nixpkgs.nixosModules.default
|
||||
];
|
||||
|
||||
# Home Manager integration
|
||||
home-manager.users.myusername = {
|
||||
imports = [
|
||||
m3ta-nixpkgs.homeManagerModules.default
|
||||
];
|
||||
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
dev-server = 3000;
|
||||
};
|
||||
currentHost = config.networking.hostName;
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Module Locations
|
||||
|
||||
- `modules/nixos/ports.nix` - Port management module
|
||||
- `modules/nixos/mem0.nix` - Mem0 REST API server module
|
||||
|
||||
## Adding New Modules
|
||||
|
||||
1. Create module file: `modules/nixos/my-module.nix`
|
||||
2. Follow standard pattern:
|
||||
|
||||
```nix
|
||||
{ config, lib, pkgs, ... }:
|
||||
with lib; let
|
||||
cfg = config.m3ta.myModule;
|
||||
in {
|
||||
options.m3ta.myModule = {
|
||||
enable = mkEnableOption "my module";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# Configuration
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
3. Import in `modules/nixos/default.nix`
|
||||
|
||||
## Related
|
||||
|
||||
- [Port Management Guide](../guides/port-management.md) - Detailed port management usage
|
||||
- [Using Modules Guide](../guides/using-modules.md) - How to use modules
|
||||
- [Home Manager Modules](./home-manager/overview.md) - User-level modules
|
||||
229
docs/modules/nixos/ports.md
Normal file
229
docs/modules/nixos/ports.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# ports NixOS Module
|
||||
|
||||
Port management module for NixOS.
|
||||
|
||||
## Overview
|
||||
|
||||
This module provides centralized port management across multiple hosts. Define default ports and host-specific overrides to prevent conflicts.
|
||||
|
||||
See [Port Management Guide](../../guides/port-management.md) for detailed usage.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
|
||||
# Define default ports
|
||||
definitions = {
|
||||
nginx = 80;
|
||||
grafana = 3000;
|
||||
prometheus = 9090;
|
||||
};
|
||||
|
||||
# Host-specific overrides
|
||||
hostOverrides = {
|
||||
laptop = {
|
||||
nginx = 8080;
|
||||
grafana = 3001;
|
||||
};
|
||||
};
|
||||
|
||||
# Current host
|
||||
currentHost = config.networking.hostName;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Module Options
|
||||
|
||||
### `m3ta.ports.enable`
|
||||
|
||||
Enable port management.
|
||||
|
||||
- Type: `boolean`
|
||||
- Default: `false`
|
||||
|
||||
### `m3ta.ports.definitions`
|
||||
|
||||
Default port definitions.
|
||||
|
||||
- Type: `attrsOf int`
|
||||
- Default: `{}`
|
||||
|
||||
Example:
|
||||
|
||||
```nix
|
||||
definitions = {
|
||||
nginx = 80;
|
||||
grafana = 3000;
|
||||
prometheus = 9090;
|
||||
};
|
||||
```
|
||||
|
||||
### `m3ta.ports.hostOverrides`
|
||||
|
||||
Host-specific port overrides.
|
||||
|
||||
- Type: `attrsOf (attrsOf int)`
|
||||
- Default: `{}`
|
||||
|
||||
Example:
|
||||
|
||||
```nix
|
||||
hostOverrides = {
|
||||
laptop = {
|
||||
nginx = 8080;
|
||||
grafana = 3001;
|
||||
};
|
||||
server = {
|
||||
nginx = 80;
|
||||
prometheus = 9091;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
### `m3ta.ports.currentHost`
|
||||
|
||||
Current hostname. Determines which overrides to apply.
|
||||
|
||||
- Type: `string`
|
||||
- Example: `config.networking.hostName`
|
||||
|
||||
## Functions
|
||||
|
||||
### `config.m3ta.ports.get "service"`
|
||||
|
||||
Get port for a service with host-specific override.
|
||||
|
||||
```nix
|
||||
services.nginx = {
|
||||
port = config.m3ta.ports.get "nginx";
|
||||
};
|
||||
```
|
||||
|
||||
If current host is `laptop` and `hostOverrides.laptop.nginx = 8080`, returns `8080`.
|
||||
If no override, returns default `80`.
|
||||
|
||||
### `config.m3ta.ports.getHostPorts "hostname"`
|
||||
|
||||
Get all ports for a specific host.
|
||||
|
||||
```nix
|
||||
# Get all ports for laptop
|
||||
laptopPorts = config.m3ta.ports.getHostPorts "laptop";
|
||||
# Returns: { nginx = 8080; grafana = 3000; ... }
|
||||
```
|
||||
|
||||
### `config.m3ta.ports.listServices`
|
||||
|
||||
List all defined service names.
|
||||
|
||||
```nix
|
||||
allServices = config.m3ta.ports.listServices;
|
||||
# Returns: ["nginx" "grafana" "prometheus"]
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Basic Usage
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
nginx = 80;
|
||||
grafana = 3000;
|
||||
};
|
||||
currentHost = "server";
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
httpConfig = ''
|
||||
server {
|
||||
listen ${toString (config.m3ta.ports.get "nginx")};
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Multi-Host Setup
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
nginx = 80;
|
||||
grafana = 3000;
|
||||
prometheus = 9090;
|
||||
};
|
||||
hostOverrides = {
|
||||
laptop = {
|
||||
nginx = 8080;
|
||||
grafana = 3001;
|
||||
};
|
||||
server = {
|
||||
nginx = 80;
|
||||
grafana = 3000;
|
||||
};
|
||||
};
|
||||
currentHost = config.networking.hostName;
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
httpConfig = ''
|
||||
server {
|
||||
listen ${toString (config.m3ta.ports.get "nginx")};
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### With Multiple Services
|
||||
|
||||
```nix
|
||||
{config, ...}: {
|
||||
m3ta.ports = {
|
||||
enable = true;
|
||||
definitions = {
|
||||
# Monitoring
|
||||
grafana = 3000;
|
||||
prometheus = 9090;
|
||||
loki = 3100;
|
||||
promtail = 9080;
|
||||
|
||||
# Web
|
||||
nginx = 80;
|
||||
|
||||
# Databases
|
||||
postgres = 5432;
|
||||
redis = 6379;
|
||||
qdrant = 6333;
|
||||
};
|
||||
currentHost = config.networking.hostName;
|
||||
};
|
||||
|
||||
# Use ports
|
||||
services.grafana = {
|
||||
enable = true;
|
||||
settings.server.http_port = config.m3ta.ports.get "grafana";
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
port = config.m3ta.ports.get "postgres";
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
- [Port Management Guide](../../guides/port-management.md) - Detailed guide
|
||||
- [Home Manager Ports Module](../home-manager/ports.md) - User-level port management
|
||||
Reference in New Issue
Block a user