[github-contribution] add themes

This commit is contained in:
streetturtle 2020-11-09 10:07:14 -05:00
parent b10e3b7f45
commit ee008b6e54
13 changed files with 100 additions and 27 deletions

View File

@ -1,8 +1,12 @@
# Github Contributions Widget # Github Contributions Widget
Shows the contribution graph, similar to the one on the github profile page: The widget is inspired by the https://github-contributions.now.sh/ and relies on it's API.
![screenshot](./screenshot.jpg) It shows the contribution graph, similar to the one on the github profile page: ![screenshot](./screenshots/screenshot.jpg)
You might wonder what could be the reason to have your github's contributions in front of you all day long? The more you contribute, the nicer widget looks! Check out [Thomashighbaugh](https://github.com/Thomashighbaugh)'s graph:
![](./screenshots/Thomashighbaugh.png)
## Customization ## Customization
@ -10,20 +14,37 @@ It is possible to customize the widget by providing a table with all or some of
| Name | Default | Description | | Name | Default | Description |
|---|---|---| |---|---|---|
| `username` | 'streetturtle' | Username | | `username` | `streetturtle` | GitHub username |
| `days` | `365` | Number of days in the past, more days - wider the widget | | `days` | `365` | Number of days in the past, more days - wider the widget |
| `empty_color` | `beautiful.bg_normal` | Color of the days with no contributions | | `color_of_empty_cells` | Theme's default | Color of the days with no contributions |
| `with_border` | `true` | Should the graph contains border or not | | `with_border` | `true` | Should the graph contains border or not |
| `margin_top` | `1` | Top margin | | `margin_top` | `1` | Top margin |
| `theme` | `standard` | Color theme of the graph, see below |
Few more screenshots: _Note:_ widget height is 21px (7 rows of 3x3 cells). So it would look nice on the wibar of 22-24px height.
### Themes
Following themes are available:
| Theme name | Preview |
|---|---|
| standard | ![standard](./screenshots/standard.png) |
| classic | ![classic](./screenshots/classic.png) |
| teal | ![teal](./screenshots/teal.png) |
| leftpad | ![leftpad](./screenshots/leftpad.png) |
| dracula | ![dracula](./screenshots/dracula.png) |
| pink | ![pink](./screenshots/pink.png) |
To add a new theme, simply add a new entry in `themes` table (themes.lua) with the colors of your theme.
### Screenshots
1000 days, with border: 1000 days, with border:
![screenshot1](./screenshot1.jpg) ![screenshot1](./screenshots/screenshot1.jpg)
365 days, no border: 365 days, no border:
![screenshot2](./screenshot2.jpg) ![screenshot2](./screenshots/screenshot2.jpg)
## Installation ## Installation

View File

