Skip to content

Latest commit

 

History

585 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dmitry Demenchuk does dotfiles

The single dot that has it all.

Clone the repository into ~/dotfiles: git clone https://github.com/mrded/dotfiles.git ~/dotfiles

Zsh

Add to your ~/.zshrc:

ZSH_DISABLE_COMPFIX=true
source ~/dotfiles/zsh/zshrc/init.zsh

Add to your ~/.zprofile:

ZSH_DISABLE_COMPFIX=true
source ~/dotfiles/zsh/zprofile/init.zsh

NVM & Node.js

NVM is required for NeoVim plugins (TypeScript tools, Copilot) and is auto-loaded by zsh/init.zsh.

  1. Install NVM:

    brew install nvm
  2. Install and set default Node.js version (>= v22):

    nvm install 22
    nvm alias default 22
  3. Install required global packages:

    npm install -g typescript neovim

NeoVim

  • Install Neovim brew install neovim tree-sitter-cli (requires NeoVim 0.12.0+)
  • Replace configuration: ln -s ~/dotfiles/nvim ~/.config/nvim
  • Install plugins: nvim +PackSync +TSUpdate

Note: Uses vim.pack APIs (NeoVim 0.12+ built-in) with automatic dependency deduplication. The lockfile at ~/.config/nvim/nvim-pack-lock.json tracks plugin versions and should be version controlled for consistency across machines.

Vifm

Replace configuration: ln -s ~/dotfiles/vifm/vifmrc ~/.config/vifm/vifmrc

Alacritty

Replace configuration: ln -s ~/dotfiles/alacritty ~/.config/alacritty

issues:

Tmux

Tmux is needed for Alacritty to support tabs and splits.

  • Install Tmux brew install tmux
  • Install Plugin Manager
  • Install Pluggins: ~/.tmux/plugins/tpm/scripts/install_plugins.sh
  • Update Pluggins: ~/.tmux/plugins/tpm/scripts/update_plugin.sh all
  • Cleanup Pluggins: ~/.tmux/plugins/tpm/scripts/clean_plugins.sh
  • Replace configuration: ln -s ~/dotfiles/tmux/tmux.conf ~/.tmux.conf

issues:

  • notifications make an icon at the dock jump
  • Prevent from copying to clipboard on mouse select
  • Copy selected text on CMD+C

Wezterm

Replace configuration: ln -s ~/dotfiles/wezterm/wezterm.lua ~/.wezterm.lua

issues:

Kitty

Replace configuration: ln -s ~/dotfiles/kitty ~/.config/kitty

issues:

Ghostty

Replace configuration: ln -s ~/dotfiles/ghostty ~/.config/ghostty

issues:

  • none

Neovide

Install and link configuration:

brew install --cask neovide
ln -s ~/dotfiles/neovide ~/.config/neovide

Neovide is a GUI client for NeoVim that uses your existing ~/.config/nvim configuration.

issues:

How to add a new NVim plugin

  1. Create a new file nvim/lua/plugins/{plugin-name}.lua
  2. Return a plugin spec:
    return {
      src = 'author/plugin-name',   -- required
      tag = 'v1.0.0',               -- optional: pin version
      install = 'make',             -- optional: runs once on first install, in plugin dir
      requires = {                  -- optional: src and tag only
        { src = 'nvim-lua/plenary.nvim' },
      },
      config = function()           -- optional: runs on every startup
        require('plugin-name').setup({})
      end,
    }
    • If a dependency needs its own install hook, give it its own file in lua/plugins/
  3. Save and sync: nvim +PackSync or :PackSync inside NeoVim

Terminal requirements

Gotchas

  • After changing plugin settings, run :PackSync and restart NeoVim
  • Changing versions: Edit tag, delete the plugin dir (rm -rf ~/.local/share/nvim/site/pack/core/opt/<name>), then :PackSync. For all plugins: :PackNuke then :PackSync
  • Removing plugins: Delete the spec file and run :PackSync — auto-removes from disk
  • Spec errors: Syntax errors in plugin files abort the sync (not silently dropped)
  • Local plugins: Not supported — use git remotes or push to GitHub instead
  • Dependencies: Automatically deduplicated; pinned specs (tag) take precedence over unpinned
  • Unpinned plugins: Updated on every :PackSync (omit tag to track latest)
  • Install hooks: Run once on first install in the plugin directory; failed hooks remove the plugin so :PackSync retries
  • LSP servers: Managed by Mason and install automatically
  • Non-interactive: nvim +PackSync and nvim +PackNuke skip plugin startup to run cleanly

Troubleshooting

nvim

neovim may not install plugins propperly. Try to running :UpdateRemotePlugins

treesitter

treesitter may give errors. Try running :TSUpdate to update languages.

SonarLint

SonarLint requires Java 11+

java -version

Add to your ~/.zshrc:

export JAVA_HOME="/opt/homebrew/opt/openjdk@17"
JAVA_PATH=$JAVA_HOME/bin

Claude Code

Claude Code configuration is stored in claude/.

Setup

ln -s ~/dotfiles/claude/skills ~/.claude/skills
ln -s ~/dotfiles/claude/settings.json ~/.claude/settings.json

Available Skills

Skills are either auto-triggered by context or manually invoked with /skill-name:

  • codestyle - Enforces code style guidelines (no let, no any, AAA test pattern, etc.)
  • brainstorm - Explores user intent and requirements before implementation
  • art-of-explanation - Structures explanations for clarity and precision
  • dialectic - Parallel agents argue both sides of a claim to eliminate bias (/dialectic)
  • ask-codex - Consult OpenAI Codex for a second opinion on debugging or review (/ask-codex)
  • learn - Captures strategic project knowledge to CLAUDE.md (/learn)
  • backlog - Manages deferred work items (/backlog)
  • ubiquitous-language - Scans codebase and creates UBIQUITOUS_LANGUAGE.md (/ubiquitous-language)
  • add-serena - Adds Serena (semantic code intelligence) to the current project via .mcp.json and .serena/project.yml (/add-serena)
  • add-locus - Adds Locus (LSP-based code intelligence MCP server) to the current project via locus.toml and .mcp.json (/add-locus)

Tools

  • source ~/dotfiles/zsh/init.zsh - Load zsh configuration (robbyrussell theme + nvm auto-switch)
  • ./scripts/killport.sh <port> - Kill any process running on the specified port.

About

Dmitry Demenchuk does dotfiles

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages