atuinsh / atuin

✨ Magical shell history
https://atuin.sh
MIT License
18.54k stars 520 forks source link

How to sync/import cross different hosts? #2177

Closed drinktee closed 3 days ago

drinktee commented 1 week ago

Hi atuin is a good project. But I get a problem. I sync my macbook-1 to server. And now I want sync from server to my macbook-2. Can atuin do this?

ellie commented 1 week ago

It can! That's one of the main features :)

Read the login section here: https://docs.atuin.sh/guide/sync/#login

drinktee commented 1 week ago

Thanks @ellie . I have sync historyA of macbook1 and historyB of macbook2 to server. But when I sync and import history in macboo1, only historyA imported. How can my macbook1 import the historyB?

ellie commented 1 week ago

Have you logged in to the same account on both machines?

If you could share the output of atuin doctor from each, that would be helpful

mateuscomh commented 1 week ago

If I may add one more question related to this topic, as I have some questions about synchronization.

I realized that in addition to having to use atuin sync on both hosts, I also had to use atuin store push and pull to sync between two hosts with --force. Are these steps really necessary or is syncing enough?

drinktee commented 1 week ago

Mac1

Atuin Doctor
Checking for diagnostics

Please include the output below with any bug reports or issues

{
  "atuin": {
    "version": "18.3.0",
    "sync": {
      "cloud": false,
      "records": true,
      "auto_sync": false,
      "last_sync": "2024-06-21 7:56:03.954431 +00:00:00"
    },
    "sqlite_version": "3.46.0"
  },
  "shell": {
    "name": "zsh",
    "default": "zsh",
    "plugins": [
      "atuin"
    ],
    "preexec": "built-in"
  },
  "system": {
    "os": "Darwin",
    "arch": "arm64",
    "version": "14.5",
    "disks": [
      {
        "name": "Macintosh HD",
        "filesystem": "apfs"
      },
      {
        "name": "Macintosh HD",
        "filesystem": "apfs"
      }
    ]
  }
}

Mac2

Atuin Doctor
Checking for diagnostics
Please include the output below with any bug reports or issues

{
  "atuin": {
    "version": "18.3.0",
    "sync": {
      "cloud": false,
      "records": false,
      "auto_sync": true,
      "last_sync": "2024-06-21 1:15:34.619935 +00:00:00"
    },
    "sqlite_version": "3.44.0"
  },
  "shell": {
    "name": "zsh",
    "default": "zsh",
    "plugins": [
      "atuin"
    ],
    "preexec": "built-in"
  },
  "system": {
    "os": "Darwin",
    "arch": "arm64",
    "version": "12.5.1",
    "disks": [
      {
        "name": "Macintosh HD",
        "filesystem": "apfs"
      },
      {
        "name": "Macintosh HD",
        "filesystem": "apfs"
      }
    ]
  }
}

And I found the hostname of two macs in server's postgresqlDB is different. @ellie

ellie commented 1 week ago

Ah I see. Could you set

[sync]
records = true

on mac 2 please?

Note that the two differ:

mac1

"sync": {
      "cloud": false,
      "records": true,
      "auto_sync": false,
      "last_sync": "2024-06-21 7:56:03.954431 +00:00:00"
    },

mac2

"sync": {
      "cloud": false,
      "records": false,
      "auto_sync": true,
      "last_sync": "2024-06-21 1:15:34.619935 +00:00:00"
    },
drinktee commented 4 days ago

mac2

{
  "atuin": {
    "version": "18.3.0",
    "sync": {
      "cloud": false,
      "records": true,
      "auto_sync": true,
      "last_sync": "2024-06-24 23:30:27.168005 +00:00:00"
    },
    "sqlite_version": "3.44.0"
  },
  "shell": {
    "name": "zsh",
    "default": "zsh",
    "plugins": [
      "atuin"
    ],
    "preexec": "built-in"
  },
  "system": {
    "os": "Darwin",
    "arch": "arm64",
    "version": "12.5.1",
    "disks": [
      {
        "name": "Macintosh HD",
        "filesystem": "apfs"
      },
      {
        "name": "Macintosh HD",
        "filesystem": "apfs"
      }
    ]
  }
}

