diff --git a/Makefile b/Makefile index 1ed146f..2ff9617 100644 --- a/Makefile +++ b/Makefile @@ -188,17 +188,17 @@ build_linux: build_linux_binary .PHONY: build_deb build_deb: build_linux_binary @echo "Building deb $(LINUX_ARCH) package..." - ARCH=$(LINUX_ARCH) VERSION=$(TAG_NAME:v%=%) nfpm package --packager deb --target ./dist/${APP_NAME_LOWERCASE}-$(TAG_NAME)-$(LINUX_ARCH).deb + ARCH=$(LINUX_ARCH) VERSION=$(TAG_NAME:v%=%) nfpm package --config assets/nfpm.yaml --packager deb --target ./dist/${APP_NAME_LOWERCASE}-$(TAG_NAME)-$(LINUX_ARCH).deb .PHONY: build_rpm build_rpm: build_linux_binary @echo "Building rpm $(LINUX_ARCH) package..." - ARCH=$(LINUX_ARCH) VERSION=$(TAG_NAME:v%=%) nfpm package --packager rpm --target ./dist/${APP_NAME_LOWERCASE}-$(TAG_NAME)-$(LINUX_ARCH).rpm + ARCH=$(LINUX_ARCH) VERSION=$(TAG_NAME:v%=%) nfpm package --config assets/nfpm.yaml --packager rpm --target ./dist/${APP_NAME_LOWERCASE}-$(TAG_NAME)-$(LINUX_ARCH).rpm .PHONY: build_archlinux build_archlinux: build_linux_binary @echo "Building Arch Linux $(LINUX_ARCH) package..." - ARCH=$(LINUX_ARCH) VERSION=$(TAG_NAME:v%=%) nfpm package --packager archlinux --target ./dist/${APP_NAME_LOWERCASE}-$(TAG_NAME)-$(LINUX_ARCH).pkg.tar.zst + ARCH=$(LINUX_ARCH) VERSION=$(TAG_NAME:v%=%) nfpm package --config assets/nfpm.yaml --packager archlinux --target ./dist/${APP_NAME_LOWERCASE}-$(TAG_NAME)-$(LINUX_ARCH).pkg.tar.zst .PHONY: clean_linux clean_linux: diff --git a/README.md b/README.md index 223bb40..8a8275d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,38 @@ +

+ Debrief +

