Files
dotfiles/README.md
2026-03-15 14:10:52 +05:30

95 lines
3.0 KiB
Markdown

# dotfiles
This repository contains my personal dotfiles, managed using [GNU Stow](https://www.gnu.org/software/stow/).
Using `stow` ensures that all configuration files are cleanly symlinked into your home directory, mirroring the structure of this repository.
## Requirements
A script is provided to help install the core dependencies across macOS and common Linux distributions (Ubuntu/Debian, Arch, Fedora).
To run the installation script:
```bash
./scripts/install_dependencies.sh
```
Alternatively, you can manually install the required tool:
- [GNU Stow](https://www.gnu.org/software/stow/)
To install Stow on macOS, use [Homebrew](https://brew.sh/):
```bash
brew install stow
```
To install Stow on Linux, use your distribution's package manager:
**Ubuntu / Debian**
```bash
sudo apt install stow
```
**Arch Linux**
```bash
sudo pacman -S stow
```
## Installation
To install all configurations at once, navigate to the root of this repository and run:
```bash
stow */
```
*(Note: Using `stow */` prevents the shell from passing pure files like `README.md` to Stow, ensuring only directory packages are stowed).*
This will automatically create the necessary symlinks in your `$HOME` directory.
### Removing Configurations
If you want to remove the symlinks created by Stow, use the `-D` flag:
```bash
stow -D */
```
## Directory Structure & Branching Strategy
This repository uses a **Folder-Per-App** structure combined with a **Git Branching Strategy** to flawlessly handle different machines (Mac, Work, Linux) without any `if/else` logic.
### 1. Folder Structure
The root directories represent individual applications:
```text
.
├── bash/ # Stowed to ~ (contains .bashrc)
├── nvim/ # Stowed to ~/.config/nvim/
├── tmux/ # Stowed to ~ (contains .tmux.conf)
├── zsh/ # Stowed to ~ (contains .zshrc)
└── ...
```
### 2. The Git Branch Workflow
This repository has zero conditional logic. Configurations are managed purely via branches.
- **`master` branch**: Contains the 95% common base configurations shared across all machines.
- **`mac`, `work`, `linux` branches**: Machine-specific branches derived from `master`.
**How to manage machine-specific settings:**
1. Check out your machine's branch (e.g., `git checkout work`).
2. Statically write your overrides (e.g., adding a Work-only plugin to `nvim/`).
3. Commit and push: `git push origin work`.
**How to update shared settings:**
1. Switch to the base branch: `git checkout master`.
2. Update the shared configuration and commit.
3. Switch back to your local branch: `git checkout work`.
4. Pull the updates in by rebasing: `git rebase master` (then `git push origin work -f`).
### Adding New Configurations
When you want to add a new tool:
1. Create a new folder matching the application's name (e.g., `mkdir alacritty`).
2. Replicate the target directory structure inside it (e.g., `alacritty/.config/alacritty/alacritty.toml`).
3. Run `stow */` from the root of this repository to link the new package.