diff options
Diffstat (limited to 'docs/superpowers')
| -rw-r--r-- | docs/superpowers/specs/2026-10-16-user-details-design.md | 20 |
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. |
