Skip to content

Latest commit

 

History

History
146 lines (101 loc) · 4.08 KB

File metadata and controls

146 lines (101 loc) · 4.08 KB

NixSearch.NET

A comprehensive .NET solution for searching and exploring NixOS packages, options, and flakes using the search.nixos.org Elasticsearch backend.

License: MIT .NET

Overview

NixSearch.NET provides multiple ways to interact with the NixOS package and option search ecosystem:

  • Library: A robust .NET client library for programmatic access
  • CLI Tool: A command-line interface for quick searches
  • MCP Server: A Model Context Protocol server for AI assistant integration

Projects

The core library providing search functionality for NixOS packages, options, and flakes.

  • NuGet Package: NixSearch.Core
  • Target Framework: .NET 10
  • Features: Full Elasticsearch query support, strongly-typed models, async/await patterns

A command-line tool for searching NixOS packages and options from your terminal.

  • NuGet Package: NixSearch.CLI
  • Tool Command: nixsearch
  • Installation: dotnet tool install -g NixSearch.CLI

A Model Context Protocol (MCP) server enabling AI assistants to search NixOS packages and options.

Quick Start

Using the Library

dotnet add package NixSearch.Core
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

using NixSearch.Core.Extensions;
using NixSearch.Core.Models;
using NixSearch.Core.Search;

IConfiguration configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build()
    .GetSection("NixSearch");

ServiceCollection services = new ServiceCollection();
services.AddNixSearch(configuration);
ServiceProvider provider = services.BuildServiceProvider();

INixSearchClient client = provider.GetRequiredService<INixSearchClient>();
IReadOnlyList<NixChannel> channels = await client.GetChannelsAsync();

Nest.ISearchResponse<NixPackage> results = await client.Packages()
    .WithQuery("git")
    .ForChannel(NixChannel.Parse("unstable", channels))
    .Page(0, 10)
    .ExecuteAsync();

foreach (NixPackage package in results.Documents)
{
    Console.WriteLine($"{package.Name}: {package.Version}");
}

Using the CLI

# Install globally
dotnet tool install -g NixSearch.CLI

# Search for packages
nixsearch packages git --size 10

# Search for options
nixsearch options services.nginx --size 5

Using the MCP Server

The MCP server can be deployed to AWS Lambda or run locally. See the MCP documentation for details on integration with AI assistants like Claude.

Building

# Build all projects
dotnet build

# Run tests
dotnet test

# Pack NuGet packages
dotnet pack

Requirements

  • .NET 10 SDK or later
  • For AWS Lambda deployment: AWS CLI configured

Repository Structure

NixSearch.NET/
├── src/
│   ├── NixSearch.Core/      # Core library
│   ├── NixSearch.CLI/       # CLI tool
│   └── NixSearch.MCP/       # MCP server
├── tests/
│   ├── NixSearch.Core.Tests/
│   ├── NixSearch.CLI.Tests/
│   └── NixSearch.MCP.Tests/
├── .github/
│   └── workflows/           # CI/CD workflows
└── NixSearch.sln            # Solution file

Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments