1
0
Fork 0
Modular server management based on NixOS modules and focused on best practices.
Find a file
github-actions[bot] 0fccc02d84 flake.lock: Update
Flake lock file updates:

• Updated input 'sops-nix':
    'github:Mic92/sops-nix/ffed177a9d2c685901781c3c6c9024ae0ffc252b' (2024-02-18)
  → 'github:Mic92/sops-nix/acfcce2a36da17ebb724d2e100d47881880c2e48' (2024-02-20)
2024-02-20 17:05:28 -08:00
.github/workflows allow status check on matrix job 2024-02-02 15:46:08 -08:00
demo bump demo flake inputs 2024-02-07 22:45:03 -08:00
docs more docs 2024-02-02 12:19:16 -08:00
lib move template function into lib 2024-02-09 21:20:13 -08:00
modules fix link 2024-02-11 20:04:42 -08:00
test fix some deprecated options 2024-02-07 22:33:25 -08:00
.gitignore use nix-fast-builds in CI 2023-12-04 00:01:25 -08:00
flake.lock flake.lock: Update 2024-02-20 17:05:28 -08:00
flake.nix use contract for ssl block 2024-01-19 10:48:10 -08:00
LICENSE relicense with AGPL 2023-11-16 20:56:00 -08:00
README.md more docs 2024-02-02 12:19:16 -08:00

Self Host Blocks

Building blocks for self-hosting with battery included.

Tests Demo Documentation

SHB's (Self Host Blocks) is yet another server management tool whose goal is to provide a lower entry-bar for self-hosting. SHB provides opinionated building blocks fitting together to self-host any service you'd want. Some common services are provided out of the box.

To achieve this, SHB is using the full power of NixOS modules. Indeed, each building block and each service is a NixOS module and uses the modules defined in Nixpkgs.

TOC

Usage

Caution: You should know that although I am using everything in this repo for my personal production server, this is really just a one person effort for now and there are most certainly bugs that I didn't discover yet.

Self Host Blocks is available as a flake. To use it in your project, add the following flake input:

inputs.selfhostblocks.url = "github:ibizaman/selfhostblocks";

See the manual for more information about installing Self Host Blocks.

  • You are new to self hosting and want pre-configured services to deploy easily. Look at the services section.
  • You are a seasoned self-hoster but want to enhance some services you deploy already. Go to the blocks section.
  • You are a user of Self Host Blocks but would like to use your own implementation for a block. Head over to the matrix channel to talk about it (this is WIP).

Why yet another self hosting tool?

By using Self Host Blocks, you get all the benefits of NixOS which are, for self hosted applications specifically:

  • declarative configuration;
  • atomic configuration rollbacks;
  • real programming language to define configurations;
  • user-defined abstractions (create your own functions or NixOS modules on top of SHB!);
  • integration with the rest of nixpkgs.

In no particular order, here are some aspects of SHB which I find interesting and differentiates it from other server management projects:

  • SHB intends to be a library, not a framework. You can either go all in and use SHB provided services directly or use just one block in your existing infrastructure.
  • SHB introduces contracts to allow you to swap implementation for each self-hosting need. For example, you should be able to use the reverse proxy you want without modifying any services depending on it.
  • SHB contracts also allows you to use your own custom implementation instead of the provided one, as long as it follows the contract and passes the tests.
  • SHB provides at least one implementation for each self-hosting need like backups, SSL certificates, reverse proxy, VPN, etc. Those are called blocks here. They are documented in the manual.
  • SHB follows nixpkgs unstable branch closely. There is a GitHub action running daily that updates the nixpkgs input in the root flakes.nix, runs the tests and merges a PR with the new input if the tests pass.

Manual

The manual can be found at shb.skarabox.com.

Currently, only some services and blocks are documented. For the rest, unfortunately the source code is the best place to read about them. Here for services and here for blocks.

Roadmap

Currently, the Nextcloud service and SSL block are the most advanced and most documented.

Documenting all services and blocks will be done as I make all blocks and services use the contracts.

Upstreaming changes is also on the roadmap.

Check the issues to see planned works.

That being said, I am personally using all the blocks and services in this project, so they do work.

Available Blocks

Provided Services

Demos

Demos that start and deploy a service on a Virtual Machine on your computer are located under the demo folder. These show the onboarding experience you would get if you deployed one of the services on your own server.

Community

All issues and PRs are welcome. For PRs, if they are substantial changes, please open an issue to discuss the details first. More details in here.

Come hang out in the Matrix channel. :)

One aspect that's close to my heart is I intent to make SHB the lightest layer on top of nixpkgs as possible. I want to upstream as much as possible. I will still take some time to experiment here but when I'm satisfied with how things look, I'll upstream changes.

License

I'm following the Nextcloud license which is AGPLv3. See this article from the FSF that explains what this license adds to the GPL one.