Skip to content

[Linux] Project scaffold — Rust + GTK4 + libadwaita #130

@2witstudios

Description

@2witstudios

Overview

Create the Linux desktop app project scaffold at linux/ using Rust with GTK4 and libadwaita.

Project Structure

linux/
├── Cargo.toml
├── src/
│   ├── main.rs              # GtkApplication setup, CLI arg parsing
│   ├── app.rs               # Application subclass, window management
│   ├── state.rs             # AppState, ConnectionState
│   ├── models/
│   │   ├── mod.rs
│   │   ├── manifest.rs      # Manifest, WorktreeEntry, AgentEntry (serde)
│   │   ├── agent_variant.rs # Claude/Codex/OpenCode/Terminal/Worktree
│   │   └── settings.rs      # AppSettings
│   ├── api/
│   │   ├── mod.rs
│   │   ├── client.rs        # PpgClient (reqwest, 13 REST endpoints)
│   │   └── websocket.rs     # WsManager (tokio-tungstenite)
│   ├── ui/
│   │   ├── mod.rs
│   │   ├── window.rs        # MainWindow
│   │   ├── sidebar.rs
│   │   ├── terminal_pane.rs
│   │   ├── pane_grid.rs
│   │   ├── home_dashboard.rs
│   │   ├── command_palette.rs
│   │   ├── worktree_detail.rs
│   │   ├── settings_dialog.rs
│   │   ├── prompts_view.rs
│   │   ├── swarms_view.rs
│   │   ├── schedules_view.rs
│   │   ├── agent_config_view.rs
│   │   └── setup_view.rs
│   └── util/
│       ├── mod.rs
│       └── shell.rs

Cargo.toml Dependencies

[package]
name = "ppg-desktop"
version = "0.1.0"
edition = "2021"

[dependencies]
gtk4 = { version = "0.9", features = ["v4_12"] }
libadwaita = { version = "0.7", features = ["v1_4"] }
vte4 = "0.8"
tokio = { version = "1", features = ["full"] }
tokio-tungstenite = { version = "0.24", features = ["native-tls"] }
reqwest = { version = "0.12", features = ["json"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
glib = "0.20"
gio = "0.20"

Acceptance Criteria

  • cargo build compiles cleanly
  • App launches and shows an empty window with libadwaita styling
  • Main window uses adw::NavigationSplitView (sidebar + content)
  • Basic CLI arg parsing: --server-url, --token, --project-root

Labels

platform: linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions