From 67a479973bedb1c9cf39d162befb834db95a6962 Mon Sep 17 00:00:00 2001 From: tombdf Date: Sat, 21 Dec 2024 00:33:52 +0100 Subject: [PATCH] Update .chezmoiexternal.toml Update README.md Update .bashrc Update .zshrc Add .config/atuin/config.toml Update scripts/shells.sh Update utils/helpers.sh Update utils/packages --- .chezmoiexternal.toml | 5 + README.md | 4 +- dot_bashrc | 2 +- dot_zshrc | 166 ++++++------- private_dot_config/atuin/private_config.toml | 234 +++++++++++++++++++ scripts/shells.sh | 4 + utils/helpers.sh | 7 + utils/packages | 1 + 8 files changed, 337 insertions(+), 86 deletions(-) create mode 100644 private_dot_config/atuin/private_config.toml diff --git a/.chezmoiexternal.toml b/.chezmoiexternal.toml index 5924262..9a3c888 100644 --- a/.chezmoiexternal.toml +++ b/.chezmoiexternal.toml @@ -3,6 +3,11 @@ url = "https://raw.githubusercontent.com/dandavison/delta/main/themes.gitconfig" refreshPeriod = "168h" +[".bash-preexec.sh"] + type = "file" + url = "https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh" + refreshPeriod = "168h" + [".vim/autoload/plug.vim"] type = "file" url = "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" diff --git a/README.md b/README.md index a7c0550..eb5c855 100644 --- a/README.md +++ b/README.md @@ -95,8 +95,8 @@ Usage of the command : `tldr lsd`
#### Rip -**Command** : `rip` -**Aliased by** : `rm` +**Command** : `rip` +**Aliased by** : `rm` [Github page](https://github.com/nivekuil/rip) Rip is a **rm** replacement. It will send all the deleted files to the graveyard (`/tmp/graveyard-$USER` or `$XDG_DATA_HOME/graveyard`), which means that the files can be restored. diff --git a/dot_bashrc b/dot_bashrc index d8ef639..a49bfd8 100644 --- a/dot_bashrc +++ b/dot_bashrc @@ -134,4 +134,4 @@ eval "$(zoxide init --cmd cd bash)" eval "$(oh-my-posh init bash)" [[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh -eval "$(atuin init bash)" +eval "$(atuin init bash --disable-up-arrow)" diff --git a/dot_zshrc b/dot_zshrc index f815822..34ea263 100644 --- a/dot_zshrc +++ b/dot_zshrc @@ -9,64 +9,64 @@ # ########################################################################## -# zsh and zinit configuration ---------------------------------------------------------------- {{{ +# Zsh and Zinit configuration ---------------------------------------------------------------- {{{ -# if you come from bash you might have to change your $path. -export path=$home/bin:/usr/local/bin:$home/.local/bin/:$home/.cargo/bin/:$home/.atuin/bin/:$path +# If you come from bash you might have to change your $PATH. +export PATH=$HOME/bin:/usr/local/bin:$HOME/.local/bin/:$HOME/.cargo/bin/:$HOME/.atuin/bin/:$PATH -# path to your zinit installation. -export zsh="${xdg_date_home:-${home}/.local/share}/zinit/zinit.git" +# Path to your Zinit installation. +export ZSH="${XDG_DATE_HOME:-${HOME}/.local/share}/zinit/zinit.git" -# download and install zinit if it's not already installed -if [ ! -d $zsh ]; then - git clone https://github.com/zdharma-continuum/zinit.git $zsh +# Download and install Zinit if it's not already installed +if [ ! -d $ZSH ]; then + git clone https://github.com/zdharma-continuum/zinit.git $ZSH fi -source $zsh/zinit.zsh +source $ZSH/zinit.zsh -# theme ---------------------------------------------------------------- {{{ +# Theme ---------------------------------------------------------------- {{{ -# set the theme to use with oh my posh -eval "$(oh-my-posh init zsh --config $home/.config/ohmyposh/prompt.json)" +# Set the theme to use with Oh My Posh +eval "$(oh-my-posh init zsh --config $HOME/.config/ohmyposh/prompt.json)" # }}} -# general options ---------------------------------------------------------------- {{{ +# General options ---------------------------------------------------------------- {{{ -# uncomment the following line to use case-sensitive completion. -# case_sensitive="true" +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" -# uncomment the following line if pasting urls and other text is messed up. -# disable_magic_functions="true" +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" -# uncomment the following line to disable auto-setting terminal title. -# disable_auto_title="true" +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" -# uncomment the following line to enable command auto-correction. -enable_correction="true" +# Uncomment the following line to enable command auto-correction. +ENABLE_CORRECTION="true" -# uncomment the following line to display red dots whilst waiting for completion. -# you can also set it to another string to have that shown instead of the default red dots. -# e.g. completion_waiting_dots="%f{yellow}waiting...%f" -# caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) -completion_waiting_dots="true" +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +COMPLETION_WAITING_DOTS="true" -# uncomment the following line if you want to disable marking untracked files -# under vcs as dirty. this makes repository status check for large repositories +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories # much, much faster. -# disable_untracked_files_dirty="true" +# DISABLE_UNTRACKED_FILES_DIRTY="true" -# uncomment the following line if you want to change the command execution time +# Uncomment the following line if you want to change the command execution time # stamp shown in the history command output. -# you can set one of the optional three formats: +# You can set one of the optional three formats: # "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" # or set a custom format using the strftime function format specifications, # see 'man strftime' for details. -hist_stamps="dd.mm.yyyy" +HIST_STAMPS="dd.mm.yyyy" # }}} -# plugins and snippets ---------------------------------------------------------------- {{{ +# Plugins and snippets ---------------------------------------------------------------- {{{ zinit light zsh-users/zsh-syntax-highlighting zinit light zsh-users/zsh-autosuggestions @@ -75,49 +75,49 @@ zinit ice from'gh-r' as'program' zinit light sei40kr/fast-alias-tips-bin zinit light sei40kr/zsh-fast-alias-tips -zinit snippet omzp::git -zinit snippet omzp::zoxide +zinit snippet OMZP::git +zinit snippet OMZP::zoxide # }}} -# history ---------------------------------------------------------------- {{{ +# History ---------------------------------------------------------------- {{{ -histsize=5000 # the number of commands to remember in the command history -histfile=~/.zsh_history # the file to save the command history to -savehist=$histsize # the number of commands to save in the history file -histdup=erase # erase duplicates in the history file -setopt appendhistory # append history to the history file -setopt sharehistory # share history between all sessions -setopt hist_ignore_space # ignore commands that start with a space -setopt hist_ignore_dups # ignore duplicate commands -setopt hist_ignore_all_dups # ignore all duplicate commands -setopt hist_save_no_dups # do not save duplicate commands -setopt hist_find_no_dups # do not display duplicate commands +HISTSIZE=5000 # The number of commands to remember in the command history +HISTFILE=~/.zsh_history # The file to save the command history to +SAVEHIST=$HISTSIZE # The number of commands to save in the history file +HISTDUP=erase # Erase duplicates in the history file +setopt appendhistory # Append history to the history file +setopt sharehistory # Share history between all sessions +setopt hist_ignore_space # Ignore commands that start with a space +setopt hist_ignore_dups # Ignore duplicate commands +setopt hist_ignore_all_dups # Ignore all duplicate commands +setopt hist_save_no_dups # Do not save duplicate commands +setopt hist_find_no_dups # Do not display duplicate commands -# key bindings -bindkey "^p" history-search-backward # search backward in history -bindkey "^n" history-search-forward # search forward in history +# Key bindings +bindkey "^p" history-search-backward # Search backward in history +bindkey "^n" history-search-forward # Search forward in history # }}} -# completion ---------------------------------------------------------------- {{{ +# Completion ---------------------------------------------------------------- {{{ -# zsh allows command completion. -# the completion is very modifiable, here are some options -zstyle ':completion:*' matcher-list 'm:{a-z}={a-za-z}' -zstyle ':completion:*:descriptions' format '%u%b%d%b%u' -zstyle ':completion:*:warnings' format '%bsorry, no results' +# Zsh allows command completion. +# The completion is very modifiable, here are some options +zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' +zstyle ':completion:*:descriptions' format '%U%B%d%b%u' +zstyle ':completion:*:warnings' format '%BSorry, no results' zstyle ':completion:*' menu select=2 -zstyle ':completion:*' select-prompt %sscrolling active: current selection at %p%s -zstyle ':completion:*' list-colors '${(s.:.)ls_colors}' +zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s +zstyle ':completion:*' list-colors '${(s.:.)LS_COLORS}' -# load bash completion functions -autoload -uz +x compinit && compinit -autoload -uz +x bashcompinit && bashcompinit +# Load bash completion functions +autoload -Uz +X compinit && compinit +autoload -Uz +X bashcompinit && bashcompinit # -q is for quiet; actually run all the `compdef's saved before `compinit` call # (`compinit' declares the `compdef' function, so it cannot be used until -# `compinit' is ran; zinit solves this via intercepting the `compdef'-calls and +# `compinit' is ran; Zinit solves this via intercepting the `compdef'-calls and # storing them for later use with `zinit cdreplay') zinit cdreplay -q @@ -125,21 +125,21 @@ zinit cdreplay -q # }}} -# user configuration ---------------------------------------------------------------- {{{ +# User configuration ---------------------------------------------------------------- {{{ -# preferred editor for local and remote sessions -if [[ -n $ssh_connection ]]; then - export editor='nvim' +# Preferred editor for local and remote sessions +if [[ -n $SSH_CONNECTION ]]; then + export EDITOR='nvim' else - export editor='vim' + export EDITOR='vim' fi -# set the ssh-agent if it is not already running -if ! pgrep -u "$user" ssh-agent > /dev/null; then +# Set the ssh-agent if it is not already running +if ! pgrep -u "$USER" ssh-agent > /dev/null; then eval "$(ssh-agent -s)" > /dev/null fi -export ssh_auth_sock=$(ssh-agent -s | grep -op '(?<=ssh_auth_sock=)[^;]+') -# add the keys to the agent +export SSH_AUTH_SOCK=$(ssh-agent -s | grep -oP '(?<=SSH_AUTH_SOCK=)[^;]+') +# Add the keys to the agent if [ -f ~/.ssh/id_ed25519 ] && ! ssh-add -l | grep -q id_ed25519; then ssh-add ~/.ssh/id_ed25519 > /dev/null 2>&1 fi @@ -147,35 +147,35 @@ if [ -f ~/.ssh/hexasec ] && ! ssh-add -l | grep -q hexasec; then ssh-add ~/.ssh/hexasec > /dev/null 2>&1 fi -# compilation flags -# export archflags="-arch x86_64" +# Compilation flags +# export ARCHFLAGS="-arch x86_64" -# aliases ---------------------------------------------------------------- {{{ +# Aliases ---------------------------------------------------------------- {{{ -# set personal aliases -# for a full list of active aliases, run `alias`. +# Set personal aliases +# For a full list of active aliases, run `alias`. alias ls='lsd' -alias ll='ls -alf' +alias ll='ls -alF' alias rm='rip' alias cat='bat' alias grep='rg' -alias find='fd -h' +alias find='fd -H' alias sed='sd' alias c='clear' -alias prolog='~/.config/scryer-prolog/target/release/scryer-prolog' # à remplacer par prolog='scryer-prolog' +alias prolog='~/.config/scryer-prolog/target/release/scryer-prolog' # À remplacer par prolog='scryer-prolog' alias csc='sudo cytech-site-change' alias quit='exit' -alias compresse='echo "tar -cv [nomdufichieràcompresser] -f [nomarchive].tar"' +alias compresse='echo "tar -cv [nomDuFichieràCompresser] -f [nomArchive].tar"' alias maj='~/./miseajour.sh' alias vi=$(which vim) alias vim='nvim' # }}} -# allow zoxide to work and to replace cd +# Allow zoxide to work and to replace cd eval "$(zoxide init --cmd cd zsh)" -# initialize atuin -eval "$(atuin init zsh)" +# Initialize atuin +eval "$(atuin init zsh --disable-up-arrow)" # }}} diff --git a/private_dot_config/atuin/private_config.toml b/private_dot_config/atuin/private_config.toml new file mode 100644 index 0000000..40f1d28 --- /dev/null +++ b/private_dot_config/atuin/private_config.toml @@ -0,0 +1,234 @@ +## 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 = "~/.local/share/atuin/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 = "~/.local/share/atuin/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 = "~/.local/share/atuin/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://atuin.hexasec.io" + +## 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 = "1h" + +## 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 + +## 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 + +# Configures whether to store commands that failed (those with non-zero exit status) or not. +store_failed = true + +## 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 = "emacs" + +## 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 = true + +[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" + +[dotfiles] +enabled = false + +[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 diff --git a/scripts/shells.sh b/scripts/shells.sh index 4f7cc73..863f68c 100644 --- a/scripts/shells.sh +++ b/scripts/shells.sh @@ -69,6 +69,10 @@ check_installation "yay -S --noconfirm --needed" "git-delta" echo -e "${BLUE}Installing SSHS...${DEFAULT}" check_installation "yay -S --noconfirm --needed" "sshs" +# Atuin - Shell history synchronization +echo -e "${BLUE}Installing Atuin...${DEFAULT}" +check_installation "pacman -S --noconfirm --needed" "atuin" + # Changing the default shell to Fish echo -e "${GREEN}Setting Fish as default shell...${DEFAULT}" chsh -s $(which fish) diff --git a/utils/helpers.sh b/utils/helpers.sh index 40b49ad..011c484 100644 --- a/utils/helpers.sh +++ b/utils/helpers.sh @@ -58,6 +58,13 @@ function setup_final() { systemctl --user enable --now pipewire.service systemctl --user enable --now pipewire-pulse.service + # Enable Atuin + echo -e "${GREEN}Setting up Atuin...${DEFAULT}" + echo -e "${BLUE}Please enter your Atuin login${DEFAULT}" + read -p "Username: " atuin_user + atuin login -u $atuin_user + atuin sync + # Import GPG keys gpg --import $HOME/.gpg/public-keys.asc gpg --import $HOME/.gpg/private-keys.asc diff --git a/utils/packages b/utils/packages index c2c1042..5b36fd9 100644 --- a/utils/packages +++ b/utils/packages @@ -65,3 +65,4 @@ topgrade tealdeer git-delta sshs +atuin