mirror of
https://github.com/ellie/atuin.git
synced 2024-09-11 13:15:23 +03:00
Pre release polishing (#42)
* Improve readme * Add demo gif * Update readme * Add mac build * Amend release config * Update gif
This commit is contained in:
parent
646fec893e
commit
0610ae197f
40
.github/workflows/rust.yml
vendored
40
.github/workflows/rust.yml
vendored
@ -23,8 +23,17 @@ jobs:
|
|||||||
override: true
|
override: true
|
||||||
|
|
||||||
- name: Run cargo build
|
- name: Run cargo build
|
||||||
run: cargo build
|
run: cargo build --all --release && strip target/release/atuin && mv target/release/atuin target/release/atuin_linux
|
||||||
|
|
||||||
|
- name: Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
target/release/atuin_linux
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
@ -71,3 +80,30 @@ jobs:
|
|||||||
|
|
||||||
- name: Format
|
- name: Format
|
||||||
run: cargo fmt -- --check
|
run: cargo fmt -- --check
|
||||||
|
|
||||||
|
build-mac:
|
||||||
|
runs-on: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install latest rust toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
target: x86_64-apple-darwin
|
||||||
|
default: true
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Build for mac
|
||||||
|
run: cargo build --all --release && strip target/release/atuin && mv target/release/atuin target/release/atuin_darwin
|
||||||
|
|
||||||
|
- name: Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
target/release/atuin_darwin
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
8
Cargo.lock
generated
8
Cargo.lock
generated
@ -82,7 +82,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atuin"
|
name = "atuin"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"atuin-client",
|
"atuin-client",
|
||||||
@ -114,7 +114,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atuin-client"
|
name = "atuin-client"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"atuin-common",
|
"atuin-common",
|
||||||
@ -148,7 +148,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atuin-common"
|
name = "atuin-common"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"eyre",
|
"eyre",
|
||||||
@ -164,7 +164,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atuin-server"
|
name = "atuin-server"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"atuin-common",
|
"atuin-common",
|
||||||
|
20
Cargo.toml
20
Cargo.toml
@ -1,12 +1,29 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "atuin"
|
name = "atuin"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
description = "atuin - magical shell history"
|
description = "atuin - magical shell history"
|
||||||
homepage = "https://atuin.sh"
|
homepage = "https://atuin.sh"
|
||||||
repository = "https://github.com/ellie/atuin"
|
repository = "https://github.com/ellie/atuin"
|
||||||
|
readme = "README.md"
|
||||||
|
|
||||||
|
[package.metadata.deb]
|
||||||
|
maintainer = "Ellie Huxtable <ellie@elliehuxtable.com>"
|
||||||
|
copyright = "2021, Ellie Huxtable <ellie@elliehuxtable.com>"
|
||||||
|
license-file = ["LICENSE"]
|
||||||
|
depends = "$auto"
|
||||||
|
section = "utility"
|
||||||
|
|
||||||
|
[package.metadata.rpm]
|
||||||
|
package = "atuin"
|
||||||
|
|
||||||
|
[package.metadata.rpm.cargo]
|
||||||
|
buildflags = ["--release"]
|
||||||
|
|
||||||
|
[package.metadata.rpm.targets]
|
||||||
|
atuin = { path = "/usr/bin/atuin" }
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = ["./atuin-client", "./atuin-server", "./atuin-common"]
|
members = ["./atuin-client", "./atuin-server", "./atuin-common"]
|
||||||
@ -39,4 +56,3 @@ base64 = "0.13.0"
|
|||||||
humantime = "2.1.0"
|
humantime = "2.1.0"
|
||||||
tabwriter = "1.2.1"
|
tabwriter = "1.2.1"
|
||||||
crossbeam-channel = "0.5.1"
|
crossbeam-channel = "0.5.1"
|
||||||
|
|
||||||
|
12
README.md
12
README.md
@ -12,9 +12,17 @@
|
|||||||
<a href="https://crates.io/crates/atuin"><img src="https://img.shields.io/crates/d/atuin.svg?style=flat-square" /></a>
|
<a href="https://crates.io/crates/atuin"><img src="https://img.shields.io/crates/d/atuin.svg?style=flat-square" /></a>
|
||||||
<a href="https://github.com/ellie/atuin/blob/main/LICENSE"><img src="https://img.shields.io/crates/l/atuin.svg?style=flat-square" /></a>
|
<a href="https://github.com/ellie/atuin/blob/main/LICENSE"><img src="https://img.shields.io/crates/l/atuin.svg?style=flat-square" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="demo.gif" alt="animated" width="80%" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<em>exit code, duration, time and command shown</em>
|
||||||
|
</p>
|
||||||
|
|
||||||
- store shell history in a sqlite database
|
- store shell history in a sqlite database
|
||||||
- backup shell history to the cloud
|
- backup encrypted shell history to the cloud
|
||||||
- the same history across terminals, across session, and across machines
|
- the same history across terminals, across session, and across machines
|
||||||
- log exit code, cwd, hostname, session, command duration, etc
|
- log exit code, cwd, hostname, session, command duration, etc
|
||||||
- smart interactive history search to replace ctrl-r
|
- smart interactive history search to replace ctrl-r
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "atuin-client"
|
name = "atuin-client"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -274,8 +274,12 @@ impl Database for Sqlite {
|
|||||||
|
|
||||||
let res = sqlx::query(
|
let res = sqlx::query(
|
||||||
format!(
|
format!(
|
||||||
"select * from history
|
"select * from history h
|
||||||
where command like ?1 || '%'
|
where command like ?1 || '%'
|
||||||
|
and timestamp = (
|
||||||
|
select max(timestamp) from history
|
||||||
|
where h.command = history.command
|
||||||
|
)
|
||||||
order by timestamp desc {}",
|
order by timestamp desc {}",
|
||||||
limit.clone()
|
limit.clone()
|
||||||
)
|
)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "atuin-common"
|
name = "atuin-common"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "atuin-server"
|
name = "atuin-server"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
159
install.sh
Normal file → Executable file
159
install.sh
Normal file → Executable file
@ -1 +1,158 @@
|
|||||||
#!/
|
#! /usr/bin/env sh
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
_______ _______ __ __ ___ __ _
|
||||||
|
| _ || || | | || | | | | |
|
||||||
|
| |_| ||_ _|| | | || | | |_| |
|
||||||
|
| | | | | |_| || | | |
|
||||||
|
| | | | | || | | _ |
|
||||||
|
| _ | | | | || | | | | |
|
||||||
|
|__| |__| |___| |_______||___| |_| |__|
|
||||||
|
|
||||||
|
Magical shell history
|
||||||
|
|
||||||
|
Atuin setup
|
||||||
|
https://github.com/ellie/atuin
|
||||||
|
|
||||||
|
Please file an issue if you encounter any problems!
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
LATEST_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/ellie/atuin/releases/latest)
|
||||||
|
LATEST_VERSION=$(echo $LATEST_RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
|
||||||
|
|
||||||
|
__atuin_install_arch(){
|
||||||
|
echo "Arch Linux detected!"
|
||||||
|
echo "Attempting AUR install"
|
||||||
|
|
||||||
|
if command -v yaourt &> /dev/null; then
|
||||||
|
echo "Found yaourt"
|
||||||
|
yaourt -S atuin
|
||||||
|
elif command -v yay &> /dev/null; then
|
||||||
|
echo "Found yay"
|
||||||
|
yay -S atuin
|
||||||
|
elif command -v pakku &> /dev/null; then
|
||||||
|
echo "Found pakku"
|
||||||
|
pakku -S atuin
|
||||||
|
elif command -v pamac &> /dev/null; then
|
||||||
|
echo "Found pamac"
|
||||||
|
pamac install atuin
|
||||||
|
else
|
||||||
|
echo "Failed to install atuin! Please try manually: https://aur.archlinux.org/packages/atuin/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
__atuin_install_ubuntu(){
|
||||||
|
echo "Ubuntu detected"
|
||||||
|
# TODO: select correct AARCH too
|
||||||
|
ARTIFACT_URL="https://github.com/account/project/releases/download/$LATEST_VERSION/atuin_$LATEST_VERSION_amd64.deb"
|
||||||
|
|
||||||
|
TEMP_DEB="$(mktemp)" &&
|
||||||
|
wget -O "$TEMP_DEB" $ARTIFACT_URL
|
||||||
|
sudo dpkg -i "$TEMP_DEB"
|
||||||
|
rm -f "$TEMP_DEB"
|
||||||
|
}
|
||||||
|
|
||||||
|
__atuin_install_fedora(){
|
||||||
|
echo "Fedora detected"
|
||||||
|
# TODO: select correct AARCH too
|
||||||
|
ARTIFACT_URL="https://github.com/account/project/releases/download/$LATEST_VERSION/atuin_$LATEST_VERSION_amd64.rpm"
|
||||||
|
|
||||||
|
TEMP_DEB="$(mktemp)" &&
|
||||||
|
wget -O "$TEMP_DEB" $ARTIFACT_URL
|
||||||
|
sudo dpkg -i "$TEMP_DEB"
|
||||||
|
rm -f "$TEMP_DEB"
|
||||||
|
}
|
||||||
|
|
||||||
|
__atuin_install_linux(){
|
||||||
|
echo "Detected Linux!"
|
||||||
|
echo "Checking distro..."
|
||||||
|
|
||||||
|
if $(uname -a | grep -qi "Microsoft"); then
|
||||||
|
OS="UbuntuWSL"
|
||||||
|
else
|
||||||
|
if ! command -v lsb_release &> /dev/null; then
|
||||||
|
echo "lsb_release could not be found, unable to determine your distribution"
|
||||||
|
echo "If you are using Arch, please get lsb_release from AUR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
OS=$(lsb_release -i | awk '{ print $3 }')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $OS == "Arch" ] || [ $OS == "ManjaroLinux" ]; then
|
||||||
|
__atuin_install_arch
|
||||||
|
elif [ $OS == "Ubuntu" ] || [ $OS == "Debian" ] || [ $OS == "Linuxmint" ] || [ $OS == "Parrot" ] || [ $OS == "Kali" ]; then
|
||||||
|
__atuin_install_ubuntu
|
||||||
|
elif [ $OS == "Fedora" ]; then
|
||||||
|
__atuin_install_fedora
|
||||||
|
else
|
||||||
|
# TODO: download a binary or smth
|
||||||
|
__atuin_install_unsupported
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__atuin_install_mac(){
|
||||||
|
echo "Detected Mac!"
|
||||||
|
|
||||||
|
if command -v brew &> /dev/null
|
||||||
|
then
|
||||||
|
echo "Installing with brew"
|
||||||
|
brew tap ellie/atuin
|
||||||
|
brew install atuin
|
||||||
|
else
|
||||||
|
echo "Could not find brew, installing with Cargo"
|
||||||
|
__atuin_install_unsupported
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
__atuin_install_cargo(){
|
||||||
|
echo "Attempting install with cargo"
|
||||||
|
|
||||||
|
if ! command -v cargo &> /dev/null
|
||||||
|
then
|
||||||
|
echo "cargo not found! Attempting to install rustup"
|
||||||
|
|
||||||
|
if command -v rustup &> /dev/null
|
||||||
|
then
|
||||||
|
echo "rustup was found, but cargo wasn't. Something is up with your install"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -q
|
||||||
|
|
||||||
|
echo "rustup installed! Attempting cargo install"
|
||||||
|
|
||||||
|
cargo install atuin
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__atuin_install_unsupported(){
|
||||||
|
echo "Unknown or unsupported OS"
|
||||||
|
echo "Please check the README at https://github.com/ellie/atuin for manual install instructions"
|
||||||
|
echo "If you have any problems, please open an issue!"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
read -p "Do you wish to attempt an install with `cargo`?" yn
|
||||||
|
case $yn in
|
||||||
|
[Yy]* ) __atuin_install_cargo; break;;
|
||||||
|
[Nn]* ) exit;;
|
||||||
|
* ) echo "Please answer yes or no.";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# TODO: would be great to support others!
|
||||||
|
case "$OSTYPE" in
|
||||||
|
linux*) __atuin_install_linux ;;
|
||||||
|
darwin*) __atuin_install_mac ;;
|
||||||
|
msys*) __atuin_install_unsupported ;;
|
||||||
|
solaris*) __atuin_install_unsupported ;;
|
||||||
|
bsd*) __atuin_install_unsupported ;;
|
||||||
|
*) __atuin_install_unsupported ;;
|
||||||
|
esac
|
||||||
|
Loading…
Reference in New Issue
Block a user