rootiest 1a27dbde4e
Test PR / test (pull_request) Successful in 6s
Auto Label PRs / label (pull_request) Successful in 3s
Release on Merge / release (pull_request) Successful in 7s
fix(tests): redirect stdin from /dev/null in uninstall test to prevent hang
--uninstall prompts for config removal when stdin is a TTY. Running the
test from an interactive terminal caused it to block on read. Feeding
/dev/null forces the non-interactive path without changing behaviour.
2026-05-09 01:00:31 -04:00
2026-04-27 22:55:01 -04:00

color-tool

A feature-rich, portable CLI color utility for Linux, specializing in color picking, conversion, and formatting. Designed primarily for KDE Plasma on Wayland, color-tool provides a seamless bridge between your screen and your development environment.

🌈 Key Features

  • Advanced Color Picking: Integration with KWin's DBus ColorPicker for pixel-perfect selection on Wayland.
  • Robust Conversions: Support for HEX, RGB, HSL, and their Alpha-enabled counterparts (HEXA, RGBA, HSLA).
  • Format Flexibility: Request multiple formats at once, or use all for a complete breakdown.
  • Smart JSON Output: Generate machine-readable JSON tables for easy integration with other tools.
  • Color Naming: Resolve hex values to human-readable names via thecolorapi.com.
  • Visual Previews: Render color swatches directly in your terminal using truecolor ANSI escapes.
  • Desktop Integration: Built-in support for clipboard copying (wl-copy/xclip) and rich desktop notifications with visual color swatches.
  • Highly Configurable: Separate configuration profiles for standard terminal usage and desktop/launcher mode.
  • Portable Design: The entire tool is contained within a single Bash script, with embedded Python helpers.

📋 Prerequisites

Required Core Dependencies

These are mandatory for the script to run and perform basic color conversions:

  • Python 3: Handles all color space math and conversions.
  • jq: Powers JSON formatting and internal data parsing.

Optional Feature Dependencies

These enable specific functionality and can be installed as needed:

  • KDE Plasma (Wayland): Required for screen color picking (--pick).
  • Python 3 PyQt6: Required for the KDE color picker DBus interface.
  • wl-clipboard or xclip: Enables copying results to the system clipboard (--copy). wl-clipboard is strongly preferred on Wayland — xclip operates through XWayland and can be unreliable. --check-deps and --install will warn you if only xclip is found.
  • curl: Required for fetching human-readable color names from the web (--name).
  • libnotify: Enables desktop notifications (--notify).
  • ImageMagick: Generates visual color swatch icons for notifications (--swatch).
  • Truecolor Terminal Emulator: Required for accurate visual swatches in terminal output (--swatch).

Tip: Use color-tool --check-deps to quickly see which dependencies are currently met on your system.

🚀 Installation

You can download the script directly from the latest release and install it:

# Download and install the latest version of the color-tool script
curl -sSLO https://git.rootiest.dev/rootiest/color-tool/releases/download/latest/color-tool && bash color-tool --install && rm ./color-tool

This will:

  1. Install the script to $XDG_DATA_HOME/color-tool/ (default: ~/.local/share/color-tool/).
  2. Symlink the binary to ~/.local/bin/color-tool.
  3. Generate a sample configuration at $XDG_CONFIG_HOME/color-tool/config.toml (default: ~/.config/color-tool/config.toml).
  4. Create a .desktop entry in $XDG_DATA_HOME/applications/ so you can launch the picker from your application menu.
  5. Verify and warn about any missing optional or required system dependencies.
  6. Clean up the downloaded script after installation.

Manual Usage

Alternatively, you can download the script manually. Then run it from any location without installation:

# Make script executable
chmod +x color-tool
# Run script directly
./color-tool --pick --output hex,rgb

However, this will not add the script to your $PATH or create a desktop entry, so you won't be able to launch it from the app menu or use it globally without specifying the path.

🛠 Usage

Usage: color-tool [OPTIONS] [COLOR ...]

Options:
  --[no-]pick    Open the KDE Plasma color picker
  --output FMT   Format(s): hex, rgb, hsl, rgba, hsla, hexa, all (comma-separated)
  --[no-]json    Output as a JSON table of selected formats
  --[no-]name    Fetch nearest color name from thecolorapi.com
  --[no-]swatch  Include a color swatch in the terminal output
  --[no-]copy    Copy result to clipboard
  --[no-]notify  Show desktop notification
  --desktop      GUI mode: pick → copy → notify
  --get-config   Print the current configuration
  --set-config   Update the configuration (e.g. --set-config desktop --copy)
  --reset-config Restore the configuration file to its default values
  --check-deps   Check system dependencies and environment support
  --install      Install to $XDG_DATA_HOME/color-tool/ and symlink to ~/.local/bin/
  --help, -h     Show this help message

Examples

Pick a color and get HSL + RGB:

color-tool --pick --output hsl,rgb

Convert a hex value with a visual swatch and color name:

color-tool "#ff5500" --swatch --name

Output all formats as JSON for a piped input:

echo "rgba(255, 85, 0, 0.5)" | color-tool --output all --json

Launch in "Silent" Desktop Mode (via terminal or launcher):

color-tool --desktop --no-name

⚙️ Configuration

You can define your preferred defaults in $XDG_CONFIG_HOME/color-tool/config.toml (default: ~/.config/color-tool/config.toml). The tool uses a priority hierarchy: CLI Flags > Desktop Config > Default Config.

[defaults]
# Set any option to true to enable it by default when using the terminal
output = "hex"  # default output format(s): hex, rgb, hsl, rgba, hsla, hexa, all
json   = false  # output in JSON format
swatch = false  # show color swatch in terminal
name   = false  # fetch color name from thecolorapi.com
copy   = false  # copy result to clipboard
pick   = false  # auto-launch color picker when invoked with no arguments
notify = false  # show desktop notification

[desktop]
# Defaults for --desktop mode (launched from the app menu; copy is always enabled by default)
output = "hex"  # format to copy
json   = false  # copy JSON format instead of plain text
name   = false  # fetch color name (requires network)
copy   = true   # copy result to clipboard
notify = true   # show desktop notification with the copied value
swatch = true   # show color swatch in notification

You can also use the CLI to manage your configuration:

# View current config
color-tool --get-config

# Update specific keys (e.g., enable swatch by default)
color-tool --set-config defaults --swatch

# Set output format for desktop mode
color-tool --set-config desktop output=rgba

# Reset to factory defaults
color-tool --reset-config

🧪 Testing

The project includes a comprehensive test suite that verifies color conversion, configuration loading, and system integrations (clipboard/notifications) using mocks.

To run the tests:

./tests/run_tests.sh

The test script creates a temporary isolated environment, so it won't affect your system configuration or active clipboard.

🤝 Credits

The wl-colorpicker-plasma integration is based on the original work by SASUPERNOVA.

⚖️ License

Copyright © 2026 Rootiest.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

S
Description
Tool for picking and manipulating colors.
Readme 244 KiB
Languages
Shell 100%