Skip to content

zy v1.0.44

Choose a tag to compare

@iskandarputra iskandarputra released this 10 Jun 13:04

Official binary release for zy 1.0.44.

What's changed in 1.0.44

Added

  • customize → Show / hide pills gains bulk toggles. Press a to show every pill or d to hide every pill in one keystroke, instead of toggling 19 sections one at a time. The footer and preview pane advertise the keys.

  • New merged-segments prompt preset — the default look as one connected ribbon. prompt-preset merged-segments installs a version of the default prompt where the background pills (directory, git, languages, duration) join into a single Powerline ribbon via gradient seams. The interesting part is that it stays clean off-project: each pill is wrapped in a (…) conditional, so an absent module (no git repo, no Python, …) drops the whole pill including its seam, with no empty colored stub left behind, while the ribbon reconnects across the gap. Fg-only segments (git metrics, jobs) sit after the ribbon so they never punch a hole in it. Nerd Font required; like every preset it backs up your existing config first.

  • pill_merge = true joins your prompt pills into one connected chain. Set it at the TOML root and every run of adjacent colored pills renders as a continuous Powerline ribbon (directory git python) instead of separate floating pills, with each seam colored to flow from the previous pill into the next. The seam glyph follows pill_shape (so slant gives slant seams, not just arrows), defaulting to the solid arrow. It's the one-key version of hand-writing fg:prev_bg cap glyphs between every pill, and renders byte-for-byte the same. Toggle it live in customize under "Merge pills (connected chain)" — the preview shows the merged look. It acts on a top-level bare-pill format like [ $mod ](bg:..) (e.g. prompt-preset pastel-powerline); the shipped default prompt bakes caps inside each module, so it's a no-op there. Don't combine it with hand-written caps or they double up.

  • ast is implemented (was a "not implemented in zy" stub): it parses a pipeline string with zy's own lexer and recursive-descent parser and dumps zy's AST, the same tree the executor walks. ast 'hello' returns a {block, error} record where block is an indented tree; --json/-j returns the AST as JSON (--minify/-m for compact); --flatten/-f returns a {content, shape, span} table, one row per lexer token with its highlight shape (shape_internalcall, shape_pipe, shape_string, shape_flag, …) and byte span, matching nu's flatten view (ast "'hello'" --flatten gives shape_string at span 0..7). It dumps zy's tree rather than nu's Rust AST types, and the flatten view reports what zy's shell tokenizer actually sees (e.g. a top-level > lexes as shape_redirection).

Changed

  • The customize "Merge pills" toggle now actually merges your prompt. pill_merge is a runtime flag that only rewires a top-level bare-pill format; the default prompt bakes its caps inside each module, so enabling the toggle there used to do nothing to the live prompt (only the preview changed) and read as a bug. Now, on that per-module layout, turning the toggle on switches your prompt to the connected merged-segments ribbon while keeping your theme and pill shape (its colors already match the default), and saves a one-toggle restore point; turning it off restores your previous prompt exactly. On a format that already has top-level pills it still just sets pill_merge = true.
  • Top-level (…) conditional groups now collapse when empty, like they already do inside a module. Previously a (…) in the top-level format always rendered its contents; now it disappears when none of the $module variables inside it produce output, matching the documented (and starship) conditional semantic. This is what makes a stub-free merged ribbon possible (an absent pill drops its seam too). No shipped config used a top-level (…), so existing prompts are unaffected; if you relied on a top-level (…) rendering unconditionally, drop the parentheses.
  • make test is now the fast core (C unit tests + validation + security, ~1 minute) for a quick edit→test loop. The slow, heavy suites (shell integration, nu-parity compat, PTY end-to-end) are opt-in via make test-full (or ./tests/run_tests.sh --full), which is what CI and make test-all now run. Sanitizer runs and --filter still imply the full set so they never silently narrow coverage. The plain-run PTY timing scale defaults to 2x for explorer-render head-room.
  • The unit-test build is much faster after a source edit. About 34 unit tests link the whole object set, and each used to run its own ~20-second whole-program LTO link (the objects are slim LTO, so every link redid the codegen). The runner now does that codegen once into a single shared object blob and links each test against it in well under a second, so a cold make test dropped from ~230s to ~50s and make test-full from ~330s to ~140s, with no change to the shipped binary. Sanitizer runs keep the per-test link; pass --no-blob to fall back to the old path.

Verify your download

curl -LO https://github.com/iskandarputra/zyshell/releases/download/v1.0.44/zy_1.0.44_amd64.deb
curl -LO https://github.com/iskandarputra/zyshell/releases/download/v1.0.44/SHA256SUMS
curl -LO https://github.com/iskandarputra/zyshell/releases/download/v1.0.44/SHA256SUMS.minisig
curl -LO https://github.com/iskandarputra/zyshell/releases/download/v1.0.44/zy-release.pub

minisign -Vm SHA256SUMS -p zy-release.pub      # confirms maintainer signature
sha256sum -c SHA256SUMS --ignore-missing       # confirms the .deb hash matches

Full signing policy: docs/ops/RELEASE_SIGNING.md

VirusTotal scan

This release was uploaded to VirusTotal at publish time. Click through to see the live verdict from 65+ AV engines:

https://www.virustotal.com/gui/file/388ed73080b550e29419703eca357bafb5ea39e1998d9025910d4a1b68667dd3/detection

(Scans run within ~5 minutes of upload. If the page shows "Item not found", wait a moment and refresh.)

Try without installing

docker run --rm -it ghcr.io/iskandarputra/zyshell:1.0.44

Install (Debian / Ubuntu)

Download zy_1.0.44_amd64.deb from the assets below, then:

sudo dpkg -i zy_1.0.44_amd64.deb
sudo apt-get install -f