Thank you for your interest in contributing to LNXDrive! This document provides guidelines and information for contributors.
- Code of Conduct
- Contributor License Agreement (CLA)
- How Can I Contribute?
- Development Setup
- Project Structure
- Pull Request Process
- Style Guidelines
This project is governed by our Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
In short: be respectful, inclusive, and constructive in all interactions. Harassment, discrimination, and trolling are not tolerated. Please read the full Code of Conduct before contributing.
This project requires all contributors to sign a Contributor License Agreement (CLA) before their pull requests can be merged. We use CLA Assistant to manage this process.
- When you open your first pull request, CLA Assistant will automatically post a comment asking you to sign the CLA.
- Click the link in the comment to review and sign the agreement.
- The CLA only needs to be signed once -- it covers all future contributions to this project.
- Once signed, CLA Assistant will update the PR check status and your contribution can proceed to review.
If you have questions about the CLA, please open a Discussion.
Before creating a bug report, please check existing issues to avoid duplicates.
When reporting a bug, include:
- A clear, descriptive title
- Steps to reproduce the behavior
- Expected behavior vs. actual behavior
- Screenshots or logs (if applicable)
- Environment details (distribution, desktop environment, kernel version)
Feature suggestions are welcome! Please include:
- A clear description of the feature
- The problem it solves
- Potential implementation approaches
- Any alternatives you've considered
Documentation improvements are highly valued:
- Fix typos or unclear wording
- Add examples
- Improve explanations
- Translate to other languages
Code contributions should:
- Fix a bug or implement a feature
- Include appropriate tests (if applicable)
- Follow the project's style guidelines
- Update documentation as needed
- Git
- Rust 1.75+ (install via rustup.rs)
- Meson & Ninja (for GNOME integration builds)
- GJS (for GNOME Shell extension development)
- GTK 4 development libraries (for GNOME UI)
- D-Bus development libraries (for IPC)
- FUSE 3 development libraries (for files-on-demand)
- SQLite 3 (for local state storage)
- Podman (optional, for container-based testing)
-
Fork the repository
Click "Fork" on the GitHub repository page.
-
Clone your fork
git clone https://github.com/your-username/lnxdrive.git cd lnxdrive -
Build the engine
cd lnxdrive-engine cargo build cargo test
-
Build the GNOME integration (optional)
cd lnxdrive-gnome meson setup builddir meson compile -C builddir -
Create a branch
git checkout -b feature/your-feature-name # or git checkout -b fix/your-bug-fix
LNXDrive is a monorepo with the following components:
lnxdrive/
├── lnxdrive-engine/ # Core daemon + library crates (Rust, Cargo workspace)
│ └── crates/
│ ├── lnxdrive-core/ # Domain logic and ports
│ ├── lnxdrive-daemon/ # systemd service
│ ├── lnxdrive-cli/ # Command-line interface
│ ├── lnxdrive-ipc/ # D-Bus IPC layer
│ ├── lnxdrive-fuse/ # Files-on-demand (FUSE)
│ ├── lnxdrive-sync/ # Sync engine
│ ├── lnxdrive-graph/ # Microsoft Graph adapter
│ ├── lnxdrive-cache/ # SQLite state cache
│ ├── lnxdrive-conflict/ # Conflict resolution
│ ├── lnxdrive-audit/ # Audit trail
│ └── lnxdrive-telemetry/ # Metrics and observability
├── lnxdrive-gnome/ # GNOME Shell/Nautilus/GOA integration
├── lnxdrive-gtk3/ # XFCE/MATE UI (GTK3)
├── lnxdrive-plasma/ # KDE Plasma integration (Qt/C++)
├── lnxdrive-cosmic/ # COSMIC desktop UI (Rust)
├── lnxdrive-packaging/ # Flatpak, AppImage, Debian, AUR
├── lnxdrive-guide/ # Design and development guide
├── lnxdrive-testing/ # Container/VM test infrastructure
└── .devtrail/ # Project documentation trail
For a deep understanding of the architecture and design decisions, refer to the Design Guide.
| Prefix | Purpose |
|---|---|
feature/ or feat/ |
New features |
fix/ |
Bug fixes |
hotfix/ |
Urgent production fixes |
docs/ |
Documentation only |
refactor/ |
Code refactoring |
test/ |
Test changes |
Important: Never commit directly to
main. All changes must go through feature/fix branches and Pull Requests.
- Code compiles without warnings
- Tests pass (
cargo testin the relevant crate) - Documentation is updated if needed
- Write a clear PR description
Use conventional commit format:
type(scope): description
Examples:
feat(sync): add delta sync for Microsoft Graph
fix(fuse): correct placeholder state on hydration
docs(guide): clarify hexagonal architecture layers
refactor(daemon): extract signal handling to module
Types:
feat-- New featurefix-- Bug fixdocs-- Documentation changeschore-- Maintenance tasksrefactor-- Code refactoringtest-- Test additions or fixes
- A maintainer will review your PR
- Address any requested changes
- Once approved, a maintainer will merge
- Follow standard Rust conventions (
rustfmt,clippy) - Use the workspace dependency versions defined in the root
Cargo.toml - Write doc comments for public APIs
- Prefer explicit error handling over
unwrap()
- Follow GNOME coding conventions
- Use ES modules for GJS extensions
- Use ATX-style headers (
#,##, etc.) - Use fenced code blocks with language identifiers
- Keep lines under 120 characters when practical
- Use conventional commits format
- Write the subject line in imperative mood ("add feature", not "added feature")
- Keep the subject under 72 characters
If you have questions about contributing:
- Check existing Issues
- Check Discussions
- Open a new Discussion for general questions
- Open an Issue for specific bugs or features
Contributors are recognized in:
- GitHub's contributor graph
- Release notes for significant contributions
Thank you for helping make LNXDrive better!
LNXDrive -- Because your files belong everywhere.