diff --git a/.github/assets/2025-01-26T21:52:48,481278761+11:00.png b/.github/assets/2025-01-26T21:52:48,481278761+11:00.png new file mode 100644 index 0000000..4b64ffa Binary files /dev/null and b/.github/assets/2025-01-26T21:52:48,481278761+11:00.png differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a40c183 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +repodump.xml diff --git a/.repomixignore b/.repomixignore new file mode 100644 index 0000000..221341a --- /dev/null +++ b/.repomixignore @@ -0,0 +1,5 @@ +*.lock +**/equicord/options.nix +**/gruv.nix +.repomixignore +repomix* diff --git a/README.md b/README.md new file mode 100644 index 0000000..16616c7 --- /dev/null +++ b/README.md @@ -0,0 +1,125 @@ +

ooknet

+

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

+ +## Overview + +This repository serves two main purposes: + +1. Centralized location for all my personal computing infrastructure. +2. 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 a 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 + +I like to experiment with different ideas a lot. Due to that, much of this is +subject to change. I will try to keep this readme as up to date as possible. + +I won't go too indepth here, as everything is subject to change. But here is the +high-level. + +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](https://www.puppet.com/docs/puppet/7/the_roles_and_profiles_method.html)). + +#### 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`](https://github.com/NixOS/nixpkgs/blob/e5db80ae487b59b4e9f950d68983ffb0575e26c6/flake.nix#L21) +(also see [`lib.evalModules`](https://noogle.dev/f/lib/evalModules)). These +functions serve to abstract the boilerplate, leaving a simple interface for +declaring hosts. + +Example: + +```nix +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 configuration: + +```nix +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 + +```nix +ooknet.server.services = ["ookflix"]; +``` + +## Desktop environment + +All workstations run a minimal hyprland configuration made from a few +components: + +- Hyprland +- Hypr* ware (hypridle, hyprlock, hyprpaper) +- Waybar (status bar) +- Mako (notifications) diff --git a/repomix.config.json b/repomix.config.json new file mode 100644 index 0000000..c0f1d48 --- /dev/null +++ b/repomix.config.json @@ -0,0 +1,25 @@ +{ + "output": { + "filePath": "repodump.xml", + "style": "xml", + "fileSummary": true, + "directoryStructure": true, + "removeComments": false, + "removeEmptyLines": false, + "topFilesLength": 5, + "showLineNumbers": false, + "copyToClipboard": false + }, + "include": [], + "ignore": { + "useGitignore": true, + "useDefaultPatterns": true, + "customPatterns": [] + }, + "security": { + "enableSecurityCheck": true + }, + "tokenCount": { + "encoding": "o200k_base" + } +}