Commit Graph

15 Commits

Author SHA1 Message Date
daniil-berg eb8693e853 fix(desktop): dark ssh-askpass pinentry via hyprland env
QT_QPA_PLATFORMTHEME=gtk3 (what makes Qt apps read Adwaita-dark) reaches
the systemd-user env — so gpg-agent's signing pinentry is dark — but not
Hyprland's children, so the shell-spawned ssh askpass pinentry launched
without it and came up light. Export it in the compositor env so every
session child inherits it. Keeps pinentry-qt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:02:02 +02:00
daniil-berg 7b44fe8bf1 feat(desktop): dark fuzzel, curated launcher, dmenu power menu
Fuzzel ignores the portal color-scheme, so set its palette explicitly to
match waybar. Hide non-launcher `.desktop` entries (foot variants, mpv/
umpv, zathura, nvim) via `noDisplay` shadows. Replace the per-action
app-list power entries with a `$mod+Backspace` `fuzzel --dmenu` power
menu (Log Out / Reboot / Shut Down), colored Papirus icons.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 20:36:52 +02:00
daniil-berg b2fabbc764 feat(desktop): dark-mode Qt/GTK apps via portal color-scheme
Qt apps (keepassxc, pinentry-qt) rendered light while the GTK side was
Adwaita-dark. keepassxc's `auto` theme reads dark/light only from the
xdg-desktop-portal `color-scheme` value, which the gtk portal serves from
dconf `org/gnome/desktop/interface/color-scheme` — unset, so it reported
"no preference" and fell back to light. Set it to `prefer-dark`.

Also route Qt through the `gtk3` platform theme (`libqgtk3` ships in
qtbase, unlike an external `adwaita-qt` style plugin which nixpkgs' baked
`QT_PLUGIN_PATH` makes unreachable), and set the GTK prefer-dark flag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 16:26:38 +02:00
daniil-berg 5172ca4d18 feat(desktop): Print-key screenshots via grim/slurp
Bare Print grabs the whole screen to a timestamped PNG under
~/Pictures/Screenshots; $mod selects a region (slurp), SHIFT sends to the
clipboard instead. A mako toast confirms each capture. Adds grim/slurp and
enables xdg.userDirs for the Pictures target.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 14:09:51 +02:00
daniil-berg 46cebeb8fd fix(desktop): add GTK portal so file dialogs work
Home-manager's Hyprland module enables `xdg.portal` and pins the portal
search dir to the user profile with only the Hyprland backend, which has
no FileChooser implementation. File dialogs in Chromium/Electron apps
(signal, brave) fail with a DBus "No such interface
org.freedesktop.portal.FileChooser" error. Add `xdg-desktop-portal-gtk`
at the home-manager layer (system-level extraPortals aren't in the pinned
dir) and route FileChooser to it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 13:56:41 +02:00
daniil-berg f35037387c feat(desktop): run Chromium/Electron apps natively on Wayland
Set NIXOS_OZONE_WL=1 so nixpkgs' chromium/electron wrappers inject the
Ozone Wayland flags. This is a Wayland-only session, so the XWayland
fallback is pure downside (blurry fractional scaling, extra hop).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 13:56:05 +02:00
daniil-berg d43381727d fix(desktop): don't prompt on ssh presence/confirm askpass calls
Forced askpass routes the "Confirm user presence" touch notifications
(SSH_ASKPASS_PROMPT=none) through the helper too, which blindly asked for a
PIN — three dialogs per push. Only prompt for the real passphrase; let the
informational calls succeed silently (the FIDO touch is hardware-enforced).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 08:54:48 +02:00
daniil-berg 2cba23b804 fix(desktop): drive ssh askpass via pinentry-qt
`pkgs.ksshaskpass` no longer exists top-level (moved under kdePackages) and
would drag in ~1 GB of KDE Frameworks. Reuse the pinentry-qt already pulled
for GPG through a small SSH_ASKPASS wrapper instead: no new GUI toolkit, and
ssh PIN prompts match the commit-signing dialog.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 08:45:11 +02:00
daniil-berg 0d6b8ca13a feat(desktop): GUI askpass for ssh passphrase/PIN prompts
Add ksshaskpass and point SSH_ASKPASS at it, without forcing: a tty still
prompts inline, but a caller may set SSH_ASKPASS_REQUIRE to route the prompt
to the GUI (e.g. a headless context driving `git push`).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 08:32:19 +02:00
daniil-berg 238528f961 feat(desktop): provide Secret Service via gnome-keyring
Bare Wayland session ships no `org.freedesktop.secrets` provider, so
libsecret/qtkeychain apps can't persist credentials. Run gnome-keyring
and unlock it at the greetd login via PAM.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 08:18:59 +02:00
daniil-berg 213d2d0b5b feat(home): drag to move/resize windows with $mod+mouse
Reach oversized floating dialogs (GTK pickers) whose confirm button
lands off-screen on short displays.
2026-07-06 20:47:05 +02:00
daniil-berg 7437ed9dc0 feat(home): add libreoffice 2026-07-06 20:46:55 +02:00
daniil-berg 1e163fe025 feat(media): add mpv and imv media viewers
new `modules/media.nix`: mpv (with mpv-gallery-view) for video/audio, imv for
images. imv key binds run per-file actions — copy path via `wl-copy`, rotate/
flip via `magick`, delete, open in gimp, show `mediainfo`. wallpaper via awww
plus a `setbg` wrapper (symlink to ~/.local/share/bg + live push); awww-daemon
and boot restore wired as hyprland exec-once. add mako as the notification
daemon backing the notify-send toasts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 20:32:51 +02:00
daniil-berg 24b7930363 feat(git): add logs and logo log aliases 2026-07-05 15:50:12 +02:00
daniil-berg aee4d0aa15 chore: initial commit 2026-07-05 15:40:35 +02:00