holo

Holo is a suite of routing protocols designed to address the needs of modern networks

This project is funded by NLnet through these subgrants:

Try the service in a VM

  1. Install Nix
    Arch Linux
    Bash
    $ pacman --sync --refresh --noconfirm curl git jq nix
    Debian
    Bash
    $ apt install --yes curl git jq nix
    Ubuntu
    Bash
    $ apt install --yes curl git jq nix
  2. Download a configuration file
    # default.nix
    {
      ngipkgs ? import (fetchTarball "https://github.com/ngi-nix/ngipkgs/tarball/main") { },
    }:
    ngipkgs.demo-vm (
      { ... }:
      {
        programs.holo.enable = true;
        services.holo-daemon.enable = true;
      }
    
    )
    
  3. Enable binary substituters
    Bash
    $ export NIX_CONFIG='substituters = https://cache.nixos.org/ https://ngi.cachix.org/
    trusted-public-keys = cache.nixos.org-1:6nchdd59x431o0gwypbmraurkbj16zpmqfgspcdshjy= ngi.cachix.org-1:n+cal72roc3qqulxihpv+tw5t42whxmmhpragkrsrow='
  4. Build and run a virtual machine
    Arch Linux, Debian Sid and Ubuntu 25.04
    Bash
    $ nix-build ./default.nix && ./result
    Debian 12 and Ubuntu 24.04/24.10
    Bash
    $ rev=$(nix-instantiate --eval --attr sources.nixpkgs.rev https://github.com/ngi-nix/ngipkgs/archive/master.tar.gz | jq --raw-output)
    $ nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/$rev.tar.gz --packages nix --run "nix-build ./default.nix && ./result"

Options

programs.holo
programs.holo.enable

Whether to enable holo.

Type:
boolean
Default:
false
programs.holo.package

The holo-cli package to use.

Type:
package
Default:
pkgs.holo-cli
services.holo-daemon
services.holo-daemon.enable

Whether to enable Holo daemon.

Type:
boolean
Default:
false
services.holo-daemon.package

The holo-daemon package to use.

Type:
package
Default:
pkgs.holo-daemon
services.holo-daemon.settings

Configuration for the holo daemon

Type:
TOML value
Default:
{ }
services.holo-daemon.settings.database_path

Path to the holo database

Type:
string
Default:
"/var/run/holod/holod.db"
services.holo-daemon.settings.group

Group for the holo daemon

Type:
string
Default:
"holo"
services.holo-daemon.settings.logging

Logging configuration for the holo daemon

Type:
TOML value
Default:
{ }
services.holo-daemon.settings.logging.file

File logging configuration

Type:
submodule
Default:
{ }
services.holo-daemon.settings.logging.file.dir

Directory for log files

Type:
string
Default:
"/var/log/"
services.holo-daemon.settings.logging.file.enabled

Enable or disable file logging

Type:
boolean
Default:
true
services.holo-daemon.settings.logging.file.name

Name of the log file

Type:
string
Default:
"holod.log"
services.holo-daemon.settings.logging.journald

Journald logging configuration

Type:
submodule
Default:
{ }
services.holo-daemon.settings.logging.journald.enabled

Enable or disable journald logging

Type:
boolean
Default:
true
services.holo-daemon.settings.plugins

Plugin configuration for the holo daemon

Type:
TOML value
Default:
{ }
services.holo-daemon.settings.plugins.grpc

gRPC plugin configuration

Type:
submodule
Default:
{ }
services.holo-daemon.settings.plugins.grpc.address

gRPC server listening address

Type:
string
Default:
"[::]:50051"
services.holo-daemon.settings.plugins.grpc.enabled

Enable or disable gRPC plugin

Type:
boolean
Default:
true
services.holo-daemon.settings.user

User for the holo daemon

Type:
string
Default:
"holo"

Examples

Enable the holo program
{ ... }:

{
  programs.holo.enable = true;
}
Enable the holo daemon service
{ ... }:
{
  programs.holo.enable = true;
  services.holo-daemon.enable = true;
}