Files
2026-10-13 17:03:40 -04:00

158 lines
4.4 KiB
Markdown

# OmniSearch
A modern lightweight metasearch engine with a clean design written in C.
## Disclaimer
I request that none of this code, in part or in full, be hosted on GitHub, SourceForge, or any other proprietary platform. This request is made out of respect for both me, the developer and for you, the user.
## Configuration
Create a config.ini, there is an example included in the root. Or if you installed omnisearch, edit the installed config file.
## Dependencies
- libxml2
- libcurl (may be replaced in the future with curl-impersonate)
- beaker [(source)](https://git.bwaaa.monster/beaker/)
## First Setup
Depending on your system, you may first need to install libcurl and libxml2.
### Arch Linux
```
# pacman -S libxml2 curl
```
### Debian/Ubuntu
```
# apt install build-essential libssl-dev libxml2-dev libcurl4-openssl-dev
```
### Fedora
```
# dnf install libxml2-devel libcurl-devel
```
### openSUSE
```
# zypper install libxml2-devel libcurl-devel
```
### Alpine
```
# apk add libxml2-dev curl-dev shadow
```
On Alpine, `shadow` is needed for the user creation process during the install.
### Void
```
# xbps-install -S libxml2-devel libcurl-devel
```
### macOS (Homebrew)
```
$ brew install libxml2 curl openssl pkg-config
```
### macOS (MacPorts)
```
# port install libxml2 curl openssl3 pkgconfig
```
On macOS the build uses `pkg-config` to discover `libxml2`, `libcurl` and OpenSSL flags.
Install libbeaker:
```
$ git clone https://git.bwaaa.monster/beaker
$ cd beaker
$ make
# make install
```
On macOS `beaker` installs to `/usr/local/` by default and installs `libbeaker.dylib`.
And then install omnisearch:
```
$ git clone https://git.bwaaa.monster/omnisearch
$ cd omnisearch
$ make
# make install-<init>
```
Replace `<init>` with your init system (`openrc`, `systemd`, `runit`, `s6`, `dinit`, `launchd`).
On macOS, use `install-launchd`.
## Hosting
Run it normally behind a reverse proxy (like nginx)
## Nix
The flake builds the vendored Beaker source in `vendor/beaker` and provides the
other build dependencies. Run `nix develop`
then `make` to build locally, or use `nix build` and `nix run` for a packaged
build. The packaged launcher runs with its bundled templates, static files and
locales, using the application's default settings. For a custom `config.ini`,
run the built binary (`result/libexec/omnisearch`) from a directory containing
`config.ini`, `templates/`, `static/` and `locales/` (for example, this checkout).
Docker also builds from `vendor/beaker`; non-Nix local builds still require
Beaker to be installed separately.
### NixOS service
Import the module from this flake and enable the service:
```nix
{
imports = [ omnisearch.nixosModules.default ];
services.omnisearch = {
enable = true;
openFirewall = true;
settings = {
server = { host = "127.0.0.1"; port = 8087; };
engines.engines = "*";
rate_limit = { search_requests = 10; search_interval = 60; };
};
};
}
```
The module manages a system user, systemd service, persistent cache/state
directories and the asset links needed by OmniSearch. `settings` uses INI
sections and keys matching `example-config.ini`; `extraConfig` appends raw INI
text after those generated settings. Both are embedded in the world-readable
Nix store, so do not put credentials or other secrets in them. The firewall
remains closed unless `openFirewall` is enabled.
## Deploy with Docker Compose
You need Docker or Podman and Docker Compose installed on your system.
Run the container:
```
$ git clone https://git.bwaaa.monster/omnisearch
$ cd omnisearch
$ docker compose up -d --build
```
By default it can be reached on port 8087.
## Customisation
To make your own changes while still being able to receive upstream updates:
```
$ git checkout -b my-changes
```
Make your changes in the cloned folder, then periodically merge upstream:
```
$ git fetch origin
$ git merge origin/master
```
If there are conflicts in the files you modified, resolve them manually. You should also make the changes to the cloned repository, and then run the install command again if you installed omnisearch. Changes made directly to the configuration/assets folder will be overwritten on reinstall.
## Contribution
Generate a patch with ```git format-patch HEAD~1``` and email to [gabriel@bwaaa.monster](mailto:gabriel@bwaaa.monster), beginning the subject line with [PATCH omnisearch]
*If you are sending a revised version of a previous patch, please use [PATCH omnisearch v2, v3, etc].*