My dotfiles! Use at your own risk. Some pre-requisites (see readme)
  • Shell 50.4%
  • Lua 36.2%
  • Python 8.3%
  • GLSL 2.6%
  • Ruby 1.4%
  • Other 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-03 16:11:59 +02:00
.agent-browser feat(claude): agent-browser replaces claude in chrome 2026-10-25 10:27:42 +02:00
.claude feat(claude): agent-browser replaces claude in chrome 2026-10-25 10:27:42 +02:00
.config feat(nvim/cpp): switch source/header on <leader>o 2026-11-03 16:11:59 +02:00
.github docs: update readme + add funding 2024-02-04 00:27:09 +02:00
.gradle chore(gradle): pin Gradle to JDK 21 (Homebrew default is 25, unsupported) 2026-08-23 01:11:46 +03:00
.hammerspoon feat(hammerspoon): switch aerospace layout by monitor count 2026-07-01 16:08:43 +03:00
.local feat(dotenv): keyring-unlock for the headless keyring holding dotenvx keys 2026-10-20 22:05:30 +00:00
_plugins fix: aliases 2026-03-30 14:49:30 +03:00
brew chore(brew): dump 2025-12-01 21:12:17 +02:00
completions fix(completions): add +x 2026-09-15 14:12:59 +00:00
Library/Preferences feat(clangd): global config enabling clang-tidy checks 2026-10-28 09:38:32 +02:00
.editorconfig chore(editorconfig): disable final newline for dart 2026-05-16 00:06:14 +03:00
.eslintignore add more templates 2022-09-01 23:52:07 +03:00
.gitignore fix(tx): remove local files 2026-10-11 10:31:56 +03:00
.prettierignore chore: ignore .claude, deps, vendor in prettier 2026-04-16 20:52:10 +03:00
.prettierrc chore: update deps 2024-07-21 22:44:10 +03:00
.shellcheckrc feat: tmux updates 2023-06-20 10:26:24 +03:00
.stow-local-ignore feat(claude): agent-browser replaces claude in chrome 2026-10-25 10:27:42 +02:00
.zshenv fix(zsh): waive shared brew dirs from the completion security audit 2026-09-22 20:01:18 +00:00
.zshrc feat(tmux): update plugin specs, add ssh stats 2026-09-22 02:17:56 +03:00
aliases.zsh feat(aliases): remove cat->bat and grep->rg aliases 2026-10-17 20:20:49 +03:00
autoload_completions.zsh fix(zsh): waive shared brew dirs from the completion security audit 2026-09-22 20:01:18 +00:00
CLAUDE.md feat(claude): agent-browser replaces claude in chrome 2026-10-25 10:27:42 +02:00
dirs.zsh fix(dirs): move local dirs to _local 2026-06-03 00:38:27 +03:00
exports.zsh fix(exports): set GPG_TTY for pinentry 2026-10-16 12:07:31 +03:00
ghostty.zsh fix(ghostty): add more long-running commands 2026-05-31 09:18:24 +03:00
install.sh fix: stow symlink folding 2026-06-17 14:57:15 +00:00
keybindings.zsh feat(zsh): set vim command editor to ctrl+G 2026-09-24 14:31:10 +03:00
package.json fix: missing pnpm pkg for dev 2024-03-28 15:18:01 +02:00
pnpm-lock.yaml chore: update deps 2024-07-21 22:44:10 +03:00
README.md feat(nvim/project_runner): collect scripts from package.json, pyproject, Makefile, Cargo and Go 2026-11-02 12:04:53 +02:00
terminal.zsh fix(zsh): reset leaked mouse reporting before each prompt 2026-09-19 19:11:11 +03:00
tmux.zsh feat(tmux): update plugin specs, add ssh stats 2026-09-22 02:17:56 +03:00

.dotfiles

These are my personal dotfiles.

image
Screenshots image image image

Some notable tools I use are:

  • Nvim (.config/nvim)
  • Tmux (.config/tmux, utils/tx)
  • WezTerm (.config/wezterm/wezterm.lua)

Requirements

  1. Node.js (PNPM will be installed)
  2. 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 <F5> picker for package.json scripts, pyproject.toml tasks, Makefile targets, Cargo and Go commands found above the current file, plus per-filetype commands (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

  1. Install zsh and GNU Stow

    brew install stow
    
  2. Clone this repository into ~/.dotfiles:

    git clone git@github.com:chenasraf/dotfiles.git --depth 1 ~/.dotfiles
    
  3. 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 ~ .
    
  4. Install tools via sofmani:

    sofmani
    

    This 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)