aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* chore(ci): run rust build/test/check on 3 platforms (#1675)Ellie Huxtable2024-02-05
| | | | | | | * 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
* fix: correct download list for incremental builds (#1672)Ellie Huxtable2024-02-04
|
* feat: disable auto record store init (#1671)Ellie Huxtable2024-02-04
| | | I think this makes more sense as a manual action
* fix: set durability for sqlite to recommended settings (#1667)Joe Ardent2024-02-04
| | | | | Also do an optimize on connection close. Fixes lag on history insertion.
* fix(bash/preexec): support termcap names for tput (#1670)Koichi Murase2024-02-04
| | | | | | | | | | | | | | | | | | | | | | | | | * 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.
* fix(bash/preexec): erase the previous prompt before overwritingKoichi Murase2024-02-03
| | | | | | | 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.
* fix(bash/preexec): erase the prompt last line before Bash renders itKoichi Murase2024-02-03
| | | | | | | | | | 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.
* feat: add `store pull`Ellie Huxtable2024-02-02
| | | | | | | | | | | | 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.
* feat: add `store push --force`Ellie Huxtable2024-02-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 ```
* feat: failure to decrypt history = failure to syncEllie Huxtable2024-02-02
| | | | | Now that the user can purge their store and _do something_ about invalid records, we should not tolerate mixed key records in store.
* feat: add store purge commandEllie Huxtable2024-02-02
| | | | | | | | | | | | | | | | | 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.
* feat: add verify command to local storeEllie Huxtable2024-02-02
| | | | | | | | 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.
* feat: add prefers_reduced_motion flag (#1645)Conrad Ludgate2024-02-01
| | | | | | | | | | | * 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>
* chore(ci): re-enable test cache, add separate check step (#1663)Ellie Huxtable2024-02-01
|
* feat: reencrypt/rekey local store (#1662)Ellie Huxtable2024-02-01
| | | | | | | | | | | | | | | | | * 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"
* chore(ci): use github m1 for release builds (#1658)Ellie Huxtable2024-01-30
|
* chore: Set ATUIN_ variables for development in devshell (#1653)Matthias Beyer2024-01-30
| | | | | | | | | | | | 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>
* fix: never overwrite the key (#1657)Ellie Huxtable2024-01-30
| | | | | 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.
* feat: add store push (#1649)Ellie Huxtable2024-01-30
| | | | | | | | | | | * feat: add store push * only push for the current host unless specified * tidy up * tidy up some more * sort features
* feat: automatically init history store when record sync is enabled (#1634)Ellie Huxtable2024-01-29
| | | | | | | | | | | | | | | | | | | * 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
* test: add multi-user integration tests (#1648)Ellie Huxtable2024-01-29
| | | | | | | | | 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.
* chore: disable nix tests (#1646)Ellie Huxtable2024-01-29
| | | | | | | | | | | | | 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
* Add xonsh support (#1375)Matthieu LAURENT2024-01-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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>
* feat: Add change-password command & support on server (#1615)TymanWasTaken2024-01-29
| | | | | | | | | | | * Add change-password command & support on server * Add a test for password change * review: run format --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* feat: make history list format configurable (#1638)Dongxu Wang2024-01-29
| | | | | | | | | | | * feat: make history list format configurable * Update atuin-client/config.toml * review: run format --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* feat(zsh): update widget names (#1631)Koichi Murase2024-01-29
| | | | | | | | | | | | | | | | | | 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.
* chore(deps): update axum (#1637)Conrad Ludgate2024-01-28
|
* chore: use resolver 2, update editions + cargo (#1635)Ellie Huxtable2024-01-26
|
* docs: Update CONTRIBUTING.md (#1633)Ellie Huxtable2024-01-26
|
* docs: Create pull_request_template.md (#1632)Ellie Huxtable2024-01-26
|
* fix: Skip padding time if it will overflow the allowed prefix length (#1630)Nemo1572024-01-26
|
* feat(shell)!: bind the Atuin search to "/" in vi-normal mode (#1629)Koichi Murase2024-01-26
| | | | | | | | | | 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.
* feat(ui): When in vim-normal mode apply an alternative highlighting to the ↵Nemo1572024-01-26
| | | | | selected line (#1574) This makes it much more obvious whether you're in normal or insert mode.
* chore: add feature to allow always disable check update (#1628)Mag Mell2024-01-26
| | | | | | | | | | | | | * 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>
* fix: Check for format errors when printing history (#1623)Peter Holloway2024-01-24
| | | | | | | | | | | | | | | | | 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
* stats: Misc improvements (#1613)Philippe Normand2024-01-24
| | | | | | | | | * 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.
* feat: add registered and deleted metrics (#1622)Ellie Huxtable2024-01-23
|
* fix(bash): strip control chars generated by `\[\]` in PS1 with bash-preexec ↵Koichi Murase2024-01-23
| | | | | | | | | (#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
* fix: Only escape control characters when writing to terminal (#1593)Peter Holloway2024-01-23
| | | | | 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.
* docs: Mention environment variables for custom paths (#1614)Philippe Normand2024-01-23
| | | | 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
* feat: don't stop with invalid key (#1612)Ellie Huxtable2024-01-22
| | | | | | | | | | | | | 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.
* fix(tui): dedupe was removing history (#1610)Ellie Huxtable2024-01-22
| | | | | | | | | | 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
* feat: make store init idempotent (#1609)Ellie Huxtable2024-01-22
|
* refactor(search): refactor handling of key inputs (#1606)Koichi Murase2024-01-22
|
* feat(search): make cursor style configurable (#1595)Koichi Murase2024-01-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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
* fix(docs): update repo url in CONTRIBUTING.md (#1594)Dongxu Wang2024-01-22
|
* chore(deps): bump argon2 from 0.5.2 to 0.5.3 (#1603)dependabot[bot]2024-01-22
| | | | | | | | | | | | | | Bumps [argon2](https://github.com/RustCrypto/password-hashes) from 0.5.2 to 0.5.3. - [Commits](https://github.com/RustCrypto/password-hashes/compare/argon2-v0.5.2...argon2-v0.5.3) --- updated-dependencies: - dependency-name: argon2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* report alternate keys so shift still works (#1601)Conrad Ludgate2024-01-21
|
* chore(deps): bump the cargo group across 1 directories with 1 update (#1591)dependabot[bot]2024-01-19
| | | | | | | | | | | | | | | | | | | Bumps the cargo group with 1 update in the /. directory: [h2](https://github.com/hyperium/h2). Updates `h2` from 0.3.22 to 0.3.24 - [Release notes](https://github.com/hyperium/h2/releases) - [Changelog](https://github.com/hyperium/h2/blob/v0.3.24/CHANGELOG.md) - [Commits](https://github.com/hyperium/h2/compare/v0.3.22...v0.3.24) --- updated-dependencies: - dependency-name: h2 dependency-type: indirect dependency-group: cargo-security-group ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix: add acquire timeout to sqlite database connection (#1590)Ellie Huxtable2024-01-19
| | | | | | | | | | | | | | | | * fix: add acquire timeout to sqlite database connection This should fix #1503 I wasn't able to trigger enough IO pressure for the SQL connection to be a problem. This adds `local_timeout` to the client config. This is a float, and represents the number of seconds (units in line with the other timeouts, though those are ints). Users may well want to reduce this if they regularly have issues, but by default I think 2s is fine and avoids a non-responsive system in bad situations. * tests