developersgithub

dsxtool docs

A friendly Bash toolbox for automating common Linux post-install tasks — powered by fzf.

Installation

One-line Install recommended

bash
curl -fsSL https://raw.githubusercontent.com/csouzape/dsxtool/main/bootstrap.sh | bash

This will:

  1. Install git if not present
  2. Clone the repository to ~/.local/share/dsxtool
  3. Run install.sh automatically

On subsequent runs, it performs git pull to update before launching.

Manual Install

bash
git clone https://github.com/csouzape/dsxtool.git ~/.local/share/dsxtool
bash ~/.local/share/dsxtool/install.sh
Do not run install.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:

bash
curl -fsSL https://raw.githubusercontent.com/csouzape/dsxtool/main/bootstrap.sh | bash

Supported Distributions

DistributionPackage ManagerStatus
Arch Linuxpacman✅ Full support
Debian / Ubuntuapt✅ Full support
Fedoradnf✅ Full support

Usage

After running the bootstrap command, dsxtool opens an interactive fzf menu:

text
➜  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
KeyAction
↑ / ↓Move between options
EnterSelect option
Type to searchFuzzy filter
Esc / Ctrl+CExit

Modules

Install TLP

Installs and enables TLP for battery and power management on laptops. Replaces any existing power manager.

Install Apps

Opens a submenu with categorized app installers, including a Setup Development Environment section.

Languages & Runtimes

PythonC++RustGoNode.jsJavaYarnPNPM

IDEs & Editors

VS CodeZedNeoVim (LazyVim)KateCursor

Dev Tools

DockerPodmanPostgreSQLRedisTerraformMinikubeKubectlPostmanDBeaver
Install Alacritty

Installs the Alacritty terminal emulator using the distro's package manager.

Install Konsole

Installs KDE's Konsole terminal emulator.

Install Kitty

Installs the Kitty terminal emulator.

Install Ghostty

Installs the Ghostty terminal emulator.

Update System

Runs a full system package update using the detected package manager.

Setup Wallpapers

Clones the wallpaper collection from csouzape/wallpapers into ~/Pictures/wallpapers.

Change Desktop Environment

Interactive submenu to install a new desktop environment.

  • KDE Plasma
  • XFCE
  • Hyprland
  • Hyprland (csouzape edition) — clones csouzape/hyprdots
  • Cosmic
Fonts Downloader

Downloads and installs a curated set of fonts.

Setup Flatpak

Installs Flatpak and adds the Flathub remote repository.

Setup Virtualization

Installs KVM, QEMU, and virtualization tools.

Setup Shell

Configures shell environment (zsh, fish, starship prompt).

Setup yay

Installs the yay AUR helper from source. Arch Linux only.

Project Structure

text
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.sh

Contributing

Contributions are welcome! Bug fixes, new modules, new distro support, and documentation improvements are all appreciated.

Adding a New Module

  1. Create modules/my_module.sh with a single entry function:
bash
#!/usr/bin/env bash

setup_my_module() {
    log_info "Setting up..."
    pkg_install some-package
    log_info "Done."
}
  1. Register a loader in install.sh:
bash
install_my_module() {
    source "$BASE_DIR/modules/my_module.sh"
    setup_my_module
}
  1. Add to build_menu() and the case in main().
Never use main as the entry function name — it conflicts with install.sh.

Adding Distro Support

Create core/distros/<distro-id>.sh implementing:

bash
pkg_install() { ... }
pkg_remove()  { ... }
pkg_exists()  { ... }

Commit Convention

PrefixUse 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 bash and set -euo pipefail
  • Use local for all variables inside functions
  • Always use pkg_install — never call pacman, apt, or dnf directly in modules
  • Always use logging helpers — never use raw echo for status messages

Logging helpers (core/common.sh)

FunctionOutput
log_info "msg"[INFO] green
log_warn "msg"[WARN] yellow
log_error "msg"[ERROR] red
die "msg"[ERROR] + exit

fzf menu style

bash
fzf --prompt="Section > " \
        --header="HEADER" \
        --height=12 \
        --layout=reverse \
        --border=rounded \
        --pointer="▶" \
        --color='header:#e5c07b,prompt:#61afef,pointer:#e06c75,hl:#98c379' \
        --no-info
Always match the fzf color scheme across all modules for visual consistency in the terminal UI.

ready to start?

One command. Clean system.

$curl -fsSL https://raw.githubusercontent.com/csouzape/dsxtool/main/bootstrap.sh | bash