Skip to main content

Tools for BitBake/Yocto projects

Project description

bit(bit)

A CLI tool for managing BitBake/Yocto/OpenEmbedded layer repositories.

The command is bit for quick typing.

Overview

bit helps developers working with Yocto/OpenEmbedded projects by providing tools to:

  • Update git repos backing BitBake layers from a bblayers.conf
  • Explore commits interactively with fzf-based navigation
  • Export patches with cover letters for upstream submission
  • Manage branches across multiple layer repositories
  • Search the OpenEmbedded Layer Index for layers
  • Bootstrap new projects by cloning core repositories
  • Manage projects - switch between multiple Yocto builds from anywhere

Features

  • Automatic layer discovery - finds layers by searching for conf/layer.conf files
  • Multi-layer repo support - handles repos containing multiple layers (e.g., meta-openembedded)
  • Interactive fzf menus - fast navigation with preview panes and keyboard shortcuts
  • Tab completion - bash completion via argcomplete
  • Background refresh - upstream status checks run in background for fast startup
  • Per-repo configuration - custom display names, update defaults, push targets

Quick Start

# Bootstrap a new Yocto project
bitinit clone -b scarthgap --execute
bitinit

# Check status of all layer repos
bitstatus

# Interactively explore repos and commits
bitexplore

# Update all repos
bitupdate

# Search for layers in the OE Layer Index
bitsearch security

Commands

Command Alias Description
explore x Interactively explore commits in layer repos
update u Update git repos referenced by layers
status - Show local commit summary for layer repos
config c View and configure repo/layer settings
branch b View and switch branches across repos
export - Export patches from layer repos
repos - List layer repos
init - Show OE/Yocto build environment setup command
init clone - Show or clone core Yocto/OE repositories
search - Search OpenEmbedded Layer Index for layers
projects p Manage and switch between multiple project directories

Run bit with no arguments for an interactive command menu, or bit --help for detailed usage.

Common Workflows

Starting a New Project

# Clone core repos
bitinit clone -b scarthgap --execute

# Get the environment setup command
bitinit

# Source the environment (copy from output above)
TEMPLATECONF=... source ./layers/openembedded-core/oe-init-build-env

Daily Development

# Check what's changed upstream
bitstatus

# Update repos (interactive)
bitupdate

# Or update a specific repo
bitupdate OE-core

Exploring Commits

# Interactive two-level browser
bitexplore

# Jump directly to a repo
bitx OE-core

Keybindings in explore mode (repo list):

  • Enter - explore commits in selected repo
  • u - pull --rebase
  • m - pull (merge)
  • r - refresh repo (fetch)
  • R - refresh all repos
  • t - launch git history viewer (tig/lazygit/gitk)
  • s - show repo status detail
  • v - toggle verbose display
  • \ - expand/collapse all multi-layer repos
  • c - open config menu
  • q - quit

Keybindings in commit browser:

  • Tab - mark commit for selection
  • Space - select range of commits
  • ? - toggle preview pane
  • d - toggle diff view in preview
  • c - copy commit hash
  • e - export selected commits
  • t - launch git history viewer
  • or b - go back
  • q - quit

Exporting Patches for Upstream

# Prepare commits (reorder for upstream)
bitexport prep --branch zedd/feature

# Export patches
bitexport --target-dir ~/patches

# Export with version number
bitexport --target-dir ~/patches -v 2

Searching for Layers

# Interactive search
bitsearch

# Search with query
bitsearch virtualization

# Get layer info for scripting
bitsearch -i meta-virtualization

# Clone a layer directly
bitsearch -c meta-security -b scarthgap

Managing Branches

# Interactive branch management
bitbranch

# Switch all repos to a release branch
bitbranch --all scarthgap

Managing Multiple Projects

# Open project manager (interactive)
bitprojects

# Add a project directory
bitprojects add /path/to/yocto-build

# List known projects
bitprojects list

# Remove a project from tracking
bitprojects remove /path/to/old-project

Keybindings in projects menu:

  • Space - activate selected project (all commands will operate on it)
  • Enter - activate project and open command menu (if auto-invoked)
  • + - browse for a new directory to add
  • - - remove selected project from tracking
  • c - clear active project (use current directory)
  • s - open settings

Note: When no valid project context exists (no bblayers.conf found), the projects picker is automatically shown.

