Files
darkforge/README.md
2026-03-19 15:04:26 +01:00

189 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DarkForge Linux
A custom, from-scratch Linux distribution built for one machine, one user — optimized ruthlessly for gaming and development.
## Target Hardware
| Component | Model |
|-----------|-------|
| CPU | AMD Ryzen 9 9950X3D (Zen 5, 16C/32T, 3D V-Cache) |
| RAM | Corsair Vengeance DDR5-6000 96GB CL30 (2×48GB) |
| Storage | Samsung 9100 PRO 2TB NVMe (PCIe 5.0 x4) |
| GPU | ASUS GeForce RTX 5090 ROG Astral LC OC 32GB GDDR7 |
| Motherboard | ASUS ROG CROSSHAIR X870E HERO |
## Architecture
DarkForge uses a minimal, transparent stack with no systemd:
- **Init:** SysVinit + custom rc.d scripts
- **Device manager:** eudev (no systemd dependency)
- **Boot:** EFISTUB — the kernel is the bootloader, no GRUB
- **Display:** Wayland via dwl compositor (dwm-like)
- **Audio:** PipeWire (started as user service)
- **Networking:** dhcpcd (ethernet only)
- **Package manager:** dpack (custom, written in Rust)
- **Shell:** zsh (user) / bash (build scripts)
- **Filesystem:** ext4
## Project Structure
```
darkforge/
├── CLAUDE.md # Project directive (AI assistant context)
├── README.md # This file
├── docs/
│ └── CHANGELOG.md # Mandatory changelog for every change
├── src/
│ ├── dpack/ # Custom package manager (Rust)
│ ├── iso/ # Live ISO builder
│ ├── install/ # Interactive installer
│ └── repos/ # Package definitions (124 packages)
│ ├── core/ # 67 base system packages
│ ├── extra/ # 26 libraries and frameworks
│ ├── desktop/ # 19 Wayland/desktop packages
│ └── gaming/ # 12 gaming packages
├── toolchain/ # Cross-compilation bootstrap scripts
│ ├── scripts/ # 34 build scripts (LFS Ch. 5-7)
│ ├── sources/ # Downloaded source tarballs
│ └── VERSION_MANIFEST.md
├── kernel/
│ └── config # Hardware-specific kernel .config
├── configs/
│ ├── rc.conf # System configuration
│ ├── inittab # SysVinit config
│ ├── rc.d/ # Service scripts
│ ├── zprofile # User shell profile (auto-starts dwl)
│ └── fstab.template # Filesystem table template
└── reference/ # LFS, BLFS, CRUX, Gentoo reference docs
```
## Build Phases
The project is built in sequential phases. Each phase has clear deliverables and exit criteria.
| Phase | Description | Status |
|-------|-------------|--------|
| 0 | Toolchain bootstrap (cross-compiler) | Scripts written |
| 1 | dpack core (parser, resolver, sandbox, db, build) | Implemented |
| 2 | dpack advanced (converters, solib, upgrade/remove) | Implemented |
| 3 | Base system packages (66 core/ definitions) | Complete |
| 4 | Kernel configuration | Complete |
| 5 | Init system and service scripts | Complete |
| 6 | Desktop environment (Wayland/dwl) | Definitions written |
| 7 | NVIDIA driver stack | Definition written |
| 8 | Gaming stack (Steam, Wine, Proton) | Definitions written |
| 9 | Application stack (WezTerm, FreeCAD) | Definitions written |
| 10 | ISO builder | Script written |
| 11 | Interactive installer | Scripts written |
| 12 | Integration testing | Pending |
## Quick Start
### Prerequisites
Building DarkForge requires a Linux host system. The toolchain bootstrap (Phase 0) can be done from any modern Linux distro, but later phases require the DarkForge chroot/live environment.
**Host system requirements (for building the toolchain):**
Any reasonably modern Linux distribution works. Tested on:
- Arch Linux (recommended — rolling release with fresh packages)
- Ubuntu 22.04+ / Debian 12+
- Fedora 38+
Required host packages:
```bash
# Arch Linux
sudo pacman -S base-devel git wget python rust
# Ubuntu / Debian
sudo apt install build-essential git wget python3 curl bison gawk m4 texinfo
# Fedora
sudo dnf groupinstall "Development Tools" && sudo dnf install git wget python3 rust cargo
```
**Tool versions:**
- GCC 14.1+ or GCC 15.x (for `-march=znver5` support)
- Rust 1.75+ (for building dpack — install via https://rustup.rs)
- Python 3.10+
- GNU Make 4.x+
- ~50GB free disk space for the full build
- ~4GB RAM minimum (16GB+ recommended for parallel builds)
**For kernel building (Phase 4) and later phases:**
These run inside the DarkForge chroot or on the target machine itself. The toolchain built in Phase 0 provides everything needed.
### 1. Build dpack
```bash
cd src/dpack
cargo build --release
sudo install -m755 target/release/dpack /usr/local/bin/
```
### 2. Bootstrap the toolchain
```bash
export LFS=/mnt/darkforge
# Create and mount your target partition, then:
bash toolchain/scripts/000-env-setup.sh
bash toolchain/scripts/000a-download-sources.sh
bash toolchain/scripts/build-all.sh cross
bash toolchain/scripts/build-all.sh temp
# Enter chroot and run Phase 7 scripts
```
### 3. Build the kernel
```bash
cp kernel/config /usr/src/linux-6.19.8/.config
cd /usr/src/linux-6.19.8
make olddefconfig
make -j32
make modules_install
cp arch/x86/boot/bzImage /boot/vmlinuz
```
### 4. Build the ISO
```bash
bash src/iso/build-iso.sh
```
### 5. Install
Boot the ISO on the target machine and run `install`.
## Compiler Flags
All packages are built with Zen 5 optimizations:
```bash
CFLAGS="-march=znver5 -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
MAKEFLAGS="-j32"
LDFLAGS="-Wl,-O1,--as-needed"
```
## Key Design Decisions
- **No systemd** — SysVinit + rc.d for transparency and speed
- **No bootloader** — EFISTUB direct kernel boot
- **No display manager** — auto-login to tty1, dwl launched from shell profile
- **ext4** — simpler and faster than btrfs for this use case
- **96GB swap** — matches RAM size for hibernation support
- **Single target** — every optimization targets exactly this hardware
## License
The DarkForge project itself is MIT licensed. Individual packages retain their upstream licenses as documented in their `.toml` definitions.
## Repository
```
git@git.dannyhaslund.dk:danny8632/darkforge.git
```