┌─ README.md ────────────────────────────────────────────────────────────────┐│ diff --git a/README.md b/README.md ││ new file mode 100644 ││ index 0000000..16616c7 ││ --- /dev/null ││ +++ b/README.md ││ @@ -0,0 +1,125 @@ ││ +<h1 align=center> ooknet </h1> ││ +<p align= center>A monorepo for all my nix expressions powered by flake-parts.</p ││ > ││ + ││ +## 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 deskt ││ op workstation | x86_64-linux | UP | ││ +| ookst480s | T480s / i5-8350U / 24 GB DDR4 | Workstation | Primary mobil ││ e workstation | x86_64-linux | UP | ││ +| ooksmicro | GPD Micro PC / N8100 / 8 GB LPDR3 | Workstation | Pocket workst ││ ation | 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 m ││ obile workstation | x86_64-linux | DOWN | ││ +| ooknode | Linode Nanode | Server | VPS for websi ││ te | x86_64-linux | UP | ││ +| ooksphone | Termux | Workstation | Nix environme ││ nt 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_rol ││ es_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/e5db80ae487b59b4e9f950d ││ 68983ffb0575e26c6/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) │└────────────────────────────────────────────────────────────────────────────────────┘
┌─ README.md ──────────────────────────┐│ diff --git a/README.md b/README.md ││ new file mode 100644 ││ index 0000000..16616c7 ││ --- /dev/null ││ +++ b/README.md ││ @@ -0,0 +1,125 @@ ││ +<h1 align=center> ooknet </h1> ││ +<p align= center>A monorepo for all my nix ││ expressions powered by flake-parts.</p> ││ + ││ +## Overview ││ + ││ +This repository serves two main purposes: ││ + ││ +1. Centralized location for all my personal ││ computing infrastructure. ││ +2. A place to experiment and learn about ne ││ tworking, administration, security, ││ + unix, design and programming. ││ + ││ +> [!WARNING] ││ +> This repository is not intended to be use ││ d by anyone but myself. It is highly ││ +> personalized and likely doesn't fit anyon ││ e 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 worksta ││ tions ││ +- Custom packages ││ +- Development environments ││ +- Declarative secrets with agenix ││ +- Personal website ││ +- Templates for bootstrapping projects ││ + ││ +## Fleet ││ + ││ +Below are all the hosts I currently maintai ││ n within this flake: ││ + ││ +| host | spec ││ | role | description ││ | architecture | status | ││ +| --------- | ----------------------------- ││ -------- | ----------- | ------------------- ││ -------------- | ------------ | ------ | ││ +| ooksdesk | 7500F / RX5700XT / 32 GB DDR5 ││ | Workstation | Primary desktop wor ││ kstation | x86_64-linux | UP | ││ +| ookst480s | T480s / i5-8350U / 24 GB DDR4 ││ | Workstation | Primary mobile work ││ station | x86_64-linux | UP | ││ +| ooksmicro | GPD Micro PC / N8100 / 8 GB L ││ PDR3 | Workstation | Pocket workstation ││ | x86_64-linux | UP | ││ +| ooksmedia | i3-10100 / 1650 Super / 8 GB ││ DDR4 | Server | Homelab/Media serve ││ r | x86_64-linux | UP | ││ +| ooksx1 | X1 Carbon G4 / i5 6200U / 8 G ││ B 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 t ││ o allow for easy bootstrapping of new ││ +hosts while maintaining fine-grained config ││ uration on a per-host basis. This is ││ +accomplished using a roles and profiles pat ││ tern (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 w ││ ith GUI environment ││ +- **Server**: Headless systems running spec ││ ific services ││ + ││ +Roles are declared via their own respective ││ helper functions `mkWorkstation` and ││ +`mkServer`. Both being simple wrappers of ││ +[`lib.nixosSystem`](https://github.com/NixO ││ S/nixpkgs/blob/e5db80ae487b59b4e9f950d68983f ││ fb0575e26c6/flake.nix#L21) ││ +(also see [`lib.evalModules`](https://noogl ││ e.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 softwar ││ e 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-ta ││ king ││ +- `creative`: Art and design tools ││ +- `media`: Audio/video playback and managem ││ ent ││ +- `virtualization`: Virtual machine support ││ + ││ +Example configuration: ││ + ││ +```nix ││ +ooknet.workstation.profiles = ["gaming" "cr ││ eative" "media"]; ││ +``` ││ + ││ +For servers, profiles are defined as servic ││ es. 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 con ││ figuration made from a few ││ +components: ││ + ││ +- Hyprland ││ +- Hypr* ware (hypridle, hyprlock, hyprpaper ││ ) ││ +- Waybar (status bar) ││ +- Mako (notifications) │└──────────────────────────────────────────────┘