Commit Graph
4904 Commits
Author SHA1 Message Date
dms-ci[bot] 65dbb9fc58 nix: update vendorHash for go.mod changes 2026-09-25 19:03:39 +00:00
bbedward cc45f8b445 settings: add reusable FAB component and use it in more places 2026-09-25 15:02:45 -04:00
Marcus Ramberg 8da739a3ea feat(cellular): expose signal strength and conn type (#3533)
network manager doesn't expose this so talk to modem manager over dbus
2026-09-25 15:02:23 -04:00
bbedward 3b529b3a97 lyrics: add kugou and YT music providers 2026-09-25 14:02:27 -04:00
LemonMon 60342b7416 fix: stabilize tray item key to prevent position jumps on property changes (#3386)
* fix: keep tray order stable when tooltipTitle changes dynamically

Revert the earlier simplistic key approach: keep getTrayItemKey()
unchanged (id::tooltipTitle) so duplicate-id disambiguation (#1542)
is preserved and persisted id::tooltipTitle entries keep matching.

Instead make persisted-key lookups tolerant of dynamic tooltipTitle:
resolveOrderIndex() in sortByPreferredOrder() does exact match first,
falling back to prefix matching an id::* entry only when the id has a
single instance. findSavedTrayKey()/isTrayIdHidden() replace direct
SessionData.isHiddenTrayId() calls and showTrayId() now receives the
actual saved key.

Prefix fallback is gated by trayItemCountForId() to single-instance
ids only, so multiple items sharing an id always match exactly and
hiding/ordering one never affects the others.

* fix: bail on ambiguous saved tray keys in fallback

* tray: use occurrence index as stable key, add one-time session migration

* tray: pin stable key per item instance so it never flips when siblings come and go

* tray: assign unique per-id sequential keys to avoid collision after sibling exit

* tray: reuse free key slots so a restarted singleton keeps its plain id
2026-09-25 11:10:40 -04:00
Vladimir KosteleiandClaude Opus 5 d7074a53eb fix: fingerprint lid open (#3448)
* lock: keep the fingerprint reader usable across suspend

The reader stopped responding after the lid was closed and opened, after a long
idle period, and after suspend.

The shell held a PAM session for as long as the screen was locked, so a suspend
always landed on a running verify. fprintd then suspends the device under the
verify, pam_fprintd's ReleaseDevice fails with "device is still busy", and the
claim is never released, so every later Claim fails until fprintd restarts. The
reader is now released when the monitors blank and armed again when they come
back, so a suspend has nothing left to wedge.

The PAM profile drops to max-tries=1 and sets an explicit timeout. pam_fprintd
only counts a wrong finger, so one finished session is now one wrong scan and
maxFprintTries means the number of scans it names rather than five times that.
A timeout expiry arrives as PamResult.Error, exactly like a device fault, so a
session that ran at least as long as the configured timeout is treated as a
planned renewal instead of spending the error budget and painting an error.

A suspend that still lands while the screen is on wedges as before. Recovery now
waits out fprintd's idle timeout instead of climbing to it, which brings the
reader back about 37 seconds after resume instead of about 98.

SessionService gains lidOpened from UPower, because logind can ignore the lid on
AC and resume alone is not enough. The lock PAM state machine is fixed alongside:
PamResult.Failed was dropped, a pending retry outlived the contexts that owned
it, and an availability check reset the wrong-scan counter.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Q5LQHivuucTLXwLkvZMfcn

* lock: time the fingerprint session from the verify, not the claim

pam_fprintd's timeout runs from the verify, but the session age was measured
from start(), which folds the claim into it. A slow claim plus a verify that
failed before its own timeout could add up past the timeout and be taken for a
planned renewal, skipping the backoff. A session that never reached a verify had
the same problem.

The age now starts at the message pam_fprintd sends when the verify begins, so a
session that never verified can never qualify as an expiry, and a slow claim no
longer ages a fault. The message is translated and quickshell clears it before
completed, so only its timing is used, never its text.

That message arrives after pam_fprintd has already armed its deadline, because
VerifyStart is asynchronous, so the age read here runs short of the real timeout
and a slack makes it up. The bias is deliberate. A fault misread as a timeout
costs one extra retry, while a timeout misread as a fault parks the reader behind
a backoff that grows to a minute, which on an idle lock screen would leave it
unusable most of the time.

Also corrects the comment that claimed a timeout is reported without a message.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Q5LQHivuucTLXwLkvZMfcn

---------

Co-authored-by: Claude Opus 5 <[email protected]>
2026-09-25 11:02:51 -04:00
Nat Fletcher 7c2140dd60 theme: add toggle to skip matugen at startup when nothing changed (#3270) 2026-09-25 10:56:20 -04:00
bbedward 3c14a41624 cc: remove slider wheel opt out from details pages 2026-09-25 10:50:31 -04:00
dms-ci[bot] b1b6a3d686 nix: sync flake.lock to dank-qml-common submodule 2026-09-25 14:28:05 +00:00
bbedward 361e9da26a matugen: use a contrasting color for vscode light theme constants
fixes #3566
2026-09-25 10:27:39 -04:00
bbedward 890166e384 cc: apply some non-compositor blur to details pages based on settings
Can't do real compositor blur since they arent real subsurfaces
2026-09-25 10:27:39 -04:00
bbedward 6cb8a3b67a launcher: restore focus ring to spotlight and respect global setting 2026-09-25 10:27:39 -04:00
Tássio Guerreiro Antunes Virgínio 10e8086874 trayrecovery: recover SNI items orphaned at first boot (#3570)
Autostart apps (e.g. KeePassXC) that call RegisterStatusNotifierItem
before the watcher owns its name fail silently and never re-register.
Until now the recovery scan only ran on suspend/resume or watcher
owner change, so first-boot orphans were never rescued.

Schedule a one-time delayed scan when the watcher first appears.
recoverTrayItems() already deduplicates via registeredConnIDs, so this
cannot double-register apps that registered normally.
2026-09-25 09:36:01 -04:00
bbedward 9a1c622492 blur: clip regions to the window so hyprland stops blurring whole surfaces
fixes #3480
2026-09-24 22:00:28 -04:00
bbedward 82fd310732 lyrics: restore loaded lyrics when the media tab is recreated
fixes #3563
2026-09-24 21:25:12 -04:00
bbedward ec6407fb1e cc: drop the detail dialog scroller so pages scroll to their end
fixes #3562
2026-09-24 21:03:26 -04:00
bbedward e76d989656 hyprland: use focusgrab in overview
fixes #3486
2026-09-24 20:09:33 -04:00
bbedward 7975136c10 popout: keep hover popouts open after a transient menu closes
fixes #3492
2026-09-24 18:13:20 -04:00
bbedward 8508121f4a bar: open hidden and disabled widgets over ipc
fixes #3550
2026-09-24 14:57:18 -04:00
bbedward b97a8828eb launcher: keep spotlight open when the category dropdown opens on hyprland
fixes #3556
2026-09-24 13:02:52 -04:00
bbedward ace13d7c18 popout: never round the body below its content height
fixes #3558
2026-09-24 12:07:40 -04:00
bbedward 4554c9c894 cc: show detail pages as a dialog style instead of page 2026-09-24 11:33:35 -04:00
bbedward 4949c2fbbe settings: fix some inconsistencies
dash: no header for disabled tabs
2026-09-24 10:00:25 -04:00
dms-ci[bot] 1c61c26d46 nix: sync flake.lock to dank-qml-common submodule 2026-09-24 01:51:11 +00:00
bbedward e3b5cde72e update qml-common 2026-09-23 21:50:14 -04:00
dms-ci[bot] d750c173ba nix: update vendorHash for go.mod changes 2026-09-24 01:28:14 +00:00
bbedward 6e9bbc15a6 files: swith to diles shared components 2026-09-23 21:27:14 -04:00
bbedward 878aa69fac lyrics: keep following through same-song refreshes 2026-09-23 20:16:42 -04:00
bbedward 145b9bbc18 launcher: even out spacing 2026-09-23 18:13:37 -04:00
bbedward c5029444ff lyrics: fix fade 2026-09-23 16:41:41 -04:00
bbedward 4b926be08f launcher: design adjustments
shell: cut animation frame cost and cold open stalls
dock: restore 1.6-like spacing behaviors

fixes #3537
2026-09-23 16:35:18 -04:00
bbedward 4d31c84188 bump qml-common 2026-09-23 14:39:18 -04:00
bbedward eb0b56e578 i18n: sync 2026-09-23 14:18:09 -04:00
Thomas KrollandClaude Opus 5.5 eb0cb80884 fix(workspace): ignore duplicate submit in rename modal (#3549)
Pressing Enter in the name field fires both the text field's accepted
signal and the dialog's own Return handler, so submitAndClose() runs
twice. The first call renames and hides the window, which clears the
field; the second call then renames to an empty string and unsets the
workspace name. The OK button only fires once, so it was unaffected.

Ignore submits once the window is hidden.


Claude-Session: https://claude.ai/code/session_01791wgvD8EqJaAeURYXYbT5

Signed-off-by: Thomas Kroll <[email protected]>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-23 14:05:16 -04:00
dms-ci[bot] 7e8c556ab6 nix: sync flake.lock to dank-qml-common submodule 2026-09-23 16:59:34 +00:00
bbedward ccd6da3b43 media: add loading indicator between lyrics changes, add no-smoothing
option, adjust surface colors and theme tokens
2026-09-23 12:58:08 -04:00
bbedward f97e7f7fe9 audio: drop input ports and hidden sinks from switchable outputs 2026-09-23 11:41:35 -04:00
bbedward 6ab3755405 bar: keep the full-width center fixed and cap the focused app before it 2026-09-23 11:00:27 -04:00
bbedward fb973951e3 screenshot: configure surfaces before requesting screen captures 2026-09-23 11:00:27 -04:00
f22ad2c333 feat(theme): inject external color palettes into matugen (#3509)
* matugen: support multiple injected palettes with settings ui

Run user-configured external commands on each theme build and merge their
JSON output into matugen's import data under a namespace, so templates can
reference e.g. {{mypalette.color0}} alongside dank16. Multiple palettes are
supported, each under its own namespace. Command output may be nested JSON
(pywal/wallust shape). A settings page manages the list; a legacy
single-object config file is still read.

* settings: map PaletteInjectTab in search index

* matugen: bound palette-inject command with timeout and WaitDelay

* fix palette column spacing (review suggested

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* remove wallpaper kind guard (review suggestion)

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* fixup! remove wallpaper kind guard (review suggestion)

---------

Co-authored-by: bbedward <[email protected]>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
2026-09-23 10:26:47 -04:00
bbedward 4bdfcfc0cf settings: adjust window rules and clock options 2026-09-23 09:42:28 -04:00
Huỳnh Thiện Lộc 9d1884fb19 feat(keybinds): redesign cheatsheet with category navigation (#3534)
* feat(keybinds): redesign cheatsheet with category navigation, M3 styling, and click-to-execute

- Add category sidebar with Material Symbols icons and badge counts
- Move search field to top of sidebar with Ctrl+F shortcut
- Implement 2-column masonry layout for keybind items
- Deduplicate duplicate actions and stack multi-key combos vertically
- Collapse consecutive workspace keybindings (1-9) into range entries
- Add media & hardware icons for volume, mic, brightness, and PrtSc keycaps
- Preserve Niri window filter properties and distinguish same-app Alt-Tab binds
- Enable click-to-execute for keybind actions across supported compositors

* fix(keybinds): preserve niri action properties and disable execution on range rows

* fix(keybinds): convert niri action properties to CLI flags and disable IPC execution for window switcher binds

* fix(keybinds): pass skip-confirmation as boolean switch in niri executeAction

* fix(keybinds): handle niri spawn-sh actions in executeAction
2026-09-23 09:09:28 -04:00
purian23 80060ee925 fix(debian): obs preinstall & ID checks for debian testing builds 2026-09-22 23:29:34 -04:00
bbedward c66ca00062 settings/bar: move name back to its own pill 2026-09-22 22:24:45 -04:00
bbedward 62098c8add rename test 2026-09-22 22:14:35 -04:00
bbedward 4cb2be5fa4 bar: adjust settings UI 2026-09-22 22:12:34 -04:00
purian23 edf936973f fix(pointer): update mouse pointer on bar widgets 2026-09-22 21:44:52 -04:00
purian23 a96dea2019 settings: re-org & unify bar sections into updated sub-sections 2026-09-22 20:41:24 -04:00
purian23 7ba4bccf6c feat(dankdot): operation DMS freedom & island anywere modes
- A new minimal and fun island instance (dot) that gets out of your way to be tossed anywhere on your screen
- Dankisland freedom is here too! It can now also be used in anywhere mode and used horizontally or vertically as you see fit!
2026-09-22 20:38:45 -04:00
bbedward 860542314e settings: re-org launcehr tab built-in plugins, make desktop widgets
sub-pages to match the pattern of bar widgets
2026-09-22 18:11:12 -04:00