My dotfiles! Use at your own risk. Some pre-requisites (see readme)
.dotfiles
These are my personal dotfiles.
Screenshots
Some notable tools I use are:
- Nvim (
.config/nvim) - Tmux (
.config/tmux,utils/tx) - WezTerm (
.config/wezterm/wezterm.lua)
Requirements
- Node.js (PNPM will be installed)
- jq
Nvim Plugins
I have many many plugins and configurations going on.
Started from kickstart.nvim and heavily modified.
Plugins are installed and configured in .config/nvim/lua/casraf/plugins.
Some (but not all) of the plugins/modifications are listed here:
| File | Description | Related plugins |
|---|---|---|
autoformat.lua | Toggle format-on-save with :AutoFormat | |
barbar.lua | Tabs | romgrk/barbar.nvim |
ccc.lua | Color picker and highlighter | uga-rosa/ccc.nvim |
cmp.lua | Autocompletion with LSP and snippets | hrsh7th/nvim-cmp, L3MON4D3/LuaSnip |
colorscheme.lua | Color scheme switcher | |
debug.lua | Debugger-related code, most of these are not maintained/tested | mfussenegger/nvim-dap |
debug_log.lua | Insert a per-language debug print for the variable under the cursor, and clean the inserted lines up | |
doc_search.lua | Search documentation for different languages (MDN, React, NPM, Dart, etc.) | |
find-replace.lua | Find/replace across the current file or the whole project, driven by a form | chenasraf/input-form.nvim |
floating-input.lua | Floating input | liangxianzhe/floating-input.nvim |
format.lua | Formatters per filetype, run on save | stevearc/conform.nvim |
fugitive.lua | Git manager — kept mostly for git blame, since LazyGit covers the rest | tpope/vim-fugitive |
fzf-lua.lua | Fuzzy finder, preview and picker for files/grep/diagnostics/custom lists, plus an icon & emoji picker | ibhagwan/fzf-lua, ziontee113/icon-picker.nvim |
git_open.lua | Open git repositories, branches, commits, and files in browser | |
go.lua | Go language support and tooling | ray-x/go.nvim |
input-form.lua | Multi-input forms with validation, used by other modules to collect input | chenasraf/input-form.nvim |
lazygit.lua | Opens LazyGit in a tmux popup | |
license.lua | SPDX license header snippets | |
lsp.lua | LSP related configs | williamboman/mason-lspconfig.nvim, akinsho/flutter-tools.nvim |
mason.lua | The list of LSP servers, formatters, linters and debug adapters Mason installs on startup | WhoIsSethDaniel/mason-tool-installer.nvim, williamboman/mason.nvim |
matchup.lua | Enables moving between function start/end as you would between brackets using % | andymass/vim-matchup |
md_anchor.lua | Follow Markdown heading anchors in links with gx | |
noice.lua | Notifications & UI improvements | folke/noice.nvim |
notes.lua | Notes management — find and create notes in the notes vault | |
nvim-test.lua | Run tests for any project type inside nvim | klen/nvim-test |
oil.lua | Better than netrw. Fight me. (Lets you move between and edit directories as you would a normal file) | stevearc/oil.nvim |
popup-menu.lua | Custom right-click popup menu with LSP actions | |
project_runner.lua | Run prepared terminal commands per filetype - e.g. package.json scripts from ts/js files (Not a plugin) | |
quicklist.lua | Delete/add to vim quicklist | |
quotes.lua | Allows you to toggle between \``, ”and’` quotes around the cursor | |
remap.lua | General vim remaps not related to specific plugins | |
schemastore.lua | Auto-loads JSON $schema depending on filetype and name | b0o/schemastore.nvim |
scrollbar.lua | Scrollbar with diagnostic, search and git hunk markers | petertriho/nvim-scrollbar |
separators.lua | Insert comment separator lines | |
session.lua | Session management with auto save/restore | |
statusline.lua | Status line UI updates | nvim-lualine/lualine.nvim |
surround.lua | Surround any text with anything like brackets, quotes, HTML tags or custom strings | kylechui/nvim-surround |
text-transform.lua | Transform between PascalCase, snake_case, camelCase, CONST_CASE and more | chenasraf/text-transform.nvim |
theme.lua | Theme configuration (Catppuccin Mocha, transparent background) | catppuccin/nvim |
todo_comments.lua | Highlight & find TODO/HACK/FIXME/etc in comments across the project | folke/todo-comments.nvim |
treesitter.lua | Syntax highlighting on steroids | nvim-treesitter/nvim-treesitter |
trouble.lua | View list of diagnostics, quick fixes, TODOs, etc | folke/trouble.nvim |
undotree.lua | Undo each file as you would a git branch! | mbbill/undotree |
uuid_gen.lua | UUID generation snippet | L3MON4D3/LuaSnip |
vim-tmux-navigator.lua | Move between nvim splits and tmux panes with the same <C-h/j/k/l> | christoomey/vim-tmux-navigator |
visual-multi.lua | Multiple cursor support for nvim | mg979/vim-visual-multi |
How to install
-
Install zsh and GNU Stow
brew install stow -
Clone this repository into
~/.dotfiles:git clone git@github.com:chenasraf/dotfiles.git --depth 1 ~/.dotfiles -
Symlink configs into your home directory using stow:
cd ~/.dotfiles stow -t ~ .This creates symlinks for
.zshrc,.editorconfig,.config/*,.local/share/zsh/plugins/local/*, etc. Files listed in.stow-local-ignore(scripts, utilities, repo metadata) are excluded.To restow after pulling changes:
cd ~/.dotfiles stow -R -t ~ . -
Install tools via sofmani:
sofmaniThis handles brew packages, git plugins, language runtimes, and other dependencies.
Structure
~/.dotfiles/
├── .config/ # App configs (aerospace, alacritty, ghostty, lazygit, nvim, tmux, wezterm, ...)
├── .local/ # Zsh plugins (stowed to ~/.local/share/zsh/plugins/local/)
├── .editorconfig # Global editorconfig (stowed to ~/.editorconfig)
├── .zshrc # Shell config (stowed to ~/.zshrc)
├── exports.zsh # Environment variables (sourced by .zshrc)
├── aliases.zsh # Shell aliases (sourced by .zshrc)
├── completions/ # Zsh completions (added to fpath by .zshrc)
├── _plugins/ # Plugin loader and MOTD scripts (sourced from $DOTFILES)
├── utils/ # Build utilities
└── .stow-local-ignore
Stow symlinks everything in the repo root into ~, except items in .stow-local-ignore (scripts,
utilities, and repo metadata that are sourced directly from $DOTFILES).
My Other Stuff
See some of my other projects at my website.
Or some of my packages:
NPM
- Simple Scaffold - Generate any file structure - from single components to entire app boilerplates, with a single command.
- Massarg - Flexible, powerful, and simple command/argument parser for CLI applications
Dart/Flutter
Apps
- Dungeon Paper - A Dungeon World character sheet app written with Flutter
- Mudblock - An MUD client for mobile & desktop
Packages
- Script Runner - Run all your project-related scripts in a portable, simple config.
- Unaconfig - Load your user’s config files for your package easily, from multiple sources & formats. Like cosmiconfig, but for Dart!
- CTelnet - A simple Telnet client for Dart/Flutter, parse incoming and outgoing data easily and quickly.
- btool - Generic build helper tools for Flutter/Dart such as manipulating version, package name or application ID
- Wheel Spinner - A simple Flutter widget for updating a number using a pitch bender-like spinner
Neovim
- text-transform.nvim - Common text transformers for nvim - switch between camelCase, PascalCase, snake_case, and more!
Rust
- tblf - Turns any CLI output lines into tables.
Go
- GI Gen - Gitignore generator for any type of projectackages/unaconfig)