⚙️ Configuration and Deployment of qo.is infrastructure. https://docs-ops.qo.is
  • Nix 88.1%
  • Python 6.3%
  • Shell 5.1%
  • Vim Script 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Renovate Bot 9a16c097e4
Some checks failed
CI / build (push) Successful in 1m10s
CI / deploy (docs-ops.qo.is) (push) Successful in 23s
CI / deploy (system-vm) (push) Successful in 1m8s
CI / deploy (system-physical) (push) Successful in 4m49s
CI / deploy-ci (push) Failing after 25s
Lock file maintenance
2026-09-02 18:00:27 +00:00
.github/workflows Deploy CI hosts after all other deployments 2025-06-29 21:01:54 +03:00
.vscode Apply treefmt 2025-03-25 14:10:54 +02:00
checks Enable btrfs scrubbing for all filesystems 2026-08-23 11:03:57 +00:00
defaults Disable fwupd uefi_capsule plugin on APU hardware 2026-08-20 18:43:48 +03:00
deploy Move static-page nix profile to user home 2026-01-09 16:17:16 +08:00
dev-shells Add qois-disk-unlock script for remote LUKS unlocking 2026-08-23 12:35:46 +00:00
lib Apply treefmt 2025-03-25 14:10:54 +02:00
nixos-configurations Derive knot zone records and state directory from existing config 2026-08-30 11:02:39 +00:00
nixos-modules Group mail records and use record helpers for meta hosts 2026-08-30 11:02:39 +00:00
packages Add qois-disk-unlock script for remote LUKS unlocking 2026-08-23 12:35:46 +00:00
private@ea9dec0598 Add knot secret 2026-08-30 11:02:39 +00:00
.envrc Add small docs improvements and add CLAUDE.md 2026-04-25 19:15:47 +03:00
.gitignore Add small docs improvements and add CLAUDE.md 2026-04-25 19:15:47 +03:00
.gitmodules Commit files for public release 2024-10-02 16:57:36 +03:00
.mcp.json Add grafana mcp 2026-08-20 15:53:26 +03:00
.nixd.json Apply treefmt 2025-03-25 14:10:54 +02:00
AGENTS.md Switch alerts to sysadmin inbox 2026-08-23 13:41:20 +03:00
backups.md Commit files for public release 2024-10-02 16:57:36 +03:00
book.toml Drop mdBook multilingual option removed in nixos-26.05 2026-07-10 12:43:40 +03:00
CLAUDE.md Add agents overview 2026-05-25 16:48:33 +03:00
CODESTYLE.md Add small docs improvements and add CLAUDE.md 2026-04-25 19:15:47 +03:00
email.md Apply treefmt 2025-03-25 14:10:54 +02:00
flake.lock Lock file maintenance 2026-09-02 18:00:27 +00:00
flake.nix Upgrade to nixos-26.05 2026-07-10 11:51:35 +03:00
README.md Add small docs improvements and add CLAUDE.md 2026-04-25 19:15:47 +03:00
renovate.json Exclude private submodule from renovate nix manager 2026-08-20 17:31:54 +03:00
robots.txt Commit files for public release 2024-10-02 16:57:36 +03:00
SUMMARY.md Add knot authoritative dns module 2026-08-30 11:02:39 +00:00
treefmt.nix Fix fmt 2025-07-23 22:55:39 +03:00
updates.md Add note about nextcloud update checking. 2025-04-19 19:44:08 +03:00

qo.is Infrastructure

This repository contains the infrastructure configuration and documentation sources.

Check out the current rendered documentation.

Structure

nixos-configurations: Main nixos configuration for every host.
defaults: Static/Meta configurations, e.g. list of host and keys
nixos-modules: Custom modules (all configurations that are not host specific live here)
private: Private configuration values (like users, sops-encrypted secrets and keys)

Development

This repository requires nix flakes

  • nix flake check
    Execute the project's checks, which includes building all configurations and packages. See Tests.

  • nix build .#nixosConfigurations.<hostname>.config.system.build.toplevel
    Build a single host configuration.

  • nix build .#docs
    Build the documentation website.

  • nix develop
    Development environment

  • nix fmt
    Autofix formatting

Secrets and private Submodule

Secret management is done with nix-sops and a git submodule in private.
Make sure you have the submodule correctly available. To clone with submodules (if you have access):

git clone --recurse-submodules https://git.qo.is/qo.is/infrastructure.git
# See below for how to commit changes.

Secrets are stored in private/passwords.sops.yaml (sysadmin passwords), private/nixos-modules/shared-secrets/default.sops.yaml (shared secrets for all hosts) and private/nixos-configurations/<hostname>/secrets.sops.yaml (host specific secrets).

To modify secrets:

sops $file # To edit a file
sops-rekey # To rekey all secrets, e.g. after a key rollover or new host

After changing secrets:

# Commit changes in subrepo
pushd private
  git commit
  git push
  nix flake prefetch . # Make subrepo available in nix store. Required until nix 2.27.
popd

git add private
nix flake lock --update-input private

Deployment

See Deployment for details.

Deployments are triggered automatically via CI on git.qo.is. Open a pull request to trigger the pipeline; merging to main deploys to all hosts.