|
1 | | -# 🚀 Dotfiles |
| 1 | +# Dotfiles |
2 | 2 |
|
3 | | -A comprehensive collection of configuration files for a modern development environment, featuring a highly customized LazyVim setup, zsh configuration, and automated installation scripts. |
| 3 | +A curated set of dotfiles and scripts to bootstrap a comfortable, modern dev |
| 4 | +environment. It includes shell configuration (zsh), a Lua-based Neovim setup, |
| 5 | +and a small set of helper scripts to install prerequisites and symlink |
| 6 | +everything into place. |
4 | 7 |
|
5 | | -## ✨ What's Included |
6 | | - |
7 | | -### Core Configurations |
8 | | -- **Neovim**: Heavily customized LazyVim configuration with enhanced keybindings and additional plugins |
9 | | -- **Zsh**: Modern shell setup using zgenom and oh-my-zsh |
10 | | -- **Git**: Optimized git configuration and aliases |
11 | | -- **Terminal**: Various terminal emulator configurations |
| 8 | +--- |
12 | 9 |
|
13 | | -### Key Features |
14 | | -- 📦 **Automated Installation**: One-command setup for new systems |
15 | | -- 🔗 **GNU Stow Integration**: Clean symlink management |
16 | | -- 🎯 **LazyVim Enhancement**: Custom keybindings and plugin configurations |
17 | | -- 🔧 **DevContainer Support**: Includes `nvim-devcontainer-cli` plugin |
18 | | -- 🌟 **Cross-Platform**: Support for multiple operating systems |
| 10 | +## What’s inside |
19 | 11 |
|
20 | | -## 📁 Repository Structure |
| 12 | +- **`home/`** — Files intended to live directly under `$HOME` (e.g., shell RCs). |
| 13 | +- **`config/`** — Files for `$HOME/.config` (e.g., `nvim/` for the Neovim config |
| 14 | + written in Lua). |
| 15 | +- **`scripts/`** — Helper/installer scripts used during setup. |
| 16 | +- **`install.sh`** — One-shot installer that orchestrates the setup. |
| 17 | +- Extras: |
| 18 | + - `guake.conf` (terminal), `vimium.json` (browser Vim keybinds), |
| 19 | + `resticprofile.toml`, `sanoid.conf` (backup/snapshots). |
21 | 20 |
|
22 | | -``` |
23 | | -dotfiles/ |
24 | | -├── home/ # Files that go directly in $HOME |
25 | | -├── config/ # Files that go in $HOME/.config |
26 | | -│ └── nvim/ # LazyVim configuration |
27 | | -│ └── lua/user/ # Custom user configurations |
28 | | -├── scripts/ # Installation and utility scripts |
29 | | -│ ├── main.sh # Interactive installation menu |
30 | | -│ └── utils.sh # Shared functions and utilities |
31 | | -├── private/ # Private configurations (not tracked) |
32 | | -└── install.sh # Main installation script |
33 | | -``` |
| 21 | +> The repository is primarily **Lua** and **Shell**, reflecting the Neovim |
| 22 | + config plus installer scripts. |
34 | 23 |
|
35 | | -## 🚀 Quick Start |
| 24 | +--- |
36 | 25 |
|
37 | | -### Full Installation |
| 26 | +## Quick start |
38 | 27 |
|
39 | | -Clone the repository and run the installation script: |
| 28 | +> **Requirements:** `git` and a POSIX-like environment (Linux/macOS). The |
| 29 | +installer will try to install anything else it needs (e.g., zsh, Neovim) |
| 30 | +depending on your system. |
40 | 31 |
|
41 | 32 | ```bash |
| 33 | +# clone |
42 | 34 | git clone https://github.com/erichlf/dotfiles.git ~/.dotfiles |
43 | 35 | cd ~/.dotfiles |
44 | | -./install.sh |
45 | | -``` |
46 | | - |
47 | | -### Dotfiles Only |
48 | 36 |
|
49 | | -If you only want to install the configuration files without additional software: |
50 | | - |
51 | | -```bash |
52 | | -./scripts/main.sh |
53 | | -# Select "Create symbolic links" from the menu |
| 37 | +# run the installer |
| 38 | +./install.sh |
54 | 39 | ``` |
55 | 40 |
|
56 | | -## ⚙️ Installation Process |
57 | | - |
58 | | -The installation system automatically: |
59 | | - |
60 | | -1. **Detects your operating system** and selects appropriate installation scripts |
61 | | -2. **Installs required dependencies** based on your system |
62 | | -3. **Creates symbolic links** using GNU Stow for clean file management |
63 | | -4. **Configures shell environment** with zsh and custom themes |
64 | | - |
65 | | -### Environment Variables |
66 | | - |
67 | | -The installation scripts use these environment variables: |
68 | | - |
69 | | -- `DOTFILES_DIR`: Path to the dotfiles repository |
70 | | -- `SYSTEM`: System identifier (auto-detected, used for debugging) |
| 41 | +What the installer typically does: |
71 | 42 |
|
72 | | -## 🎯 LazyVim Configuration |
| 43 | +1. Detects your OS/distro. |
| 44 | +2. Installs or updates core tools (zsh, neovim, etc.) as needed. |
| 45 | +3. Creates symlinks from the repo to your `$HOME` and `$HOME/.config`. |
| 46 | +4. Optionally applies terminal/editor/browser extras. |
73 | 47 |
|
74 | | -The crown jewel of this repository is the highly customized LazyVim configuration located in `config/nvim/`. |
| 48 | +> Prefer to do things manually? See **Manual linking** below. |
75 | 49 |
|
76 | | -### Key Improvements |
77 | | -- **Enhanced Keybindings**: More intuitive and efficient key mappings |
78 | | -- **Additional Plugins**: Including `nvim-devcontainer-cli` for container development |
79 | | -- **Custom User Configurations**: Located in `config/nvim/lua/user/` |
80 | | -- **Modular Structure**: Easy to understand and modify |
81 | | - |
82 | | -### Notable Plugins |
83 | | -- DevContainer CLI integration |
84 | | -- Enhanced file navigation |
85 | | -- Improved LSP configurations |
86 | | -- Custom statusline and themes |
87 | | - |
88 | | -## 🛠️ Customization |
89 | | - |
90 | | -### Adding New Configurations |
| 50 | +--- |
91 | 51 |
|
92 | | -1. **For $HOME files**: Add to `home/` directory |
93 | | -2. **For $HOME/.config files**: Add to `config/` directory |
94 | | -3. **Run stow**: `stow home config` to create symlinks |
| 52 | +## Manual linking (advanced) |
95 | 53 |
|
96 | | -### Modifying LazyVim |
| 54 | +If you’d rather link files yourself: |
97 | 55 |
|
98 | | -The most important customization files are in `config/nvim/lua/user/`. The naming convention is self-explanatory: |
| 56 | +1. Copy or symlink anything under `home/` into `$HOME`. |
| 57 | +2. Copy or symlink anything under `config/` into `$HOME/.config`. |
| 58 | +3. Launch a new shell to pick up zsh config; start `nvim` to let plugins finish bootstrapping. |
99 | 59 |
|
100 | | -- `keymaps.lua` - Custom keybindings |
101 | | -- `options.lua` - Neovim options |
102 | | -- `plugins/` - Additional plugin configurations |
| 60 | +> Tip: If you use GNU Stow, you can mirror `home/` and `config/` into place |
| 61 | +cleanly (not required by the repo, but convenient). |
103 | 62 |
|
104 | | -## 📋 Requirements |
| 63 | +--- |
105 | 64 |
|
106 | | -- **Git**: For cloning the repository |
107 | | -- **GNU Stow**: For symlink management |
108 | | -- **Zsh**: Modern shell (auto-installed if not present) |
109 | | -- **Neovim**: Recent version for LazyVim compatibility |
| 65 | +## Updating |
110 | 66 |
|
111 | | -## 🔧 Troubleshooting |
| 67 | +```bash |
| 68 | +cd ~/.dotfiles |
| 69 | +git pull |
| 70 | +# re-run the installer if you want it to reconcile changes |
| 71 | +./install.sh |
| 72 | +``` |
112 | 73 |
|
113 | | -### Common Issues |
| 74 | +--- |
114 | 75 |
|
115 | | -1. **Stow conflicts**: Remove existing dotfiles before running installation |
116 | | -2. **Missing dependencies**: Run `./scripts/main.sh` and select dependency installation |
117 | | -3. **Permission issues**: Ensure you have write access to your home directory |
| 76 | +## Uninstalling / reverting |
118 | 77 |
|
119 | | -### Getting Help |
| 78 | +There is no method right now to uninstall. However, you can remove symlinks you |
| 79 | +created and/or restore your previous dotfiles backup. If you used Stow, |
| 80 | +`stow -D <package>` will reverse those links. To remove packages it would be |
| 81 | +more of a manual operation by reading what pacakges were installed and then |
| 82 | +uninstalling them. |
120 | 83 |
|
121 | | -If you encounter issues: |
| 84 | +--- |
122 | 85 |
|
123 | | -1. Check the `scripts/utils.sh` for debugging functions |
124 | | -2. Run with `SYSTEM` variable set for additional debugging output |
125 | | -3. Open an issue on GitHub with your system information |
| 86 | +## Repository layout |
126 | 87 |
|
127 | | -## 🤝 Contributing |
| 88 | +``` |
| 89 | +dotfiles/ |
| 90 | +├─ home/ # items that should live directly in $HOME |
| 91 | +├─ config/ # items for $HOME/.config (e.g., nvim/) |
| 92 | +├─ scripts/ # installer and helper scripts |
| 93 | +├─ install.sh # main entry point for setup |
| 94 | +├─ guake.conf # terminal config (optional) |
| 95 | +├─ vimium.json # browser keybindings (optional) |
| 96 | +├─ resticprofile.toml# restic profiles (optional) |
| 97 | +├─ sanoid.conf # zfs-auto-snapshot profiles (optional) |
| 98 | +└─ private/ # local-only overrides (not tracked) |
| 99 | +``` |
128 | 100 |
|
129 | | -Feel free to: |
130 | | -- Report bugs or issues |
131 | | -- Suggest improvements |
132 | | -- Submit pull requests |
133 | | -- Share your own configurations |
| 101 | +(See the repo root for the actual files and directories.) |
134 | 102 |
|
135 | | -## 📄 License |
| 103 | +--- |
136 | 104 |
|
137 | | -This project is open source. Feel free to use, modify, and distribute as needed. |
| 105 | +## FAQ |
| 106 | + |
| 107 | +**Q: Can I pick and choose?** |
| 108 | +Yes. Run `source scripts/utils.sh` and then run the commands you'd like to run. |
| 109 | + |
| 110 | +**Q: macOS or Linux?** |
| 111 | +Both are supported; but currently `install.sh` focuses on android (termux), |
| 112 | +cachyos, and ubuntu. |
| 113 | + |
| 114 | +**Q: What keys are supported in the yaml files?** |
| 115 | + |
| 116 | +- apt-get, apt: uses apt-get to install packages |
| 117 | +- pacstall: uses pacstall to install packages, should have extras: |
| 118 | + install_chaotic prior |
| 119 | +- pac: uses pacman to install packages |
| 120 | +- yay: uses yay to install packages, should have extras: install_yay prior |
| 121 | +- pkg: uses termux pkg to install packages |
| 122 | +- base-ubuntu: uses apt-get to install packages as a first step |
| 123 | +- base-arch: uses pacman to install packages as a first step |
| 124 | +- base-phone: uses termux pkg to install packages as a first step |
| 125 | +- extras: run aliases that are in the environment (sourced from utils.sh) by name |
| 126 | +- final-ubuntu: uses apt-get to install packages as a final step |
| 127 | +- final-arch: uses pacman to install packages as a final step |
| 128 | +- final-phone: uses termux pkg to install packages as a final step |
| 129 | +- final-extras: runs aliases that are in the environment |
| 130 | + (sourced from utils.sh) by name as a final step |
138 | 131 |
|
139 | 132 | --- |
140 | 133 |
|
141 | | -**Note**: The `private/` directory is intentionally not tracked in git and contains personal configurations that shouldn't be shared publicly. |
| 134 | +## License |
| 135 | + |
| 136 | +Open source—see the LICENSE file in the repo. |
0 commit comments