{"id":21708256,"url":"https://github.com/epilande/dotfiles","last_synced_at":"2025-04-12T16:25:30.688Z","repository":{"id":35023469,"uuid":"39129265","full_name":"epilande/dotfiles","owner":"epilande","description":":house_with_garden: dotfiles configuration","archived":false,"fork":false,"pushed_at":"2025-01-19T18:25:08.000Z","size":550,"stargazers_count":22,"open_issues_count":1,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-26T10:52:14.511Z","etag":null,"topics":["brewfile","dotfiles","homebrew","neovim","nvim","starship","stow","tmux","vim","wezterm","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/epilande.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":"2015-07-15T09:52:18.000Z","updated_at":"2025-01-19T18:25:10.000Z","dependencies_parsed_at":"2024-09-07T05:40:26.344Z","dependency_job_id":"5b918fde-25f2-4e07-bb3e-de2ce572ece3","html_url":"https://github.com/epilande/dotfiles","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilande%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilande%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilande%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epilande%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epilande","download_url":"https://codeload.github.com/epilande/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248595281,"owners_count":21130495,"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","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":["brewfile","dotfiles","homebrew","neovim","nvim","starship","stow","tmux","vim","wezterm","zsh"],"created_at":"2024-11-25T22:22:24.198Z","updated_at":"2025-04-12T16:25:30.680Z","avatar_url":"https://github.com/epilande.png","language":"Lua","funding_links":[],"categories":["Lua"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eDotfiles 🏡\u003c/h1\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  Configurations for my terminal, shell, and editor managed by git and \u003ca href=\"https://www.gnu.org/software/stow/\"\u003eGNU Stow\u003c/a\u003e\n\u003c/p\u003e\n\n![output_optimized](https://github.com/user-attachments/assets/ec87df2c-9ebc-4f6e-990d-03f19e96d1c7)\n\n## 🌟 Overview\n\n- Terminal: [Ghostty](https://ghostty.org/) + [Tmux](https://github.com/tmux/tmux)\n- Shell: [Zsh](https://www.zsh.org/) + [Starship](https://starship.rs/)\n- Editor: [Neovim](https://neovim.io/) based on [LazyVim](https://www.lazyvim.org/)\n- Version Manager: [asdf](https://asdf-vm.com/)\n- File Manager: [Yazi](https://github.com/sxyazi/yazi)\n- Theme: [Catppuccin](https://catppuccin.com/)\n\n## 📦 Installation\n\n### Clone the Repository\n\n```bash\ngit clone https://github.com/epilande/dotfiles.git ~/.dotfiles\ncd ~/.dotfiles\n```\n\n### Automated Setup\n\nRun the automated setup script to install and configure everything:\n\n```bash\nchmod +x ./setup.sh \u0026\u0026 ./setup.sh\n```\n\n#### This script will:\n\n- Install Homebrew and packages from Brewfile\n- Create symlinks for all configurations using stow\n- Set up runtime environments (Node.js, Python, Go) via asdf\n- Install and configure Tmux with plugins\n- Set up package managers (yarn, pnpm) via corepack\n\n\u003e [!NOTE]\n\u003e If you run the automated setup you're pretty much done here.\n\u003e If you prefer to install components individually, continue reading.\n\n### MacOS System Preferences\n\nConfigure sensible MacOS defaults:\n\n```bash\nchmod +x ./macos.sh \u0026\u0026 ./macos.sh\n```\n\n## 🔗 Create Symlinks\n\nCreate symlinks for all configurations:\n\n```bash\nstow --target=$HOME */\n```\n\nOr create a symlink for a specific individual package (e.g., Neovim):\n\n```bash\nstow --target=$HOME nvim # ... and any other configuration you want\n```\n\n## 🍺 Homebrew\n\n### Install Packages\n\nInstall [Homebrew](https://brew.sh), then run the following to install specified packages, casks, and taps listed in the [Brewfile](./Brewfile):\n\n```bash\nbrew bundle\n```\n\n### Verify Dependencies\n\nCheck if all dependencies listed in the Brewfile are installed:\n\n```bash\nbrew bundle check --verbose\n```\n\n### Generate Brewfile\n\nGenerate a Brewfile from the list of currently installed Homebrew pakcages, casks, and taps:\n\n```bash\nbrew bundle dump\n```\n\n## 🐚 Zsh\n\n### Sourcing Configurations\n\nAll files in `~/.config/zsh/*` are automatically sourced.\n\n### Local Configurations\n\nLocal configuration files for sensitive settings are ignored via `.gitignore`:\n\n```\nzsh/.config/zsh/*local*.zsh\n```\n\nThis allows you to have local configuration files for any sensitive configurations that should not be included in source control.\n\n## 🪟 Tmux\n\n### Installation\n\nInstall Tmux Plugin Manager (TPM):\n\n```bash\ngit clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm\n```\n\n### Install Plugins\n\nOnce TPM is installed, press `prefix + I` to install plugins listed in [`tmux/.config/tmux/plugins.conf`](./tmux/.config/tmux/plugins.conf).\n\n### Local Configuration\n\nSimilarly to Zsh, local Tmux configurations are sourced if `~/.config/tmux/local.conf` exists.\n\n### Tmux Key Mappings\n\nTmux is configured with several custom key bindings to enhance productivity and ease of use. Here are the most notable mappings:\n\n| Key Binding        | Description                                |\n| ------------------ | ------------------------------------------ |\n| `prefix + r`       | Reload tmux configuration                  |\n| `prefix + \\|`      | Split window vertically                    |\n| `prefix + -`       | Split window horizontally                  |\n| `prefix + h/j/k/l` | Navigate panes                             |\n| `prefix + C-h/C-l` | Switch to previous/next window             |\n| `M-t` (⌥ + t)      | Open Tmux Toolbox menu                     |\n| `M-g` (⌥ + g)      | Toggle Lazygit in a popup window           |\n| `M-n` (⌥ + n)      | Toggle \"notes\" session in a popup window   |\n| `M-f` (⌥ + f)      | Toggle Yazi in a popup window              |\n| `prefix + C-f`     | Fuzzy find and switch between tmux windows |\n| `prefix + b`       | Switch to the last active session          |\n\n#### Key Features\n\n1. **Tmux Toolbox** (`M-t`): A menu providing quick access to common tmux actions like creating new windows/sessions, changing layouts, and managing panes.\n\n2. **Lazygit Integration** (`M-g`): Instantly access git operations in a popup window from anywhere within tmux. This allows you to manage your git repositories without leaving your current session, whether you're in Neovim, browsing files, or running any other process. The popup can be easily toggled, maintaining your workflow continuity.\n\n3. **Notes Session** (`M-n`): Toggle a dedicated \"notes\" tmux session accessible from anywhere. If you're in another session, this will open your notes in a popup window, allowing quick access to your notes without disrupting your current work context.\n\n4. **Fuzzy Find Windows** (`prefix + C-f`): Open a fuzzy finder to quickly switch between tmux windows using a custom `tmw` script.\n\nFor a complete list of key bindings, refer to [`tmux/.config/tmux/keymaps.conf`](./tmux/.config/tmux/keymaps.conf).\n\n### Troubleshooting\n\n\u003cdetails\u003e\n\u003csummary\u003eIf you're experiencing an issue where tmux repeats characters unexpectedly\u003c/summary\u003e\n\n```sh\ninfocmp -x tmux-256color \u003etmux-256color.src\ntic -x tmux-256color.src\n```\n\n\u003c/details\u003e\n\n## 💻 Neovim\n\nMy primary Neovim configuration uses LazyVim as a base, located in [`nvim/.config/nvim-lazyvim`](./nvim/.config/nvim-lazyvim), and for quick access I have aliased it as `lv`.\n\nIn addition to LazyVim, I have several other Neovim configurations that I can easily switch between using the `nvims` function. This function provides a menu for selecting different configurations, allowing me to test and experiment with various Neovim setups.\n\n\u003cimg width=\"841\" alt=\"image\" src=\"https://github.com/user-attachments/assets/ae77dede-b81a-45b7-bcb2-bc378a667b96\"\u003e\n\n## 🔠 Nerd Fonts\n\nIf you see boxes `□`, this means your current font doesn't support Powerline and Nerd Fonts. Install a Nerd Font from https://www.nerdfonts.com/ for shell and Neovim icons. After installation, you will need to configure your GUI/Terminal to use the font.\n\n## ⌨️ Karabiner-Elements\n\n[Karabiner-Elements](https://karabiner-elements.pqrs.org/) is a powerful keyboard customizer for MacOS. I use it to modify my keyboard behavior and improve my workflow. My configuration file is located at [`karabiner/.config/karabiner/karabiner.json`](./karabiner/.config/karabiner/karabiner.json). This setup allows me to maintain a consistent typing experience across different keyboards and computers.\n\n### Key Modifications\n\n1. **Caps Lock Remap**: ⇪ Caps Lock is remapped to act as ⌃ Control when held, and ⎋ Escape when tapped.\n2. **Hyper Key**: Holding ⇥ Tab acts as a \"Hyper\" key (Command+Shift+Control+Option), while tapping Tab functions as normal.\n3. **Meh Key**: Holding \\\\ Backslash acts as a \"Meh\" key (Shift+Control+Option), while tapping \\\\ Backslash types \\\\ as normal.\n\nThe Hyper and Meh keys allow me to set up a large number of unique shortcuts for various applications and system functions.\n\n## 🖥️ Ghostty\n\n[Ghostty](https://ghostty.org/) is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.\n\n### Ghostty Key Mappings\n\n| Key Binding       | Action                    |\n| ----------------- | ------------------------- |\n| `CMD + t`         | Create new tmux window    |\n| `CMD + x`         | Close tmux pane           |\n| `CMD + 1-9`       | Switch to tmux window 1-9 |\n| `CMD + SHIFT + R` | Reload Ghostty config     |\n\nFor a complete list of key bindings, refer to [`ghostty/.config/ghostty/config`](./ghostty/.config/ghostty/config).\n\n## ⚙️ Local Configurations\n\nLocal configurations are managed separately, kept outside of source control. This is particularly useful for storing sensitive settings or configurations that are specific to individual computers and not needed on other systems.\n\n\u003cdetails\u003e\n\u003csummary\u003eDirectory structure of my local configurations\u003c/summary\u003e\n\n```\n❯ tree -P '*local*' --prune -aC\n.\n├── nvim\n│   └── .config\n│       └── nvim-lazyvim\n│           └── lua\n│               └── plugins\n│                   └── local.lua\n├── tmux\n│   └── .config\n│       └── tmux\n│           └── local.conf\n└── zsh\n    └── .config\n        └── zsh\n            ├── local-aliases.zsh\n            └── local.zsh\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepilande%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepilande%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepilande%2Fdotfiles/lists"}