Commit Graph

1189 Commits

Author SHA1 Message Date
Ellie Huxtable
8460210202
feat: add progress bars to sync and store init (#1684)
Replace lots of logging with some progress bars. This looks much nicer

I'd like to move it out of the atuin-client crate and into the atuin
crate. But first, I want to decouple a lot of the record moving, so it
can wait until that's done.
2024-02-08 13:34:41 +00:00
Ellie Huxtable
1993653102
fix(tests): add Settings::utc() for utc settings (#1677)
Means we don't try and load timezones in tests, as this fails due to
multiple threads.

Also allow specifying '0' or 'utc' as a timezone
2024-02-06 17:47:00 +00:00
cyqsimon
318bdd8955
Add timezone configuration option & CLI overrides (#1517)
* Allow specifying a timezone in history search/list

* Fix clippy complaints

* Add a bit more comment on supporting named timezones

* Add rudimentary tests

* Ditch local timezone test

* Timezone configuration support

* Set default timezone to `local`

* `--tz` -> `--timezone`

`--tz` is kept as a visible alias
2024-02-06 15:34:03 +00:00
dependabot[bot]
8372abb613
chore(deps): bump debian (#1673)
Bumps debian from bullseye-20240110-slim to bullseye-20240130-slim.

---
updated-dependencies:
- dependency-name: debian
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-05 09:34:16 +00:00
Ellie Huxtable
6a2576fc5b
chore(ci): run rust build/test/check on 3 platforms (#1675)
* chore(ci): run rust build/test/check on 3 platforms

* need to properly test windows

* do not need to strip here, and windows has a suffix anyway
2024-02-05 09:28:55 +00:00
Ellie Huxtable
3ff2e2552f
fix: correct download list for incremental builds (#1672) 2024-02-04 20:06:47 +00:00
Ellie Huxtable
cc2aa6524d
feat: disable auto record store init (#1671)
I think this makes more sense as a manual action
2024-02-04 19:24:43 +00:00
Joe Ardent
b7bb583d8d
fix: set durability for sqlite to recommended settings (#1667)
Also do an optimize on connection close. Fixes lag on history insertion.
2024-02-04 18:42:48 +00:00
Koichi Murase
c2af6f7ae8
fix(bash/preexec): support termcap names for tput (#1670)
* fix(bash/preexec): support termcap-based tput

The current uses of tput specify the terminfo entry names.  However,
there are different implementations of the tput command.  There are
two ways to specify the terminal capability: terminfo and termcap
names.  Although recent implementations of tput (such as ncurses in
Linux) accepts the terminfo name, some accept both the terminfo and
termcap names, and some old implementations (such as in FreeBSD) only
accept the termcap names.

In this patch, we first attempt the terminfo name and then the termcap
name if the terminfo name fails.

Note: When both fail due to e.g. non-existent tput, we end up with
outputting nothing.  This does not cause a serious problem because it
just does not clear the previous prompts.

* perf(bash/preexec): cache the results of tput

With the current implementation, we spwan 10 processes of the tput
command at most every time we perform `enter_accept`.  In this patch,
to reduce the delay, we separate the related code into a function and
cache the results of the tput commands.
2024-02-04 17:36:06 +00:00
Koichi Murase
9c210e8987 fix(bash/preexec): erase the previous prompt before overwriting
When the previous prompt is longer than the prompt calculated by the
current PS1, some extra characters from the previous prompt remains in
the terminal display.  In this patch, we erase the content of the
previous prompt before outputting our new prompt.
2024-02-03 23:49:14 +01:00
Koichi Murase
b00887562b fix(bash/preexec): erase the prompt last line before Bash renders it
Fixes https://github.com/atuinsh/atuin/issues/1668

When the prompt becomes longer after "enter_accept", Bash still uses
the previous shorter prompt, so the extra characters in the new prompt
drawn by Atuin is left in the terminal display.  In this patch, we
remove the last line of the prompt drawn by Atuin so that it doesn't
interfere with the last line of the prompt drawn by Bash.
2024-02-03 23:49:14 +01:00
Ellie Huxtable
374255dd58 feat: add store pull
This allows the user to

1. Specify that they want to sync, but ONLY pull new data
2. Specify that they wish to force pull, which will wipe the local store
   and download it from the remote

With the other set of changes, this allows the user to perform
sufficient maintenance to recovery from most errors I can think of right
now.
2024-02-02 18:01:09 +00:00
Ellie Huxtable
c9a453289e feat: add store push --force
This will

1. Wipe the remote store
2. Upload all of the local store to remote

Imagine the scenario where you end up with some mixed keys locally :(

You confirm this with

```
atuin store verify
```

You then fix it locally with

```
atuin store purge
```

Ensure that your local changes are reflected remotely with

```
atuin store push --force
```

and then (another PR, coming soon), update all other hosts with

```
atuin store pull --force
```
2024-02-02 18:01:09 +00:00
Ellie Huxtable
3c420f85f6 feat: failure to decrypt history = failure to sync
Now that the user can purge their store and _do something_ about invalid
records, we should not tolerate mixed key records in store.
2024-02-02 18:01:09 +00:00
Ellie Huxtable
754f17ddb4 feat: add store purge command
This command will delete all records from the local store that cannot be
decrypted with the current key.

If a verify fails before running this, it should pass _after_ running
it.

Required afterwards:
- A `push --force`, to allow ensuring the remote store equals the local
  store (deletions have now occured!)
- A `pull --force`, as once remote has been forced then local needs the
  same

Nice to have:
- Provide "old" keys to purge, in case the are not lost. Or maybe rekey.
2024-02-02 18:01:09 +00:00
Ellie Huxtable
212dc928c9 feat: add verify command to local store
This ensures that the local store can be decrypted with the current
in-use key.

If it cannot, we can go on to perform maintenance operations and get
back into a happy state.
2024-02-02 18:01:09 +00:00
Conrad Ludgate
744f0059c2
feat: add prefers_reduced_motion flag (#1645)
* feat: add prefers_reduced_motion flag

* use NO_MOTION, and ensure type is bool

* update default config

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-02-01 15:17:29 +00:00
Ellie Huxtable
286f6eb5b3
chore(ci): re-enable test cache, add separate check step (#1663) 2024-02-01 15:08:01 +00:00
Ellie Huxtable
a6f1fe2c10
feat: reencrypt/rekey local store (#1662)
* feat: add record re-encrypting

* automatically re-encrypt store when logging in with a different key

* fix

* actually save the new key lmao

* add rekey

* save new key

* decode bip key

* "add test for sqlite store re encrypt"
2024-02-01 15:00:46 +00:00
Ellie Huxtable
f6b541dbed
chore(ci): use github m1 for release builds (#1658) 2024-01-30 18:29:13 +00:00
Matthias Beyer
8e520b1d72
chore: Set ATUIN_ variables for development in devshell (#1653)
I accidentially broke my atuin database by executing `atuin` from the
PR I was working on without setting these variables and had to manually
roll back my local database.

That shouldn't happen, so we set the database and record store path in
the devshell to something that does not overwrite our normal databases.
We also warn if these files already exist, because when entering the
devshell, a user might want to start from a clean slate here.

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
2024-01-30 14:04:15 +00:00
Ellie Huxtable
335f2220c3
fix: never overwrite the key (#1657)
Now that local history is stored encrypted, new_key should not overwrite
an existing one. This may be frustrating, but will remove the risk of
Atuin generating a new key and the user losing their old one.
2024-01-30 14:01:20 +00:00
Ellie Huxtable
9597080825
feat: add store push (#1649)
* feat: add store push

* only push for the current host unless specified

* tidy up

* tidy up some more

* sort features
2024-01-30 13:41:01 +00:00
Ellie Huxtable
366b8ea97b
feat: automatically init history store when record sync is enabled (#1634)
* add support for getting the total length of a store

* tidy up sync

* auto call init if history is ahead

* fix import order, key regen

* fix import order, key regen

* do not delete key when user deletes account

* message output

* remote init store command; this is now automatic

* should probs make that function return u64 at some point
2024-01-29 16:38:24 +00:00
Ellie Huxtable
15bad15f48
test: add multi-user integration tests (#1648)
1. Test that multiple users can be registered without clobbering each
   other
2. Test that one user can change their password without it affecting the
   other

I'd like to also test sync with multiple users, to ensure we never
accidentally leak data cross-users.
2024-01-29 13:06:47 +00:00
Ellie Huxtable
e53c7c9dd6
chore: disable nix tests (#1646)
For a few reasons

1. This step is really, really slow. I don't think there's sufficient
   value in a slow CI step to keep it
2. Whenever we add an integration test it needs to be added to the
   ignore list. I want to keep friction on adding such tests as low as
   is possible.
3. We already run tests in a bunch of places, so I don't think this is
   needed

Ref: #1123
2024-01-29 12:44:06 +00:00
Matthieu LAURENT
c56f8ff736
Add xonsh support (#1375)
* Add basic xonsh support

* Add init xonsh command

* Add Xonsh install instructions in docs

* Add xonsh ctrl-R search

* update xonsh script and instructions

Summary of changes:
* Added duration to postcommand hook
* Switched main search operation to use `subproccess.run()` rather than running as an xonsh shell command - this a) allows us to capture stderr without needing a temporary file and b) avoids a weird broken-buffer state that results from running a fullscreen TUI and then programmatically editing the buffer
* Added support for immediately executing chosen command via `__atuin_accept__:` (like bash/zsh/fish)

* strip newline from command before sending to atuin

* Add basic xonsh support

* Add init xonsh command

* Add xonsh ctrl-R search

* Remove advanced-install guide (was accidentally re-added during rebase)

* Clean up

Xonsh doesn't import private functions into the local namespace when sourcing a file

* Add xonsh ro readme

* Respect ATUIN_NOBIND

* Format with black, and improve PEP8 compliance

* Add up search

* Format rust code

---------

Co-authored-by: Joseph Montanaro <jfmonty2@gmail.com>
2024-01-29 12:17:36 +00:00
TymanWasTaken
0faf414cd9
feat: Add change-password command & support on server (#1615)
* Add change-password command & support on server

* Add a test for password change

* review: run format

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-01-29 11:17:10 +00:00
Dongxu Wang
e1c2b9c783
feat: make history list format configurable (#1638)
* feat: make history list format configurable

* Update atuin-client/config.toml

* review: run format

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-01-29 10:58:20 +00:00
Koichi Murase
2ef5169357
feat(zsh): update widget names (#1631)
The current widget names for Zsh start with "_", which gives an
impression to users that those widgets are internal API and should not
be bound by the users.  However, we actually instruct users to set up
custom keybindings by specifying them to bindkey.

In other shells, a separate namespace for widgets are not prepared, so
we want to prefix "_" to shell function names to tell the users that
these are not the commands that are supposed to be called from the
command line.  However, the widget names are separated in their own
namespace in Zsh, so we do not have to isolate them by prefixing "_".
In fact, other frameworks such as `fzf` define widgets with names not
starting with "_".

In this patch, we update the widget names to have the form "atuin-*".
The old widget names that existed in the release version <= 17.2.1 are
left for compatibility.
2024-01-29 10:35:34 +00:00
Conrad Ludgate
bdcb143996
chore(deps): update axum (#1637) 2024-01-28 13:33:45 +00:00
Ellie Huxtable
4b20544474
chore: use resolver 2, update editions + cargo (#1635) 2024-01-26 17:59:06 +00:00
Ellie Huxtable
cdf31ad839
docs: Update CONTRIBUTING.md (#1633) 2024-01-26 16:24:57 +00:00
Ellie Huxtable
2f64778ceb
docs: Create pull_request_template.md (#1632) 2024-01-26 16:18:58 +00:00
Nemo157
d9c40d6895
fix: Skip padding time if it will overflow the allowed prefix length (#1630) 2024-01-26 11:53:34 +00:00
Koichi Murase
2e48e21692
feat(shell)!: bind the Atuin search to "/" in vi-normal mode (#1629)
A search feature in the vi-normal mode of shells can be called by "/".
To make the shell-integration keybindings consistent with the existing
shell keybindings, we add the keybinding to "/" in this patch.

This patch removes the Ctrl-r binding in the "vicmd" keymap in Zsh.
The key Ctrl-r is used for the `redo` operation in the vi-normal mode
by default.  We would like to avoid overwriting an existing keybinding
with a totally different feature.
2024-01-26 11:48:00 +00:00
Nemo157
230bf2d1c6
feat(ui): When in vim-normal mode apply an alternative highlighting to the selected line (#1574)
This makes it much more obvious whether you're in normal or insert mode.
2024-01-26 10:49:04 +00:00
Mag Mell
d21de3cd25
chore: add feature to allow always disable check update (#1628)
* chore: add feature to allow always disable check update

In the packaging rules of some distributions, the software's self-update check needs to be permanently turned off

This commit will make it easier for these users to

* fix: formatting

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-01-26 09:45:42 +00:00
Peter Holloway
400e1ba23d
fix: Check for format errors when printing history (#1623)
The runtime formatting used to list history commands can fail in its
Display implementation and the error is not propagated through to the
write error it causes. Instead, the error is cached in the FormatArgs
being printed. It's a bit clumsy but by checking if there's a cached
error, we can get a more useful error for the user. eg,

    atuin search cargo --format '{invalid}'

gives

    history output failed with: The requested key "invalid" is unknown

instead of

    history output failed with: formatter error
2024-01-24 20:13:31 +00:00
Philippe Normand
079a078fdb
stats: Misc improvements (#1613)
* fix(stats): Don't bail/error if no command is found

An empty history shouldn't be source of error when printing stats.

* fix(stats): Improve help message a bit.

It wasn't clear what the period format could be.
2024-01-24 19:37:05 +00:00
Ellie Huxtable
bdc533d2bc
feat: add registered and deleted metrics (#1622) 2024-01-23 20:01:20 +00:00
Koichi Murase
067bda66e2
fix(bash): strip control chars generated by \[\] in PS1 with bash-preexec (#1620)
* fix(bash): strip control chars generated by \[\] in PS1 with bash-preexec

Fixes https://github.com/atuinsh/atuin/issues/1617

* perf(bash): count newlines using Bash built-in features
2024-01-23 17:53:47 +00:00
Peter Holloway
2bd7114cea
fix: Only escape control characters when writing to terminal (#1593)
When piping the output of `atuin history list` to a file, it makes more
sense for the literal commands to be written rather than the escaped
ones that would be printed to the terminal.
2024-01-23 10:21:45 +00:00
Philippe Normand
ed1ac5a2a9
docs: Mention environment variables for custom paths (#1614)
Thanks to Ellie and Pete's help on this forum post:
https://forum.atuin.sh/t/migration-was-previously-applied-but-is-missing-in-the-resolved-migrations/84
2024-01-23 10:13:53 +00:00
Ellie Huxtable
d84f5b2d33
feat: don't stop with invalid key (#1612)
An issue with the old sync was that if there was _one_ record encrypted
with a different key, sync would stop. You'd need to delete your account
and start from scratch. This sucked.

This change means we will carry on, and try to encrypt and build with as
much of the history as we are able to decrypt.

This is possible because we can quite happily store data on disk that we
cannot decrypt. The old store couldn't do this.

In future, we might consider a keyring containing multiple keys.
2024-01-22 20:07:19 +00:00
Ellie Huxtable
6af6c9066b
fix(tui): dedupe was removing history (#1610)
Related: https://forum.atuin.sh/t/search-ignoring-commands/74/5?u=ellie

When a user ran a duplicated command, but in another session, it was
removed by filters. This is because the subquery that was once used did
not have the same filters applied as the main query.

Instead of messing with subqueries, `group by` instead. This aligns with
the search() function
2024-01-22 17:06:34 +00:00
Ellie Huxtable
600ebc33ab
feat: make store init idempotent (#1609) 2024-01-22 16:48:21 +00:00
Koichi Murase
f727d6c8bf
refactor(search): refactor handling of key inputs (#1606) 2024-01-22 12:26:47 +00:00
Koichi Murase
e484a68b8b
feat(search): make cursor style configurable (#1595)
* feat(search): make cursor style configurable

The vim mode of the interactive Atuin search changes the cursor style
on a mode change, but the current implementation has the following
issues.

* The terminal's cursor style set by the Atuin search remains after
  Atuin exits.  This causes an inconsistency with the shell's setting
  for the cursor style.

* Also, the cursor style for each keymap mode is currently hardcoded
  in the source code, which is not necessarily consistent with the
  user's cursor-style setting in the shell.

* Since the current implementation does not set the cursor style for
  the initial keymap mode but only sets the cursor style when the
  keymap mode is changed, it also causes inconsistency in the cursor
  style and the actual keymap when the shell's keymap and Atuin's
  initial keymap mode are different.

This patch solves those issues by introducing an opt-in configuration
variable `keymap_cursor`.  By default, the vim mode does not change
the cursor style because there is no way to automatically determine
the cursor style consistent with the shell settings.  We enable the
feature only when the user specifies the preferred cursor style in
each mode in their config.  Also, the cursor style is set on the
startup of the Atuin search (based on the initial keymap mode) and is
reset on the termination of the Atuin search (based on the shell's
keymap mode that started the Atuin search).

* chore(settings): remove dependency on crossterm
2024-01-22 10:56:44 +00:00
Dongxu Wang
d13b7c31c1
fix(docs): update repo url in CONTRIBUTING.md (#1594) 2024-01-22 10:39:52 +00:00