|
Some checks failed
Nix Flake Check / Check Formatting (push) Waiting to run
Nix Flake Check / Check Dead Code (push) Waiting to run
Nix Flake Check / Check Flake (push) Waiting to run
Build packages and push to cache / build (caddy-with-cloudflare) (push) Has been cancelled
Build packages and push to cache / build (fpp-config) (push) Has been cancelled
Build packages and push to cache / build (fpp-launcher) (push) Has been cancelled
Build packages and push to cache / build (fpp-sd) (push) Has been cancelled
Build packages and push to cache / build (live-buds-cli) (push) Has been cancelled
Build packages and push to cache / build (ook-vim) (push) Has been cancelled
Build packages and push to cache / build (project-plus) (push) Has been cancelled
Build packages and push to cache / build (repomix) (push) Has been cancelled
Build packages and push to cache / build (spotify-player) (push) Has been cancelled
Build packages and push to cache / build (website) (push) Has been cancelled
Build packages and push to cache / build (wii-u-gc-adapter) (push) Has been cancelled
|
||
|---|---|---|
| .github | ||
| hosts | ||
| modules | ||
| outputs | ||
| .gitignore | ||
| .repomixignore | ||
| flake.lock | ||
| flake.nix | ||
| README.md | ||
| repomix.config.json | ||
ooknet
A monorepo for all my nix expressions powered by flake-parts.
Overview
This repository serves two main purposes:
- To serve as a centralized location for all my personal computing infrastructure
- 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 leave this repository public to serve as a reference for anyone else 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.
One of the main goals of this project was to allow for easy 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 & emulatorscommunication: Discord, Teams, Matrixproductivity: Document editing, note-takingcreative: Art and design toolsmedia: Audio/video playback and managementvirtualization: Virtual machine support
Example configuration:
ooknet.workstation.profiles = ["gaming" "creative" "media"];
For servers, profiles are defined as services. For example:
ookflix: Media server servicesforgjo: Git serverwebsite: My static website
ooknet.server.services = ["ookflix"];
Desktop environment
All workstations currently run a minimal wayland configuration made from a few
components:
Appreciation
I want to give some appreciation to the many people/resources who have helped in some way to build this project.