# punchcard A simple program to keep track of working hours. ![weekly report table](./assets/report_weekly_testdata.png) 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. ## Installation **By default, punchcard requires nightly to support SIMD. Must be compiled using the nightly version defined in [the toolchain file](./rust-toolchain.toml).** ```shell # 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. #### Completions Print the completions file with `punchcard completions ` and pipe it to the appropriate folder for your shell. ### Development/Debug builds ```shell cargo run --no-default-features --features debug -- # or use the helper script which does exactly this: ./dev.sh -- ``` ## Usage ``` $ punchcard --help A CLI tool for tracking work-from-home hours. Usage: punchcard [OPTIONS] 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 [env: PUNCHCARD_DATA_FOLDER=.] [default: /home/campbell/.local/share/punchcard] -t, --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 ## Screenshots ### Clocking In / Out ![clocking in and out](./assets/clock.png) ### Status Checking ![clock status command](./assets/status.png) ### Reports #### Using the above clock entries ##### Weekly (default) ![weekly report table](./assets/report_weekly.png) ##### Daily ![daily report table](./assets/report_daily.png) #### Using generated test data ##### Weekly (default) ![weekly report table with test data](./assets/report_weekly_testdata.png) ##### Daily ![daily report table with test data](./assets/report_daily_testdata.png)