aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-16 09:40:06 +0200
committerDanilo M. <danix@danix.xyz>2026-10-16 09:40:06 +0200
commite9b8621d4ef7da73284b16f0c89a7d6628e42586 (patch)
treec108d4c14b84d1382d754014c919c5164fc64462
parent4d0e4f1266d6aeed4d0bfea43781fefe06e6f923 (diff)
downloadquickshell-e9b8621d4ef7da73284b16f0c89a7d6628e42586.tar.gz
quickshell-e9b8621d4ef7da73284b16f0c89a7d6628e42586.zip
docs(spec): user details picks the git signing key
The git sync was meant to include user.signingkey and the spec had dropped it, claiming nothing reads a GPG key. git does. The page offers the secret keys gpg holds, plus None, and writes the fingerprint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--docs/superpowers/specs/2026-10-16-user-details-design.md20
1 files changed, 13 insertions, 7 deletions
diff --git a/docs/superpowers/specs/2026-10-16-user-details-design.md b/docs/superpowers/specs/2026-10-16-user-details-design.md
index 93aa170..6c71440 100644
--- a/docs/superpowers/specs/2026-10-16-user-details-design.md
+++ b/docs/superpowers/specs/2026-10-16-user-details-design.md
@@ -18,7 +18,8 @@ Measured on this machine:
user data (`givenname`). Name only, never email.
- **`~/.config/emaildefaults`** (KEMailSettings, `[PROFILE_Default]`):
`FullName`, `EmailAddress`. Read by KDE mail apps.
-- **git** global config (`~/.gitconfig`): `user.name`, `user.email`.
+- **git** global config (`~/.gitconfig`): `user.name`, `user.email`,
+ `user.signingkey`.
Polkit's `org.freedesktop.accounts.change-own-user-data` is implicit `yes` for
any, inactive and active sessions, so no write prompts for a password.
@@ -41,7 +42,8 @@ as on every page.
- `UserPage.qml`: the form. Avatar (click to choose a file with
`QtQuick.Dialogs.FileDialog`, as the KDE Connect module already does; shown
cropped to a circle, no cropping tool), name, email, language (a combo from
- `locale -a`, UTF-8 entries only), location (free text), and a line previewing
+ `locale -a`, UTF-8 entries only), location (free text), signing key (a combo
+ of the secret keys gpg holds, plus None), and a line previewing
what git will carry: `git: Jane D. <jane@example.org>`. A Save button sends
only the fields that changed.
- `userctl`: bash, the only writer, like `statusctl`.
@@ -51,7 +53,8 @@ opens.
## `userctl`
- userctl get # key=value lines: name, email, avatar, language, location
+ userctl get # key=value lines: name, email, avatar, language, location, signingkey
+ userctl keys # fpr<TAB>uid per secret key, from gpg --list-secret-keys --with-colons
userctl set <key> <val> # writes one field everywhere it lives
| Field | Writes |
@@ -61,10 +64,12 @@ opens.
| avatar | AccountsService `SetIconFile` (the daemon copies the file in) |
| language | AccountsService `SetLanguage` |
| location | AccountsService `SetLocation` |
+| signingkey | git `user.signingkey` (the fingerprint); None unsets it |
AccountsService is called with `busctl --system`, emaildefaults with
`kwriteconfig6 --file emaildefaults --group PROFILE_Default`, git with
-`git config --global`.
+`git config --global`. Keys on a smartcard are listed as stubs by gpg and
+appear like any other; `commit.gpgsign` is not touched.
**Git name shortening.** The last whitespace-separated word becomes its first
character and a dot: `Jane Doèr` becomes `Jane D.`. A single-word name
@@ -82,9 +87,10 @@ in `userctl`. No settings framework.
## Testing
-`test-userctl.sh`: stub `busctl`, `kwriteconfig6` and `git` on `PATH` that log
+`test-userctl.sh`: stub `busctl`, `kwriteconfig6`, `git` and `gpg` on `PATH` that log
their arguments. Checks the shortening (two words, three words, one word,
-accented initial), that each field reaches exactly its stores, and that a
+accented initial), the `keys` parsing of a colon listing with two keys, that
+an empty signing key unsets it, that each field reaches exactly its stores, and that a
failing stub makes `set` exit non-zero. It never calls the real
AccountsService or touches the real git config.
@@ -97,5 +103,5 @@ AccountsService or touches the real git config.
AccountsService's `SetPassword` needs admin rights and a pre-hashed value.
Changing it also leaves the gnome-keyring unlocked at login on the old
password, since the `passwd` PAM stack does not re-key it.
-- No vCard, no social links, no GPG key: nothing on the desktop reads them.
+- No vCard, no social links: nothing on the desktop reads them.
The field list is where they would go.