# wallust - Generate colors from an image [//]: # (ANCHOR: badges) [![crates-io](https://img.shields.io/crates/v/wallust?style=flat-square&color=red)](https://crates.io/crates/wallust) [![downloads](https://img.shields.io/crates/d/wallust?style=flat-square&color=yellow)](https://crates.io/crates/wallust) [![license](https://img.shields.io/crates/l/wallust?style=flat-square)](https://codeberg.org/explosion-mental/wallust/src/branch/main/LICENSE) [![dependency-status](https://deps.rs/repo/codeberg/explosion-mental/wallust/status.svg?style=flat-square)](https://deps.rs/repo/codeberg/explosion-mental/wallust) [![status-badge](https://ci.codeberg.org/api/badges/13317/status.svg)](https://ci.codeberg.org/repos/13317) [![CodeBerg](https://img.shields.io/badge/Hosted_at-Codeberg-%232185D0?style=flat-square&logo=CodeBerg)](https://codeberg.org/explosion-mental/wallust) [![MatrixChat](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#wal-lust:matrix.org) [//]: # (ANCHOR_END: badges)
![gif](https://explosion-mental.codeberg.page/img/other/wallust-2.6.gif "wallust gif") > sources: [adwaita](https://gitlab.gnome.org/GNOME/gnome-backgrounds/-/blob/main/backgrounds/adwaita-d.jpg) - [scenic view of mountains](https://www.pexels.com/photo/scenic-view-of-mountains-during-dawn-1261728) - [rms by marco novo](https://stallman.org/photos/rms/pages/2.html) - [pixels](https://gitlab.gnome.org/GNOME/gnome-backgrounds/-/blob/main/backgrounds/pixels-l.webp) - [linus talking](https://en.wikipedia.org/wiki/File:Linus_Torvalds_talking.jpeg) **If comming from v2, please check [v3 breaking changes](./docs/v3.md).** ## Usage ``` wallust run my_wallpaper.png ``` _use `wallust -h` for an overview and `wallust --help` for a more detailed explanation_ ## Docs For ease of use you can check **detailed** docs with man pages (rather than `cmd -h`ing everytime): - `man wallust`, information about terminal colors and **template syntax**; - `man wallust.5`, config docs; - `man wallust-subcommand`, displays a man page for _subcommand_. There is also a [**web page**](https://explosion-mental.codeberg.page/wallust) for documentation! It's based on plain markdown, so you could also read it locally at `docs/` directory. [//]: # (ANCHOR: feats) ## Features - Includes [man pages](man/) and [completions](completions/)! - Sets terminal colors on all (or the current, `-u`) active terminals: * Windows: Adds a [color scheme for the windows terminal](https://learn.microsoft.com/en-us/windows/terminal/customize-settings/color-schemes#creating-your-own-color-scheme) by updating `settings.json` on Windows Terminal, to enable this scheme for the first time you will have to selected it manually * *NIX: ASCII escape sequences: - `/dev/pts/` on Linux - [`ps` to search active terminals](https://github.com/dylanaraps/pywal/pull/510) on OpenBSD * MacOS: iTerm2 sequences, `/dev/ttys00` on MacOS - Cache scheme palettes, overwritten by `-w`: * Linux: `$XDG_CACHE_HOME` or `$HOME/.cache` * MacOs: `$HOME/Library/Caches` * Windows: `{FOLDERID_LocalAppData}` - Read pywal/terminal-sexy colorschemes with `wallust cs`. - Built-in [themes](https://codeberg.org/explosion-mental/wallust-themes) with ` wallust theme` (compile time feature). - Optional Configuration file, [`wallust.toml`](./wallust.toml): * wallust checks for `~/.config/wallust/wallust.toml` for the config file, if not found it will use default implementations. * Configuration variables are avaliable as cli flags. * **Optional** templating with a [subset of _Jinja2_](https://github.com/mitsuhiko/minijinja/blob/main/COMPATIBILITY.md) or [_pywal_](https://github.com/dylanaraps/pywal/wiki/User-Template-Files#available-variables-and-syntax) syntax if selected. * Configurable methods for backends, colorspaces, palettes and threshold. * OS dependant path: - Linux: `$XDG_CONFIG_HOME` or `$HOME/.config` - MacOs: `$HOME/Library/Application Support` - Windows: `{FOLDERID_RoamingAppData}` | Methods | Description | |------------|-------------| | Backends | How to extract the colors from the image. (e.g [pywal uses convert](https://github.com/dylanaraps/pywal/blob/236aa48e741ff8d65c4c3826db2813bf2ee6f352/pywal/backends/wal.py#L14)) | | ColorSpace | Get the most prominent color, and sort them according to the `Palette`, configurable by a _threshold_ | | Palette | Makes a scheme palette with the gathered colors, (e.g. sets light background) | [//]: # (ANCHOR_END: feats) # Installation You can see if your distro has **wallust** in their repos by the following chart. For detail information you can check some [distro installation instruction](./docs/installation/distro.md) that the maintainers have left. [//]: # (ANCHOR: repology) [//]: # (ANCHOR_END: repology) [//]: # (ANCHOR: installation-src) ## With cargo ``` cargo install wallust ``` This will use the lastest (non pre-release) version. ## With git Simply `git clone https://codeberg.org/explosion-mental/wallust`. Recommended way is to use the `Makefile`, since this will install man pages and completions. 1. Edit `Makefile` to meet your local setup (should be fine as is for most linux distros). 2. Build it with `make` 3. Install wallust (if necessary as root): `make install` Optionally, installing **only** the binary can be done with the following, which moves the binary into your `$CARGO_HOME/bin`: ``` cargo install --path . ``` or build it and copy the binary to one folder present in your `$PATH` like `/usr/local/bin` ``` cargo build --release cp -f ./target/release/wallust /usr/local/bin ``` [//]: # (ANCHOR_END: installation-src) # Background I've started this tool mainly for _speed_ reasons given that I use a [keybinding](https://codeberg.org/explosion-mental/demwm/src/commit/cd43bd6c16a90e32dc1c22ec499d9aaff497f04a/config.h#L346) that [runs pywal](https://codeberg.org/explosion-mental/demwm/src/commit/cd43bd6c16a90e32dc1c22ec499d9aaff497f04a/demwm_random_wall#L19) with a random wallpaper image, this resulted in a noticeable delay in between. Of course, now I know that pywal uses image magick `convert` to gather the colors, which wallust can also use with the `wal` backend. Integrated native methods, and even much more sofisticated algorithms like `kmeans` or the SIMD backend `fast_resize`, made the need to let the user decide what fit best. While the goal was focused on speed, the use case move on to upgrade functionality that both wallust and _archived_ python tool shared. I use rust given the great wide library (crates) that it offered and it's native capabilities. I also tried [rewriting pywal in C](https://github.com/explosion-mental/wast) after watching a tsoding video where he implmements a histogram in C for manipulating an image. That was the little push I needed start this journey. # Related - [wallust-themes - built in wallust colorschemes](https://codeberg.org/explosion-mental/wallust-themes) - [wallust-templates - some templates for known programs](https://codeberg.org/explosion-mental/wallust-templates) - [pywal - 🎨Generate and change color-schemes on the fly](https://github.com/dylanaraps/pywal) - [pywal16 - 16 colors fork of pywal](https://github.com/eylles/pywal16) - [wpgtk - 🎴a colorscheme, wallpaper and template manager for *nix](https://github.com/deviantfero/wpgtk) - [wal-theme-picker - pick the best theme for the image (_rather than generating one_)](https://github.com/drybalka/wal-theme-picker) - [pigmnts - 🎨Color palette generator from an image using WebAssesmbly and Rust](https://github.com/blenderskool/pigmnts) - [Chameleon - 🦎Theme your linux system to match any image](https://github.com/GideonWolfe/Chameleon) - [lule_bash - Genretare all 255 colors from wallpapers](https://github.com/warpwm/lule_bash) - [lule - `lule_bash` rewriten for efficiency](https://github.com/warpwm/lule) - [using vscode-wal-theme with `wallust`](https://github.com/dlasagno/vscode-wal-theme/issues/23) - [base16 - Framework for Tomorrow styled themes](https://github.com/chriskempson/base16) - [flavours - 🎨💧An easy to use base16 scheme manager that integrates with any workflow](https://github.com/Misterio77/flavours) - [oxidec - Eye-candy manager written in Rust](https://github.com/mrtnvgr/oxidec) - [raventhemer - A theme manager and switcher for desktop linux](https://git.sr.ht/~nicohman/raven) - [rose-pine _Issue #2_ - Ideas with using the whole 15 color palette](https://github.com/rose-pine/xresources/issues/2)