sankalp
deb4a3688c
perf(network): cache dbus proxies, reuse rfkill state
2026-08-02 13:37:10 +05:45
sankalp
f8a0bf0701
perf(mpris): cache metadata, async player calls
2026-08-02 13:37:10 +05:45
sankalp
81dc9408f6
refactor(modus): drop dead helpers, size occlusion from monitor
2026-08-02 13:37:10 +05:45
sankalp
25bd696bf2
refactor(dns): route nmcli through run_command
2026-08-02 13:37:09 +05:45
sankalp
2025cca857
perf(custom_notification): debounce cache writes
2026-08-02 13:37:09 +05:45
sankalp
5c97923588
fix(config): skip unrelated files and no-op reloads
2026-08-02 13:37:09 +05:45
sankalp
8372782032
refactor(brightness): drop unused poll timer id
2026-08-02 13:37:09 +05:45
sankalp
29cf4fedc1
refactor(bluetooth): drive rfkill state from kernel events
2026-08-02 13:37:09 +05:45
sankalp
e949bd4397
refactor(battery): hoist raw-state mapping to constant
2026-08-02 13:37:09 +05:45
sankalp
57b9269736
build: pin fabric to v0.0.2 release tag
2026-08-02 13:36:59 +05:45
sankalp
98c3181541
fix(date): update label in place to avoid GTK3 visibility glitch
...
Repeated set_label() on every tick destroys and recreates the button's
internal label; after enough redraws GTK3 drops its visibility. Capture
the label once and update via set_text() instead.
2026-08-02 12:10:11 +05:45
sankalp
9e992578f8
feat(main): connect polkit agent to auth dialog
2026-08-02 12:10:09 +05:45
sankalp
e36e0c1a7d
feat(sysauth-dialog): add thread-safe dismiss and service wiring
...
run_auth_dialog now returns a thread-safe dismiss callable so polkitd
cancellations can close the dialog from any thread. connect_sysauth_service
wires the agent signals to the dialog: show on begin, respond on submit,
re-prompt on failure, dismiss on cancel.
2026-08-02 12:10:06 +05:45
sankalp
1059833576
fix(sysauth): hold BeginAuthentication reply until auth resolves
...
polkitd ends the authentication session the moment the BeginAuthentication
D-Bus reply returns, so replying immediately aborted every attempt with
'No session for cookie'. The invocation is now held until respond() or
cancel() resolves it, and cancelled sessions return
org.freedesktop.PolicyKit1.Error.Cancelled.
Also export the agent on the system bus (polkitd addresses agents by the
system-bus unique name used for registration) and authenticate through
polkit-agent-helper-1 via socket activation or setuid fallback so PAM
runs as root, instead of the old direct Respond call that only works
for uid 0.
2026-08-02 12:10:03 +05:45
sankalp
ba4d73d58f
fix: weakref callbacks to stop settings window memory leak
2026-08-01 21:04:24 +05:45
sankalp
963ca39303
perf: lazy-load settings window to cut startup memory
2026-08-01 20:46:33 +05:45
sankalp
9dc18f9fec
Merge pull request #48 from S4NKALP/dependabot/github_actions/actions/setup-python-7
...
chore(deps): bump actions/setup-python from 5 to 7
2026-08-01 20:05:17 +05:45
sankalp
9ebb53942b
Merge pull request #45 from S4NKALP/dependabot/github_actions/actions/labeler-7
...
chore(deps): bump actions/labeler from 5 to 7
2026-08-01 20:04:58 +05:45
sankalp
dc6fd67d66
Merge pull request #47 from S4NKALP/dependabot/github_actions/astral-sh/setup-uv-7
...
chore(deps): bump astral-sh/setup-uv from 4 to 7
2026-08-01 20:04:27 +05:45
sankalp
246261675a
Merge pull request #46 from S4NKALP/dependabot/github_actions/github/codeql-action-4.37.3
...
chore(deps): bump github/codeql-action from 3 to 4.37.3
2026-08-01 20:04:16 +05:45
sankalp
09f792078f
fix: dropdown callbacks, singleton about dialog, config-driven settings sidebar, switcher cache eviction
2026-08-01 20:03:46 +05:45
sankalp
456545e6a6
perf: break animator and popup ref cycles, suspend idle timers
...
Break self -> animator -> lambda cycles in smooth switch and flat scale
by stopping animators and disconnecting value handlers on destroy. Drop
mutual OSD window/osd refs and clear the applet active-popup class ref.
Suspend the dock animation loop when nothing animates, pause the desktop
system info poller while unmapped, replace the OSD watchdog polling with
a single shot at expiry, lower the notch visualizer tick rate, and
cancel outstanding dock occlusion/rebuild timers on teardown.
2026-08-01 19:53:15 +05:45
sankalp
d8696b9198
fix: add destroy() and signal cleanup across widgets, fix settings window + menu regressions
...
P0 leak fixes: context/action menus destroyed on deactivate, config
callbacks unregistered in settings widgets, recorder and server signal
IDs stored and disconnected, bluetooth client closed and unsubscribed,
rfkill timer removed, seek timers cancelled, dropdown and options menus
freed, app name cache LRU-bounded.
Fix desktop 'Edit Widgets' and settings menu regressions by deferring
destroy out of Gtk signal handlers via GLib.idle_add.
Fix settings entry fields by connecting the activate signal explicitly
(Enter saves the value).
2026-08-01 19:44:39 +05:45
sankalp
55fc3fba21
fix: drop notification header icon, defer spotlight paste quit, use hyprctl send_shortcut
2026-08-01 19:23:56 +05:45
sankalp
4122b9a305
fix: launch desktop apps from home dir, not Modus cwd
...
GIO inherits the caller's working directory when a desktop file has no
Path= entry, so terminals and file managers opened in the Modus project
dir. chdir to the desktop file's Path= or $HOME before launching.
2026-07-31 20:37:03 +05:45
sankalp
b10244a61c
fix: sanitize lat/lon from location cache before disk write
2026-07-31 01:42:31 +05:45
sankalp
3c93ac1c20
fix: disconnect signals and config callbacks on destroy
...
- dock/main.py: off_config_change in destroy()
- switcher/main.py: add destroy() for capture signals + config
- panel/main.py: disconnect fullscreen-changed signal
- notification_center.py: add destroy() for 4 notification signals
2026-07-31 01:37:16 +05:45
sankalp
beab79a405
refactor: extract shared mixins, fix cpu waste, resolve browser icons
...
- Extract CloseButtonRevealerMixin, PullToRefreshMixin, BasePlayerBoxStack
- Replace mpris.py 2s+5s D-Bus polling with Seeked signal subscription
- Remove redundant desktop/main.py os.listdir() poll (FileMonitor covers)
- Remove switcher/main.py 200ms capture timer, chain from frame-ready
- Resolve browser MPRIS icons via desktop file lookup, fallback to app name
- Fix CodeQL py/clear-text-storage by rounding lat/lon and stripping from cache
2026-07-31 01:35:25 +05:45
sankalp
92c2b92333
refactor: remove redundant Box wrappers
...
- dock/main.py: canvas_box eliminated, Revealer wraps canvas directly
- desktop/system.py: two single-child Box wrappers removed
- controlcenter/player.py: redundant album_cover wrapper removed
- controlcenter/expanded_player.py: same pattern as player.py
2026-07-31 00:39:53 +05:45
sankalp
5c936a68da
refactor: replace hasattr(self, ...) with direct None-safe access
2026-07-31 00:24:23 +05:45
sankalp
2fb23ca25a
chore: pin deps to exact versions, drop unused httpx
2026-07-31 00:18:24 +05:45
sankalp
79176a9635
chore: ignore matugen colors.lua and wallpaper .thumbnails
2026-07-30 23:27:07 +05:45
sankalp
c8667994bb
Merge pull request #44 from S4NKALP/feat/dock
...
dock
2026-07-30 23:19:30 +05:45
sankalp
a3dc4491cd
ci: add CODEOWNERS to auto-request review on PRs
2026-07-30 23:17:53 +05:45
sankalp
7925bf3cfb
docs: add LLM assistance note to documentation section
2026-07-30 23:09:29 +05:45
sankalp
a258732528
ci: add commitlint config extending @commitlint/config-conventional
2026-07-30 23:05:23 +05:45
sankalp
3bc086596a
feat(settings): add hover_scale entry, fix SettingsEntry float handling
2026-07-30 22:59:11 +05:45
sankalp
4285c1a0b8
ci: run workflows on all PRs (drop branch filter)
2026-07-30 22:53:54 +05:45
sankalp
251d924df7
ci: update branch triggers main->macos, drop dev
2026-07-30 22:53:10 +05:45
sankalp
1d7a94f154
chore(clipboard): remove noisy INFO logs from _load_history
2026-07-30 22:52:02 +05:45
sankalp
514868fe51
feat(data): use generate_default_toml() in load_config fallback
2026-07-30 22:52:01 +05:45
sankalp
3aa0d34fea
feat(config): set hover_scale default to 1.6 with range comment, add generate_default_toml()
2026-07-30 22:52:01 +05:45
sankalp
4a9f8fc1b8
refactor(config): use generate_default_toml() from constants for initial config
2026-07-30 22:52:00 +05:45
sankalp
f93f5f8942
feat(dock): add hover_scale config change handler
2026-07-30 22:52:00 +05:45
sankalp
3ad4221a9a
feat(dock): use max_scale() for icon cache size and drop custom cairo filter
2026-07-30 22:52:00 +05:45
sankalp
c94dbff55e
feat(dock): call max_scale() instead of MAX_SCALE constant in layout
2026-07-30 22:51:59 +05:45
sankalp
1f24c5c3e8
feat(dock): replace MAX_SCALE constant with config-backed max_scale() function
2026-07-30 22:51:54 +05:45
sankalp
0195971eba
fix(globalmenu): fetch Firefox/Zen bookmarks from SQLite when DBus empty
...
Zen Browser doesn't expose bookmark submenu children through DBusMenu.
Fall back to reading places.sqlite for Bookmarks Toolbar and
Other Bookmarks folders. Truncate to 25 items to avoid menu overflow.
2026-07-29 10:08:20 +05:45
sankalp
8980e90e39
feat: globalmenu updates
2026-07-29 09:31:05 +05:45
sankalp
47c413b374
Merge pull request #43 from S4NKALP/feat/globalmenu
...
feat(globalmenu)
2026-07-28 21:20:18 +05:45
sankalp
056a8ace89
refactor(spotlight): replace custom SVGs with themed symbolic icons
...
Remove _ICON_SVG_MAP and _icon_to_svg. Use Gtk themed icons directly
via fabric Image widget with set_from_icon_name instead of loading
custom SVG files. Fixes crash when plugin icon SVG is missing.
2026-07-28 21:14:13 +05:45
sankalp
f3bfb4ec12
chore(spotlight): add debug logging to clipboard plugin
...
Log query, history state, cliphist output stats, and filter results
to aid debugging prefix search issues.
2026-07-28 21:14:04 +05:45
sankalp
36158ffbbb
fix(spotlight): return empty for unrelated caffeine queries
...
Add had_prefix flag so caffeine.search() returns [] for queries
without 'caffeine' or 'caff' prefix instead of always showing help.
Add debug logging.
2026-07-28 21:13:54 +05:45
sankalp
006a9dc97e
chore: remove unused dns.svg icon
2026-07-28 13:43:14 +05:45
sankalp
abf831e4ae
docs: update documentation for reorganized config.toml
...
- Update configuration.md with new section-based format
- Update architecture.md with new config key paths
- Update faqs_tips.md with new config key paths
- Update README.md to mention config sections
2026-07-28 13:38:38 +05:45
sankalp
f4689b8076
refactor(config): reorganize config.toml into sections
...
- Move all settings into [general], [dock], [panel], [switcher], [notification]
- Remove [desktop_widgets] section, move items to panel/general
- Add dot notation support to config service for nested keys
- Update all config references across codebase
2026-07-28 13:34:23 +05:45
sankalp
1d66b57ad7
feat(wifi): add DNS switcher to WiFi control center panel
2026-07-28 13:03:04 +05:45
sankalp
b76ab78415
feat(wifi): add DNS switcher styles
2026-07-28 13:02:31 +05:45
sankalp
f887a5c932
feat(wifi): export DNS service from services package
2026-07-28 13:02:22 +05:45
sankalp
a6a34f6e69
feat(wifi): add DNS icon
2026-07-28 13:02:17 +05:45
sankalp
260e53aa47
feat(wifi): add DNS service with nmcli backend
2026-07-28 13:02:11 +05:45
sankalp
0a7cd2cf6d
refactor(desktop): improve registry API and deduplicate fade animators
...
- Replace three synced dicts with single WidgetInfo dataclass
- Add type hints, unregister(), is_registered(), keys(), widgets()
- Add DEFAULT_SIZE constant, duplicate-registration warning
- Extract _make_fade_animator() to remove duplicated animator setup
- Use public registry API in main.py instead of accessing _widgets
2026-07-28 10:38:26 +05:45
sankalp
347e15af35
feat: update desktop widgets position
2026-07-28 10:25:35 +05:45
sankalp
34f9f71d62
feat: update date widget
2026-07-28 10:23:04 +05:45
sankalp
98640d82c2
feat: update position of desktop widgets
2026-07-28 10:08:02 +05:45
sankalp
1b4c319fdb
style: format app-capture README code examples
...
Add blank lines between function definitions per PEP 8.
2026-07-28 10:01:18 +05:45
sankalp
f0c0e27e82
chore: update dependencies
...
Downgrade tomlkit to 0.15.0, update certifi to 2026.7.22.
2026-07-28 10:00:55 +05:45
sankalp
88f7f2e125
style: format documentation code examples
...
Align comments in code examples for readability.
2026-07-28 10:00:41 +05:45
sankalp
3f66c5e55c
style: add flat class to imac MenuButton
...
Ensures consistent styling with other panel buttons.
2026-07-28 10:00:31 +05:45
sankalp
64b4e922d9
docs: add divider option to mods.toml documentation
...
Document that divider = true can be added before an option to
insert a separator in dropdown menus.
2026-07-28 10:00:12 +05:45
sankalp
3e4bae1a98
perf: cache failed D-Bus introspection paths
...
Add _dead set to _IntrospectionCache to track paths that timeout.
Failed introspections are skipped on future lookups, reducing
timeout blocks from 300-500ms to near-zero.
2026-07-28 10:00:04 +05:45
sankalp
34de9da0d7
refactor: remove LuaHyprlandWorkspaces monkey patch
...
Fabric now handles Lua support natively via does_hyprland_support_lua().
Use HyprlandWorkspaces directly.
2026-07-28 10:00:00 +05:45
sankalp
d6d736ac7f
refactor: use Gtk.MenuButton for custom mods with dropdowns
...
Use plain Button for simple click-only mods, Gtk.MenuButton only
when dropdown options exist. Adds margin spacing between buttons.
2026-07-28 09:59:56 +05:45
sankalp
925971a258
refactor: rewrite globalmenu with menu factories and GtkMenu
...
Extract _create_system_menu and _create_title_menu factories.
Use ModusDropdown and dropdown_option for system menu.
Convert _build_gtk_menu_from_children to show_all.
Add _make_click_handler method, remove dead _has_extracted_menu.
Use logger.exception for all error logging.
2026-07-28 09:59:48 +05:45
sankalp
1ddde651dd
style: update panel CSS for Gtk.MenuButton
...
Add #global-menu reset rules, hide indicator, and transparent
:active state for global menu and panel buttons.
2026-07-28 09:59:42 +05:45
sankalp
efcf54a6d2
style: update dropdown CSS for native Gtk.Menu approach
...
Replace ID-based selectors with global menu/menuitem/separator
selectors matching fabric-shell's CSS strategy.
2026-07-28 09:59:38 +05:45
sankalp
8407c9685c
refactor: rewrite ModusDropdown to use native Gtk.Menu
...
Replace layer-shell AppletWindow-based dropdown with Gtk.Menu approach.
Adds hide signal for button state reset, dropdown_option factory,
append/clear methods, and popup_at_widget/popup aliases.
2026-07-28 09:59:31 +05:45
sankalp
7fdeb7beba
feat(globalmenu): update
2026-07-28 08:24:53 +05:45
sankalp
a989c72ad7
Merge pull request #42 from S4NKALP/feat/desktop
...
feat(desktop): now move widget with drag to any place of window
2026-07-27 18:23:38 +05:45
sankalp
d3ff8e78c2
docs(desktop): add partial input region and keybind compatibility notes
2026-07-27 17:17:45 +05:45
sankalp
21f1e73e6f
feat(desktop): hopes
2026-07-27 17:13:54 +05:45
sankalp
d7db929255
feat(desktop): updates
2026-07-27 17:11:35 +05:45
sankalp
bcd09a8030
feat(desktop): updates
2026-07-27 15:05:03 +05:45
sankalp
29f3519965
feat(desktop): updates
2026-07-27 14:27:13 +05:45
sankalp
fc7f2851c9
feat(desktop): improve widget edit mode UX and allow free dragging
2026-07-27 13:25:36 +05:45
sankalp
c2a443430a
feat(desktop): improve widget edit mode UX and allow free dragging
2026-07-27 12:23:31 +05:45
sankalp
e7277e658e
feat(desktop): improve widget edit mode UX and allow free dragging
...
# Conflicts:
# install.sh
2026-07-26 17:01:26 +05:45
sankalp
81a0198868
fix: fixed name
2026-07-26 17:00:28 +05:45
sankalp
d312d7b230
feat(desktop): now move widget with drag to any place of window
2026-07-26 17:00:11 +05:45
sankalp
37b262270c
feat(desktop): now move widget with drag to any place of window
2026-07-26 17:00:02 +05:45
sankalp
65db4f75fe
feat: updated requirements.txt
2026-07-26 15:52:51 +05:45
sankalp
eba5827189
feat: add sysauth service for Polkit authentication
...
- Add SysauthService with D-Bus agent registration
- Add AuthDialog with centered overlay password prompt
- Add password utils (PAM verification, keyrings.alt caching)
- Integrate sysauth into main app initialization
- Update WiFi dialog to use sysauth for password prompts
- Add sysauth.css with dialog styling
- Remove standalone WiFi password dialog
2026-07-26 15:28:09 +05:45
sankalp
7917eea54b
feat(panel): add notch toggle to config.toml
...
Matches existing pattern for global_menu, systray, etc.
Set notch = false to hide center notch from panel.
2026-07-26 13:48:34 +05:45
sankalp
e52ff7c04f
fix(osd/brightness): animate one block per key press
...
Track previous block count and move ±1 block per signal so bar
never jumps 2 blocks. First display jumps to actual value.
Reduce block count to 15.
2026-07-23 14:46:44 +05:45
sankalp
7882106be2
fix(osd/audio): snap values to block boundaries
...
Floor-snap volume to nearest block size so bar never shows full
early and blocks fill one at a time. Reduce block count to 15.
2026-07-23 14:46:21 +05:45
sankalp
903f11e8be
fix(brightness): lower min change threshold to 1
...
Allows OSD to react to smaller brightness changes instead of
requiring 2% before emitting.
2026-07-23 14:46:09 +05:45
sankalp
be5bc93024
fix(wifi): listen for device State changes to refresh active AP
2026-07-23 13:22:21 +05:45
sankalp
c136f69a09
fix(indicators): ignore Disconnected SSID from WiFi display
2026-07-23 13:22:15 +05:45
sankalp
0150084aa1
refactor(brightness-osd): switch to BlockProgressBar and fix initial percent fallback
2026-07-23 13:22:10 +05:45
sankalp
e326347b28
refactor(audio-osd): switch to BlockProgressBar widget
2026-07-23 13:22:02 +05:45