3.8 KiB
3.8 KiB
Phase 01 — Project Scaffold
Goal
Create the complete Rust project skeleton with correct Cargo.toml, build system, directory structure, and verify that the project compiles (empty/stub implementations).
Prerequisites
- Rust toolchain installed (rustup, cargo)
- System dependencies installed (see docs/architecture.md — System Dependencies section)
- Verify with:
pkg-config --exists gtk4 libadwaita-1 && echo "OK"
Steps
1. Create project
cargo new --bin mangotune
cd mangotune
2. Create full directory structure
mkdir -p src/{config,system,launcher,integrations,ui/{pages,widgets}}
mkdir -p data/icons
3. Write Cargo.toml
Copy the exact dependency block from docs/architecture.md → Cargo.toml section.
Do not add or remove any dependencies without updating docs/architecture.md.
4. Write build.rs
// build.rs
fn main() {
glib_build_tools::compile_schemas("data");
}
5. Create GSettings schema
File: data/com.mangotune.MangoTune.gschema.xml
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<schema id="com.mangotune.MangoTune" path="/com/mangotune/MangoTune/">
<key name="last-config-path" type="s">
<default>''</default>
<summary>Last edited config file path</summary>
</key>
<key name="window-width" type="i">
<default>1200</default>
<summary>Window width</summary>
</key>
<key name="window-height" type="i">
<default>780</default>
<summary>Window height</summary>
</key>
<key name="active-page" type="s">
<default>'performance'</default>
<summary>Currently active sidebar page</summary>
</key>
<key name="show-raw-editor" type="b">
<default>false</default>
<summary>Whether raw editor tab is visible</summary>
</key>
</schema>
</schemalist>
6. Create .desktop file
File: data/com.mangotune.MangoTune.desktop
[Desktop Entry]
Name=MangoTune
Comment=MangoHud Overlay Configurator
Exec=mangotune
Icon=com.mangotune.MangoTune
Terminal=false
Type=Application
Categories=Settings;System;
Keywords=MangoHud;overlay;gaming;performance;
StartupNotify=true
StartupWMClass=mangotune
7. Create all source stub files
Each file listed in docs/architecture.md → Target Source Tree must be created
as a stub with correct module declarations and a todo!() placeholder where needed.
Required stub content for each module file:
// src/config/parser.rs
//! MangoHud config file parser and writer.
//! See: mangotune-plan/modules/config_parser.md for full spec.
pub struct Parser;
impl Parser {
pub fn new() -> Self { todo!() }
}
8. Wire up main.rs
// src/main.rs
mod app;
mod config;
mod system;
mod launcher;
mod integrations;
mod ui;
fn main() {
tracing_subscriber::fmt::init();
let app = app::MangoTuneApp::new();
std::process::exit(app.run());
}
9. Wire up app.rs stub
// src/app.rs
use gtk4::prelude::*;
use libadwaita::prelude::*;
pub struct MangoTuneApp {
app: libadwaita::Application,
}
impl MangoTuneApp {
pub fn new() -> Self {
let app = libadwaita::Application::builder()
.application_id("com.mangotune.MangoTune")
.build();
MangoTuneApp { app }
}
pub fn run(&self) -> i32 {
self.app.run().into()
}
}
10. Verify compilation
cargo check 2>&1
Must produce zero errors (warnings acceptable at this stage).
Acceptance Criteria
cargo checkexits with code 0- All directories from the target source tree exist
- All source stub files exist with correct module declarations
data/contains gschema.xml and .desktop filebuild.rscompiles the schema without error- No
.unwrap()calls in non-stub code (stubs withtodo!()are exempt)