+ +[![License](https://img.shields.io/github/license/debrief-dev/debrief)](LICENSE) +[![Go](https://img.shields.io/github/go-mod/go-version/debrief-dev/debrief)](https://go.dev/) + # Debrief -Hyper-charged reverse search +A hyper-charged reverse search: browse shell history in a GUI app available system-wide via Ctrl+Shift+H. + +Available on macOS, Windows, and Linux. + +* No more pressing Ctrl+R 100 times — navigate visually. +* Browse history as a list, explore as a tree, or see your most-used commands. +* One shortcut to summon it from anywhere in the system. +* Support bash, zsh, powershell. +* Find commands even with typos - fuzzy search support. +* Lightweight, offline, open source - no telemetry, no internet required. + +

+ Debrief Demo +

+ +## Download + +| Platform | AMD64 | ARM64 | +|----------|-------|-------| +| **macOS** | [DMG (amd64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-macos-1.0.0-amd64.dmg) | [DMG (arm64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-macos-1.0.0-arm64.dmg) | +| **Windows (installer)** | [MSI (amd64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-windows-1.0.0-amd64.msi) | [MSI (arm64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-windows-1.0.0-arm64.msi) | +| **Windows (portable)** | [EXE (amd64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-windows-1.0.0-amd64.exe) | [EXE (arm64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-windows-1.0.0-arm64.exe) | +| **Ubuntu / Debian** | [DEB (amd64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-amd64.deb) | [DEB (arm64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-arm64.deb) | +| **Fedora / RHEL** | [RPM (amd64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-amd64.rpm) | [RPM (arm64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-arm64.rpm) | +| **Arch Linux** | [PKG (amd64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-amd64.pkg.tar.zst) | [PKG (arm64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-arm64.pkg.tar.zst) | +| **Any Linux** | [tar.xz (amd64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-amd64.tar.xz) | [tar.xz (arm64)](https://github.com/debrief-dev/debrief/releases/download/1.0.0/debrief-1.0.0-arm64.tar.xz) | ## Development @@ -63,4 +95,6 @@ Copyright © 2026 bosiakov Licensed under MIT (see [LICENSE](LICENSE)). -The font `ui/font/FiraCode-Regular.ttf` is licensed under the OFL-1.1. See [ui/font/LICENSE](ui/font/LICENSE) for details. \ No newline at end of file +The font `ui/font/FiraCode-Regular.ttf` is licensed under the OFL-1.1. See [ui/font/LICENSE](ui/font/LICENSE) for details. + +All fonts are legally licensed to Yauheni Basiakou via MyFonts. \ No newline at end of file diff --git a/appicon.png b/appicon.png deleted file mode 100644 index 7aee145..0000000 Binary files a/appicon.png and /dev/null differ diff --git a/assets/debrief-logo.png b/assets/debrief-logo.png new file mode 100644 index 0000000..4d47e94 Binary files /dev/null and b/assets/debrief-logo.png differ diff --git a/assets/demo.gif b/assets/demo.gif new file mode 100644 index 0000000..94a9d79 Binary files /dev/null and b/assets/demo.gif differ diff --git a/assets/demo.webm b/assets/demo.webm new file mode 100644 index 0000000..878b300 Binary files /dev/null and b/assets/demo.webm differ diff --git a/assets/make_demo.sh b/assets/make_demo.sh new file mode 100755 index 0000000..4fa43b1 --- /dev/null +++ b/assets/make_demo.sh @@ -0,0 +1,64 @@ +#!/bin/bash +set -euo pipefail + +SUPERCOMPRESS=false +if [ "${1:-}" = "--supercompress" ]; then + SUPERCOMPRESS=true + shift +fi + +if [ $# -lt 1 ]; then + echo "Usage: $0 [--supercompress] [video3 ...]" + exit 1 +fi + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# Output +GIF_OUT="$SCRIPT_DIR/demo.gif" +WEBM_OUT="$SCRIPT_DIR/demo.webm" + +# Crop to app window (detected from frame analysis) +CROP="crop=1618:1218:10:2" + +if [ "$SUPERCOMPRESS" = true ]; then + GIF_SCALE="" + GIF_LOSSY=100 +else + GIF_SCALE="" + GIF_LOSSY=80 +fi + +# Create concat list from arguments +CONCAT_LIST=$(mktemp /tmp/concat_XXXXXX.txt) +PALETTE=$(mktemp /tmp/palette_XXXXXX.png) +trap "rm -f $CONCAT_LIST $PALETTE" EXIT + +for f in "$@"; do + echo "file '$(cd "$(dirname "$f")" && pwd)/$(basename "$f")'" >> "$CONCAT_LIST" +done + +echo "==> Creating WebM..." +ffmpeg -y -f concat -safe 0 -i "$CONCAT_LIST" \ + -an \ + -vf "$CROP,scale=809:609" \ + -c:v libvpx-vp9 -crf 30 -b:v 0 \ + "$WEBM_OUT" + +echo "==> Creating GIF (palette pass)..." +ffmpeg -y -f concat -safe 0 -i "$CONCAT_LIST" \ + -an \ + -vf "${CROP}${GIF_SCALE},fps=20,palettegen=stats_mode=full:max_colors=128" \ + "$PALETTE" + +echo "==> Creating GIF (render pass)..." +ffmpeg -y -f concat -safe 0 -i "$CONCAT_LIST" -i "$PALETTE" \ + -an \ + -filter_complex "[0:v]${CROP}${GIF_SCALE},fps=20[v];[v][1:v]paletteuse=dither=floyd_steinberg" \ + "$GIF_OUT" + +echo "==> Optimizing GIF with gifsicle..." +gifsicle -O3 --lossy=$GIF_LOSSY "$GIF_OUT" -o "$GIF_OUT" + +echo "==> Done!" +ls -lh "$GIF_OUT" "$WEBM_OUT" diff --git a/nfpm.yaml b/assets/nfpm.yaml similarity index 100% rename from nfpm.yaml rename to assets/nfpm.yaml diff --git a/assets/set_version.sh b/assets/set_version.sh new file mode 100755 index 0000000..90fdb1e --- /dev/null +++ b/assets/set_version.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -euo pipefail + +if [ $# -ne 1 ]; then + echo "Usage: $0 " + echo "Example: $0 0.1.0" + exit 1 +fi + +VERSION="$1" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +README="$SCRIPT_DIR/../README.md" + +# Update version in URL path: releases/download// -> releases/download// +sed -i '' "s|releases/download/[^/]*/|releases/download/${VERSION}/|g" "$README" + +# Update version in filenames: debrief--- -> debrief--- +sed -i '' "s|debrief-\([a-z]*\)-[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*-|debrief-\1-${VERSION}-|g" "$README" + +echo "Updated README.md links to version ${VERSION}" +grep -o 'releases/download/[^)]*' "$README" | head -3