{"id":28092817,"url":"https://github.com/snakeice/dotzilla","last_synced_at":"2025-10-24T17:38:12.162Z","repository":{"id":289064121,"uuid":"970003517","full_name":"snakeice/dotzilla","owner":"snakeice","description":"Just another dotfiles manager  :3","archived":false,"fork":false,"pushed_at":"2025-04-30T05:02:31.000Z","size":45,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-13T03:37:36.708Z","etag":null,"topics":["configuration","dotfiles","dotfiles-linux","dotfiles-manager","git","symlinks-manager"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snakeice.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-04-21T09:48:54.000Z","updated_at":"2025-04-30T04:24:33.000Z","dependencies_parsed_at":"2025-04-21T11:03:56.047Z","dependency_job_id":null,"html_url":"https://github.com/snakeice/dotzilla","commit_stats":null,"previous_names":["snakeice/dotzilla"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snakeice%2Fdotzilla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snakeice%2Fdotzilla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snakeice%2Fdotzilla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snakeice%2Fdotzilla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snakeice","download_url":"https://codeload.github.com/snakeice/dotzilla/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253870808,"owners_count":21976609,"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":["configuration","dotfiles","dotfiles-linux","dotfiles-manager","git","symlinks-manager"],"created_at":"2025-05-13T13:48:41.205Z","updated_at":"2025-10-24T17:38:12.155Z","avatar_url":"https://github.com/snakeice.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotzilla\n\nA powerful, Git-inspired dotfiles manager with symbolic linking capabilities.\n\n## Table of Contents\n\n- [Dotzilla](#dotzilla)\n  - [Table of Contents](#table-of-contents)\n  - [Overview](#overview)\n  - [Features](#features)\n  - [Installation](#installation)\n    - [From Source](#from-source)\n    - [Using Cargo](#using-cargo)\n  - [Usage](#usage)\n    - [Launch Terminal User Interface](#launch-terminal-user-interface)\n    - [Initialize a Repository](#initialize-a-repository)\n    - [Adding Dotfiles](#adding-dotfiles)\n    - [Removing Dotfiles](#removing-dotfiles)\n    - [Staging Files](#staging-files)\n    - [Unstaging Files](#unstaging-files)\n    - [Creating Symlinks](#creating-symlinks)\n    - [Viewing Status](#viewing-status)\n    - [Listing Tracked Files](#listing-tracked-files)\n    - [Comparing Files](#comparing-files)\n  - [Command Reference](#command-reference)\n  - [Example Workflow](#example-workflow)\n  - [Shell Completion](#shell-completion)\n  - [Changelog](#changelog)\n  - [Contributing](#contributing)\n  - [License](#license)\n\n## Overview\n\nDotzilla 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.\n\n## Features\n\n- **Terminal User Interface**: Interactive TUI for easy dotfile management\n- **Repository Management**: Initialize and maintain a centralized dotfiles repository\n- **Tracking System**: Add and remove dotfiles from your repository\n- **Staging Workflow**: Stage files before linking, similar to Git's staging area\n- **Symbolic Linking**: Create symlinks from your repository to system locations\n- **Diff Support**:\n  - Compare tracked dotfiles with their system originals\n  - Support for both file and directory diffs\n  - Word-by-word diff option\n  - Integration with external diff tools (vimdiff, meld, kdiff3, VS Code)\n- **Status Reporting**: View the status of your tracked and staged dotfiles\n- **Shell Completion**: Support for bash, zsh, fish, and other shells\n\n## Installation\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/snakeice/dotzilla.git\ncd dotzilla\n\n# Build the project\ncargo build --release\n\n# The binary will be available at target/release/dotzilla\n# Optionally, move it to a directory in your PATH\ncp target/release/dotzilla ~/.local/bin/\n```\n\n### Using Cargo\n\n```bash\ncargo install dotzilla-cli\n```\n\n## Usage\n\n### Launch Terminal User Interface\n\nThe TUI launches by default when you run dotzilla without any commands:\n\n```bash\ndotzilla\n```\n\nYou can also explicitly launch it with:\n\n```bash\ndotzilla tui\n```\n\nThe TUI provides a visual interface for managing your dotfiles with the following features:\n\n- **Tracked Tab**: View and manage all tracked dotfiles\n- **Staged Tab**: View and manage staged dotfiles ready for linking\n- **Help Tab**: View keyboard shortcuts and commands\n\n**Keyboard Shortcuts:**\n\n- `↑/k` or `↓/j` - Navigate up/down\n- `Tab`/`Shift+Tab` - Switch between tabs\n- `a` - Add a new dotfile\n- `d` - Remove selected dotfile\n- `s` - Stage/unstage selected dotfile\n- `l` - Link all staged dotfiles\n- `u` - Unlink all dotfiles\n- `c` - Commit all staged dotfiles\n- `r` - Refresh data\n- `q` - Quit\n\n### Initialize a Repository\n\nCreate a new dotfiles repository:\n\n```bash\ndotzilla init ~/dotfiles\n```\n\n### Adding Dotfiles\n\nAdd a dotfile to tracking:\n\n```bash\ndotzilla add ~/.bashrc\n```\n\nThis copies the file to your dotfiles repository and begins tracking it.\n\n### Removing Dotfiles\n\nRemove a dotfile from tracking:\n\n```bash\ndotzilla remove .bashrc\n```\n\nThis 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:\n\n```bash\ndotzilla remove .bashrc --keep\n```\n\n### Staging Files\n\nStage a dotfile for linking:\n\n```bash\ndotzilla stage .bashrc\n```\n\n### Unstaging Files\n\nRemove a file from the staging area:\n\n```bash\ndotzilla unstage .bashrc\n```\n\n### Creating Symlinks\n\nLink all staged dotfiles to their original locations:\n\n```bash\ndotzilla link\n```\n\nThis creates symbolic links from your dotfiles repository to the original locations.\n\n### Viewing Status\n\nCheck the status of your dotfiles:\n\n```bash\ndotzilla status\n```\n\n### Listing Tracked Files\n\nList all tracked dotfiles:\n\n```bash\ndotzilla list\n```\n\n### Comparing Files\n\nCompare a tracked dotfile with its system original:\n\n```bash\n# Basic diff\ndotzilla diff .bashrc\n\n# Word-by-word diff\ndotzilla diff .bashrc --word\n\n# Using an external diff tool\ndotzilla diff .bashrc --tool vimdiff\ndotzilla diff .bashrc --tool meld\ndotzilla diff .bashrc --tool vscode\n\n# Directory diff\ndotzilla diff .config\n```\n\n## Command Reference\n\n| Command                                | Description                                         |\n| -------------------------------------- | --------------------------------------------------- |\n| `tui`                                  | Launch the Terminal User Interface                  |\n| `init [path]`                          | Initialize a new dotfiles repository                |\n| `add \u003cpath\u003e`                           | Add a dotfile to tracking                           |\n| `remove \u003cname\u003e [--keep]`               | Remove a dotfile from tracking                      |\n| `stage \u003cname\u003e`                         | Stage a dotfile for linking                         |\n| `unstage \u003cname\u003e`                       | Unstage a dotfile                                   |\n| `link`                                 | Link all staged dotfiles to their target locations  |\n| `status`                               | Show the status of tracked and staged dotfiles      |\n| `list`                                 | List all tracked dotfiles                           |\n| `diff \u003cname\u003e [--word] [--tool \u003ctool\u003e]` | Show differences between tracked and local dotfiles |\n| `completion \u003cshell\u003e`                   | Generate shell completion scripts                   |\n\n## Example Workflow\n\n### Using the Command Line\n\n1. Initialize your dotfiles repository:\n\n   ```bash\n   dotzilla init ~/dotfiles\n   ```\n\n2. Add some dotfiles:\n\n   ```bash\n   dotzilla add ~/.bashrc\n   dotzilla add ~/.vimrc\n   dotzilla add ~/.config/nvim\n   ```\n\n3. Check their status:\n\n   ```bash\n   dotzilla status\n   ```\n\n4. Stage files you want to link:\n\n   ```bash\n   dotzilla stage .bashrc\n   dotzilla stage .vimrc\n   ```\n\n5. Create symlinks:\n\n   ```bash\n   dotzilla link\n   ```\n\n6. Later, if you make changes to files in their original locations, compare them:\n\n   ```bash\n   dotzilla diff .bashrc\n   ```\n\n7. Add the updated file to incorporate changes:\n\n   ```bash\n   dotzilla add ~/.bashrc\n   ```\n\n8. If you no longer need to track a dotfile, remove it:\n\n   ```bash\n   # Remove from tracking and delete the file (with confirmation)\n   dotzilla remove .vimrc\n\n   # Or just remove from tracking, keeping the file\n   dotzilla remove .vimrc --keep\n   ```\n\n### Using the TUI\n\nAlternatively, you can use the interactive Terminal User Interface for a more visual experience. The TUI is the default interface and launches automatically:\n\n1. Launch the TUI (default behavior):\n\n   ```bash\n   dotzilla\n   ```\n\n   Or explicitly:\n\n   ```bash\n   dotzilla tui\n   ```\n\n2. Use the keyboard shortcuts to navigate and manage your dotfiles:\n   - Navigate between tracked and staged dotfiles using `Tab`\n   - Add new dotfiles with `a`\n   - Stage/unstage files with `s`\n   - Link all staged files with `l`\n   - Press `?` or go to the Help tab for a complete list of shortcuts\n\n## Shell Completion\n\nDotzilla supports shell completion for various shells, making it easier to use the command-line interface.\n\nGenerate shell completion scripts:\n\n```bash\n# For Bash\ndotzilla completion bash \u003e ~/.local/share/bash-completion/completions/dotzilla\n\n# For Zsh\ndotzilla completion zsh \u003e ~/.zfunc/_dotzilla\n\n# For Fish\ndotzilla completion fish \u003e ~/.config/fish/completions/dotzilla.fish\n```\n\nMake sure the respective directories exist and are in your shell's completion path.\n\n## Changelog\n\nSee the [CHANGELOG](./CHANGELOG) file for a detailed history of changes.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnakeice%2Fdotzilla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnakeice%2Fdotzilla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnakeice%2Fdotzilla/lists"}