diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 54bbbb4f..d547606b 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -23,8 +23,17 @@ jobs:
override: true
- 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:
runs-on: ubuntu-latest
@@ -71,3 +80,30 @@ jobs:
- name: Format
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 }}
diff --git a/Cargo.lock b/Cargo.lock
index f9f2252f..92f82cc0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -82,7 +82,7 @@ dependencies = [
[[package]]
name = "atuin"
-version = "0.6.1"
+version = "0.6.2"
dependencies = [
"async-trait",
"atuin-client",
@@ -114,7 +114,7 @@ dependencies = [
[[package]]
name = "atuin-client"
-version = "0.6.1"
+version = "0.6.2"
dependencies = [
"async-trait",
"atuin-common",
@@ -148,7 +148,7 @@ dependencies = [
[[package]]
name = "atuin-common"
-version = "0.6.1"
+version = "0.6.2"
dependencies = [
"chrono",
"eyre",
@@ -164,7 +164,7 @@ dependencies = [
[[package]]
name = "atuin-server"
-version = "0.6.1"
+version = "0.6.2"
dependencies = [
"async-trait",
"atuin-common",
diff --git a/Cargo.toml b/Cargo.toml
index 88a85823..f39702a7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,12 +1,29 @@
[package]
name = "atuin"
-version = "0.6.1"
+version = "0.6.2"
authors = ["Ellie Huxtable "]
edition = "2018"
license = "MIT"
description = "atuin - magical shell history"
homepage = "https://atuin.sh"
repository = "https://github.com/ellie/atuin"
+readme = "README.md"
+
+[package.metadata.deb]
+maintainer = "Ellie Huxtable "
+copyright = "2021, Ellie Huxtable "
+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]
members = ["./atuin-client", "./atuin-server", "./atuin-common"]
@@ -39,4 +56,3 @@ base64 = "0.13.0"
humantime = "2.1.0"
tabwriter = "1.2.1"
crossbeam-channel = "0.5.1"
-
diff --git a/README.md b/README.md
index 1a4b2701..a0fc9be7 100644
--- a/README.md
+++ b/README.md
@@ -12,9 +12,17 @@
-
+
+
+
+
+
+
+exit code, duration, time and command shown
+
+
- 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
- log exit code, cwd, hostname, session, command duration, etc
- smart interactive history search to replace ctrl-r
diff --git a/atuin-client/Cargo.toml b/atuin-client/Cargo.toml
index bd09ca42..434a7b03 100644
--- a/atuin-client/Cargo.toml
+++ b/atuin-client/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "atuin-client"
-version = "0.6.1"
+version = "0.6.2"
authors = ["Ellie Huxtable "]
edition = "2018"
license = "MIT"
diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs
index 057b399c..e56a8df0 100644
--- a/atuin-client/src/database.rs
+++ b/atuin-client/src/database.rs
@@ -274,8 +274,12 @@ impl Database for Sqlite {
let res = sqlx::query(
format!(
- "select * from history
+ "select * from history h
where command like ?1 || '%'
+ and timestamp = (
+ select max(timestamp) from history
+ where h.command = history.command
+ )
order by timestamp desc {}",
limit.clone()
)
diff --git a/atuin-common/Cargo.toml b/atuin-common/Cargo.toml
index 23d1ac82..2282f52d 100644
--- a/atuin-common/Cargo.toml
+++ b/atuin-common/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "atuin-common"
-version = "0.6.1"
+version = "0.6.2"
authors = ["Ellie Huxtable "]
edition = "2018"
license = "MIT"
diff --git a/atuin-server/Cargo.toml b/atuin-server/Cargo.toml
index 969aac9b..1a5c06cb 100644
--- a/atuin-server/Cargo.toml
+++ b/atuin-server/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "atuin-server"
-version = "0.6.1"
+version = "0.6.2"
authors = ["Ellie Huxtable "]
edition = "2018"
license = "MIT"
diff --git a/demo.gif b/demo.gif
new file mode 100644
index 00000000..1da6c0b6
Binary files /dev/null and b/demo.gif differ
diff --git a/install.sh b/install.sh
old mode 100644
new mode 100755
index 162602c0..b540a38b
--- a/install.sh
+++ b/install.sh
@@ -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