A collection of shell scripts to forge Distrobox containers with specific environments and tools. This is totally a work in progress with likely many small issues. I tried to keep the same POSIX compliant style as distrobox. The main idea is to have consistent environments, so if you have a bunch of distroboxes they will all have the same base and familiar configs (tmux, vim, zsh etc.), this is done via stow. Another advantage is to declare the role of each container in the distrobox.ini via tags; so you'll have your java container, mobile container, etc. Then with one command you can create and configure containers with applications and configurations based on the tags.
- Automated container creation from
distrobox.iniconfigurations - Tag-based container configuration (Java, PostgreSQL, Kali Linux, etc.)
- Common development tools installation across containers
- Dotfiles management and configuration using GNU Stow
- Support for multiple Linux distributions (Debian/Ubuntu, Fedora, Arch Linux)
- Distrobox installed on your system
Clone this repository:
git clone https://github.com/andyspectre/distroforge.git
cd distroforgeCreate and configure all containers defined in the local distrobox.ini:
./distroforge.sh
Create and configure a specific container:
./distroforge.sh --name <container_name>
Use a different distrobox.ini file:
./distroforge.sh --name <container_name> --file /path/to/distrobox.ini
Configure the container with your dotfiles:
./distroforge.sh --name <container_name> --dotfiles /path/to/dotfiles
The dotfiles should be somewhere on your host, and the structure should be something like this (if unclear check this resource: https://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html):
dotfiles/
├── bash/
│ └── .bashrc
├── vim/
│ └── .vimrc
├── tmux/
│ └── .tmux.conf
└── zsh/
└── .zshrc
Containers can be tagged in distrobox.ini to receive specific configurations. Just add the tags you want to a container and run distroforge.sh against your distrobox ini.
For example:
# tags: generic java
[javadev-distrobox]
home="${HOME}"/Distrobox/javadev-distrobox
hostname="$(uname -n)"
image=quay.io/toolbx-images/debian-toolbox:12
additional_flags="-p=8200-8300:8200-8300 -p 5005:5005 -p 9010:9010"
replace=true
start_now=true
Available tags at the moment:
generic: Basic development tools and shell configurationjava: Java development environment with JDK and IntelliJ IDEAkali: Kali Linux with additional security toolsmobile: Android development and reverse engineering toolspostgresql: PostgreSQL database server
Takes care of generic configurations like locales, dotfiles, shell and it installs these apps:
- bashate
- curl
- file
- git
- ohmyzsh
- pipx
- shellcheck
- shfmt
- stow
- tmux
- vim-gtk3
- vim-plug
- xclip
- yay
- zsh
It sets up a Java development environment and exports Intellij IDEA so that is available on the host app menu.
- dconf-gsettings-backend
- gsettings-desktop-schemas
- libcanberra-gtk-module
- libcanberra-gtk3-module
- libglib2.0-bin
- maven
- Adoptium Temurin JDK21
- IntelliJ IDEA Community Edition
Will export Burp Pro so that is available on the host app menu.
- Burp Suite Pro
- dconf-gsettings-backend
- ffuf
- gsettings-desktop-schemas
- iproute2
- iptables
- jython
- kali-linux-headless
- libcanberra-gtk3-module
- libglib2.0-bin
- nuclei
- openconnect
- openresolv
- pipx
- seclists
- testssl.sh
- vpn-slice
- wireguard
- android-tools
- scrcpy
- usbmuxd
- usbutils
- frida-tools
- objection
- dconf-gsettings-backend
- gsettings-desktop-schemas
- libcanberra-gtk-module
- libcanberra-gtk3-module
- libglib2.0-bin
- postgresql
- postgresql-common