Files
komorebi/version/src/lib.rs
T
LGUG2Z 426409fcfc chore(repo): a workspace of two crates
komorebi for KDE is built up as a Cargo workspace with one crate per concern,
the way komorebi and komorebi for Mac are. The first two crates are the
`komorebi` daemon, which does nothing yet but report its version, and `version`,
which owns the string every binary of the workspace reports.

`version` reads the commit from git when HEAD is on a branch, and from
COMMIT_HASH otherwise. A jj workspace leaves HEAD detached, so
`.cargo/config.toml` defaults the variable to `unknown` (nix will set the real
commit), and a plain `cargo build` in a jj checkout compiles.

The tooling files come from komorebi for Mac: the licence, deny.toml (trimmed to
the licences in use), rustfmt.toml and the toolchain file. `just check` runs the
formatting check, clippy and rustdoc with warnings denied, and the tests.
rustfmt.toml uses an unstable option, so formatting needs a nightly rustfmt. The
`rg` calls in `just lint` name a path because rg reads stdin when it is given
none and stdin is not a terminal.

The README and CONTRIBUTING.md say how to run, check and commit.
2026-10-27 09:11:36 -07:00

34 lines
1.3 KiB
Rust

//! The version string every komorebi binary reports.
//!
//! [`LONG_VERSION`] is the package version followed by the commit the binary
//! was built from and the Rust toolchain that built it. The binaries pass it to
//! their command line parsers, so `komorebi --version` and
//! `komorebic --version` report the same thing.
//!
//! # Where the commit comes from
//!
//! A build from a git checkout whose `HEAD` is on a branch asks git for the
//! branch and the commit. Any other build has nothing to ask: a detached `HEAD`
//! (which is what a jj workspace leaves), a source tree with no `.git`
//! directory, or a sandboxed nix build. Such a build reads the commit from the
//! `COMMIT_HASH` environment variable, and does not compile without it.
//! [`.cargo/config.toml`](https://github.com/LGUG2Z/komorebi-for-kde/blob/master/.cargo/config.toml)
//! defaults the variable to `unknown`, and nix sets it to the real commit.
shadow_rs::shadow!(build);
/// The package version, the commit and the toolchain of this build, one per
/// line.
///
/// The first line is the package version, which every crate in the workspace
/// shares.
///
/// # Example
///
/// ```rust
/// let first_line = version::LONG_VERSION.lines().next();
///
/// assert_eq!(first_line, Some(env!("CARGO_PKG_VERSION")));
/// ```
pub use build::LONG_VERSION;