And now I do atuin sync but nothing different. Mac1 and Mac2 always show their own items.

drinktee commented 4 days ago

This is the config.toml. @ellie I have login and in the atuin server, I can foud tow hosts's histories.

## where to store your database, default is your system data directory
## linux/mac: ~/.local/share/atuin/history.db
## windows: %USERPROFILE%/.local/share/atuin/history.db
# db_path = "~/.history.db"

## where to store your encryption key, default is your system data directory
## linux/mac: ~/.local/share/atuin/key
## windows: %USERPROFILE%/.local/share/atuin/key
# key_path = "~/.key"

## where to store your auth session token, default is your system data directory
## linux/mac: ~/.local/share/atuin/session
## windows: %USERPROFILE%/.local/share/atuin/session
# session_path = "~/.session"

## date format used, either "us" or "uk"
# dialect = "us"

## default timezone to use when displaying time
## either "l", "local" to use the system's current local timezone, or an offset
## from UTC in the format of "<+|->H[H][:M[M][:S[S]]]"
## for example: "+9", "-05", "+03:30", "-01:23:45", etc.
# timezone = "local"

## enable or disable automatic sync
# auto_sync = true

## enable or disable automatic update checks
# update_check = true

## address of the sync server
# sync_address = "https://api.atuin.sh"
sync_address = "http://xxx:8888"
## how often to sync history. note that this is only triggered when a command
## is ran, so sync intervals may well be longer
## set it to 0 to sync after every command
# sync_frequency = "10m"

## which search mode to use
## possible values: prefix, fulltext, fuzzy, skim
# search_mode = "fuzzy"

## which filter mode to use
## possible values: global, host, session, directory
# filter_mode = "global"

## With workspace filtering enabled, Atuin will filter for commands executed
## in any directory within a git repository tree (default: false)
# workspaces = false

## which filter mode to use when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "filter_mode"
## leave unspecified to use same mode set in "filter_mode"
# filter_mode_shell_up_key_binding = "global"

## which search mode to use when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "search_mode"
## leave unspecified to use same mode set in "search_mode"
# search_mode_shell_up_key_binding = "fuzzy"

## which style to use
## possible values: auto, full, compact
# style = "auto"

## the maximum number of lines the interface should take up
## set it to 0 to always go full screen
# inline_height = 0

## Invert the UI - put the search bar at the top , Default to `false`
# invert = false

## enable or disable showing a preview of the selected command
## useful when the command is longer than the terminal width and is cut off
# show_preview = true

## what to do when the escape key is pressed when searching
## possible values: return-original, return-query
# exit_mode = "return-original"

## possible values: emacs, subl
# word_jump_mode = "emacs"

## characters that count as a part of a word
# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

## number of context lines to show when scrolling by pages
# scroll_context_lines = 1

## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts
## alt-0 .. alt-9
# ctrl_n_shortcuts = false

## default history list format - can also be specified with the --format arg
# history_format = "{time}\t{command}\t{duration}"

## prevent commands matching any of these regexes from being written to history.
## Note that these regular expressions are unanchored, i.e. if they don't start
## with ^ or end with $, they'll match anywhere in the command.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
# history_filter = [
#   "^secret-cmd",
#   "^innocuous-cmd .*--secret=.+",
# ]

## prevent commands run with cwd matching any of these regexes from being written
## to history. Note that these regular expressions are unanchored, i.e. if they don't
## start with ^ or end with $, they'll match anywhere in CWD.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
# cwd_filter = [
#   "^/very/secret/area",
# ]

