No description
Find a file
ooks-io edd3a33d0e
Some checks failed
Nix Flake Check / Check Formatting (push) Has been cancelled
Nix Flake Check / Check Dead Code (push) Has been cancelled
Nix Flake Check / Check Flake (push) Has been cancelled
docs: licence
2025-02-01 14:28:28 +11:00
.github ci: ignore readme 2025-01-26 22:40:28 +11:00
hosts ollama: disable until fixed 2025-01-30 23:26:33 +11:00
modules ollama: disable until fixed 2025-01-30 23:26:33 +11:00
outputs modules: vale init 2025-01-29 23:16:46 +11:00
.gitignore docs: readme 2025-01-26 21:57:49 +11:00
.repomixignore docs: readme 2025-01-26 21:57:49 +11:00
flake.lock flake: bump secrets 2025-01-29 19:04:40 +11:00
flake.nix refactor: move secrets off-shore 2025-01-20 20:57:53 +11:00
LICENSE docs: licence 2025-02-01 14:28:28 +11:00
README.md docs: readme 2025-02-01 12:15:15 +11:00
repomix.config.json docs: readme 2025-01-26 21:57:49 +11:00

ooknet

A monorepo for all my nix expressions powered by flake-parts.

Overview

The goals of this repository are:

  1. To maintain a centralized location for all my personal computing infrastructure
  2. To provide a place to experiment and learn about networking, administration, security, unix, design, and programming

Warning

This repository is not intended to be used by anyone but myself. It is highly personalized and likely doesn't fit anyone else's needs. I maintain this repository publicly as a reference for anyone building something similar.

Features

  • NixOS configurations for all my hosts
  • Home-Manager configuration for my workstations
  • Custom packages
  • Development environments
  • Declarative secrets with agenix
  • Personal website
  • Templates for bootstrapping projects

Fleet

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-linux UP
ookst480s T480s / i5-8350U / 24 GB DDR4 Workstation Primary mobile workstation x86_64-linux UP
ooksmicro GPD Micro PC / N8100 / 8 GB LPDR3 Workstation Pocket workstation x86_64-linux UP
ooksmedia i3-10100 / 1650 Super / 8 GB DDR4 Server Homelab/Media server x86_64-linux UP
ooksx1 X1 Carbon G4 / i5 6200U / 8 GB LPDDR3 Workstation Alternative mobile workstation x86_64-linux DOWN
ooknode Linode Nanode Server VPS for website x86_64-linux UP
ooksphone Termux Workstation Nix environment for android phone x86_64-linux DOWN

Architecture

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 straightfoward 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).

Roles

  • Workstation: Desktop/laptop systems with GUI environment
  • Server: Headless systems running specific services

Roles are declared via their own respective helper functions mkWorkstation and mkServer. Both being simple wrappers of lib.nixosSystem (also see lib.evalModules). These functions serve to abstract the boilerplate, leaving a simple interface for declaring hosts.

Example:

flake.nixosConfigurations = {
  ookst480s = mkWorkstation {
    inherit withSystem;
    system = "x86_64-linux";
    hostname = "ookst480s";
    type = "laptop";
  };
  ooknode = mkServer {
    inherit withSystem;
    system = "x86_64-linux";
    hostname = "ooknode";
    domain = "ooknet.org";
    type = "vm";
    profile = "linode";
    services = ["website" "forgejo"]; 
  };
};

Profiles

Profiles are collections of related software and configurations that can be enabled on a per-host basis. Here are some example profiles for workstations:

  • gaming: Steam & emulators
  • communication: Discord, Teams, Matrix
  • productivity: Document editing, note-taking
  • creative: Art and design tools
  • media: Audio/video playback and management
  • virtualization: Virtual machine support

Example:

ooknet.workstation.profiles = ["gaming" "creative" "media"];

For servers, profiles are defined as services. For example:

  • ookflix: Media server services
  • forgjo: Git server
  • website: My static website
ooknet.server.services = ["ookflix"];

Desktop environment

All workstations use a minimal wayland configuration made from the following components:

Appreciation

I want to give some appreciation to the many people/resources who have helped in some way to build this project.

People

Resources