# fmg

`fmg` is a lightweight command-line utility for managing aliases to your most-used directories. It allows you to quickly navigate, copy, and move files and folders using short, memorable names instead of long, absolute paths.

---

## 🚀 Features

- **Quick Navigation**: Use `fcd <alias>` to instantly change to a directory.
- **File Operations**: Perform `fcp` (copy) and `fmv` (move) operations with aliases.
- **Zsh Completion**: Enjoy seamless tab-completion for all your alias names.
- **Easy Setup**: A single command installs all the necessary shell functions.

---

## ⬇️ Installation

### 1. Install the CLI

Ensure you have Node.js and `npm` installed.

```bash
npm install -g @nesardramos/fmg
```

### 2. Set Up Shell Functions

This command installs the necessary shell functions (`fcd`, `fcp`, `fmv`) and provides instructions for setting up autocompletion.

```bash
fmg setup
```

Follow the on-screen instructions to add the source lines to your `~/.zshrc` file.

### 3. Set Up Autocompletion

To enable tab-completion for your aliases, run the `fmg completion` command and paste the output directly into your `~/.zshrc` file.

```bash
fmg completion
```

After updating your `~/.zshrc` file, remember to apply the changes by running:

```bash
source ~/.zshrc
```

---

## 🛠 Usage

### Set an Alias

```bash
fmg set <alias> <path>
```

Examples:

```bash
fmg set dev ~/Documents/development
fmg set project "/Users/nesaruddin/My Projects/CLI"
```

### List Aliases

```bash
fmg list
```

### Get Alias Path

```bash
fmg get <alias>
```

Example:

```bash
fmg get project
# Output: /Users/nesaruddin/My Projects/CLI
```

### Delete Alias

```bash
fmg delete <alias>
```

Example:

```bash
fmg delete project
```

---

## 🐚 Shell Functions

After running `fmg setup`, you will have access to these powerful shell functions:

### `fcd <alias>`

Changes the current directory. This command also supports regular directory navigation (e.g., `fcd ..` or `fcd /path/to/folder`).

```bash
fcd dev        # Changes to ~/Documents/development
fcd ..         # Changes to the parent directory
```

### `fcp [options] <source> <destination>`

Copies files or folders. Automatically uses the `-r` flag for recursive copying and accepts aliases.

```bash
fcp file.txt dev
fcp dev ~/Desktop/backup-dev
```

### `fmv [options] <source> <destination>`

Moves files or folders. Automatically uses the `-r` flag for recursive moving and accepts aliases.

```bash
fmv new-file.js dev
fmv dev ~/Desktop/moved-dev
```

---

## ✍️ Contributing

Feel free to submit issues or pull requests to improve the tool.

---

## 📄 License

This project is licensed under the MIT License.