## Configure the maximum height of the preview to show.
## Useful when you have long scripts in your history that you want to distinguish
## by more than the first few lines.
# max_preview_height = 4

## Configure whether or not to show the help row, which includes the current Atuin
## version (and whether an update is available), a keymap hint, and the total
## amount of commands in your history.
# show_help = true

## Configure whether or not to show tabs for search and inspect
# show_tabs = true

## Defaults to true. This matches history against a set of default regex, and will not save it if we get a match. Defaults include
## 1. AWS key id
## 2. Github pat (old and new)
## 3. Slack oauth tokens (bot, user)
## 4. Slack webhooks
## 5. Stripe live/test keys
# secrets_filter = true

## Defaults to true. If enabled, upon hitting enter Atuin will immediately execute the command. Press tab to return to the shell and edit.
# This applies for new installs. Old installs will keep the old behaviour unless configured otherwise.
enter_accept = true

## Defaults to "emacs".  This specifies the keymap on the startup of `atuin
## search`.  If this is set to "auto", the startup keymap mode in the Atuin
## search is automatically selected based on the shell's keymap where the
## keybinding is defined.  If this is set to "emacs", "vim-insert", or
## "vim-normal", the startup keymap mode in the Atuin search is forced to be
## the specified one.
# keymap_mode = "auto"

## Cursor style in each keymap mode.  If specified, the cursor style is changed
## in entering the cursor shape.  Available values are "default" and
## "{blink,steady}-{block,underline,bar}".
# keymap_cursor = { emacs = "blink-block", vim_insert = "blink-block", vim_normal = "steady-block" }

# network_connect_timeout = 5
# network_timeout = 5

## Timeout (in seconds) for acquiring a local database connection (sqlite)
# local_timeout = 5

## Set this to true and Atuin will minimize motion in the UI - timers will not update live, etc.
## Alternatively, set env NO_MOTION=true
# prefers_reduced_motion = false

[stats]
## Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl
# common_subcommands = [
#   "apt",
#   "cargo",
#   "composer",
#   "dnf",
#   "docker",
#   "git",
#   "go",
#   "ip",
#   "kubectl",
#   "nix",
#   "nmcli",
#   "npm",
#   "pecl",
#   "pnpm",
#   "podman",
#   "port",
#   "systemctl",
#   "tmux",
#   "yarn",
# ]

## Set commands that should be totally stripped and ignored from stats
# common_prefix = ["sudo"]

## Set commands that will be completely ignored from stats
# ignored_commands = [
#   "cd",
#   "ls",
#   "vi"
# ]

[keys]
# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry.
# scroll_exits = false

[sync]
# Enable sync v2 by default
# This ensures that sync v2 is enabled for new installs only
# In a later release it will become the default across the board
records = true

[preview]
## which preview strategy to use to calculate the preview height (respects max_preview_height).
## possible values: auto, static
## auto: length of the selected command.
## static: length of the longest command stored in the history.
# strategy = "auto"

[daemon]
## Enables using the daemon to sync. Requires the daemon to be running in the background. Start it with `atuin daemon`
# enabled = false

## How often the daemon should sync in seconds
# sync_frequency = 300

## The path to the unix socket used by the daemon (on unix systems)
## linux/mac: ~/.local/share/atuin/atuin.sock
## windows: Not Supported
# socket_path = "~/.local/share/atuin/atuin.sock"

## Use systemd socket activation rather than opening the given path (the path must still be correct for the client)
## linux: false
## mac/windows: Not Supported
# systemd_socket = false

## The port that should be used for TCP on non unix systems
# tcp_port = 8889
drinktee commented 3 days ago

Can hostname be different?

drinktee commented 3 days ago

Solve this! Just use the same atuin key.

ellie commented 3 days ago

Solve this! Just use the same atuin key.

Quick q; did you read the setting up guide here? https://docs.atuin.sh/guide/sync/

It should cover everything to do with the key, but I'd like to make sure it's harder to miss