dsxtool docs
Bash scripts to automate Linux post-install tasks with 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
Runs a full system upgrade using the distro's package manager.
Installs and enables TLP for battery and power management on laptops.
Languages & Runtimes
IDEs & Editors
Dev Tools
Opens a categorized app installer for Browsers, Media, Communication, Productivity, Gaming and System Tools.
Installs the Alacritty terminal emulator and applies the csouzape config.
Installs KDE's Konsole terminal emulator.
Installs the Kitty terminal emulator.
Installs the Ghostty terminal emulator.
Clones the wallpapers repo into ~/Pictures/wallpapers.
Installs KDE Plasma, XFCE, Hyprland, Cosmic or the csouzape Hyprland edition.
- KDE Plasma
- XFCE
- Hyprland
- Hyprland (csouzape edition) — clones csouzape/hyprdots
- Cosmic
Downloads and installs Nerd Fonts and developer fonts.
Installs Flatpak and adds the Flathub remote repository.
Installs KVM, QEMU and virtualization tools.
Installs and configures Zsh or Fish with plugins and a shaped prompt.
Installs Wine, Steam, Lutris, MangoHud, GameMode and other gaming tools.
Launches dsxconfig for package backup and restore across machines.
Configures Bluetooth support on your distro.
Installs and configures printer support.
Configures swap and zram options with a guided menu.
Installs the yay AUR helper on Arch Linux.
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