@ -9,12 +9,11 @@
------------------------------------------------- -------------------------------------------------
local awful = require("awful") local awful = require("awful")
local naughty = require("naughty")
local wibox = require("wibox") local wibox = require("wibox")
local beautiful = require("beautiful") local widget_themes = require("awesome-wm-widgets.github-contributions-widget.themes")
local GET_CONTRIBUTIONS_CMD = [[bash -c "curl -s https://github-contributions.now.sh/api/v1/%s | jq -r '[.contributions[] | select ( .date | strptime(\"%%Y-%%m-%%d\") | mktime < now)][:%s]| .[].color'"]] local GET_CONTRIBUTIONS_CMD = [[bash -c "curl -s https://github-contributions.now.sh/api/v1/%s | jq -r '[.contributions[] | select ( .date | strptime(\"%%Y-%%m-%%d\") | mktime < now)][:%s]| .[].color'"]]
-- in case github-contributions.now.sh stops working contributions can be scrapped from the github.com with the command below. Note that the order is reversed.
local GET_CONTRIBUTIONS_CMD_FALLBACK = [[bash -c "curl -s https://github.com/users/%s/contributions | grep -o '\" fill=\"\#[0-9a-fA-F]\{6\}\" da' | grep -o '\#[0-9a-fA-F]\{6\}'"]]
local github_contributions_widget = wibox.widget{ local github_contributions_widget = wibox.widget{
reflection = { reflection = {
@ -24,13 +23,12 @@ local github_contributions_widget = wibox.widget{
widget = wibox.container.mirror widget = wibox.container.mirror
} }
local color_dict = { local function show_warning(message)
color_calendar_graph_day_L4_bg = '#216e39', naughty.notify{
color_calendar_graph_day_L3_bg = '#239a3b', preset = naughty.config.presets.critical,
color_calendar_graph_day_L2_bg = '#7bc96f', title = 'Github Contributions Widget',
color_calendar_graph_day_L1_bg = '#c6e48b', text = message}
color_calendar_graph_day_bg = '#ebedf0', end
}
local function worker(args) local function worker(args)
@ -38,18 +36,26 @@ local function worker(args)
local username = args.username or 'streetturtle' local username = args.username or 'streetturtle'
local days = args.days or 365 local days = args.days or 365
local empty_color = args.empty_color or beautiful.bg_normal local color_of_empty_cells = args.color_of_empty_cells
local with_border = args.with_border local with_border = args.with_border
local margin_top = args.margin_top or 1 local margin_top = args.margin_top or 1
local theme = args.theme or 'standard'
if widget_themes[theme] == nil then
show_warning('Theme ' .. theme .. ' does not exist')
theme = 'standard'
end
if with_border == nil then with_border = true end if with_border == nil then with_border = true end
local function hex2rgb(hex) local function hex2rgb(hex)
if hex == '#ebedf0' then hex = empty_color end if color_of_empty_cells ~= nil and hex == widget_themes[theme]['color_calendar_graph_day_bg'] then
hex = tostring(hex):gsub("#","") hex = color_of_empty_cells
return tonumber("0x" .. hex:sub(1, 2)), end
tonumber("0x" .. hex:sub(3, 4)), hex = tostring(hex):gsub('#','')
tonumber("0x" .. hex:sub(5, 6)) return tonumber('0x' .. hex:sub(1, 2)),
tonumber('0x' .. hex:sub(3, 4)),
tonumber('0x' .. hex:sub(5, 6))
end end
local function get_square(color) local function get_square(color)
@ -70,9 +76,9 @@ local function worker(args)
local col = {layout = wibox.layout.fixed.vertical} local col = {layout = wibox.layout.fixed.vertical}
local row = {layout = wibox.layout.fixed.horizontal} local row = {layout = wibox.layout.fixed.horizontal}
local a = 6 - os.date('%w') local a = 5 - os.date('%w')
for i = 0, a do for i = 0, a do
table.insert(col, get_square('#ebedf0')) table.insert(col, get_square(color_of_empty_cells))
end end
local update_widget = function(widget, stdout, _, _, _) local update_widget = function(widget, stdout, _, _, _)
@ -81,7 +87,7 @@ local function worker(args)
table.insert(row, col) table.insert(row, col)
col = {layout = wibox.layout.fixed.vertical} col = {layout = wibox.layout.fixed.vertical}
end end
table.insert(col, get_square(color_dict[colors:match('var%(%-%-(.*)%)'):gsub('-', '_')])) table.insert(col, get_square(widget_themes[theme][colors:match('var%(%-%-(.*)%)'):gsub('-', '_')]))
a = a + 1 a = a + 1
end end
github_contributions_widget:setup( github_contributions_widget:setup(

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

View File

@ -0,0 +1,46 @@
local themes = {
standard = {
color_calendar_graph_day_L4_bg = '#216e39',
color_calendar_graph_day_L3_bg = '#30a14e',
color_calendar_graph_day_L2_bg = '#40c463',
color_calendar_graph_day_L1_bg = '#9be9a8',
color_calendar_graph_day_bg = '#ebedf0'
},
classic = {
color_calendar_graph_day_L4_bg = '#196127',
color_calendar_graph_day_L3_bg = '#239a3b',
color_calendar_graph_day_L2_bg = '#7bc96f',
color_calendar_graph_day_L1_bg = '#c6e48b',
color_calendar_graph_day_bg = '#ebedf0',
},
teal = {
color_calendar_graph_day_L4_bg = '#458B74',
color_calendar_graph_day_L3_bg = '#66CDAA',
color_calendar_graph_day_L2_bg = '#76EEC6',
color_calendar_graph_day_L1_bg = '#7FFFD4',
color_calendar_graph_day_bg = '#ebedf0',
},
leftpad = {
color_calendar_graph_day_L4_bg = '#F6F6F6',
color_calendar_graph_day_L3_bg = '#DDDDDD',
color_calendar_graph_day_L2_bg = '#A5A5A5',
color_calendar_graph_day_L1_bg = '#646464',
color_calendar_graph_day_bg = '#2F2F2F',
},
dracula = {
color_calendar_graph_day_L4_bg = '#ff79c6',
color_calendar_graph_day_L3_bg = '#bd93f9',
color_calendar_graph_day_L2_bg = '#6272a4',
color_calendar_graph_day_L1_bg = '#44475a',
color_calendar_graph_day_bg = '#282a36'
},
pink = {
color_calendar_graph_day_L4_bg = '#61185f',
color_calendar_graph_day_L3_bg = '#a74aa8',
color_calendar_graph_day_L2_bg = '#ca5bcc',
color_calendar_graph_day_L1_bg = '#e48bdc',
color_calendar_graph_day_bg = '#ebedf0',
}
}
return themes