{"id":17019470,"url":"https://github.com/haydenrou/dotfiles","last_synced_at":"2025-10-11T07:08:22.334Z","repository":{"id":161047583,"uuid":"172761793","full_name":"haydenrou/dotfiles","owner":"haydenrou","description":"My Personalised Development Environment","archived":false,"fork":false,"pushed_at":"2024-10-25T10:00:43.000Z","size":3932,"stargazers_count":38,"open_issues_count":13,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-25T12:16:54.310Z","etag":null,"topics":["dotfiles","fzf","golang","javascript","lua","neovim","nvim","react","ruby","skhd","tmux","typescript","vim","vimrc","yabai","zsh"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haydenrou.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-26T17:55:24.000Z","updated_at":"2024-10-25T10:00:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"9c96c5cb-2ac2-480f-bdbd-16de507250cc","html_url":"https://github.com/haydenrou/dotfiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/haydenrou/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haydenrou%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haydenrou%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haydenrou%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haydenrou%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haydenrou","download_url":"https://codeload.github.com/haydenrou/dotfiles/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haydenrou%2Fdotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006587,"owners_count":26084129,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotfiles","fzf","golang","javascript","lua","neovim","nvim","react","ruby","skhd","tmux","typescript","vim","vimrc","yabai","zsh"],"created_at":"2024-10-14T06:49:14.658Z","updated_at":"2025-10-11T07:08:22.299Z","avatar_url":"https://github.com/haydenrou.png","language":"Lua","readme":"\u003cdiv align=\"center\"\u003e\n    \u003ch1\u003ehaydenrou/dotfiles\u003c/h1\u003e\n    \u003cstrong\u003eMy Personalized Development Environment\u003c/strong\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n![Dotfiles Demo](https://i.imgur.com/F3wxfe1.jpeg)\n\nTo prevent myself from going down wild Linux rabbit holes and trying every distribution I can get my hands on, I've transcended into an Apple chad. Therefore, this configuration may require changes to work in a Linux environment.\n\n## Mandatory Software:\n\n- [neovim](https://github.com/neovim/neovim)\n- [tmux](https://github.com/tmux/tmux)\n- [yabai](https://github.com/koekeishiya/yabai) \u0026 [skhd](https://github.com/koekeishiya/skhd)\n  - As part of the [yabairc](./yabai/yabairc), we use [jankyborders](https://github.com/FelixKratz/JankyBorders)\n- [ripgrep](https://github.com/BurntSushi/ripgrep)\n- [fzf](https://github.com/junegunn/fzf)\n- [zsh](https://www.zsh.org/)\n- [sketchybar](https://felixkratz.github.io/SketchyBar/setup)\n  - As part of the scripts (see [here for example](./sketchybar/scripts/highlight_space.sh)) we need [jq](https://github.com/jqlang/jq)\n  - Make sure you create a `sketchybar/scripts/weather.env.sh` file containing the values for `WEATHER_KEY=123` and `WEATHER_CITY=London`\n\n### Optional Software: (Warning: you may have to remove some alises / plugins if these are not installed)\n- [bat](https://github.com/sharkdp/bat)\n- [eza](https://github.com/eza-community/eza)\n- [zoxide](https://github.com/ajeetdsouza/zoxide)\n- [todoist_helper](https://github.com/haydenrou/todoist_helper)\n- [neofetch](https://github.com/dylanaraps/neofetch)\n- [tmate](https://tmate.io/)\n- [btop](https://github.com/aristocratos/btop)\n- [alacritty terminal](https://alacritty.org/)\n- [zoxide](https://github.com/ajeetdsouza/zoxide)\n- [nerd fonts](https://www.nerdfonts.com/font-downloads) for devicons to display in nvim-tree\n    - for instance, `brew tap homebrew/cask-fonts \u0026\u0026 brew install --cask font-commit-mono-nerd-font`, and added to your terminal (see [./alacrity/config.yml](./alacrity/config.yml))\n- [cmake](https://cmake.org/) `brew install cmake` or else the installation of telescopes fzf plugin will fail\n- [fd](https://github.com/sharkdp/fd) as an optional dependency of telescope, used in telescope.lua\n- [gpgtools](https://gpgtools.org/) for signing commits. (Note: instead of symlinking `git/.gitconfig`, copy it instead as you'll need to add a signingkey)\n\n## File Structure:\n\nMost files in this repo are structured so that you can symlink the directory directly into `~/.config`, except for a few that need to live in different places such as `zshrc`.\n\n## Neovim Plugins:\n\nUsing [lazy.nvim](https://github.com/folke/lazy.nvim) as a plugin manager, here are the plugins used:\n\n- [goolord/alpha-nvim](https://github.com/goolord/alpha-nvim) for the dashboard (see the asciis in utils)\n- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) for fuzzy finding\n- [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter) for code parsing etc\n- [rose-pine/neovim](https://github.com/rose-pine/neovim) as a colour scheme. an equivalent is used for tmux and alacritty themes too\n- [mason.nvim](https://github.com/williamboman/mason.nvim) is used in conjunction with lsp-zero to manage your different LSPs\n- [lsp-zero.nvim](https://github.com/VonHeikemen/lsp-zero.nvim) to use NeoVim's LSP client\n- [harpoon](https://github.com/ThePrimeagen/harpoon) is used for silky smooth file movement\n- [undotree](https://github.com/mbbill/undotree) for all your accidental undo's\n- [vim-fugitive](https://github.com/tpope/vim-fugitive) for git within vim\n- [vim-rhubarb](https://github.com/tpope/vim-rhubarb) primarily just for `:GBrowse` - going to the file you're in, in your browser\n- [copilot.vim](https://github.com/github/copilot.vim) to let robots do our work for us\n- [nvim-tree.lua](https://github.com/nvim-tree/nvim-tree.lua) for a better than nerdtree experience\n- [nvim-tree/nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons) for icons\n- [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) a good looking statusline\n- [Comment.nvim](https://github.com/numToStr/Comment.nvim) to comment out your broken code\n- [nvim-surround](https://github.com/kylechui/nvim-surround) to surround whatever you want, with whatever you want\n- [conform.nvim](https://github.com/stevearc/conform.nvim) to enable formatters such as eslint\n- [vim-dadbod](https://github.com/tpope/vim-dadbod/) for mysql connections and queries in vim\n\n## Notable Settings:\n\n- Line numbers and relative numbers are turned on.\n- Line wrapping is turned off.\n- The grep program for searching is set to ripgrep.\n- Trailing whitespace is automatically stripped on buffer write.\n\n## Binds:\n\n### General:\n\n- `\u003cleader\u003e` is set to `\u003cSpace\u003e`\n- `\u003cleader\u003esp` will spell the previous word correctly.\n- `n` and `N` after a search will reposition the cursor to the center of the screen for better visibility.\n- `J` combines the next line with the current line, ensuring the cursor remains at the beginning of the combined line.\n- `\u003cC-d\u003e` and `\u003cC-u\u003e` scroll half a screen down or up while keeping the cursor position fixed.\n- `\u003cleader\u003e\u003cEnter\u003e` clears the search highlight.\n- `J` (Visual Mode) and `K` (Visual Mode) move the selected lines down (`J`) or up (`K`) in visual mode.\n- `\u003cleader\u003ey` and `\u003cleader\u003eY` yank the current line (`\u003cleader\u003ey`) or from the cursor to the end of the line (`\u003cleader\u003eY`) to the system clipboard.\n- `\u003cleader\u003ep` and `\u003cleader\u003ed` paste (`\u003cleader\u003ep`) or delete (`\u003cleader\u003ed`) without copying to the buffer.\n- `\u003cleader\u003ef` formats the current buffer using the LSP (Language Server Protocol).\n- `\u003cC-j\u003e` and `\u003cC-k\u003e` navigate through the quickfix list, ensuring the cursor position is centered.\n- `\u003cleader\u003e` + `h,j,k,l` move your cursor to different windows.\n- `\u003cleader\u003es` performs a case-insensitive search and replace across the entire buffer, prompting for confirmation.\n- `\u003cleader\u003er` toggles relative line numbers.\n- `K` (Normal Mode) to show documentation.\n- `\u003cleader\u003e+` and `\u003cleader\u003e-` vertically enlarge or reduce a pane.\n- `\u003cleader\u003eco` and `\u003cleader\u003ecc` open and close the quickfix list.\n\n[A random list of handy vim commands](./docs/vimbits.md)\n\n### Plugin-Specific Keybinds:\n\n- **Copilot:**\n  - In insert mode, `\u003cC-L\u003e` will complete the suggestion.\n\n- **Fugitive:**\n  - `\u003cleader\u003egs` will open git in nvim.\n  - `\u003cleader\u003egdf` will open a git diff of the current file.\n\n- **Harpoon:**\n  - `\u003cleader\u003ea` will add to the list.\n  - `\u003cleader\u003ee` will open the list. This is changeable using general vim motions, such as deleting or moving a line below.\n\n- **Rhubarb:**\n  - `\u003cleader\u003egb` will open the browser to the current file.\n\n- **Surround:**\n  - `ys{motion}{wrapper}` will surround with the `{wrapper}` variable. This also works in `visual` mode.\n\n- **Telescope:**\n  - Use `\\` for a fuzzy project word search.\n  - `\u003cC-T\u003e` to search files.\n  - `\u003cC-P\u003e` to search files that aren't in git.\n  - `\u003cleader\u003eb` to browse your buffer files.\n  - Pressing tab to select from the list, then following with `\u003cC-q\u003e` will open a quickfix list\n\n- **Tree:**\n  - `\u003cleader\u003enn` to open the file tree.\n  - `\u003cleader\u003enf` to find the current file in the tree. Use `a` to add files, `d` to delete, and `r` to rename from the tree.\n\n- **Undotree:**\n  - `\u003cleader\u003eu` to open undotree.\n\n- **Dadbod:**\n  - `\u003cleader\u003edb` to open the database UI.\n\n## LSPs (Language Server Protocols):\n\nBy default, the following LSPs will be installed:\n- `ts_ls` for typescript. (old: `tsserver`)\n- `eslint` for eslint.\n- `solargraph` for ruby.\n- `lua_ls` for lua.\n- `tailwindcss` for tailwind.\n- `rust_analyzer` for rust.\n- `gopls` for golang.\n- `jsonls` for json.\n- `emmet_ls` for emmet html.\n\n### Bindings:\n\n- Pressing `Tab` (or `Shift-Tab`) completes your LSP suggestions.\n- Pressing `\u003cEnter\u003e` populates the currently selected tab.\n- `[g` and `]g` will go to the previous and next diagnostics error respectively.\n- `gd` will go to definition.\n- `\u003cleader\u003egr` will go to references.\n- `\u003cleader\u003ecr` will rename the currently highlighted variable.\n- `\u003cleader\u003evca` will display code actions.\n- `\u003cleader\u003ecf` will apply the quickfix code action.\n\nAdditionally, use `\u003cC-Space\u003e` to open the completion menu if it's not automatically open.\n\n## Aliases:\n\n### Zsh\n\nA full list of zsh aliases live under [./zsh/aliases.zsh](./zsh/aliases.zsh), but here are a few:\n\n- `vi` and `vim` are aliased to `nvim`.\n- `ga` and `gaa` alias git add for staging changes for either a specified file or all unstaged files.\n- `gap` prompts for interactive staging with `git add -p`.\n- `gb` shows the Git branch, and `gc` initiates a Git commit.\n- `gca` combines `git add .` and `git commit`.\n- `gco` is a shortcut for `git checkout`.\n- `gcob` allows you to interactively switch Git branches.\n- `gpushb`, `gbd`, `gpullb`, and `gmergeb` streamline branch operations.\n- `gp` simplifies the Git push command.\n- `gf` and `gfa` alias Git fetch commands.\n- `gst` provides a concise Git status with untracked files.\n- `egst` shows modified files with `git status` and opens them in Neovim.\n- `CTRL-T` will search for files from the command line with fzf\n- `ESC-C` (`ALT-C` on Linux) will search for directories from the command line, and selecting one will place you in the directory\n\n### Tmux\n\nSee the tmux config in [./tmux/.tmux.conf](./tmux/.tmux.conf), here are a few helpful aliases:\n\n- `\u003cC-b\u003e` is the prefix\n- `\u003cprefix\u003e[` to open vi mode within tmux\n- `\u003cprefix\u003ef` to use the `tmux-sessionizer` script, which will open a project in a new session\n- `\u003cprefix\u003ef` to use the `tmux-sessionizer` script, which will open a project in a new session\n- `\u003cprefix\u003e|` to split vertically\n- `\u003cprefix\u003e-` to split horizontally\n\n## Debugging:\n\n- Check `:checkhealth` to ensure all plugins are working correctly.\n- Use `:map` or `:verbose map \u003cleader\u003enn` (for instance) to check keybinds are being set correctly.\n- `:lua print(vim.inspect(vim.lsp.buf_get_clients()[1].resolved_capabilities))` to see what the LSP can do\n- If seeing errors using flags such as `error parsing flag -E` - remember that this could be because it's aliased. In the instance of `grep`, you may need to use `/usr/bin/grep` to use grep intead of `rg`\n- When starting `yabai`, you may need to run `yabai --start-service` instead of `brew services start yabai` per [this issue](https://github.com/koekeishiya/yabai/issues/1738#issuecomment-1541596750)\n\n## Contribution:\n\nYou're more than welcome to submit an issue or PR with any bugs or feature suggestions. See issues for current feature requests/bugs.\n\nIf you want to pair up on a project or build out any of the above, pop me an email at \u003chayden@rouille.dev\u003e.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaydenrou%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaydenrou%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaydenrou%2Fdotfiles/lists"}