2025-12-30 15:42:52 +01:00
|
|
|
# Getting Started Guide
|
|
|
|
|
|
|
|
|
|
Initial setup and basic usage of m3ta-nixpkgs.
|
|
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
### Prerequisites
|
|
|
|
|
|
|
|
|
|
Make sure you have Nix installed with flakes enabled:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Check Nix version (need 2.4+)
|
|
|
|
|
nix --version
|
|
|
|
|
|
|
|
|
|
# Enable flakes (in /etc/nixos/configuration.nix)
|
|
|
|
|
nix.settings.experimental-features = ["nix-command" "flakes"]
|
|
|
|
|
|
|
|
|
|
# Rebuild NixOS
|
|
|
|
|
sudo nixos-rebuild switch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Adding to Your Flake
|
|
|
|
|
|
|
|
|
|
#### Option 1: NixOS Configuration
|
|
|
|
|
|
|
|
|
|
Add to your `flake.nix`:
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
{
|
|
|
|
|
description = "My NixOS configuration";
|
|
|
|
|
|
|
|
|
|
inputs = {
|
|
|
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
|
home-manager.url = "github:nix-community/home-manager";
|
|
|
|
|
|
|
|
|
|
m3ta-nixpkgs = {
|
|
|
|
|
url = "git+https://code.m3ta.dev/m3tam3re/nixpkgs";
|
|
|
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
outputs = {
|
|
|
|
|
self,
|
|
|
|
|
nixpkgs,
|
|
|
|
|
home-manager,
|
|
|
|
|
m3ta-nixpkgs,
|
|
|
|
|
...
|
|
|
|
|
}: {
|
|
|
|
|
nixosConfigurations = {
|
|
|
|
|
myhost = nixpkgs.lib.nixosSystem {
|
|
|
|
|
system = "x86_64-linux";
|
|
|
|
|
modules = [
|
|
|
|
|
./hardware-configuration.nix
|
|
|
|
|
|
|
|
|
|
# Import m3ta-nixpkgs modules
|
|
|
|
|
m3ta-nixpkgs.nixosModules.default
|
|
|
|
|
|
|
|
|
|
# Apply overlay
|
|
|
|
|
({pkgs, ...}: {
|
|
|
|
|
nixpkgs.overlays = [m3ta-nixpkgs.overlays.default];
|
|
|
|
|
|
|
|
|
|
# Packages from m3ta-nixpkgs are now available
|
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
|
code2prompt
|
|
|
|
|
zellij-ps
|
|
|
|
|
];
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# Home Manager integration
|
|
|
|
|
home-manager.nixosModules.home-manager
|
|
|
|
|
{
|
|
|
|
|
home-manager.useGlobalPkgs = true;
|
|
|
|
|
home-manager.useUserPackages = true;
|
|
|
|
|
home-manager.users.myusername = {
|
|
|
|
|
imports = [m3ta-nixpkgs.homeManagerModules.default];
|
|
|
|
|
home.packages = with pkgs; [
|
|
|
|
|
launch-webapp
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Option 2: Standalone Home Manager
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
{
|
|
|
|
|
description = "My Home Manager configuration";
|
|
|
|
|
|
|
|
|
|
inputs = {
|
|
|
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
|
home-manager.url = "github:nix-community/home-manager";
|
|
|
|
|
|
|
|
|
|
m3ta-nixpkgs = {
|
|
|
|
|
url = "git+https://code.m3ta.dev/m3tam3re/nixpkgs";
|
|
|
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
outputs = {
|
|
|
|
|
self,
|
|
|
|
|
nixpkgs,
|
|
|
|
|
home-manager,
|
|
|
|
|
m3ta-nixpkgs,
|
|
|
|
|
}: let
|
|
|
|
|
system = "x86_64-linux";
|
|
|
|
|
pkgs = import nixpkgs {
|
|
|
|
|
inherit system;
|
|
|
|
|
overlays = [m3ta-nixpkgs.overlays.default];
|
|
|
|
|
};
|
|
|
|
|
in {
|
|
|
|
|
homeConfigurations.myusername = home-manager.lib.homeManagerConfiguration {
|
|
|
|
|
inherit pkgs;
|
|
|
|
|
modules = [
|
|
|
|
|
m3ta-nixpkgs.homeManagerModules.default
|
|
|
|
|
{
|
|
|
|
|
home.username = "myusername";
|
|
|
|
|
home.homeDirectory = "/home/myusername";
|
|
|
|
|
home.packages = with pkgs; [
|
|
|
|
|
code2prompt
|
|
|
|
|
zellij-ps
|
|
|
|
|
];
|
|
|
|
|
programs.home-manager.enable = true;
|
|
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Quick Usage
|
|
|
|
|
|
|
|
|
|
### Using Packages Directly
|
|
|
|
|
|
|
|
|
|
Without adding to your configuration:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Build a package
|
|
|
|
|
nix build git+https://code.m3ta.dev/m3tam3re/nixpkgs#code2prompt
|
|
|
|
|
|
|
|
|
|
# Run a package
|
|
|
|
|
nix run git+https://code.m3ta.dev/m3tam3re/nixpkgs#zellij-ps
|
|
|
|
|
|
|
|
|
|
# List all available packages
|
|
|
|
|
nix flake show git+https://code.m3ta.dev/m3tam3re/nixpkgs
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Using Packages in Configuration
|
|
|
|
|
|
|
|
|
|
After applying overlay:
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
# System-wide (NixOS)
|
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
|
code2prompt
|
|
|
|
|
zellij-ps
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
# User-only (Home Manager)
|
|
|
|
|
home.packages = with pkgs; [
|
|
|
|
|
launch-webapp
|
|
|
|
|
];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Using Modules
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
# Import all modules
|
|
|
|
|
imports = [
|
|
|
|
|
m3ta-nixpkgs.nixosModules.default
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
# Or import specific module
|
|
|
|
|
imports = [
|
|
|
|
|
m3ta-nixpkgs.nixosModules.mem0
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
# Configure module
|
|
|
|
|
m3ta.mem0 = {
|
|
|
|
|
enable = true;
|
|
|
|
|
port = 8000;
|
|
|
|
|
};
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Common Tasks
|
|
|
|
|
|
|
|
|
|
### Install a Package System-Wide
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
# /etc/nixos/configuration.nix
|
|
|
|
|
{pkgs, ...}: {
|
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
|
code2prompt
|
|
|
|
|
hyprpaper-random
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Apply
|
|
|
|
|
sudo nixos-rebuild switch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Install a Package for Your User
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
# home.nix
|
|
|
|
|
{pkgs, ...}: {
|
|
|
|
|
home.packages = with pkgs; [
|
|
|
|
|
launch-webapp
|
|
|
|
|
zellij-ps
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Apply
|
|
|
|
|
home-manager switch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Enable a NixOS Module
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
# /etc/nixos/configuration.nix
|
|
|
|
|
{config, ...}: {
|
|
|
|
|
imports = [
|
|
|
|
|
m3ta-nixpkgs.nixosModules.default
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
m3ta.mem0 = {
|
|
|
|
|
enable = true;
|
|
|
|
|
port = 8000;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
# Apply
|
|
|
|
|
# sudo nixos-rebuild switch
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Enable a Home Manager Module
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
# home.nix
|
|
|
|
|
{config, ...}: {
|
|
|
|
|
imports = [
|
|
|
|
|
m3ta-nixpkgs.homeManagerModules.default
|
|
|
|
|
];
|
|
|
|
|
|
2026-01-10 19:12:45 +01:00
|
|
|
cli.zellij-ps = {
|
2025-12-30 15:42:52 +01:00
|
|
|
enable = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
# Apply
|
|
|
|
|
# home-manager switch
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Use Port Management
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
{config, ...}: {
|
|
|
|
|
m3ta.ports = {
|
|
|
|
|
enable = true;
|
|
|
|
|
definitions = {
|
|
|
|
|
nginx = 80;
|
|
|
|
|
grafana = 3000;
|
|
|
|
|
};
|
|
|
|
|
hostOverrides.laptop = {
|
|
|
|
|
nginx = 8080;
|
|
|
|
|
};
|
|
|
|
|
currentHost = config.networking.hostName;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
services.nginx = {
|
|
|
|
|
enable = true;
|
|
|
|
|
httpConfig = ''
|
|
|
|
|
server {
|
|
|
|
|
listen ${toString (config.m3ta.ports.get "nginx")};
|
|
|
|
|
root /var/www;
|
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Available Packages
|
|
|
|
|
|
|
|
|
|
| Package | Description |
|
|
|
|
|
| ------------------ | ------------------------------------- |
|
|
|
|
|
| `code2prompt` | Convert code to prompts |
|
|
|
|
|
| `hyprpaper-random` | Random wallpaper setter for Hyprpaper |
|
|
|
|
|
| `launch-webapp` | Launch web applications |
|
|
|
|
|
| `mem0` | AI memory assistant with vector storage |
|
|
|
|
|
| `msty-studio` | Msty Studio application |
|
|
|
|
|
| `pomodoro-timer` | Pomodoro timer utility |
|
|
|
|
|
| `tuxedo-backlight` | Backlight control for Tuxedo laptops |
|
|
|
|
|
| `zellij-ps` | Project switcher for Zellij |
|
|
|
|
|
|
|
|
|
|
## Available Modules
|
|
|
|
|
|
|
|
|
|
### NixOS Modules
|
|
|
|
|
|
|
|
|
|
- `ports` - Port management across hosts
|
|
|
|
|
- `mem0` - Mem0 REST API server
|
|
|
|
|
|
|
|
|
|
### Home Manager Modules
|
|
|
|
|
|
|
|
|
|
- `ports` - Port management (with `generateEnvVars`)
|
|
|
|
|
- `cli.zellij-ps` - Zellij project switcher
|
|
|
|
|
- `coding.editors` - Editor configurations
|
|
|
|
|
|
|
|
|
|
## Development
|
|
|
|
|
|
|
|
|
|
### Development Shells
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Default dev shell
|
|
|
|
|
nix develop
|
|
|
|
|
|
|
|
|
|
# Python dev shell
|
|
|
|
|
nix develop .#python
|
|
|
|
|
|
|
|
|
|
# DevOps dev shell
|
|
|
|
|
nix develop .#devops
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Building and Testing
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Build package
|
|
|
|
|
nix build .#code2prompt
|
|
|
|
|
|
|
|
|
|
# Validate flake
|
|
|
|
|
nix flake check
|
|
|
|
|
|
|
|
|
|
# List outputs
|
|
|
|
|
nix flake show
|
|
|
|
|
|
|
|
|
|
# Format code
|
|
|
|
|
nix fmt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Linting (in dev shell)
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
nix develop
|
|
|
|
|
|
|
|
|
|
# Run linter
|
|
|
|
|
statix check .
|
|
|
|
|
|
|
|
|
|
# Find dead code
|
|
|
|
|
deadnix .
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
### Package Not Found
|
|
|
|
|
|
|
|
|
|
**Error**: `error: undefined variable 'code2prompt'`
|
|
|
|
|
|
|
|
|
|
**Solution**: Make sure you applied the overlay:
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
nixpkgs.overlays = [m3ta-nixpkgs.overlays.default];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Module Not Found
|
|
|
|
|
|
|
|
|
|
**Error**: `error: The option 'm3ta.mem0' does not exist`
|
|
|
|
|
|
|
|
|
|
**Solution**: Make sure you imported the module:
|
|
|
|
|
|
|
|
|
|
```nix
|
|
|
|
|
imports = [
|
|
|
|
|
m3ta-nixpkgs.nixosModules.default
|
|
|
|
|
# or
|
|
|
|
|
m3ta-nixpkgs.nixosModules.mem0
|
|
|
|
|
];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Hash Mismatch
|
|
|
|
|
|
|
|
|
|
**Error**: `got: sha256-AAAAAAAA... expected: sha256-BBBBBB...`
|
|
|
|
|
|
|
|
|
|
**Solution**: Copy the `got` hash from the error and update the package definition.
|
|
|
|
|
|
|
|
|
|
### Building for Different System
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Build for aarch64-linux
|
|
|
|
|
nix build .#code2prompt --system aarch64-linux
|
|
|
|
|
|
|
|
|
|
# Build for macOS
|
|
|
|
|
nix build .#code2prompt --system x86_64-darwin
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Next Steps
|
|
|
|
|
|
|
|
|
|
- [Adding Packages](./adding-packages.md) - How to add new packages
|
|
|
|
|
- [Using Modules](./using-modules.md) - Deep dive into modules
|
|
|
|
|
- [Port Management](./port-management.md) - Managing service ports
|
|
|
|
|
- [Architecture](../ARCHITECTURE.md) - Understanding the repository structure
|