A simple program to keep track of working hours.
Colors are customizable through arguments on the report
command. Installing completions is highly recommended to customize the table as there are a lot of options.
By default, punchcard requires nightly to support SIMD. Must be compiled using the nightly version defined in the toolchain file.
# on stable Rust
cargo install punchcard --no-default-features --features stable
# on nightly Rust
cargo install punchcard
If you are using stable Rust, compile with --no-default-features --features stable
. The MSRV for stable builds is 1.71.1
. There is no MSRV policy because this program mainly targets nightly, so the MSRV can change at any time.
Print the completions file with punchcard completions <your shell>
and pipe it to the appropriate folder for your shell.
cargo run --no-default-features --features debug -- <args>
# or use the helper script which does exactly this:
./dev.sh -- <args>
$ punchcard --help
A CLI tool for tracking work-from-home hours.
Usage: punchcard [OPTIONS] <COMMAND>
Commands:
in Clock in
out Clock out
toggle Clock either in or out
status Check the current status
report Interpret the times and generate a report
completions Generate completions for the given shell
generate-data Generate test data
help Print this message or the help of the given subcommand(s)
Options:
-d, --data-folder <DATA_FOLDER> [env: PUNCHCARD_DATA_FOLDER=.] [default: /home/campbell/.local/share/punchcard]
-t, --timezone <TIMEZONE> [env: PUNCHCARD_TIMEZONE=] [default: America/Los_Angeles]
-h, --help Print help
-V, --version Print version
NOTE: The generate-data
subcommand is only available with the feature flag generate_test_data
.
This flag is enabled by the debug
feature flag, but can be enabled in release builds as well.
When using the in
, out
, toggle
, and status
subcommands, the -o
option can be used to specify an offset from the current time.
Some examples of valid inputs:
- "in 1h 30m" -> add 1h 30m to the current time
- "1h 30m" -> add 1h 30m to the current time
- "1h 30m ago" -> subtract 1h 30m from the current time
The in
prefix is optional; by default, the offset is added to the current time.
The offset is parsed by the humantime
crate. It accepts a variety of formats. The suffixes do not have to be single letters, but they must be separated by whitespace. For example, you may use 1hours
, 1hour
, 1hr
, or 1h
to specify 1 hour.
For a list of all the suffixes, see the documentation for the humantime
crate:
https://docs.rs/humantime/latest/humantime/fn.parse_duration.html