dsxtool docs
A friendly Bash toolbox for automating common Linux post-install tasks — powered by fzf.
Installation
One-line Install recommended
curl -fsSL https://raw.githubusercontent.com/csouzape/dsxtool/main/bootstrap.sh | bashThis will:
- Install
gitif not present - Clone the repository to
~/.local/share/dsxtool - Run
install.shautomatically
On subsequent runs, it performs git pull to update before launching.
Manual Install
git clone https://github.com/csouzape/dsxtool.git ~/.local/share/dsxtool
bash ~/.local/share/dsxtool/install.shinstall.sh directly from a standalone copy. The script requires the core/ and modules/ directories to be present.Updating
The bootstrap script updates automatically on every run — just re-run the one-liner:
curl -fsSL https://raw.githubusercontent.com/csouzape/dsxtool/main/bootstrap.sh | bashSupported Distributions
| Distribution | Package Manager | Status |
|---|---|---|
| Arch Linux | pacman | ✅ Full support |
| Debian / Ubuntu | apt | ✅ Full support |
| Fedora | dnf | ✅ Full support |
Usage
After running the bootstrap command, dsxtool opens an interactive fzf menu:
➜ DSXTOOL — distro: arch
1) Install TLP
2) Install Apps
3) Install Alacritty
4) Install Konsole
5) Install Kitty
6) Install Ghostty
7) Update System
8) Setup Wallpapers
9) Change Desktop Environment
10) Fonts Downloader
11) Setup Flatpak
12) Setup Virtualization
13) Setup Shell
14) Setup yay (AUR helper)
15) Exit| Key | Action |
|---|---|
| ↑ / ↓ | Move between options |
| Enter | Select option |
| Type to search | Fuzzy filter |
| Esc / Ctrl+C | Exit |
Modules
Installs and enables TLP for battery and power management on laptops. Replaces any existing power manager.
Opens a submenu with categorized app installers, including a Setup Development Environment section.
Languages & Runtimes
IDEs & Editors
Dev Tools
Installs the Alacritty terminal emulator using the distro's package manager.
Installs KDE's Konsole terminal emulator.
Installs the Kitty terminal emulator.
Installs the Ghostty terminal emulator.
Runs a full system package update using the detected package manager.
Clones the wallpaper collection from csouzape/wallpapers into ~/Pictures/wallpapers.
Interactive submenu to install a new desktop environment.
- KDE Plasma
- XFCE
- Hyprland
- Hyprland (csouzape edition) — clones csouzape/hyprdots
- Cosmic
Downloads and installs a curated set of fonts.
Installs Flatpak and adds the Flathub remote repository.
Installs KVM, QEMU, and virtualization tools.
Configures shell environment (zsh, fish, starship prompt).
Installs the yay AUR helper from source. Arch Linux only.
Project Structure
dsxtool/
├── bootstrap.sh # curl entry point — clones repo then runs install.sh
├── install.sh # Main entry point — fzf menu + module loader
├── core/
│ ├── common.sh # Logging helpers, die(), prompt_continue()
│ ├── detect.sh # detect_distro() → sets $DISTRO
│ └── distros/
│ ├── arch.sh # pkg_install / pkg_remove / pkg_exists for pacman
│ ├── debian.sh # pkg_install / pkg_remove / pkg_exists for apt
│ └── fedora.sh # pkg_install / pkg_remove / pkg_exists for dnf
└── modules/
├── development_setup.sh
├── tlp.sh
├── install_apps.sh
├── alacritty.sh
├── konsole.sh
├── kitty.sh
├── ghostty.sh
├── update_system.sh
├── wallpapers.sh
├── change_desktop.sh
├── fonts.sh
├── flatpak.sh
├── setup_virtualization.sh
├── shell_setup.sh
└── setupyay.shContributing
Contributions are welcome! Bug fixes, new modules, new distro support, and documentation improvements are all appreciated.
Adding a New Module
- Create
modules/my_module.shwith a single entry function:
#!/usr/bin/env bash
setup_my_module() {
log_info "Setting up..."
pkg_install some-package
log_info "Done."
}- Register a loader in
install.sh:
install_my_module() {
source "$BASE_DIR/modules/my_module.sh"
setup_my_module
}- Add to
build_menu()and thecaseinmain().
main as the entry function name — it conflicts with install.sh.Adding Distro Support
Create core/distros/<distro-id>.sh implementing:
pkg_install() { ... }
pkg_remove() { ... }
pkg_exists() { ... }Commit Convention
| Prefix | Use for |
|---|---|
| feat: | New module or feature |
| fix: | Bug fix |
| docs: | Documentation only |
| refactor: | Code cleanup |
| chore: | Build or config |
Code Style
- Always use
#!/usr/bin/env bashandset -euo pipefail - Use
localfor all variables inside functions - Always use
pkg_install— never callpacman,apt, ordnfdirectly in modules - Always use logging helpers — never use raw
echofor status messages
Logging helpers (core/common.sh)
| Function | Output |
|---|---|
| log_info "msg" | [INFO] green |
| log_warn "msg" | [WARN] yellow |
| log_error "msg" | [ERROR] red |
| die "msg" | [ERROR] + exit |
fzf menu style
fzf --prompt="Section > " \
--header="HEADER" \
--height=12 \
--layout=reverse \
--border=rounded \
--pointer="▶" \
--color='header:#e5c07b,prompt:#61afef,pointer:#e06c75,hl:#98c379' \
--no-info