Configuration

Per-repo settings are stored in .bit.defaults (JSON):

{
  "/path/to/poky": "rebase",
  "/path/to/meta-oe": "skip",
  "__extra_repos__": ["/path/to/bitbake"],
  "__hidden_repos__": ["/path/to/unwanted-repo"],
  "__push_targets__": {
    "/path/to/oe-core": {
      "push_url": "ssh://git@push.openembedded.org/oe-core-contrib",
      "branch_prefix": "yourname/"
    }
  },
  "fzf_theme": "dark",
  "fzf_text_color": "light-gray",
  "fzf_custom_colors": {"pointer": "green"}
}

Configure interactively with bitconfig.

Theme Customization

The tool supports customizable options via Settings menu (bitconfig -> Settings):

Colors submenu:

  • Theme - Base color scheme (default, dark, light, dracula, nord, etc.)
  • Individual - Per-element color overrides with live preview

A color preview panel shows all themed elements (pointer, header, prompt, etc.) with current colors applied.

Directory Browser - Choose preferred file browser for project selection:

  • broot (recommended)
  • ranger
  • nnn
  • fzf (fallback)

Git Viewer - Choose preferred git history viewer:

  • auto (detect first available: tig > lazygit > gitk)
  • tig - ncurses git interface
  • lazygit - terminal UI for git
  • gitk - graphical git browser

Preview Layout - Configure commit browser preview pane position:

  • Bottom (default) - preview below commit list
  • Right (side-by-side) - preview beside commit list
  • Top - preview above commit list

Terminal Colors - Configure output colors for:

  • Upstream indicator (commits to pull)
  • Local commit count
  • Dirty/clean status
  • Repo names (configured, discovered, external)

Visual Indicators

Repos are color-coded by source:

  • Green - from bblayers.conf
  • Magenta with (?) - discovered layers (not in bblayers.conf)
  • Cyan with (ext) - external repos (git repos without conf/layer.conf)

Status indicators:

  • 5 local - commits ahead of origin
  • ↓ 3 - commits to pull from upstream
  • [clean] / [DIRTY] - working tree status

Requirements

  • Python 3.9+
  • Git
  • fzf (optional, but recommended for interactive features)
  • argcomplete (optional, for tab completion)
  • xclip or xsel (optional, for clipboard support)

Project Structure

The project is organized as a Python package with a commands subpackage:

bitbake_project/
├── core.py           # Core abstractions (Colors, GitRepo, FzfMenu)
├── cli.py            # Argument parsing and main()
└── commands/         # Command implementations
    ├── common.py     # Shared utilities
    ├── explore.py    # explore, status commands
    ├── export.py     # export, export prep commands
    ├── config.py     # config command
    ├── branch.py     # branch command
    ├── update.py     # update command
    ├── search.py     # search command
    ├── init.py       # init, bootstrap commands
    ├── repos.py      # repos command
    └── projects.py   # projects command, directory browser

Distribution options:

  • Standalone: Single-file zipapp (dist/bit)
  • Pip install: pip install -e . for development

License

This project is licensed under the GNU General Public License v2.0 (GPL-2.0-only).

See COPYING for the full license text.

See Also

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bitp-1.0.2.tar.gz (153.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bitp-1.0.2-py3-none-any.whl (161.8 kB view details)

Uploaded Python 3

File details

Details for the file bitp-1.0.2.tar.gz.

File metadata

  • Download URL: bitp-1.0.2.tar.gz
  • Upload date:
  • Size: 153.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for bitp-1.0.2.tar.gz
Algorithm Hash digest
SHA256 328668cd1032c9dfdbd1e8459c62f12b5c845614a9fea29aa6a8b8fc73493436
MD5 6f7811975774f163b1d372515f745528
BLAKE2b-256 e657069252e40fca3621db9fb654512c384ca8064c3ba3264bb04005059b7342

See more details on using hashes here.

File details

Details for the file bitp-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: bitp-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 161.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for bitp-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 88402fce0b9e3511151cb3d9cdfbdb788d9cebdb3cbf98113b72e58ef1efb483
MD5 efa8c0123627702ab255e900833a894c
BLAKE2b-256 48c07b9d8af64398f3bce9867c73ce351e45a3f561ba223efebebd0b51ae64e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page