A clean GNOME Shell habit tracker with daily streaks, add/edit/delete, and history.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-X-005 warning
extensions should not manually load the default stylesheet.css
Extensions should not manually load or unload the default `stylesheet.css`; GNOME Shell handles it automatically.
extension.js:1398
theme.load_stylesheet(stylesheetFile)
EGO-X-004 warning
extensions should avoid synchronous file IO in shell code
Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.
lib/HabitStore.js:35
file.load_contents(null)
EGO-P-006 warning
unnecessary build and translation artifacts should not be shipped
Compiled GSettings schemas should not be shipped for 45+ packages.
Don't include unnecessary files
schemas/gschemas.compiled
schemas/gschemas.compiled
EGO-L-002 warning
objects created by extension should be destroyed in disable()
Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.
extension.js:396
this._emojiGrid = new St.BoxLayout({
vertical: true,
style_class: "habit-emoji-grid",
})
extension.js:382
this._searchEntry = new St.Entry({
hint_text: "Search emojis...",
can_focus: true,
style_class: "habit-emoji-search",
x_expand: true,
})
extension.js:626
this._emojiGrid = new St.BoxLayout({
vertical: true,
style_class: "habit-emoji-grid",
})
extension.js:620
this._emojiScroll = new St.ScrollView({
style_class: "habit-emoji-scroll habit-emoji-scroll-inline",
x_expand: true,
y_expand: true,
visible: false,
})
extension.js:608
this._emojiSearch = new St.Entry({
hint_text: "Search all emojis...",
can_focus: true,
style_class: "habit-emoji-search",
x_expand: true,
visible: false,
})
extension.js:518
this._entry = new St.Entry({
text: habit?.name ?? "",
hint_text: "New Habit",
can_focus: true,
style_class: "habit-entry",
x_expand: true,
})
extension.js:501
this._preview = new St.Label({
text: this._icon,
style_class: "habit-big-icon",
})
extension.js:551
this._quickColorRow = colorRow
extension.js:602
emojiRow
extension.js:892
this._calendarBox = new St.BoxLayout({
vertical: true,
style_class: "habit-calendar",
})
extension.js:834
this._iconLabel = new St.Label({
text: habit.icon,
style_class: "habit-history-icon",
})
extension.js:860
this._monthLabel = new St.Label({
text: this._viewDate.toLocaleString(undefined, {
month: "long",
year: "numeric",
}),
style_class: "habit-month",
x_expand: true,
x_align: Clutter.ActorAlign.CENTER,
})
extension.js:842
this._nameLabel = new St.Label({
text: habit.name,
style_class: "habit-history-name",
})
extension.js:847
this._streakLabel = new St.Label({
text: `${currentStreak(habit)} day streak`,
style_class: "habit-history-streak",
})
EGO-L-005 warning
owned object references should be released in disable()
Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.
extension.js:396
this._emojiGrid = new St.BoxLayout({
vertical: true,
style_class: "habit-emoji-grid",
})
extension.js:382
this._searchEntry = new St.Entry({
hint_text: "Search emojis...",
can_focus: true,
style_class: "habit-emoji-search",
x_expand: true,
})
extension.js:626
this._emojiGrid = new St.BoxLayout({
vertical: true,
style_class: "habit-emoji-grid",
})
extension.js:620
this._emojiScroll = new St.ScrollView({
style_class: "habit-emoji-scroll habit-emoji-scroll-inline",
x_expand: true,
y_expand: true,
visible: false,
})
extension.js:608
this._emojiSearch = new St.Entry({
hint_text: "Search all emojis...",
can_focus: true,
style_class: "habit-emoji-search",
x_expand: true,
visible: false,
})
extension.js:518
this._entry = new St.Entry({
text: habit?.name ?? "",
hint_text: "New Habit",
can_focus: true,
style_class: "habit-entry",
x_expand: true,
})
extension.js:501
this._preview = new St.Label({
text: this._icon,
style_class: "habit-big-icon",
})
extension.js:551
this._quickColorRow = colorRow
extension.js:892
this._calendarBox = new St.BoxLayout({
vertical: true,
style_class: "habit-calendar",
})
extension.js:834
this._iconLabel = new St.Label({
text: habit.icon,
style_class: "habit-history-icon",
})
extension.js:860
this._monthLabel = new St.Label({
text: this._viewDate.toLocaleString(undefined, {
month: "long",
year: "numeric",
}),
style_class: "habit-month",
x_expand: true,
x_align: Clutter.ActorAlign.CENTER,
})
extension.js:842
this._nameLabel = new St.Label({
text: habit.name,
style_class: "habit-history-name",
})
extension.js:847
this._streakLabel = new St.Label({
text: `${currentStreak(habit)} day streak`,
style_class: "habit-history-streak",
})
EGO-L-003 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
extension.js:780
button.connect("clicked", () => this._toggleEmojiPicker())
EGO-L-004 warning
main loop sources should be removed in disable()
Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.
extension.js:1328
GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
new HistoryDialog(habit).open();
return GLib.SOURCE_REMOVE;
})
| Version | Status |
|---|---|
| 9 | Unreviewed |
| 8 | Rejected |
| 7 | Rejected |
| 6 | Rejected |
| 5 | Rejected |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | Rejected |