aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config/nushell/config.nu537
-rw-r--r--.config/nushell/env.nu70
-rwxr-xr-x.config/nushell/scripts/greet.nu4
-rw-r--r--.zimrc61
-rw-r--r--.zshrc131
5 files changed, 192 insertions, 611 deletions
diff --git a/.config/nushell/config.nu b/.config/nushell/config.nu
deleted file mode 100644
index 606dbf8..0000000
--- a/.config/nushell/config.nu
+++ /dev/null
@@ -1,537 +0,0 @@
-# Nushell Config File
-
-module completions {
- # Custom completions for external commands (those outside of Nushell)
- # Each completions has two parts: the form of the external command, including its flags and parameters
- # and a helper command that knows how to complete values for those flags and parameters
- #
- # This is a simplified version of completions for git branches and git remotes
- def "nu-complete git branches" [] {
- ^git branch | lines | each { |line| $line | str replace '[\*\+] ' '' | str trim }
- }
-
- def "nu-complete git remotes" [] {
- ^git remote | lines | each { |line| $line | str trim }
- }
-
- # Download objects and refs from another repository
- export extern "git fetch" [
- repository?: string@"nu-complete git remotes" # name of the repository to fetch
- branch?: string@"nu-complete git branches" # name of the branch to fetch
- --all # Fetch all remotes
- --append(-a) # Append ref names and object names to .git/FETCH_HEAD
- --atomic # Use an atomic transaction to update local refs.
- --depth: int # Limit fetching to n commits from the tip
- --deepen: int # Limit fetching to n commits from the current shallow boundary
- --shallow-since: string # Deepen or shorten the history by date
- --shallow-exclude: string # Deepen or shorten the history by branch/tag
- --unshallow # Fetch all available history
- --update-shallow # Update .git/shallow to accept new refs
- --negotiation-tip: string # Specify which commit/glob to report while fetching
- --negotiate-only # Do not fetch, only print common ancestors
- --dry-run # Show what would be done
- --write-fetch-head # Write fetched refs in FETCH_HEAD (default)
- --no-write-fetch-head # Do not write FETCH_HEAD
- --force(-f) # Always update the local branch
- --keep(-k) # Keep dowloaded pack
- --multiple # Allow several arguments to be specified
- --auto-maintenance # Run 'git maintenance run --auto' at the end (default)
- --no-auto-maintenance # Don't run 'git maintenance' at the end
- --auto-gc # Run 'git maintenance run --auto' at the end (default)
- --no-auto-gc # Don't run 'git maintenance' at the end
- --write-commit-graph # Write a commit-graph after fetching
- --no-write-commit-graph # Don't write a commit-graph after fetching
- --prefetch # Place all refs into the refs/prefetch/ namespace
- --prune(-p) # Remove obsolete remote-tracking references
- --prune-tags(-P) # Remove any local tags that do not exist on the remote
- --no-tags(-n) # Disable automatic tag following
- --refmap: string # Use this refspec to map the refs to remote-tracking branches
- --tags(-t) # Fetch all tags
- --recurse-submodules: string # Fetch new commits of populated submodules (yes/on-demand/no)
- --jobs(-j): int # Number of parallel children
- --no-recurse-submodules # Disable recursive fetching of submodules
- --set-upstream # Add upstream (tracking) reference
- --submodule-prefix: string # Prepend to paths printed in informative messages
- --upload-pack: string # Non-default path for remote command
- --quiet(-q) # Silence internally used git commands
- --verbose(-v) # Be verbose
- --progress # Report progress on stderr
- --server-option(-o): string # Pass options for the server to handle
- --show-forced-updates # Check if a branch is force-updated
- --no-show-forced-updates # Don't check if a branch is force-updated
- -4 # Use IPv4 addresses, ignore IPv6 addresses
- -6 # Use IPv6 addresses, ignore IPv4 addresses
- --help # Display the help message for this command
- ]
-
- # Check out git branches and files
- export extern "git checkout" [
- ...targets: string@"nu-complete git branches" # name of the branch or files to checkout
- --conflict: string # conflict style (merge or diff3)
- --detach(-d) # detach HEAD at named commit
- --force(-f) # force checkout (throw away local modifications)
- --guess # second guess 'git checkout <no-such-branch>' (default)
- --ignore-other-worktrees # do not check if another worktree is holding the given ref
- --ignore-skip-worktree-bits # do not limit pathspecs to sparse entries only
- --merge(-m) # perform a 3-way merge with the new branch
- --orphan: string # new unparented branch
- --ours(-2) # checkout our version for unmerged files
- --overlay # use overlay mode (default)
- --overwrite-ignore # update ignored files (default)
- --patch(-p) # select hunks interactively
- --pathspec-from-file: string # read pathspec from file
- --progress # force progress reporting
- --quiet(-q) # suppress progress reporting
- --recurse-submodules: string # control recursive updating of submodules
- --theirs(-3) # checkout their version for unmerged files
- --track(-t) # set upstream info for new branch
- -b: string # create and checkout a new branch
- -B: string # create/reset and checkout a branch
- -l # create reflog for new branch
- --help # Display the help message for this command
- ]
-
- # Push changes
- export extern "git push" [
- remote?: string@"nu-complete git remotes", # the name of the remote
- ...refs: string@"nu-complete git branches" # the branch / refspec
- --all # push all refs
- --atomic # request atomic transaction on remote side
- --delete(-d) # delete refs
- --dry-run(-n) # dry run
- --exec: string # receive pack program
- --follow-tags # push missing but relevant tags
- --force-with-lease # require old value of ref to be at this value
- --force(-f) # force updates
- --ipv4(-4) # use IPv4 addresses only
- --ipv6(-6) # use IPv6 addresses only
- --mirror # mirror all refs
- --no-verify # bypass pre-push hook
- --porcelain # machine-readable output
- --progress # force progress reporting
- --prune # prune locally removed refs
- --push-option(-o): string # option to transmit
- --quiet(-q) # be more quiet
- --receive-pack: string # receive pack program
- --recurse-submodules: string # control recursive pushing of submodules
- --repo: string # repository
- --set-upstream(-u) # set upstream for git pull/status
- --signed: string # GPG sign the push
- --tags # push tags (can't be used with --all or --mirror)
- --thin # use thin pack
- --verbose(-v) # be more verbose
- --help # Display the help message for this command
- ]
-}
-
-# Get just the extern definitions without the custom completion commands
-use completions *
-
-# for more information on themes see
-# https://www.nushell.sh/book/coloring_and_theming.html
-let dark_theme = {
- # color for nushell primitives
- separator: white
- leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
- header: green_bold
- empty: blue
- bool: white
- int: white
- filesize: white
- duration: white
- date: white
- range: white
- float: white
- string: white
- nothing: white
- binary: white
- cellpath: white
- row_index: green_bold
- record: white
- list: white
- block: white
- hints: dark_gray
-
- # shapes are used to change the cli syntax highlighting
- shape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b}
- shape_binary: purple_bold
- shape_bool: light_cyan
- shape_int: purple_bold
- shape_float: purple_bold
- shape_range: yellow_bold
- shape_internalcall: cyan_bold
- shape_external: cyan
- shape_externalarg: green_bold
- shape_literal: blue
- shape_operator: yellow
- shape_signature: green_bold
- shape_string: green
- shape_string_interpolation: cyan_bold
- shape_datetime: cyan_bold
- shape_list: cyan_bold
- shape_table: blue_bold
- shape_record: cyan_bold
- shape_block: blue_bold
- shape_filepath: cyan
- shape_directory: cyan
- shape_globpattern: cyan_bold
- shape_variable: purple
- shape_flag: blue_bold
- shape_custom: green
- shape_nothing: light_cyan
- shape_matching_brackets: { attr: u }
-}
-
-let light_theme = {
- # color for nushell primitives
- separator: dark_gray
- leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
- header: green_bold
- empty: blue
- bool: dark_gray
- int: dark_gray
- filesize: dark_gray
- duration: dark_gray
- date: dark_gray
- range: dark_gray
- float: dark_gray
- string: dark_gray
- nothing: dark_gray
- binary: dark_gray
- cellpath: dark_gray
- row_index: green_bold
- record: white
- list: white
- block: white
- hints: dark_gray
-
- # shapes are used to change the cli syntax highlighting
- shape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b}
- shape_binary: purple_bold
- shape_bool: light_cyan
- shape_int: purple_bold
- shape_float: purple_bold
- shape_range: yellow_bold
- shape_internalcall: cyan_bold
- shape_external: cyan
- shape_externalarg: green_bold
- shape_literal: blue
- shape_operator: yellow
- shape_signature: green_bold
- shape_string: green
- shape_string_interpolation: cyan_bold
- shape_datetime: cyan_bold
- shape_list: cyan_bold
- shape_table: blue_bold
- shape_record: cyan_bold
- shape_block: blue_bold
- shape_filepath: cyan
- shape_directory: cyan
- shape_globpattern: cyan_bold
- shape_variable: purple
- shape_flag: blue_bold
- shape_custom: green
- shape_nothing: light_cyan
- shape_matching_brackets: { attr: u }
-}
-
-# External completer example
-let carapace_completer = {|spans|
- carapace $spans.0 nushell $spans | from json
-}
-
-
-# The default config record. This is where much of your global configuration is setup.
-let-env config = {
- color_config: $dark_theme # if you want a light theme, replace `$dark_theme` to `$light_theme`
- use_grid_icons: true
- footer_mode: "25" # always, never, number_of_rows, auto
- float_precision: 2
- # buffer_editor: "emacs" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
- use_ansi_coloring: true
- edit_mode: vi # emacs, vi
- shell_integration: true # enables terminal markers and a workaround to arrow keys stop working issue
- show_banner: false # true or false to enable or disable the banner
- render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.
- ls: {
- use_ls_colors: true # use the LS_COLORS environment variable to colorize output
- clickable_links: true # enable or disable clickable links. Your terminal has to support links.
- }
- rm: {
- always_trash: true # always act as if -t was given. Can be overridden with -p
- }
- cd: {
- abbreviations: true # allows `cd s/o/f` to expand to `cd some/other/folder`
- }
- table: {
- mode: compact_double # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
- index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
- trim: {
- methodology: wrapping # wrapping or truncating
- wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
- truncating_suffix: "..." # A suffix used by the 'truncating' methodology
- }
- }
- history: {
- max_size: 10000 # Session has to be reloaded for this to take effect
- sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file
- file_format: "plaintext" # "sqlite" or "plaintext"
- }
- completions: {
- case_sensitive: false # set to true to enable case-sensitive completions
- quick: true # set this to false to prevent auto-selecting completions when only one remains
- partial: true # set this to false to prevent partial filling of the prompt
- algorithm: "fuzzy" # prefix or fuzzy
- external: {
- enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up my be very slow
- max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
- completer: $carapace_completer # check 'carapace_completer' above as an example
- }
- }
- filesize: {
- metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard)
- format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto
- }
- hooks: {
- pre_prompt: [{
- $nothing # replace with source code to run before the prompt is shown
- }]
- pre_execution: [{
- $nothing # replace with source code to run before the repl input is run
- }]
- env_change: {
- PWD: [{|before, after|
- $nothing # replace with source code to run if the PWD environment is different since the last repl input
- }]
- }
- }
- menus: [
- # Configuration for default nushell menus
- # Note the lack of souce parameter
- {
- name: completion_menu
- only_buffer_difference: false
- marker: "| "
- type: {
- layout: columnar
- columns: 4
- col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
- col_padding: 2
- }
- style: {
- text: green
- selected_text: green_reverse
- description_text: yellow
- }
- }
- {
- name: history_menu
- only_buffer_difference: true
- marker: "? "
- type: {
- layout: list
- page_size: 10
- }
- style: {
- text: green
- selected_text: green_reverse
- description_text: yellow
- }
- }
- {
- name: help_menu
- only_buffer_difference: true
- marker: "? "
- type: {
- layout: description
- columns: 4
- col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
- col_padding: 2
- selection_rows: 4
- description_rows: 10
- }
- style: {
- text: green
- selected_text: green_reverse
- description_text: yellow
- }
- }
- # Example of extra menus created using a nushell source
- # Use the source field to create a list of records that populates
- # the menu
- {
- name: commands_menu
- only_buffer_difference: false
- marker: "# "
- type: {
- layout: columnar
- columns: 4
- col_width: 20
- col_padding: 2
- }
- style: {
- text: green
- selected_text: green_reverse
- description_text: yellow
- }
- source: { |buffer, position|
- $nu.scope.commands
- | where command =~ $buffer
- | each { |it| {value: $it.command description: $it.usage} }
- }
- }
- {
- name: vars_menu
- only_buffer_difference: true
- marker: "# "
- type: {
- layout: list
- page_size: 10
- }
- style: {
- text: green
- selected_text: green_reverse
- description_text: yellow
- }
- source: { |buffer, position|
- $nu.scope.vars
- | where name =~ $buffer
- | sort-by name
- | each { |it| {value: $it.name description: $it.type} }
- }
- }
- {
- name: commands_with_description
- only_buffer_difference: true
- marker: "# "
- type: {
- layout: description
- columns: 4
- col_width: 20
- col_padding: 2
- selection_rows: 4
- description_rows: 10
- }
- style: {
- text: green
- selected_text: green_reverse
- description_text: yellow
- }
- source: { |buffer, position|
- $nu.scope.commands
- | where command =~ $buffer
- | each { |it| {value: $it.command description: $it.usage} }
- }
- }
- ]
- keybindings: [
- {
- name: completion_menu
- modifier: none
- keycode: tab
- mode: vi_insert # Options: emacs vi_normal vi_insert
- event: {
- until: [
- { send: menu name: completion_menu }
- { send: menunext }
- ]
- }
- }
- {
- name: completion_previous
- modifier: shift
- keycode: backtab
- mode: [emacs, vi_normal, vi_insert] # Note: You can add the same keybinding to all modes by using a list
- event: { send: menuprevious }
- }
- {
- name: history_menu
- modifier: control
- keycode: char_r
- mode: vi_insert
- event: { send: menu name: history_menu }
- }
- {
- name: next_page
- modifier: control
- keycode: char_x
- mode: emacs
- event: { send: menupagenext }
- }
- {
- name: undo_or_previous_page
- modifier: control
- keycode: char_z
- mode: emacs
- event: {
- until: [
- { send: menupageprevious }
- { edit: undo }
- ]
- }
- }
- {
- name: yank
- modifier: control
- keycode: char_y
- mode: emacs
- event: {
- until: [
- {edit: pastecutbufferafter}
- ]
- }
- }
- {
- name: unix-line-discard
- modifier: control
- keycode: char_u
- mode: [emacs, vi_normal, vi_insert]
- event: {
- until: [
- {edit: cutfromlinestart}
- ]
- }
- }
- {
- name: kill-line
- modifier: control
- keycode: char_k
- mode: [emacs, vi_normal, vi_insert]
- event: {
- until: [
- {edit: cuttolineend}
- ]
- }
- }
- # Keybindings used to trigger the user defined menus
- {
- name: commands_menu
- modifier: control
- keycode: char_t
- mode: [emacs, vi_normal, vi_insert]
- event: { send: menu name: commands_menu }
- }
- {
- name: vars_menu
- modifier: alt
- keycode: char_o
- mode: [emacs, vi_normal, vi_insert]
- event: { send: menu name: vars_menu }
- }
- {
- name: commands_with_description
- modifier: control
- keycode: char_s
- mode: [emacs, vi_normal, vi_insert]
- event: { send: menu name: commands_with_description }
- }
- ]
-}
-
-# Custom Commands
-source greet.nu
-source hello.nu
-source brightness.nu
-
-
-source ~/.cache/starship/init.nu
diff --git a/.config/nushell/env.nu b/.config/nushell/env.nu
deleted file mode 100644
index 975d534..0000000
--- a/.config/nushell/env.nu
+++ /dev/null
@@ -1,70 +0,0 @@
-# Nushell Environment Config File
-
-def create_left_prompt [] {
- let path_segment = if (is-admin) {
- $"(ansi red_bold)($env.PWD)"
- } else {
- $"(ansi green_bold)($env.PWD)"
- }
-
- $path_segment
-}
-
-def create_right_prompt [] {
- let time_segment = ([
- (date now | date format '%m/%d/%Y %r')
- ] | str join)
-
- $time_segment
-}
-
-# Use nushell functions to define your right and left prompt
-let-env PROMPT_COMMAND = { create_left_prompt }
-let-env PROMPT_COMMAND_RIGHT = { create_right_prompt }
-
-# The prompt indicators are environmental variables that represent
-# the state of the prompt
-let-env PROMPT_INDICATOR = { "〉" }
-let-env PROMPT_INDICATOR_VI_INSERT = { ": " }
-let-env PROMPT_INDICATOR_VI_NORMAL = { "〉" }
-let-env PROMPT_MULTILINE_INDICATOR = { "::: " }
-
-# Specifies how environment variables are:
-# - converted from a string to a value on Nushell startup (from_string)
-# - converted from a value back to a string when running external commands (to_string)
-# Note: The conversions happen *after* config.nu is loaded
-let-env ENV_CONVERSIONS = {
- "PATH": {
- from_string: { |s| $s | split row (char esep) | path expand -n }
- to_string: { |v| $v | path expand -n | str join (char esep) }
- }
- "Path": {
- from_string: { |s| $s | split row (char esep) | path expand -n }
- to_string: { |v| $v | path expand -n | str join (char esep) }
- }
-}
-
-# Directories to search for scripts when calling source or use
-#
-# By default, <nushell-config-dir>/scripts is added
-let-env NU_LIB_DIRS = [
- ($nu.config-path | path dirname | path join 'scripts')
- ~/nushell/scripts
-]
-
-# Directories to search for plugin binaries when calling register
-#
-# By default, <nushell-config-dir>/plugins is added
-let-env NU_PLUGIN_DIRS = [
- ($nu.config-path | path dirname | path join 'plugins')
-]
-
-# Wayland things
-let-env MOZ_ENABLE_WAYLAND = 1
-let-env SSH_AUTH_SOCK = $"($env.XDG_RUNTIME_DIR)/ssh-agent.socket"
-
-# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
-
-let-env PATH = ($env.PATH | split row (char esep) | prepend '~/bin/:~/.cargo/bin/')
-mkdir ~/.cache/starship
-starship init nu | sed "s/size -c/size/" | save ~/.cache/starship/init.nu
diff --git a/.config/nushell/scripts/greet.nu b/.config/nushell/scripts/greet.nu
deleted file mode 100755
index 9399fdd..0000000
--- a/.config/nushell/scripts/greet.nu
+++ /dev/null
@@ -1,4 +0,0 @@
-#! /bin/nu
-def greet [name] {
- ['hello' $name]
-}
diff --git a/.zimrc b/.zimrc
new file mode 100644
index 0000000..3855da5
--- /dev/null
+++ b/.zimrc
@@ -0,0 +1,61 @@
+# Start configuration added by Zim install {{{
+#
+# This is not sourced during shell startup, and it's only used to configure the
+# zimfw plugin manager.
+#
+
+#
+# Modules
+#
+
+# Sets sane Zsh built-in environment options.
+zmodule environment
+# Provides handy git aliases and functions.
+zmodule git
+# Applies correct bindkeys for input events.
+zmodule input
+# Sets a custom terminal title.
+zmodule termtitle
+# Utility aliases and functions. Adds colour to ls, grep and less.
+zmodule utility
+# Adds aliases and better defaults for exa.
+zmodule exa
+# Configures fzf for faster fetching of files and directories names.
+zmodule fzf
+
+
+#
+# Prompt
+#
+
+# Exposes to prompts how long the last command took to execute, used by asciiship.
+zmodule duration-info
+# Exposes git repository status information to prompts, used by asciiship.
+zmodule git-info
+# A heavily reduced, ASCII-only version of the Spaceship and Starship prompts.
+zmodule asciiship
+
+#
+# Completion
+#
+
+# Additional completion definitions for Zsh.
+zmodule zsh-users/zsh-completions --fpath src
+# Enables and configures smart and extensive tab completion.
+# completion must be sourced after all modules that add completion definitions.
+zmodule completion
+
+#
+# Modules that must be initialized last
+#
+
+# Fish-like syntax highlighting for Zsh.
+# zsh-users/zsh-syntax-highlighting must be sourced after completion
+zmodule zsh-users/zsh-syntax-highlighting
+# Fish-like history search (up arrow) for Zsh.
+# zsh-users/zsh-history-substring-search must be sourced after zsh-users/zsh-syntax-highlighting
+zmodule zsh-users/zsh-history-substring-search
+# Fish-like autosuggestions for Zsh.
+zmodule zsh-users/zsh-autosuggestions
+# }}} End configuration added by Zim install
+
diff --git a/.zshrc b/.zshrc
new file mode 100644
index 0000000..c76c0f9
--- /dev/null
+++ b/.zshrc
@@ -0,0 +1,131 @@
+# Start configuration added by Zim install {{{
+#
+# User configuration sourced by interactive shells
+#
+
+# -----------------
+# Zsh configuration
+# -----------------
+
+#
+# History
+#
+
+# Remove older command from the history if a duplicate is to be added.
+setopt HIST_IGNORE_ALL_DUPS
+
+#
+# Input/output
+#
+
+# Set editor default keymap to emacs (`-e`) or vi (`-v`)
+bindkey -v
+
+# Prompt for spelling correction of commands.
+#setopt CORRECT
+
+# Customize spelling correction prompt.
+#SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? '
+
+# Remove path separator from WORDCHARS.
+WORDCHARS=${WORDCHARS//[\/]}
+
+# -----------------
+# Zim configuration
+# -----------------
+
+# Use degit instead of git as the default tool to install and update modules.
+#zstyle ':zim:zmodule' use 'degit'
+
+# --------------------
+# Module configuration
+# --------------------
+
+#
+# git
+#
+
+# Set a custom prefix for the generated aliases. The default prefix is 'G'.
+#zstyle ':zim:git' aliases-prefix 'g'
+
+#
+# input
+#
+
+# Append `../` to your input for each `.` you type after an initial `..`
+#zstyle ':zim:input' double-dot-expand yes
+
+#
+# termtitle
+#
+
+# Set a custom terminal title format using prompt expansion escape sequences.
+# See http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Simple-Prompt-Escapes
+# If none is provided, the default '%n@%m: %~' is used.
+#zstyle ':zim:termtitle' format '%1~'
+
+#
+# zsh-autosuggestions
+#
+
+# Disable automatic widget re-binding on each precmd. This can be set when
+# zsh-users/zsh-autosuggestions is the last module in your ~/.zimrc.
+ZSH_AUTOSUGGEST_MANUAL_REBIND=1
+
+# Customize the style that the suggestions are shown with.
+# See https://github.com/zsh-users/zsh-autosuggestions/blob/master/README.md#suggestion-highlight-style
+#ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=242'
+
+#
+# zsh-syntax-highlighting
+#
+
+# Set what highlighters will be used.
+# See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md
+ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets)
+
+# Customize the main highlighter styles.
+# See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/main.md#how-to-tweak-it
+#typeset -A ZSH_HIGHLIGHT_STYLES
+#ZSH_HIGHLIGHT_STYLES[comment]='fg=242'
+
+# ------------------
+# Initialize modules
+# ------------------
+
+ZIM_HOME=${ZDOTDIR:-${HOME}}/.zim
+# Download zimfw plugin manager if missing.
+if [[ ! -e ${ZIM_HOME}/zimfw.zsh ]]; then
+ if (( ${+commands[curl]} )); then
+ curl -fsSL --create-dirs -o ${ZIM_HOME}/zimfw.zsh \
+ https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
+ else
+ mkdir -p ${ZIM_HOME} && wget -nv -O ${ZIM_HOME}/zimfw.zsh \
+ https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
+ fi
+fi
+# Install missing modules, and update ${ZIM_HOME}/init.zsh if missing or outdated.
+if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZDOTDIR:-${HOME}}/.zimrc ]]; then
+ source ${ZIM_HOME}/zimfw.zsh init -q
+fi
+# Initialize modules.
+source ${ZIM_HOME}/init.zsh
+
+# ------------------------------
+# Post-init module configuration
+# ------------------------------
+
+#
+# zsh-history-substring-search
+#
+
+zmodload -F zsh/terminfo +p:terminfo
+# Bind ^[[A/^[[B manually so up/down works both before and after zle-line-init
+for key ('^[[A' '^P' ${terminfo[kcuu1]}) bindkey ${key} history-substring-search-up
+for key ('^[[B' '^N' ${terminfo[kcud1]}) bindkey ${key} history-substring-search-down
+for key ('k') bindkey -M vicmd ${key} history-substring-search-up
+for key ('j') bindkey -M vicmd ${key} history-substring-search-down
+unset key
+# }}} End configuration added by Zim install
+
+eval "$(starship init zsh)"