Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/coderabbitai/dotfiles

A modern Zsh/tmux, Vim and Homebrew centric setup for macOS and Linux
https://github.com/coderabbitai/dotfiles

Last synced: 3 months ago
JSON representation

A modern Zsh/tmux, Vim and Homebrew centric setup for macOS and Linux

Awesome Lists containing this project

README

        

# CodeRabbit Dotfiles

![CodeRabbit Neovim](./sw/assets/vim.png)

## Introduction

Welcome to CodeRabbit optimized development environment that is well integrated
with our stack.

## Setup

We use [chezmoi](https://www.chezmoi.io) to manage CodeRabbit dotfiles in your
home directory.

### Automatic Setup

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/coderabbitai/dotfiles/master/sw/assets/executable_install.sh)"
```

### Manual Setup

```
cd $HOME
chezmoi init [email protected]:coderabbitai/dotfiles.git
# show diff of changes that will be made
chezmoi diff
# If you are happy with the changes, apply away!
chezmoi apply -v
```

Please close and reopen the terminal to trigger first time install/updates.

Recommend using `GitHub CLI` for authenticating with GitHub. Run
`gh auth login`. Alternatively, add
[SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh).

## Git setup

### Username and local settings

Provide username and email address by creating `.gitconfig_local` e.g.

```
[user]
name = Harjot Gill
email = [email protected]
[github]
user =
token =
```

You can generate
[personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
for GitHub to use HTTP API. Also, it's useful to add this token to your
`$HOME/.netrc` file. Run -
`echo 'machine api.github.com login password ' >> $HOME/.netrc`

### GitHub org cloning script

To clone CodeRabbit, run: `gh_clone_all.sh coderabbitai $HOME/work`. This step
is performed automatically on installation.

### Git pull all repos script

To update all repos in a directory, run: `pull_all.sh $HOME/work/coderabbitai`.
This step is performed automatically on auto-updates.

## Preparing your terminal

- **Nerd fonts**: Please enable a nerd font such as `Hack Nerd Font` in your
terminal profile to see icons properly when using `nvim` in terminal mode.
- **Terminal colors**: See the section about [colors](#colors).

## Homebrew

Homebrew is the default package manager for this environment. You can provide
private packages by adding them to: `$HOME/.brew_local`

## Autoupdates

This environment is set to autoupdate every 7 days by default. You can trigger
autoupdates manually by calling `autoupdate.zsh --force` You can provide custom
autoupdate commands by adding them to: `$HOME/.autoupdate_local.zsh`

## zshrc

You can provide additional zshrc settings by adding them to:
`$HOME/.zshrc_local`

![zsh](./sw/assets/zsh.png)

### Features

- Fuzzy menus: Fuzzy menus are available for command completion (press `TAB`)
menus and command history (press `^r`).
- Vi mode: Press `ESC` to enter Vi `NORMAL` mode. Cool tip - while in normal
mode, press `vv` to switch to visual mode (it will open `nvim` editor) and in
that mode you can use GitHub Copilot to build sophisticated commands using AI!
- Prompt flags: Type `yazpt_explain_git` to understand the meaning of various
flags in the prompt.
- Forgit: You can use `forgit` as an interactive frontend for various git
commands. E.g. try `git forgit log`.
- iTerm2 integration: On macOS, please install iTerm2 shell
[integration](https://iterm2.com/documentation-shell-integration.html) to use
nice features such as navigating marks in prompt.

## tmux

![tmux Menu](./sw/assets/tmux-menu.png)
![tmux Fuzzy Menu](./sw/assets/tmux-fzf.png)

`tmux` sessions are automatically started as part of `.zshrc` execution. You
will be shown an option to join an existing detached session if they exist,
otherwise a new session will be created and attached to.

### Features

- Prefix: `C-a` or `C-b`
- Fuzzy menu: Press `C-a C-Space` to access fuzzy menu for quick tmux management
and shortcuts to various commands.
- tmux menu: Press `F12` to access tmux session/window/pane management menu.
- Nested tmux sessions (e.g. remote ssh): Press `F1` to suspend/unsuspend local
tmux.
- [Smug](https://github.com/ivaaaan/smug): Define and orchestrate tmux sessions
with smug. e.g. use smug to start/stop local dev Kubernetes cluster and so on.
- Fuzzy search tmux terminal buffer: Press `C-a C-/`
- Vi bindings are enabled in tmux copy mode
- Facebook PathPicker: Press `C-a C-P` to select any line from scrollback buffer
(e.g. git status) and use those in another command.
- Urlview: Press `C-a C-U` to select any url in scrollback buffer and open in
browser.

## Neovim

This environment is highly tuned towards providing a modern neovim/vim setup for
development using modern languages such as Golang, Typescript etc.

![Fuzzy Menu](./sw/assets/fuzzymenu.png)

![IDE](./sw/assets/vim_ide.png)

### vimrc

You can provide additional `vimrc` settings by adding them to:
`$HOME/.vimrc_local`. You can also use **FuzzyMenu** (``) to tweak
and persist local settings. In addition, you can provide additional vim plugins
by adding them to `$HOME/.vimrc_plugins`.

Several `colorschemes` are bundled and `gruvbox` is chosen by default. You can
override `colorscheme` by providing `let colorscheme = ` in your
`.vimrc_local` file.

See `.vimrc` file for available `colorschemes`. Also see
`~/.config/nvim/init.vim` for Neovim specific settings.

### Discoverability of commands and plugins

- Landing page for new tabs contains several useful links that help with
discoverability.
- Press `` (double space) or `Shift + LeftMouse` click to open a
contextual FuzzyMenu for the word under cursor or selection.

### AI-based autocompletion

- GitHub Copilot - Type `:Copilot setup` in Neovim to set up.
- CodeGPT - Just highlight the code and press `` to see CodeGPT
options in the FuzzyMenu. You must provide `OPENAI_API_KEY` environment
variable in your `.zshrc_local` to use this feature.

### LanguageTool

If you have LanguageTool Premium, you can provide `LANGTOOL_HTTP_URI`,
`LANGTOOL_USERNAME` and `LANGTOOL_API_KEY` environment variables to use the
language server in Neovim.

## Colors

Unlike `nvim` which allows setting themes easily via `.vimrc_local`, color
themes for terminal interface are spread across multiple settings.

- **Terminal theme** -
- macOS: For iTerm2, the option will be provided to install bundled profile
that contains font/color settings. If you do not wish to install the
profile, then the colors will be set via terminal escape codes unless
`SET_TERMINAL_COLORS` is set to `false` in your `.zshrc_local`.
- Linux: Colors will be set automatically using terminal escape codes unless
`SET_TERMINAL_COLORS` is set to `false` in your `.zshrc_local`.
Alternatively, you can install default color profile using
`$HOME/sw/assets/install_gruvbox.sh`. Make sure to set `SET_TERMINAL_COLORS`
to `false` in your `.zshrc_local` if you would like to use terminal's color
profiles.
- tmux theme - See `.tmux.conf.settings` for example configuration and override
it in your personal `.tmux.conf_local` file. The tmux theme configures the
tmux status line and not the terminal itself.
- bat theme (cat replacement) - Environment variable `BAT_THEME` sets the theme.
See `bat --list-themes` to get the list. You can override this theme in your
`.zshrc_local` file. Bat is used extensively for fzf previews, git pager
(delta), less command filter and so on.
- FZF colors - Get and source color schemes from
[base16-fzf](https://github.com/fnune/base16-fzf) in your
`$HOME/.zshrc_local`.
- LS_COLORS - We use [vivid](https://github.com/sharkdp/vivid) to set the
themes. Run `vivid themes` to get the list. You can override this theme in
your `.zshrc_local` file.
- Git pager - See `.gitconfig_themes` to see the available themes. You can
override them in your local `.gitconfig_local`.
- Fast Syntax Highlighting (zsh) - You can run `fast-theme -l` to get the list.
To set the theme, first, override `FAST_WORK_DIR` environment variable in your
`.zshrc` and point it to `$HOME/.config/fsh_local`. Next, run
`fast-theme ` to switch the theme.

Note: Currently all these settings are configured to match `gruvbox-dark` color
palette. But it's pretty easy to override them to match `onedark` or
[Nord](https://www.nordtheme.com)

Bonus:

- Slack Gruvbox - Paste this in your DM to Slackbot and click the
`Switch sidebar theme` button.
` gruvbox dark #282828,#3c3836,#ebdbb2,#1d2021,#3e313c,#ebdbb2,#689d6a,#fb4934`

## Managing `*_local` override files

You can use [vcsh](https://github.com/RichiH/vcsh) utility to version local
files and sync them across machines.