FeDIY
FeDIY provides a reproducible Rust development environment using Nix flakes and the fenix toolchain.
Nix is optional for contributors: if you use it, nix develop gives you the exact tools this repository expects without needing to install them globally. If you do not use Nix, you can still work with the standard Rust toolchain.
Quick Start
nix develop
# or with direnv:
direnv allow
Automatic Environment Setup
When you enter the devShell (via direnv allow or nix develop), the following happens automatically:
✓ Git Repository: Initializes .git if not present
✓ Welcome Banner: Displays available tools and quick commands
No manual setup needed! Just start coding.
First Steps
nix develop
cargo build
cargo test
If you want a quick overview of what the shell provides, run:
nix run .#dev-helper
Flatpak Packaging
This project supports building Flatpak packages for the FeDIY application.
Build Flatpak Package
- Run:
make flatpak-build
This will use the manifest at flatpak/app.flatpak.json to build a Flatpak bundle in the build-flatpak/ directory.
Customize Manifest
Edit flatpak/app.flatpak.json to update app ID, runtime, build commands, or sources as needed for your project.
Install/Run Flatpak Locally
You can install and run the built Flatpak locally:
flatpak install --user build-flatpak/com.moturpin.fediy.flatpak
flatpak run com.moturpin.fediy
Included Tools
| Tool | Purpose |
|---|---|
| cargo | Rust package manager and build system |
| rustc | Rust compiler |
| clippy | Rust linter for catching common mistakes |
| rustfmt | Rust code formatter |
| rust-analyzer | Language server for IDE integration |
| rust-src | Rust source code (for tools like rust-analyzer) |
| cargo-deny | Audit dependencies for advisories and license policy |
| cargo-edit | Add/remove/upgrade Cargo dependencies from the CLI |
| cargo-watch | Auto-rebuild on file changes |
| flatpak-builder | Build Flatpak distribution packages |
| psql / postgresql | Local PostgreSQL development and inspection |
| gettext | Localization and translation workflow support |
| chromium / playwright | Browser-based UI and accessibility checks |
| podman / podman-compose / buildah | Linux-only OCI/container tooling |
| pre-commit | Run pre-commit hooks |
Testing & Development Features
Build and testing tools:
- cargo test - Run unit and integration tests
- cargo clippy - Lint code for common issues
- cargo fmt - Format code consistently with rustfmt
Example usage:
# Run tests
cargo test
# Check code with clippy
cargo clippy
# Format code
cargo fmt
# Watch and rebuild on changes
cargo watch -x build
# Build a Flatpak
make flatpak-build
Project Layout
Cargo.toml
Cargo.lock
docs/
adrs/ # Architecture decision records
contracts/ # API and behavior contracts (planning artifacts)
extensions/ # Extension model planning and examples
OPEN_QUESTIONS.md
ROADMAP.md
ARCHITECTURE.md
schemas/
project-core/ # Core project schema artifacts
extensions/ # Domain-specific extension schema artifacts
src/
└── main.rs (or lib.rs)
tests/
Makefile
.envrc
flake.nix
Legacy Usage
If you do not use flakes, run:
nix-shell
Project Metadata
See project.toml for example metadata.
Planning Documentation
- Planning docs index
- Roadmap
- Architecture baseline
- Development workflow (TDD/BDD + GitHub Flow)
- Open questions and clarification plan
Helper Tools
nix run .#dev-helper- Display tool versions and availability, grouped by taskcargo build- Build the projectcargo check- Quick syntax check without buildingcargo doc --open- Generate and view documentation
Packaging for nixpkgs
This project is structured for packaging in nixpkgs:
- All sources in
src/ flake.nixprovides a devShell and package outputs- Add a
default.nixor package expression as needed for nixpkgs
See nixpkgs Rust packaging docs for more details.
Customization
Edit flake.nix to:
- Add additional Rust targets via
rustup target add [target] - Include additional cargo plugins
- Add board-specific tools (e.g., stm32cube, nrfjprog)