The broot file manager is quite fresh and nice approach to files and directories filtering/searching/view/manipulation/… and whatever else you call messing with files 🙂

The broot tools is not yet available on the FreeBSD systems (as package or port).

This guide will show you how to built and install it on your FreeBSD system.

Here is how it looks in action.

Filter for jails .

Filter for zfs .

It has ‘size mode’ when started with -s option similar to ncdu(1) tool.

You can also check the Feature Showcase section on their GitHub page – https://github.com/Canop/broot – available here.

Build

There are three steps to make it happen.

1. You need to install the rust package.

# pkg install rust

Then you need to type (as regular user) the cargo install broot command.

% cargo install broot

It will fail here:

You will need to apply this patch below:

% diff -u \ /home/vermaden/.cargo/registry/src/github.com-1ecc6299db9ec823/crossterm-0.14.1/src/terminal/sys/unix.rs.ORG \ /home/vermaden/.cargo/registry/src/github.com-1ecc6299db9ec823/crossterm-0.14.1/src/terminal/sys/unix.rs --- /home/vermaden/.cargo/registry/src/github.com-1ecc6299db9ec823/crossterm-0.14.1/src/terminal/sys/unix.rs.ORG 2020-01-10 23:41:29.825912000 +0100 +++ /home/vermaden/.cargo/registry/src/github.com-1ecc6299db9ec823/crossterm-0.14.1/src/terminal/sys/unix.rs 2020-01-10 23:41:07.703471000 +0100 @@ -33,7 +33,7 @@ ws_ypixel: 0, }; - if let Ok(true) = wrap_with_result(unsafe { ioctl(STDOUT_FILENO, TIOCGWINSZ, &mut size) }) { + if let Ok(true) = wrap_with_result(unsafe { ioctl(STDOUT_FILENO, TIOCGWINSZ.into(), &mut size) }) { Ok((size.ws_col, size.ws_row)) } else { tput_size().ok_or_else(|| std::io::Error::last_os_error().into())

Then type cargo install broot command again. It will now properly compile.

% cargo install broot Updating crates.io index Downloaded broot v0.11.6 Downloaded 1 crate (1.6 MB) in 2.89s Installing broot v0.11.6 Compiling libc v0.2.66 Compiling cfg-if v0.1.10 Compiling lazy_static v1.4.0 Compiling autocfg v0.1.7 Compiling semver-parser v0.7.0 Compiling autocfg v1.0.0 Compiling proc-macro2 v1.0.7 Compiling log v0.4.8 Compiling scopeguard v1.0.0 Compiling unicode-xid v0.2.0 Compiling bitflags v1.2.1 Compiling syn v1.0.13 Compiling memchr v2.2.1 Compiling arc-swap v0.4.4 Compiling slab v0.4.2 Compiling smallvec v1.1.0 Compiling serde v1.0.104 Compiling unicode-width v0.1.7 Compiling regex-syntax v0.6.13 Compiling ansi_term v0.11.0 Compiling strsim v0.8.0 Compiling vec_map v0.8.1 Compiling id-arena v2.2.1 Compiling custom_error v1.7.1 Compiling glob v0.3.0 Compiling open v1.3.2 Compiling umask v0.1.8 Compiling thread_local v1.0.0 Compiling minimad v0.6.3 Compiling lazy-regex v0.1.2 Compiling semver v0.9.0 Compiling lock_api v0.3.3 Compiling crossbeam-utils v0.7.0 Compiling crossbeam-epoch v0.8.0 Compiling num-traits v0.2.11 Compiling num-integer v0.1.42 Compiling textwrap v0.11.0 Compiling rustc_version v0.2.3 Compiling memoffset v0.5.3 Compiling iovec v0.1.4 Compiling net2 v0.2.33 Compiling dirs-sys v0.3.4 Compiling parking_lot_core v0.7.0 Compiling signal-hook-registry v1.2.0 Compiling time v0.1.42 Compiling atty v0.2.14 Compiling users v0.9.1 Compiling quote v1.0.2 Compiling aho-corasick v0.7.6 Compiling mio v0.6.21 Compiling dirs v2.0.2 Compiling directories v2.0.2 Compiling parking_lot v0.10.0 Compiling clap v2.33.0 Compiling crossbeam-queue v0.2.1 Compiling crossbeam-channel v0.4.0 Compiling toml v0.5.5 Compiling term v0.6.1 Compiling regex v1.3.3 Compiling signal-hook v0.1.12 Compiling chrono v0.4.10 Compiling crossterm v0.14.1 Compiling simplelog v0.7.4 Compiling crossbeam-deque v0.7.2 Compiling thiserror-impl v1.0.9 Compiling crossbeam v0.7.3 Compiling thiserror v1.0.9 Compiling termimad v0.8.9 Compiling broot v0.11.6 Finished release [optimized] target(s) in 4m 56s Installing /home/vermaden/.cargo/bin/broot Installed package `broot v0.11.6` (executable `broot`) warning: be sure to add `/home/vermaden/.cargo/bin` to your PATH to be able to run the installed binaries % echo $? 0

Install

Now go to the ~/.cargo/bin directory and copy the broot binary to some place that is set in your ${PATH} variable.

Then start new terminal (updated ${PATH} variable) and type broot command.

% cp ~/.cargo/bin/broot ~/scripts % rehash % broot

You will be asked if automatic setup of the br function should tool place. I agreed with y answer.

Here are things generated by this process.

% find ~/.config/broot /home/vermaden/.config/broot /home/vermaden/.config/broot/conf.toml /home/vermaden/.config/broot/launcher /home/vermaden/.config/broot/launcher/installed-v1 /home/vermaden/.config/broot/launcher/bash /home/vermaden/.config/broot/launcher/bash/br % find ~/.local/share/broot /home/vermaden/.local/share/broot /home/vermaden/.local/share/broot/launcher /home/vermaden/.local/share/broot/launcher/fish /home/vermaden/.local/share/broot/launcher/fish/1.fish /home/vermaden/.local/share/broot/launcher/bash /home/vermaden/.local/share/broot/launcher/bash/1

As I use ZSH shell it also updates my ~/.zshrc file.

% tail -3 ~/.zshrc source /home/vermaden/.config/broot/launcher/bash/br

Finished. You now have broot installed and ready to use.

UPDATE 1 – Now No Patches Are Needed

Thanks to the broot author any patches are now not needed.

It builds and works out of the box.

UPDATE 2 – Its in Ports/Packages Now

The broot file manager is now available via usual FreeBSD Ports and packages which makes this guide pointless 🙂

Its available as misc/broot port.

EOF