Dotzilla
A powerful, Git-inspired dotfiles manager with symbolic linking capabilities.
Table of Contents
- Dotzilla
Overview
Dotzilla is a Terminal User Interface (TUI) tool designed to help you manage your dotfiles with a workflow inspired by Git. It launches an interactive interface by default, and also provides command-line options for scripting and automation. It allows you to track, stage, and link dotfiles between a central repository and their original locations on your system.
Features
- Terminal User Interface: Interactive TUI for easy dotfile management
- Repository Management: Initialize and maintain a centralized dotfiles repository
- Tracking System: Add and remove dotfiles from your repository
- Staging Workflow: Stage files before linking, similar to Git's staging area
- Symbolic Linking: Create symlinks from your repository to system locations
- Diff Support:
- Compare tracked dotfiles with their system originals
- Support for both file and directory diffs
- Word-by-word diff option
- Integration with external diff tools (vimdiff, meld, kdiff3, VS Code)
- Status Reporting: View the status of your tracked and staged dotfiles
- Shell Completion: Support for bash, zsh, fish, and other shells
Installation
From Source
# Clone the repository
# Build the project
# The binary will be available at target/release/dotzilla
# Optionally, move it to a directory in your PATH
Using Cargo
Usage
Launch Terminal User Interface
The TUI launches by default when you run dotzilla without any commands:
You can also explicitly launch it with:
The TUI provides a visual interface for managing your dotfiles with the following features:
- Tracked Tab: View and manage all tracked dotfiles
- Staged Tab: View and manage staged dotfiles ready for linking
- Help Tab: View keyboard shortcuts and commands
Keyboard Shortcuts:
↑/kor↓/j- Navigate up/downTab/Shift+Tab- Switch between tabsa- Add a new dotfiled- Remove selected dotfiles- Stage/unstage selected dotfilel- Link all staged dotfilesu- Unlink all dotfilesc- Commit all staged dotfilesr- Refresh dataq- Quit
Initialize a Repository
Create a new dotfiles repository:
Adding Dotfiles
Add a dotfile to tracking:
This copies the file to your dotfiles repository and begins tracking it.
Removing Dotfiles
Remove a dotfile from tracking:
This removes the dotfile from tracking and by default will ask for confirmation before deleting the file from the repository. Use the --keep flag to only remove from tracking without deleting the file:
Staging Files
Stage a dotfile for linking:
Unstaging Files
Remove a file from the staging area:
Creating Symlinks
Link all staged dotfiles to their original locations:
This creates symbolic links from your dotfiles repository to the original locations.
Viewing Status
Check the status of your dotfiles:
Listing Tracked Files
List all tracked dotfiles:
Comparing Files
Compare a tracked dotfile with its system original:
# Basic diff
# Word-by-word diff
# Using an external diff tool
# Directory diff
Command Reference
| Command | Description |
|---|---|
tui |
Launch the Terminal User Interface |
init [path] |
Initialize a new dotfiles repository |
add <path> |
Add a dotfile to tracking |
remove <name> [--keep] |
Remove a dotfile from tracking |
stage <name> |
Stage a dotfile for linking |
unstage <name> |
Unstage a dotfile |
link |
Link all staged dotfiles to their target locations |
status |
Show the status of tracked and staged dotfiles |
list |
List all tracked dotfiles |
diff <name> [--word] [--tool <tool>] |
Show differences between tracked and local dotfiles |
completion <shell> |
Generate shell completion scripts |
Example Workflow
Using the Command Line
-
Initialize your dotfiles repository:
-
Add some dotfiles:
-
Check their status:
-
Stage files you want to link:
-
Create symlinks:
-
Later, if you make changes to files in their original locations, compare them:
-
Add the updated file to incorporate changes:
-
If you no longer need to track a dotfile, remove it:
# Remove from tracking and delete the file (with confirmation) # Or just remove from tracking, keeping the file
Using the TUI
Alternatively, you can use the interactive Terminal User Interface for a more visual experience. The TUI is the default interface and launches automatically:
-
Launch the TUI (default behavior):
Or explicitly:
-
Use the keyboard shortcuts to navigate and manage your dotfiles:
- Navigate between tracked and staged dotfiles using
Tab - Add new dotfiles with
a - Stage/unstage files with
s - Link all staged files with
l - Press
?or go to the Help tab for a complete list of shortcuts
- Navigate between tracked and staged dotfiles using
Shell Completion
Dotzilla supports shell completion for various shells, making it easier to use the command-line interface.
Generate shell completion scripts:
# For Bash
# For Zsh
# For Fish
Make sure the respective directories exist and are in your shell's completion path.
Changelog
See the CHANGELOG file for a detailed history of changes.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.