Files
2026-08-18 20:56:07 -05:00

2.3 KiB

ColdIron

ColdIron is a desktop GUI application built with Rust and the Iced GUI framework.

Quick Start

Enter the reproducible development shell with all Rust tools and Linux GUI runtime dependencies (wayland, libxkbcommon, libGL, vulkan-loader, xorg libraries):

nix develop
# or with direnv:
direnv allow

Then run the application:

cargo run

Running Tests & Quality Checks

# Run unit and integration tests
cargo test

# Run linter
cargo clippy

# Format code
cargo fmt

Nix Packaging & nixpkgs Compatibility

coldIron provides an idiomatic, nixpkgs-compatible package expression in package.nix and flake.nix.

Build with Nix

nix build
./result/bin/ColdIron

Or run directly via flake:

nix run

Contributing to nixpkgs

The package.nix derivation is designed for direct integration into nixpkgs (e.g. under pkgs/by-name/co/coldiron/package.nix). It uses rustPlatform.buildRustPackage, makeBinaryWrapper, and wraps the executable with runtime graphics and windowing libraries (LD_LIBRARY_PATH).

Flatpak Packaging

ColdIron includes Flatpak packaging configuration for containerized desktop distribution.

Build Flatpak Package

  1. Enter the dev shell (nix develop) which includes flatpak and flatpak-builder.
  2. Run:
make flatpak-build

This uses the manifest in flatpak/app.flatpak.json (Application ID: io.github.gooba42.coldiron) to build the application into build-flatpak/.

Legacy Nix Shell

If you are not using Nix flakes, you can enter the development environment using:

nix-shell

Project Structure

ColdIron/
├── Cargo.toml            # Rust package manifest
├── Cargo.lock            # Exact dependency lockfile
├── flake.nix             # Nix flake for devShell, packages, and apps
├── package.nix           # Nixpkgs-compatible buildRustPackage derivation
├── default.nix           # nix-build entrypoint calling package.nix
├── shell.nix             # Legacy nix-shell configuration
├── flatpak/
│   └── app.flatpak.json  # Flatpak application manifest
├── src/
│   └── main.rs           # Iced application entrypoint and UI
└── tests/                # Integration tests