developersgithub

dsxtool docs

Bash scripts to automate Linux post-install tasks with 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

Update System

Runs a full system upgrade using the distro's package manager.

Install TLP

Installs and enables TLP for battery and power management on laptops.

Languages & Runtimes

PythonC++RustGoNode.jsJavaYarnPNPM

IDEs & Editors

VS CodeZedNeoVim (LazyVim)KateCursor

Dev Tools

DockerPodmanPostgreSQLRedisTerraformMinikubeKubectlPostmanDBeaver
Install Apps

Opens a categorized app installer for Browsers, Media, Communication, Productivity, Gaming and System Tools.

Install Alacritty

Installs the Alacritty terminal emulator and applies the csouzape config.

Install Konsole

Installs KDE's Konsole terminal emulator.

Install Kitty

Installs the Kitty terminal emulator.

Install Ghostty

Installs the Ghostty terminal emulator.

Setup Wallpapers

Clones the wallpapers repo into ~/Pictures/wallpapers.

Change Desktop Environment

Installs KDE Plasma, XFCE, Hyprland, Cosmic or the csouzape Hyprland edition.

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

Downloads and installs Nerd Fonts and developer fonts.

Setup Flatpak

Installs Flatpak and adds the Flathub remote repository.

Setup Virtualization

Installs KVM, QEMU and virtualization tools.

Setup Shell

Installs and configures Zsh or Fish with plugins and a shaped prompt.

Setup Gaming

Installs Wine, Steam, Lutris, MangoHud, GameMode and other gaming tools.

DSXConfig

Launches dsxconfig for package backup and restore across machines.

Setup Bluetooth

Configures Bluetooth support on your distro.

Setup Printer

Installs and configures printer support.

DSXSWAP (BETA)

Configures swap and zram options with a guided menu.

Setup yay

Installs the yay AUR helper on Arch Linux.

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 go?

One command. Cleaner system.

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