|
@@ -1,26 +1,25 @@
|
|
|
<div align="center">
|
|
<div align="center">
|
|
|
|
|
|
|
|
-# exa
|
|
|
|
|
|
|
+# zetta
|
|
|
|
|
|
|
|
-[exa](https://the.exa.website/) is a modern replacement for _ls_.
|
|
|
|
|
|
|
+zetta builds on the awesome foundation of [exa](https://the.exa.website/) so we
|
|
|
|
|
+can add more features. When exa becomes maintained again, features could be
|
|
|
|
|
+merged back.
|
|
|
|
|
|
|
|
-**README Sections:** [Options](#options) — [Installation](#installation) — [Development](#development)
|
|
|
|
|
|
|
+For simplicity, only installation method for now is `cargo install`.
|
|
|
|
|
|
|
|
-[](https://github.com/ogham/exa/actions/workflows/unit-tests.yml)
|
|
|
|
|
-[](https://saythanks.io/to/ogham%40bsago.me)
|
|
|
|
|
-</div>
|
|
|
|
|
|
|
+**this readme will be extended again, pending some rewrites / updates.**
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
|
-**exa** is a modern replacement for the venerable file-listing command-line program `ls` that ships with Unix and Linux operating systems, giving it more features and better defaults.
|
|
|
|
|
|
|
+**zetta** is a modern replacement for the venerable file-listing command-line program `ls` that ships with Unix and Linux operating systems, giving it more features and better defaults.
|
|
|
It uses colours to distinguish file types and metadata.
|
|
It uses colours to distinguish file types and metadata.
|
|
|
It knows about symlinks, extended attributes, and Git.
|
|
It knows about symlinks, extended attributes, and Git.
|
|
|
And it’s **small**, **fast**, and just **one single binary**.
|
|
And it’s **small**, **fast**, and just **one single binary**.
|
|
|
|
|
|
|
|
-By deliberately making some decisions differently, exa attempts to be a more featureful, more user-friendly version of `ls`.
|
|
|
|
|
-For more information, see [exa’s website](https://the.exa.website/).
|
|
|
|
|
|
|
+By deliberately making some decisions differently, zetta attempts to be a more featureful, more user-friendly version of `ls`.
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
---
|
|
@@ -29,7 +28,7 @@ For more information, see [exa’s website](https://the.exa.website/).
|
|
|
<h1>Command-line options</h1>
|
|
<h1>Command-line options</h1>
|
|
|
</a>
|
|
</a>
|
|
|
|
|
|
|
|
-exa’s options are almost, but not quite, entirely unlike `ls`’s.
|
|
|
|
|
|
|
+zetta’s options are almost, but not quite, entirely unlike `ls`’s.
|
|
|
|
|
|
|
|
### Display options
|
|
### Display options
|
|
|
|
|
|
|
@@ -98,175 +97,14 @@ Some of the options accept parameters:
|
|
|
<h1>Installation</h1>
|
|
<h1>Installation</h1>
|
|
|
</a>
|
|
</a>
|
|
|
|
|
|
|
|
-exa is available for macOS and Linux.
|
|
|
|
|
-More information on how to install exa is available on [the Installation page](https://the.exa.website/install).
|
|
|
|
|
-
|
|
|
|
|
-### Alpine Linux
|
|
|
|
|
-
|
|
|
|
|
-On Alpine Linux, [enable community repository](https://wiki.alpinelinux.org/wiki/Enable_Community_Repository) and install the [`exa`](https://pkgs.alpinelinux.org/package/edge/community/x86_64/exa) package.
|
|
|
|
|
-
|
|
|
|
|
- apk add exa
|
|
|
|
|
-
|
|
|
|
|
-### Arch Linux
|
|
|
|
|
-
|
|
|
|
|
-On Arch, install the [`exa`](https://www.archlinux.org/packages/community/x86_64/exa/) package.
|
|
|
|
|
-
|
|
|
|
|
- pacman -S exa
|
|
|
|
|
-
|
|
|
|
|
-### Android / Termux
|
|
|
|
|
-
|
|
|
|
|
-On Android / Termux, install the [`exa`](https://github.com/termux/termux-packages/tree/master/packages/exa) package.
|
|
|
|
|
-
|
|
|
|
|
- pkg install exa
|
|
|
|
|
-
|
|
|
|
|
-### Debian
|
|
|
|
|
-
|
|
|
|
|
-On Debian, install the [`exa`](https://packages.debian.org/stable/exa) package.
|
|
|
|
|
-
|
|
|
|
|
- apt install exa
|
|
|
|
|
-
|
|
|
|
|
-### Fedora
|
|
|
|
|
-
|
|
|
|
|
-On Fedora, install the [`exa`](https://src.fedoraproject.org/modules/exa) package.
|
|
|
|
|
-
|
|
|
|
|
- dnf install exa
|
|
|
|
|
-
|
|
|
|
|
-### Gentoo
|
|
|
|
|
-
|
|
|
|
|
-On Gentoo, install the [`sys-apps/exa`](https://packages.gentoo.org/packages/sys-apps/exa) package.
|
|
|
|
|
-
|
|
|
|
|
- emerge sys-apps/exa
|
|
|
|
|
-
|
|
|
|
|
-### Homebrew
|
|
|
|
|
-
|
|
|
|
|
-If you’re using [Homebrew](https://brew.sh/) on macOS, install the [`exa`](http://formulae.brew.sh/formula/exa) formula.
|
|
|
|
|
-
|
|
|
|
|
- brew install exa
|
|
|
|
|
-
|
|
|
|
|
-### MacPorts
|
|
|
|
|
-
|
|
|
|
|
-If you're using [MacPorts](https://www.macports.org/) on macOS, install the [`exa`](https://ports.macports.org/port/exa/summary) port.
|
|
|
|
|
-
|
|
|
|
|
- port install exa
|
|
|
|
|
-
|
|
|
|
|
-### Nix
|
|
|
|
|
-
|
|
|
|
|
-On nixOS, install the [`exa`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/tools/misc/exa/default.nix) package.
|
|
|
|
|
-
|
|
|
|
|
- nix-env -i exa
|
|
|
|
|
-
|
|
|
|
|
-### openSUSE
|
|
|
|
|
-
|
|
|
|
|
-On openSUSE, install the [`exa`](https://software.opensuse.org/package/exa) package.
|
|
|
|
|
-
|
|
|
|
|
- zypper install exa
|
|
|
|
|
-
|
|
|
|
|
-### Ubuntu
|
|
|
|
|
-
|
|
|
|
|
-On Ubuntu 20.10 (Groovy Gorilla) and later, install the [`exa`](https://packages.ubuntu.com/jammy/exa) package.
|
|
|
|
|
-
|
|
|
|
|
- sudo apt install exa
|
|
|
|
|
-
|
|
|
|
|
-### Void Linux
|
|
|
|
|
-
|
|
|
|
|
-On Void Linux, install the [`exa`](https://github.com/void-linux/void-packages/blob/master/srcpkgs/exa/template) package.
|
|
|
|
|
-
|
|
|
|
|
- xbps-install -S exa
|
|
|
|
|
-
|
|
|
|
|
-### Manual installation from GitHub
|
|
|
|
|
-
|
|
|
|
|
-Compiled binary versions of exa are uploaded to GitHub when a release is made.
|
|
|
|
|
-You can install exa manually by [downloading a release](https://github.com/ogham/exa/releases), extracting it, and copying the binary to a directory in your `$PATH`, such as `/usr/local/bin`.
|
|
|
|
|
-
|
|
|
|
|
-For more information, see the [Manual Installation page](https://the.exa.website/install/linux#manual).
|
|
|
|
|
|
|
+zetta is available for macOS and Linux.
|
|
|
|
|
|
|
|
### Cargo
|
|
### Cargo
|
|
|
|
|
|
|
|
If you already have a Rust environment set up, you can use the `cargo install` command:
|
|
If you already have a Rust environment set up, you can use the `cargo install` command:
|
|
|
|
|
|
|
|
- cargo install exa
|
|
|
|
|
-
|
|
|
|
|
-Cargo will build the `exa` binary and place it in `$HOME/.cargo`.
|
|
|
|
|
-
|
|
|
|
|
-To build without Git support, run `cargo install --no-default-features exa` is also available, if the requisite dependencies are not installed.
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
----
|
|
|
|
|
-
|
|
|
|
|
-<a id="development">
|
|
|
|
|
-<h1>Development
|
|
|
|
|
-
|
|
|
|
|
-<a href="https://blog.rust-lang.org/2022/08/11/Rust-1.63.0.html">
|
|
|
|
|
- <img src="https://img.shields.io/badge/rustc-1.63.0+-lightgray.svg" alt="Rust 1.63.0+" />
|
|
|
|
|
-</a>
|
|
|
|
|
-
|
|
|
|
|
-<a href="https://github.com/ogham/exa/blob/master/LICENCE">
|
|
|
|
|
- <img src="https://img.shields.io/badge/licence-MIT-green" alt="MIT Licence" />
|
|
|
|
|
-</a>
|
|
|
|
|
-</h1></a>
|
|
|
|
|
-
|
|
|
|
|
-exa is written in [Rust](https://www.rust-lang.org/).
|
|
|
|
|
-You will need rustc version 1.56.1 or higher.
|
|
|
|
|
-The recommended way to install Rust for development is from the [official download page](https://www.rust-lang.org/tools/install), using rustup.
|
|
|
|
|
-
|
|
|
|
|
-Once Rust is installed, you can compile exa with Cargo:
|
|
|
|
|
-
|
|
|
|
|
- cargo build
|
|
|
|
|
- cargo test
|
|
|
|
|
-
|
|
|
|
|
-- The [just](https://github.com/casey/just) command runner can be used to run some helpful development commands, in a manner similar to `make`.
|
|
|
|
|
-Run `just --list` to get an overview of what’s available.
|
|
|
|
|
-
|
|
|
|
|
-- If you are compiling a copy for yourself, be sure to run `cargo build --release` or `just build-release` to benefit from release-mode optimisations.
|
|
|
|
|
-Copy the resulting binary, which will be in the `target/release` directory, into a folder in your `$PATH`.
|
|
|
|
|
-`/usr/local/bin` is usually a good choice.
|
|
|
|
|
-
|
|
|
|
|
-- To compile and install the manual pages, you will need [pandoc](https://pandoc.org/).
|
|
|
|
|
-The `just man` command will compile the Markdown into manual pages, which it will place in the `target/man` directory.
|
|
|
|
|
-To use them, copy them into a directory that `man` will read.
|
|
|
|
|
-`/usr/local/share/man` is usually a good choice.
|
|
|
|
|
-
|
|
|
|
|
-- exa depends on [libgit2](https://github.com/rust-lang/git2-rs) for certain features.
|
|
|
|
|
-If you’re unable to compile libgit2, you can opt out of Git support by running `cargo build --no-default-features`.
|
|
|
|
|
-
|
|
|
|
|
-- If you intend to compile for musl, you will need to use the flag `vendored-openssl` if you want to get the Git feature working.
|
|
|
|
|
-The full command is `cargo build --release --target=x86_64-unknown-linux-musl --features vendored-openssl,git`.
|
|
|
|
|
-
|
|
|
|
|
-For more information, see the [Building from Source page](https://the.exa.website/install/source).
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-### Testing with Vagrant
|
|
|
|
|
-
|
|
|
|
|
-exa uses [Vagrant][] to configure virtual machines for testing.
|
|
|
|
|
-
|
|
|
|
|
-Programs such as exa that are basically interfaces to the system are [notoriously difficult to test][testing].
|
|
|
|
|
-Although the internal components have unit tests, it’s impossible to do a complete end-to-end test without mandating the current user’s name, the time zone, the locale, and directory structure to test.
|
|
|
|
|
-(And yes, these tests are worth doing. I have missed an edge case on many an occasion.)
|
|
|
|
|
-
|
|
|
|
|
-The initial attempt to solve the problem was just to create a directory of “awkward” test cases, run exa on it, and make sure it produced the correct output.
|
|
|
|
|
-But even this output would change if, say, the user’s locale formats dates in a different way.
|
|
|
|
|
-These can be mocked inside the code, but at the cost of making that code more complicated to read and understand.
|
|
|
|
|
-
|
|
|
|
|
-An alternative solution is to fake *everything*: create a virtual machine with a known state and run the tests on *that*.
|
|
|
|
|
-This is what Vagrant does.
|
|
|
|
|
-Although it takes a while to download and set up, it gives everyone the same development environment to test for any obvious regressions.
|
|
|
|
|
-
|
|
|
|
|
-[Vagrant]: https://www.vagrantup.com/
|
|
|
|
|
-[testing]: https://eev.ee/blog/2016/08/22/testing-for-people-who-hate-testing/#troublesome-cases
|
|
|
|
|
-
|
|
|
|
|
-First, initialise the VM:
|
|
|
|
|
-
|
|
|
|
|
- host$ vagrant up
|
|
|
|
|
-
|
|
|
|
|
-The first command downloads the virtual machine image, and then runs our provisioning script, which installs Rust and exa’s build-time dependencies, configures the environment, and generates some awkward files and folders to use as test cases.
|
|
|
|
|
-Once this is done, you can SSH in, and build and test:
|
|
|
|
|
|
|
+ cargo install zetta
|
|
|
|
|
|
|
|
- host$ vagrant ssh
|
|
|
|
|
- vm$ cd /vagrant
|
|
|
|
|
- vm$ cargo build
|
|
|
|
|
- vm$ ./xtests/run
|
|
|
|
|
- All the tests passed!
|
|
|
|
|
|
|
+Cargo will build the `zetta` binary and place it in `$HOME/.cargo`.
|
|
|
|
|
|
|
|
-Of course, the drawback of having a standard development environment is that you stop noticing bugs that occur outside of it.
|
|
|
|
|
-For this reason, Vagrant isn’t a *necessary* development step — it’s there if you’d like to use it, but exa still gets used and tested on other platforms.
|
|
|
|
|
-It can still be built and compiled on any target triple that it supports, VM or no VM, with `cargo build` and `cargo test`.
|
|
|
|
|
|
|
+To build without Git support, run `cargo install --no-default-features zetta` is also available, if the requisite dependencies are not installed.
|