# Distoolbox

Distrobox? Toolbox? Whatever you want.

- [Distoolbox](#distoolbox)
  - [Reese's Arch Distoolbox](#reeses-arch-distoolbox)
    - [Using Reese's Arch Toolbox](#using-reeses-arch-toolbox)
    - [Integrating distoolbox into your workflow](#integrating-distoolbox-into-your-workflow)
      - [Aliases using Distrobox](#aliases-using-distrobox)
      - [Aliases using Toolbox](#aliases-using-toolbox)
  - [Building Reese's Arch Toolbox](#building-reeses-arch-toolbox)

## Reese's Arch Distoolbox

I have a custom arch image based on the default arch-toolbox image. It offers:

- zsh with many completions installed/enabled
- vim
- nslookup
- iperf3
- kubectl
- helm
- nethogs
- python, pip, and pipx
- ansible
- aws cli
- podman (connected automatically to the host machine via the unix socket)
- tmux
- ffmpeg
- wine
- podman
- unzip
- bat
- btop
- jq
- yq
- imagemagick
- code
- make, gcc

### Using Reese's Arch Toolbox

Head to <https://gitea.reeseapps.com/services/-/packages> and pick the CPU
image or AMD GPU image.

If you can't decide pick the CPU image.

The GPU image was built and tested with a Framework 16 with 7700s GPU module.

Click the image and copy the tag (should be something like:
2a421392b1bde168973a0c7ac8be05a6ffa1c48a)

Next you need [distrobox](https://distrobox.it/) or
[toolbox](https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/).
Both are good options.

If you don't know whether to use distrobox or toolbox:

- If you're on Fedora, and you haven't used either, toolbox is built-in
- If you understand toolbox and you've never used distrobox, try distrobox
- If you understand distrobox and you've never used toolbox, try toolbox
- If you care what I use: distrobox

Once you have toolbox or distrobox installed, try the following:

```bash
export TBOX_REPO='gitea.reeseapps.com/services'
export TBOX_IMAGE='arch-toolbox'
export TBOX_TAG=paste image tag copied above here
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"

# With distrobox
distrobox create --name $TBOX_NAME --image $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG
distrobox enter $TBOX_NAME

# With toolbox
toolbox create -i $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG
SHELL=/bin/zsh toolbox enter $TBOX_NAME
```

### Integrating distoolbox into your workflow

Copy the relevant aliases below into your `.bashrc`.

Run `ntbox` the first time to create a new toolbox.

Run `tbox` anytime you want to enter the toolbox.

Run `rtbox` to delete the toolbox.

#### Aliases using Distrobox

Add the following to your `.bashrc`

```bash
# Reese's Toolbox Commands
export TBOX_REPO='gitea.reeseapps.com/services'

# NOTE: Uncomment one of the below for either the amdgpu or cpu image
# export TBOX_IMAGE='arch-toolbox'
# export TBOX_IMAGE='arch-toolbox-amdgpu'

export TBOX_TAG=paste image tag copied above here
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"

# Creates a new toolbox
alias ntbox="distrobox create --name $TBOX_NAME --image $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
# Enters the toolbox when you want to use it, you'll be running this all the time
alias tbox="distrobox enter $TBOX_NAME"
# Removes the toolbox
alias rtbox="distrobox stop $TBOX_NAME --yes && podman container rm $TBOX_NAME"
```

#### Aliases using Toolbox

```bash
# Reese's Toolbox Commands
export TBOX_REPO='gitea.reeseapps.com/services'

# NOTE: Uncomment one of the below for either the amdgpu or cpu image
# export TBOX_IMAGE='arch-toolbox'
# export TBOX_IMAGE='arch-toolbox-amdgpu'

export TBOX_TAG='latest'
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"

# Creates a new toolbox
alias ntbox="toolbox create -i $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
# Enters the toolbox when you want to use it, you'll be running this all the time
alias tbox="SHELL=/bin/zsh toolbox enter $TBOX_NAME"
# Removes the toolbox
alias rtbox="podman container stop $TBOX_NAME && podman container rm $TBOX_NAME"
```

## Building Reese's Arch Toolbox

You can build and run the image with the `arch-build.sh` script (See `Containerfile` in this directory):

```bash
./infrastructure/graduated/distoolbox/arch-build.sh
```

In vscode you can set this as your default build task for homelab and trigger it with
`ctrl shift B`

.vscode/tasks.json

```json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build arch-toolbox",
            "type": "shell",
            "command": "./infrastructure/graduated/distoolbox/arch-build.sh",
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
```
