This commit is contained in:
2026-03-15 14:10:52 +05:30
parent d002786ad4
commit 32fa1a369b
5 changed files with 38 additions and 24 deletions

View File

@@ -28,5 +28,5 @@ _darcs
scripts # scripts directory to be ignored
shell # various shell configurations need not be stowed.
.DS_store
README.md
.*/\.git
README.md
.*/\.git

View File

@@ -39,44 +39,56 @@ sudo pacman -S stow
To install all configurations at once, navigate to the root of this repository and run:
```bash
stow .
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 pointing to the files in this repository.
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 .
stow -D */
```
## Directory Structure
## Directory Structure & Branching Strategy
The folder structure directly mirrors its target destination relative to the home (`~/`) directory.
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
.
├── .bashrc # Symlinked to ~/.bashrc
├── .config/ # Symlinked to ~/.config/
│ ├── alacritty/
│ ├── kitty/
│ ├── nvim/
│ ├── starship.toml
│ └── ...
├── .fonts/ # Symlinked to ~/.fonts/
├── .tmux.conf # Symlinked to ~/.tmux.conf
├── .tmux.conf.local # Symlinked to ~/.tmux.conf.local
├── .vimrc # Symlinked to ~/.vimrc
├── .zshrc # Symlinked to ~/.zshrc
├── scripts/ # Symlinked to ~/scripts/
├── shell/ # Symlinked to ~/shell/
└── wezterm.lua # Symlinked to ~/wezterm.lua
├── 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. Replicate the target directory structure inside this repository (e.g., `.config/new_tool/config.toml`).
2. Run `stow .` from the root of this repository to link the new files.
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.

View File

@@ -0,0 +1 @@
.*

1
shell/.stow-local-ignore Normal file
View File

@@ -0,0 +1 @@
.*

0
shell/work Normal file
View File