From 7d26ef84f19e9f828d6a6218e39eeec8e7e56d6c Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 28 Jun 2026 06:48:06 +0200 Subject: [PATCH] docs: top-level README and branding assets Co-Authored-By: Claude Opus 4.8 --- README.md | 492 ++++++++++++++++++++++++++++++++++++++++++++++++ assets/logo.png | 5 + icon.png | Bin 0 -> 1555 bytes logo.svg | 1 + 4 files changed, 498 insertions(+) create mode 100644 README.md create mode 100644 assets/logo.png create mode 100644 icon.png create mode 100644 logo.svg diff --git a/README.md b/README.md new file mode 100644 index 0000000..8abb95c --- /dev/null +++ b/README.md @@ -0,0 +1,492 @@ +# Omnixient NixOS + +Transform your NixOS installation into a fully-configured, beautiful, and modern development system based on Hyprland. Omnixient brings the elegance of declarative configuration to desktop Linux, creating a reproducible and version-controlled development environment. + +## 🌀 aiolabs/omnixient + +This repository is **derived from** [TheArctesian/omnixy](https://github.com/TheArctesian/omnixy) and **evolves independently** at [git.atitlan.io/aiolabs/omnixient](https://git.atitlan.io/aiolabs/omnixient). It keeps the desktop layer that omni ships (Hyprland, themes, ISO builder, dev shells) and adds infrastructure for managing a multi-project Bitcoin/Lightning development workflow on top of it. + +We're not actively syncing changes from TheArctesian/omnixy — the diff has grown large enough that the two projects serve different audiences now. If you only want the polished desktop, the original is the right place. If you want the dev environment, fleet deploy story, and aiolabs-specific tooling, this is. + +What this fork adds: + +- **`modules/dev-env/`** — declarative module for managing bare repos, worktrees, navigation helpers, tmux sessions, regtest docker env, upstream-PR workflow, and shared git hooks. Replaces an imperative bash installer. See [`modules/dev-env/README.md`](modules/dev-env/README.md) for design notes. +- **`lib/mksystem.nix`** — uniform host constructor (mitchellh-style) so `flake.nix` defines hosts as `mkSystem "name" { user = ...; devEnv = true; };` instead of repeating `nixpkgs.lib.nixosSystem` calls. +- **`lib/overlays.nix`** — pin select fast-moving packages (claude-code, gh, direnv) to `nixpkgs-unstable` while keeping the rest on the primary channel. +- **`modules/cache.nix`** — substituters + trusted public keys for shared binary caches. +- **`Makefile`** — single-command wrappers for `switch`, `test`, `build`, `update`, `cache`, `check`, `clean`, `fmt`, `shellcheck`. +- **`hosts//` and `users//` directory layout** — per-host and per-user split following the mitchellh/nixos-config pattern. Each host file consumes `currentSystemName` and `currentSystemUser` via `specialArgs` from mksystem. +- **`server-deploy` flake input** — a separate forgejo flake at [aiolabs/server-deploy](https://git.atitlan.io/aiolabs/server-deploy) is the source of truth for which refs ship to which production host. dev-env walks its `flake.lock` to auto-derive default project entries. +- **Smoke-test flake checks** — `nix flake check` builds three lightweight derivations that exercise the dev-env option schema end-to-end without needing a full system rebuild. + +Documentation: + +- [`modules/dev-env/README.md`](modules/dev-env/README.md) — dev-env module design and option reference +- [`INTEGRATION_NOTES.md`](INTEGRATION_NOTES.md) — verification + rollback notes from the integration +- [Issue tracker](https://git.atitlan.io/aiolabs/omnixient/issues) — open follow-ups + +Quick aiolabs-specific workflow: + +```bash +make switch HOST=omni # nixos-rebuild switch via mkSystem +dev-env-bootstrap --dry-run # preview the worktree tree +dev-env-bootstrap # materialize bare repos + worktrees +lb dev # cd ~/dev/lnbits/dev +bs # cd ~/dev/bitspire/bitspire/dev +prb lnbits fix-bug # create upstream PR worktree +dev-deploy host5 # deploy via locked server-deploy input +dev-deploy --local host1 # deploy with local worktree overrides +``` + +## 🧭 Philosophy & ethos + +Omnixient is a **personal config published as a starting point**, not a +distro you install and forget. A few principles shape it: + +- **One config, every host, via a host factory.** `lib/mksystem.nix` + builds each machine from the same function; new machines are a small + host directory, not a fork of the whole tree. +- **Core + opt-in packs.** A small always-on core (base system, Hyprland + desktop, theming) plus self-gating `omni.packs..enable` bundles. + Install the core, switch on the goodies you want — and reuse the packs + on a non-Omnixient NixOS via `flake.nixosModules`. See + [docs/packs.md](docs/packs.md). +- **Adopt = fork.** Everything machine- or person-specific is funnelled + through `settings.nix` + your hardware scan, so making it yours is a + couple of edits, not an archaeology dig. See + [docs/getting-started.md](docs/getting-started.md). +- **No framework until it earns its place.** Plain flake outputs and the + module system, deliberately *not* flake-parts / auto-import — those get + adopted only when a real need (a second CPU architecture, publishing + packs widely) appears. See [Design lineage](#design-lineage). +- **Declarative all the way down, with escape hatches.** Reproducible by + default; `modules = [ … ]` on a host stays available for the + one-off that doesn't fit a pack. + +## ✨ Features + +- **🎨 Beautiful Themes**: Ships with 11 carefully crafted themes (Tokyo Night, Catppuccin, Gruvbox, Nord, and more) - all declaratively configured +- **🚀 Modern Stack**: Pure Wayland with Hyprland compositor, Waybar, Ghostty, Alacritty, Neovim with LazyVim, Walker launcher (with Elephant backend), Wiremix audio, Satty screenshots +- **📦 Declarative Everything**: Entire system configuration as code - reproducible across machines +- **🛠️ Development Ready**: Pre-configured environments for Rust, Go, Python, Node.js, C/C++, and more via Nix shells +- **🔄 Atomic Updates**: Rollback capability, no broken states, system-wide updates with one command +- **🎯 Modular Design**: Feature flags for Docker, gaming, multimedia - enable only what you need +- **⚡ Flake-based**: Modern Nix flakes for dependency management and reproducible builds +- **🏠 Home Manager**: User environment managed declaratively alongside system configuration +- **💿 ISO Builder**: Build custom live ISOs with your configuration + +## 📋 Requirements + +- NixOS unstable (flake tracks `nixos-unstable`) +- 8GB RAM minimum (16GB+ recommended for development) +- 40GB disk space (for Nix store and development tools) +- UEFI system (for systemd-boot configuration) + +## 🚀 Installation + +> **Adopting this on your own machine?** Read +> **[docs/getting-started.md](docs/getting-started.md)** — it walks the +> full adoption checklist: edit `settings.nix` (identity, hostname, +> theme, SSH keys, `stateVersion`), generate your hardware scan into your +> host directory, pick your packs, and rebuild. Omnixient is a personal +> config published as a starting point, so adopting = forking and making +> it yours. + +### Direct Flake Installation (Recommended) + +On an existing NixOS system: + +```bash +git clone https://git.atitlan.io/aiolabs/omnixient.git +cd omni +# 1. edit settings.nix 2. put your hardware scan in hosts// +# (see docs/getting-started.md), then: +sudo nixos-rebuild switch --flake .#omni +``` + +(If you want the original TheArctesian/omnixy desktop without the aiolabs additions, that lives separately at [github.com/TheArctesian/omnixy](https://github.com/TheArctesian/omnixy) and has its own install instructions.) + +After install, the aiolabs `Makefile` shortcuts the daily commands: + +```bash +make switch HOST=omni # rebuild + switch +make test HOST=omni # nixos-rebuild test +make build HOST=omni # build the toplevel without switching +make check # nix flake check (smoke tests + flake lint) +make update # nix flake update +make cache # push the host's closure to $CACHE +make fmt # nixfmt every .nix file +make shellcheck # shellcheck every .sh file +``` + +### Building a Custom ISO + +Build a live ISO with the Omnixient configuration: + +```bash +# Clone the repository +git clone forgejo@git.atitlan.io:aiolabs/omnixient.git +cd omni + +# Build the ISO (this will take time on first build) +nix build .#iso + +# The ISO will be available at: +ls -la result/iso/ +``` + +Write the ISO to a USB drive: +```bash +sudo dd if=result/iso/nixos-*.iso of=/dev/sdX bs=4M status=progress +``` + +## 🎮 Usage + +### System Management + +All system commands are individual `omni-*` executables (there is no +bare `omni` dispatcher). Tab-complete `omni-` to see the full +set, or run `omni-help`. + +```bash +omni-help # Show all available commands +omni-update # Update system and flake inputs +omni-clean # Clean and optimize Nix store +omni-info # Show system information (alias: omni-status) +omni-rebuild # Rebuild system configuration +omni-search # Search for packages +``` + +### Theme Management + +```bash +omni-theme # List available themes +omni-theme tokyo-night # Switch to Tokyo Night theme +omni-theme-picker # Interactive theme picker + +# Available themes: +# - tokyo-night (default) +# - catppuccin +# - catppuccin-latte +# - gruvbox +# - nord +# - everforest +# - rose-pine +# - kanagawa +# - matte-black +# - osaka-jade +# - ristretto +``` + +### Development Environments + +```bash +# Enter development shells +nix develop # Default development shell +nix develop .#rust # Rust development environment +nix develop .#python # Python development environment +nix develop .#node # Node.js development environment +nix develop .#go # Go development environment +nix develop .#c # C/C++ development environment +``` + +### Package Management + +```bash +omni-search firefox # Search for packages +nix search nixpkgs python # Alternative package search + +# Install packages by editing configuration +# Add to modules/packages.nix, then: +omni-rebuild # Apply changes +``` + +## ⌨️ Key Bindings + +| Key Combination | Action | +|-----------------|--------| +| `Super + Return` | Open terminal (Ghostty) | +| `Super + B` | Open browser (Firefox) | +| `Super + E` | Open file manager | +| `Super + D` | Application launcher (Walker) | +| `Super + Q` | Close window | +| `Super + F` | Fullscreen | +| `Super + Space` | Toggle floating | +| `Super + 1-9` | Switch workspace | +| `Super + Shift + 1-9` | Move window to workspace | +| `Print` | Screenshot region (annotate with satty) | +| `Shift + Print` | Screenshot full screen (annotate with satty) | +| `Super + Print` | Screenshot region to clipboard | +| `Super + L` | Lock screen | + +### Feature-gated autostart + +When you enable optional features in `configuration.nix`, apps launch on dedicated workspaces at login: + +| Feature | Workspace | Apps | +|---------|-----------|------| +| (always) | 1 | Terminal with tmux, default browser | +| `media` | 4 | Spotify | +| `communication` | 5 | Signal, Element, Ferdium | + +## 📁 Project Structure + +``` +omni/ +├── flake.nix # flake inputs + nixosConfigurations via mkSystem +├── flake.lock +├── Makefile # aiolabs: switch/test/build/cache/check workflows +├── configuration.nix # main NixOS config (imported by hosts/omni via shim) +├── home.nix # home-manager user config (imported via users shim) +├── hardware-configuration.nix # hardware-specific (generated) +├── settings.nix # single source of truth for user/host/git identity +├── iso.nix # ISO image variant (built directly, not via mkSystem) +├── INTEGRATION_NOTES.md # aiolabs: dev-env integration verification + rollback +│ +├── lib/ # aiolabs: flake-level helpers +│ ├── mksystem.nix # uniform host constructor +│ └── overlays.nix # nixpkgs-unstable pinning for fast-moving pkgs +│ +├── hosts/ # aiolabs: per-host config files +│ └── omni/ +│ └── default.nix # shim → ../../configuration.nix + dev-env settings +│ +├── users/ # aiolabs: per-user split (mitchellh-style) +│ └── user/ +│ └── home-manager.nix # shim → ../../home.nix +│ +├── modules/ # NixOS module collection +│ ├── core.nix # core Omnixient options + presets +│ ├── lib.nix # omni.lib helpers (makeScript, paths, etc.) +│ ├── packages.nix # categorized package collections +│ ├── development.nix # language toolchains +│ ├── services.nix # system services +│ ├── users.nix # user account management +│ ├── boot.nix # boot config +│ ├── security.nix # security settings +│ ├── scripts.nix # Omnixient utility scripts +│ ├── menus.nix # application launchers +│ ├── walker.nix # walker launcher (uses upstream flake module) +│ ├── fastfetch.nix # system info display +│ ├── colors.nix # color scheme plumbing +│ ├── mcp.nix # MCP server integrations +│ ├── cache.nix # aiolabs: substituters + trusted-public-keys +│ ├── desktop/ +│ │ └── hyprland.nix # Hyprland compositor +│ ├── themes/ # declarative theme system (11 themes) +│ ├── hardware/ # GPU/audio/bluetooth/touchpad +│ └── dev-env/ # aiolabs: multi-project dev environment +│ ├── default.nix # imports options + lib + config +│ ├── options.nix # schema (projects, forgejo, deploy, regtest, tmux) +│ ├── lib.nix # mkProject, deriveFromFlakeInput helpers +│ ├── config.nix # wires everything together +│ ├── README.md # design notes + extension guide +│ ├── presets/ +│ │ └── aiolabs.nix # the aiolabs project list + tmux layouts +│ ├── scripts/ # ported + new bash helpers +│ │ ├── bootstrap.sh # dev-env-bootstrap (idempotent materializer) +│ │ ├── nav.sh # lb / wa / bs / lam / ext / shared / repos / prs +│ │ ├── worktree.sh # wt / wts / wtu + lnbits sync/rebase +│ │ ├── pr-helpers.sh # prb / prc / prl +│ │ ├── rebase.sh # fork-onto-upstream rebase helper +│ │ ├── regtest.sh # regtest-start/stop/status +│ │ ├── status.sh # dev-status +│ │ ├── tmux-launch.sh # dev-tm +│ │ ├── deploy.sh # dev-deploy [--local] +│ │ └── git-hooks/ +│ │ └── pre-commit # shared via core.hooksPath +│ ├── docs/ # shipped runbooks +│ │ ├── upstream-prs.md +│ │ └── secrets-management.md +│ └── tests/ +│ └── smoke.nix # minimal nixosSystem for `nix flake check` +│ +└── packages/ # custom packages + ├── scripts.nix # Omnixient utility scripts as nix packages + └── plymouth-theme.nix # plymouth boot theme +``` + +Anything marked **aiolabs** is added by this fork. Everything else is upstream. + +## 🖥️ Hardware notes + +**AMD Strix Halo (Ryzen AI Max 300) + MT7925 wifi/bluetooth**: the bluetooth side of the MT7925 runs over an internal USB bus that can get stuck after a warm reboot — the adapter appears but firmware upload times out. A full power off (cold boot) always recovers it. The `mt7925-bt-heal` systemd service handles the rfkill unblock + power-on once firmware loads successfully. Do **not** run `rfkill unblock bluetooth` manually when the adapter is in a broken state (MAC `00:00:00:00:00:00`) — it kills the device. + +## 🏗️ Architecture + +### Flake-based Configuration +- **Pinned Dependencies**: All inputs locked for reproducibility +- **Multiple Outputs**: NixOS configs, development shells, packages, apps, and ISO +- **Home Manager Integration**: User environment managed alongside system + +### Modular Design +- **Feature Flags**: Enable/disable Docker, gaming, development tools, etc. +- **Theme System**: Complete application theming through Nix modules +- **Hardware Support**: Automatic detection and configuration +- **Development Environments**: Language-specific shells with all dependencies + +### Pure Wayland +- **No X11 Dependencies**: Full Wayland compositor stack +- **Hyprland**: Dynamic tiling compositor with animations +- **Native Wayland Apps**: Ghostty, Alacritty, Firefox with Wayland support + +## 🎨 Themes + +Omnixient includes beautiful themes that configure your entire desktop environment: + +- **Tokyo Night** (default) - Clean, dark theme inspired by Tokyo's night lights +- **Catppuccin** - Soothing pastel theme (Mocha variant) +- **Catppuccin Latte** - Light variant of Catppuccin +- **Gruvbox** - Retro groove color scheme +- **Nord** - Arctic, north-bluish color palette +- **Everforest** - Comfortable green color scheme +- **Rose Pine** - Natural pine and rose colors +- **Kanagawa** - Inspired by Japanese paintings +- **Matte Black** - Pure black minimalist theme +- **Osaka Jade** - Jade green accents +- **Ristretto** - Coffee-inspired brown theme + +Each theme declaratively configures: +- Terminal colors (Ghostty, Alacritty, Kitty) +- Editor themes (Neovim, VS Code) +- Desktop environment (Hyprland, Waybar, Mako) +- Applications (Firefox, BTtop, Lazygit) +- GTK/Qt theming + +## 🔧 Customization + +### Adding System Packages + +Edit `modules/packages.nix` and add packages to the appropriate category, then rebuild: + +```bash +omni-rebuild +``` + +### Adding User Packages + +Edit `home.nix` for user-specific packages and rebuild. + +### Creating Custom Themes + +1. Copy an existing theme as a template: +```bash +cp modules/themes/tokyo-night.nix modules/themes/my-theme.nix +``` + +2. Edit the color palette and application configurations +3. Add to `flake.nix` theme list +4. Rebuild to apply + +### Testing Changes + +```bash +# Test configuration without switching +nixos-rebuild build --flake .#omni + +# Test in virtual machine +nixos-rebuild build-vm --flake .#omni +./result/bin/run-omni-vm + +# Check flake evaluation +nix flake check + +# Format Nix code +nixfmt *.nix modules/*.nix # or: make fmt +``` + +## 🚀 Building ISOs + +Build custom live ISOs with your configuration: + +```bash +# Build ISO +nix build .#iso + +# ISO location +ls result/iso/nixos-*.iso +``` + +The ISO includes: +- Full Omnixient desktop environment +- Auto-login live session +- Hyprland with selected theme +- Development tools +- Installation utilities + +## 🤝 Contributing + +Issues + PRs at [git.atitlan.io/aiolabs/omnixient/issues](https://git.atitlan.io/aiolabs/omnixient/issues). + +This repo evolves independently of TheArctesian/omnixy — we don't sync changes upstream and you don't need to send the same fix to two places. If you want to contribute to the original omni desktop project instead, head to [github.com/TheArctesian/omnixy](https://github.com/TheArctesian/omnixy) directly; the two are now separate projects sharing common ancestry. + +For aiolabs/omnixient contributions, the dev-env module ships an upstream-PR helper for sending PRs to OUR upstream OSS dependencies (lnbits, lamassu, nix-bitcoin, etc.) — see [`modules/dev-env/docs/upstream-prs.md`](modules/dev-env/docs/upstream-prs.md). + +## 📝 License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. + +## 🙏 Acknowledgments + +- [TheArctesian/omnixy](https://github.com/TheArctesian/omnixy) — the original Omnixient project this is derived from. Desktop, themes, ISO, hyprland config all originate there. We've evolved independently since. +- Inspired by [Omakub](https://omakub.org/) and [Omarchy](https://omarchy.org/) by DHH — the original opinionated desktop setups +- The dev-env mksystem pattern is adapted from [mitchellh/nixos-config](https://github.com/mitchellh/nixos-config) — see `lib/mksystem.nix` +- The dev-env cross-level option forwarding pattern is inspired by [henrysipp/omarchy-nix](https://github.com/henrysipp/omarchy-nix), another NixOS port of omarchy +- Built on [NixOS](https://nixos.org/) - the declarative Linux distribution +- Using [Hyprland](https://hyprland.org/) compositor - dynamic tiling Wayland compositor +- [Home Manager](https://github.com/nix-community/home-manager) - declarative user environment +- Theme configurations adapted from community themes and color schemes +- [Nix Flakes](https://nixos.wiki/wiki/Flakes) - for reproducible and composable configurations + +### Design lineage + +Omnixient's structure is a deliberate synthesis of patterns from several +widely-respected NixOS configs. *(This is a well-sourced summary — the +load-bearing facts were checked against upstream, but treat the +per-author characterizations as summary, not gospel.)* + +- **[mitchellh/nixos-config](https://github.com/mitchellh/nixos-config)** + (Mitchell Hashimoto) — the origin of our `lib/mksystem.nix` host-factory + pattern: one function builds every host, derives per-host/per-user + paths, picks `nixosSystem`, wires home-manager. Its known limitation — + the flat `modules = [ … ] ++ optionals …` list only scales by + if-appending and exposes nothing for reuse — is exactly what the packs + model addresses. +- **[Misterio77/nix-starter-configs](https://github.com/Misterio77/nix-starter-configs)** + (Gabriel Fontes, also author of `nix-colors`, which Omnixient imports) — + the canonical "expose reusable modules as flake outputs" + (`nixosModules = import ./modules/…`) pattern. This is where our + `flake.nixosModules.` reuse comes from. +- **[hlissner/dotfiles](https://github.com/hlissner/dotfiles)** (Henrik + Lissner, Doom Emacs) — the enable-gate feature DSL: options under a + `.enable` namespace, each module always imported but inert until + enabled (`mkIf cfg.enable`). This is the template for our + `omni.packs..enable` toggles. (We take the enable-gate idea and + leave the heavier CLI-wrapper machinery he himself disclaims.) +- **flake-parts / import-tree / haumea / disko** — surveyed and + **deliberately deferred**. `flake-parts`' `perSystem` pays off with + multiple architectures; auto-import (import-tree/haumea) breaks + selective per-host imports unless every module is enable-gated; `disko` + is install-time-only. We revisit these when a second architecture or + wide pack publishing makes them earn their place. +- **[henrysipp/omarchy-nix](https://github.com/henrysipp/omarchy-nix)** — + inspiration for the dev-env cross-level option-forwarding pattern. + +## 🔗 Links + +- [NixOS Manual](https://nixos.org/manual/nixos/stable/) - Official NixOS documentation +- [Home Manager Manual](https://nix-community.github.io/home-manager/) - User environment management +- [Hyprland Wiki](https://wiki.hyprland.org/) - Hyprland configuration reference +- [Nix Package Search](https://search.nixos.org/) - Search available packages +- [aiolabs/omnixient issues](https://git.atitlan.io/aiolabs/omnixient/issues) — issues + PRs for this repo +- [TheArctesian/omnixy](https://github.com/TheArctesian/omnixy) — the original omni project (separate, no longer tracked for syncing) + +## 📚 Learning Resources + +- [Nix Pills](https://nixos.org/guides/nix-pills/) - Deep dive into Nix +- [NixOS & Flakes Book](https://nixos-and-flakes.thiscute.world/) - Modern NixOS guide +- [Zero to Nix](https://zero-to-nix.com/) - Gentle introduction to Nix + +--- + +Built with ❤️ using the power of **NixOS** and **declarative configuration** \ No newline at end of file diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000..745cbb1 --- /dev/null +++ b/assets/logo.png @@ -0,0 +1,5 @@ +# This is a placeholder for the Omnixient logo +# Replace this with an actual PNG file for the ISO splash screen +# For now, we'll create a simple SVG that can be converted to PNG + +echo "Creating placeholder logo..." \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..09da5008bed2ce1893c505db0376d04478db47d8 GIT binary patch literal 1555 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mJh`hRWK$QU(SF&H|6fVg?3oVGw3ym^DX& zfq^kI)7d$|C9}97C$Ul?z?gxdVovFVz21idM2`Be4!U5~!6z$Y)aiWX5?5JahPH^S zK?v*W;8}H?xiu=9L50HMnm^#l7hvx0LQ3fBM&A zPVvr|1JVJK+TWNoUQV0nb7aZZE4!XlH@D9VUX`|K#UdT9e}8ws{(SN4J^zkK-`!;b zH~nL#pVOOOHjgQ|{%`En`6p*d{k?z1u~$;;!Nks~x!s)iROJjaG#{;cu;=vgrptQs zt>;Zmne$^>#3in*wjG{2%dNlEuutzwUAwjU#=ZGh!>1pWc@=mjQCLl)DA2?2WjOgg7rJOza}9r=7=VWN;xA&29u2|J2k*YU6YeKI%qz37bGf^+(} zZaFbq%w0J7>g`(32{PwKqz;8~28BA^OH8v+cJET}%UC;BP`r)5s zo)5B2Wm7+|S3dVvs&#&&_Fr~!&8$6!n*MeS3@ibjE{-7;jBoEA>^9vZ!0`XF$n|NYyaOYe(295~O^A)uq+yrF^TAd?Xb_X(0XJ*TD0 zcH3<`n(6zW`9QVh_Ltuu9U|Qngw4q{muqi*Q8THzbn*V@i{{^ABOKZi7$uunQ#iyX zD3Z#Nsk>Zz>!SH;kh{L;{!@ovu5+fQBMa~-YS2+FYEBoC7fhl=b%iKc&0JaNFI73=9kmp00i_>zopr0EJ5%i2wiq literal 0 HcmV?d00001 diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..fcc164c --- /dev/null +++ b/logo.svg @@ -0,0 +1 @@ +