What I learned making a GitHub Task Bar app for MacOS
20 hours ago
1
I love checking my daily GitHub activity on my profile page. It's a nice way to see how I'm doing while giving me insights on my mental state over the course of a year. To make it easier to view, I came up with the idea of putting it in my macOS taskbar. In this article, I'll explain everything I discovered and learned while doing it. [here is the app link](https://github.com/chamaloriz/contribution-bar).
It’s my first time using cargo test to work on parts of my codebase
#[test]pub fn generate_icon_file() { let testing_vec: Vec<u8> = vec![0, 1, 2, 3, 4, 5, 6]; let img = generate_image(testing_vec); img.save("icon-test.png").expect("Failed to save image");}
To round of the squares in the generated image I used a function to check the distance between two points. it works but it’s not true corner rounding.
Distance=(x2−x1)2+(y2−y1)2// here is the rust versionlet distance_to_center = ((pixel_x as f64 - square_center.0 as f64).powi(2) + (pixel_y as f64 - square_center.1 as f64).powi(2)).sqrt();
I used an unofficial source for the data from here its cached hourly but it’s enough for the widget.
// here is an example output from the api at// GET : https://github-contributions-api.jogruber.de/v4/chamaloriz{ "total": { "2014": 1, "2015": 0, "2016": 0, "2017": 0, "2018": 3, "2019": 241, "2020": 567, "2021": 84, "2022": 895, "2023": 1018, "2024": 1016, "2025": 762 }, "contributions": [ { "date": "2025-01-01", "count": 0, "level": 0 }, { "date": "2025-01-02", "count": 3, "level": 1 } ... ]}
To create the app for macos it’s basically a folder name app_name.app when you add the .app extension it starts looking for the Info.plist file.
<!-- here is the most minimal version of that file for my purpose --><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>CFBundleExecutable</key> <string>contribution-bar</string> <key>CFBundleIconFile</key> <string>icon.icns</string> <key>CFBundleName</key> <string>ContributionBar</string> <!-- this makes the app disapear from the dock and tab --> <key>LSUIElement</key> <true/></dict></plist>
To run the app after downloading it and if the app is not signed you can use this command
# it removes quarantine flags from flag (to bypass security warnings). to remove the “damaged app” error.xattr -cr /Applications/ContributionBar.app
If you try the app don’t hesitate to start it on github.