OOKNET [ / search the index ]
──────────────────────────────────────────────────────────────────────────────────────
[ KB ] [ GIT ] [ PROJECTS ] [ ABOUT ]
══════════════════════════════════════════════════════════════════════════════════════
OOKNET [ / search ]
────────────────────────────────────────────────
[ KB ] [ GIT ] [ PROJECTS ] [ ABOUT ]
════════════════════════════════════════════════
CLONE git.ooknet.org/ooks/ooknet.git
FILES COMMITS: 1212
FILES COMMITS: 1212
══════════════════════════════════════════════════════════════════════════════════════
════════════════════════════════════════════════
[23a1499] curseforge: update hash 2026-07-11
[23a1499] curseforge: update hash 2026-07-11
.github/ ci: remove magic nix cache 2025-04-13
docs/ docs: installation guide tweaks 2025-05-13
hosts/ caddy: lock origin ingress to cloudflare ranges 2026-07-11
modules/ work: add omnissa horizon client 2026-07-11
outputs/ curseforge: update hash 2026-07-11
.envrc flake: direnv init 2025-10-28
.gitignore flake: direnv init 2025-10-28
flake.lock flake: bump nixpkgs/nvf, source zjstatus from nixpkgs 2026-07-11
flake.nix flake: bump nixpkgs/nvf, source zjstatus from nixpkgs 2026-07-11
LICENSE docs: licence 2025-02-01
README.md docs: update readme 2026-06-04
.github/ ci: remove magic nix ... 2025-04-13
docs/ docs: installation gu... 2025-05-13
hosts/ caddy: lock origin in... 2026-07-11
modules/ work: add omnissa hor... 2026-07-11
outputs/ curseforge: update hash 2026-07-11
.envrc flake: direnv init 2025-10-28
.gitignore flake: direnv init 2025-10-28
flake.lock flake: bump nixpkgs/n... 2026-07-11
flake.nix flake: bump nixpkgs/n... 2026-07-11
LICENSE docs: licence 2025-02-01
README.md docs: update readme 2026-06-04
README rendered @ main ══════════════════════════════════════════════════════════════════════════════════════
README rendered @ main ════════════════════════════════════════════════
██████╗ ██████╗ ██╗ ██╗███╗ ██╗███████╗████████╗
██╔═══██╗██╔═══██╗██║ ██╔╝████╗ ██║██╔════╝╚══██╔══╝
██║ ██║██║ ██║█████╔╝ ██╔██╗ ██║█████╗ ██║
██║ ██║██║ ██║██╔═██╗ ██║╚██╗██║██╔══╝ ██║
╚██████╔╝╚██████╔╝██║ ██╗██║ ╚████║███████╗ ██║
╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ .org
██████╗ ██████╗ ██╗ ██╗███╗ ██╗███████╗
████████╗
██╔═══██╗██╔═══██╗██║ ██╔╝████╗ ██║██╔════╝
╚══██╔══╝
██║ ██║██║ ██║█████╔╝ ██╔██╗ ██║█████╗
██║
██║ ██║██║ ██║██╔═██╗ ██║╚██╗██║██╔══╝
██║
╚██████╔╝╚██████╔╝██║ ██╗██║ ╚████║███████╗
██║
╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝
╚═╝ .org
The goals of this repository are:
This repository isn't intended to be used by anyone but myself. It's highly personalized and likely doesn't fit anyone else's needs. I maintain this repository publicly as a reference for anyone building something similar.
Below are all the hosts I currently maintain within this flake:
| host | spec | role | description | architecture | status |
|---|---|---|---|---|---|
| ooksdesk | 7500F / RX5700XT / 32 GB DDR5 | Workstation | Primary desktop workstation | x86_64 | UP |
| ookst480s | T480s / i5-8350U / 24 GB DDR4 | Workstation | Secondary mobile workstation | x86_64 | UP |
| ooksmicro | GPD Micro PC / N8100 / 8 GB LPDR3 | Workstation | Pocket workstation | x86_64 | UP |
| ooksmedia | i3-10100 / 1650 Super / 64 GB DDR4 | Server | Homelab/Media server | x86_64 | UP |
| ooksx1 | X1 Carbon G4 / i5 6200U / 8 GB LPDDR3 | Workstation | Guest laptop | x86_64 | UP |
| ooknode | Linode Nanode | Server | VPS for website | x86_64 | UP |
| ookstest | QEMU VM | Server | Disposable test/sandbox server | x86_64 | N/A |
| ooksphone | Termux | Workstation | Nix environment for android phone | aarch64 | DOWN |
| ooksair | M4 MBA | Workstation | Primary mobile workstation | aarch64-darwin | UP |
| ooksinstall | Live ISO | Installer | Bootable installer image | x86_64 | N/A |
As this project serves as a learning environment, its architecture changes frequently. While I'll try to keep this documentation current, what follows is a high-level overview of the current design.
The current architecture enables straightforward bootstrapping of new hosts while maintaining fine-grained configuration on a per-host basis. This is accomplished using a roles and profiles pattern (similar to Puppet's roles and profiles method).
Hosts are declared as plain data under
flake.ooknet.{workstations,servers,images}. The builders in outputs/builder/
map that data with mapAttrs into nixosConfigurations /
darwinConfigurations, wiring up the right platform modules
(lib.nixosSystem for
linux, nix-darwin's darwinSystem for macos) and importing the matching host
module from hosts/<hostname>. The host attribute name is the hostname, so a
declaration only carries what makes the host unique while the builder absorbs the
boilerplate.
Workstations:
flake.ooknet.workstations = {
ookst480s = {
system = "x86_64-linux";
type = "laptop";
};
ooksair = {
system = "aarch64-darwin";
type = "laptop";
};
};
flake.ooknet.workstations = {
ookst480s = {
system = "x86_64-linux";
type = "laptop";
};
ooksair = {
system = "aarch64-darwin";
type = "laptop";
};
};
Servers:
flake.ooknet.servers = {
ooknode = {
system = "x86_64-linux";
type = "vm";
profile = "linode";
domain = "ooknet.org";
services = ["website" "forgejo"];
};
};
flake.ooknet.servers = {
ooknode = {
system = "x86_64-linux";
type = "vm";
profile = "linode";
domain = "ooknet.org";
services = ["website" "forgejo"];
};
};
Installer images:
flake.ooknet.images = {
ooksinstall = {
system = "x86_64-linux";
type = "iso";
role = "installer";
};
};
flake.ooknet.images = {
ooksinstall = {
system = "x86_64-linux";
type = "iso";
role = "installer";
};
};
Profiles are collections of related software and configuration that can be enabled on a per-host basis. Some example workstation profiles:
gaming: Steam & emulatorscommunication: Discord, Teams, Matrixproductivity: Document editing, note-takingcreative: Art and design toolsmedia: Audio/video playback and managementvirtualization: Virtual machine supportinfra: Infrastructure and ops toolingwork: Work specific toolingExample:
ooknet.workstation.profiles = ["gaming" "creative" "media"];
ooknet.workstation.profiles = ["gaming" "cre
ative" "media"];
Servers pick a base profile (for VMs, e.g. linode) and a list of services
to run. Some example services:
website: My static websiteforgejo: Git serverookflix: Media server servicesmonitoring: Metrics and dashboardsauthentik: Identity provider
ooknet.server.services = ["ookflix" "monitoring"];
ooknet.server.services = ["ookflix" "monitor
ing"];
I want to give some appreciation to the many people/resources who have helped in some way to build this project.
LOG most recent first ══════════════════════════════════════════════════════════════════════════════════════
LOG most recent first ════════════════════════════════════════════════
2026-07-11 ─┬─ 23a1499
│ curseforge: update hash│
2026-07-11 ─┼─ 8ca09cf
│ claude-code: bump to 2.1.197, update dist url│
2026-07-11 ─┼─ 7fb3c9a
│ codex: init package│
2026-07-11 ─┼─ 96187d7
│ work: add omnissa horizon client│
2026-07-11 ─┼─ 0cf4f07
│ media: add spotify and jam join helper2026-07-11 ─┬─ 23a1499
│ curseforge: update hash│
2026-07-11 ─┼─ 8ca09cf
│ claude-code: bump to 2.1.197, │ update dist url│
2026-07-11 ─┼─ 7fb3c9a
│ codex: init package│
2026-07-11 ─┼─ 96187d7
│ work: add omnissa horizon client│
2026-07-11 ─┼─ 0cf4f07
│ media: add spotify and jam join │ helper [ FULL LOG ]
────────────────────────────────────────────────────────────────────────────────────── OOKNET
──────────────────────────────────────────────── OOKNET