Skip to content

Releases: junoddev/gsctl

0.1.2 - 2026-10-11

Choose a tag to compare

@github-actions github-actions released this 11 Oct 11:27

Release Notes

Fixed

  • Piping output into a reader that stops early (gsctl search … | head)
    no longer panics with "failed printing to stdout: Broken pipe".
  • A set or reset that changes nothing isn't journaled any more, so it no
    longer takes the next revert last from the real change before it.

Added

  • tests/live/: a live regression plan and suite (96 cases) for a real GNOME
    session, run before each release.

Tested

  • Live regression suite (tests/live): 96 of 96 passed on a Fedora 44 Workstation live session (GNOME 50). Against 0.1.1 it found the two bugs fixed here.
  • CI: fmt, clippy and the test suite on Ubuntu 24.04, Fedora 44 (GLib 2.88) and Arch (GLib 2.90); the tests on Rust 1.92 on Ubuntu 22.04 (GLib 2.72).

Install gsctl 0.1.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/junoddev/gsctl/releases/download/v0.1.2/gsctl-installer.sh | sh

Download gsctl 0.1.2

File Platform Checksum
gsctl-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
gsctl-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

0.1.1 - 2026-10-11

Choose a tag to compare

@github-actions github-actions released this 11 Oct 10:10

Release Notes

Fixed

  • ext list and doctor treat a plain GNOME session (XDG_CURRENT_DESKTOP=GNOME,
    as on Fedora and Arch) as the user session mode. gsctl used to pick the
    only installed mode file instead, which is classic wherever GNOME Classic
    is installed, and reported Classic's extensions as enabled.

  • Extension schemas whose id isn't spelled org.gnome.shell.extensions.*,
    such as GSConnect's org.gnome.Shell.Extensions.GSConnect, or which use
    their own id at a path under /org/gnome/shell/extensions/, are now found
    by search, schema and get.

  • apply follows a symlinked state file when it points to a regular file you
    own, so dotfiles linked into place by GNU Stow work again. Symlinks to
    other users' files, FIFOs and oversized files are still refused.

  • revert of a keys add (and any write that only removes commands, such
    as clearing a shortcut's command) no longer needs --yes, as the README
    always showed. Reverts that add or restore a command, re-enable an
    extension, or touch the other guarded keys still need it.

Added

  • doctor warns when GNOME's desktop schemas (gsettings-desktop-schemas)
    aren't installed, instead of reporting that everything is fine.

Install gsctl 0.1.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/junoddev/gsctl/releases/download/v0.1.1/gsctl-installer.sh | sh

Download gsctl 0.1.1

File Platform Checksum
gsctl-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
gsctl-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

0.1.0 - 2026-10-10

Choose a tag to compare

@github-actions github-actions released this 10 Oct 19:11

Release Notes

First public release.

Added

  • search: ranked search over schema ids, key names, summaries and
    descriptions, tuned for agent phrasing (plurals, partial matches), with hits
    that carry type, value and summary.
  • schema: a key's type, default, current value, allowed values, description
    and writability in one call; a schema's keys; or every schema.
  • get, set, reset: set checks the type and range before writing, takes
    JSON, GVariant text or a bare word, has --dry-run, and reads every write
    back so a silently dropped write fails. Keys can be named as SCHEMA KEY,
    schema.key or a dconf path.
  • changed: the keys that differ from their defaults, without app state
    unless --include-state.
  • A journal of every write with its previous value; history lists it and
    revert <id|last> undoes an entry or a whole batch, like an undo stack.
  • export / apply / areas: per-area JSON state files for dotfiles.
    apply validates everything before writing anything, writes one revertible
    batch, and --prune resets keys the files no longer list. The remote
    area is left out of exports by default.
  • keys find|list|conflicts|add|remove: keyboard shortcuts across every
    keybinding schema, extension bindings and custom bindings; add refuses an
    accelerator that's taken unless --force, and writes as one batch.
  • ext list|info|enable|disable: extensions, their enabled state by GNOME
    Shell's rules (including the session mode's), and their settings, with
    extension schemas visible without --schemadir.
  • watch: changes as NDJSON or text, with --count and --timeout.
  • doctor: checks the session bus, dconf and sandboxing before anything else.
  • JSON on stdout and JSON errors on stderr with stable codes, exit statuses,
    hints and did-you-mean suggestions; --format text (or GSCTL_FORMAT) for
    people, with control characters escaped. gsctl commands (or
    gsctl help --json) lists every command, flag, error code and exit code.
  • completions bash|zsh|fish and man.
  • An agent skill, skills/gnome-settings/SKILL.md, for the search, schema,
    dry run, set and verify loop.

Security

  • Guarded keys need --yes: remote desktop, input sources, the lock screen
    and idle settings, accessibility, keyboard shortcuts, extension lists,
    default-application and extension command keys that run code, proxy
    settings, and keyboard repeat below a usable floor. Guards apply to the
    dconf location, not just the schema id, and --dry-run reports
    requires_yes.
  • Without a session bus or dconf-service, writes fail with no_session
    instead of appearing to succeed.
  • Secret values (proxy passwords) are redacted in output as
    {"redacted": true} unless --show-secrets, and never exported or
    journaled.
  • The journal and exported files are private (0600 files, 0700 directories,
    tightened if found loose) and never written through symlinks; apply reads
    only regular files, not through symlinks, with a size cap.
  • Extension schemas can't shadow system schemas.
  • SECURITY.md: the trust model, a recommended Claude Code permission setup,
    scope, and how to report a vulnerability privately.

Install gsctl 0.1.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/junoddev/gsctl/releases/download/v0.1.0/gsctl-installer.sh | sh

Download gsctl 0.1.0

File Platform Checksum
gsctl-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
gsctl-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum