Skip to content

Latest commit

 

History

420 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

DXSBash - Excessive Shell Environment For Debian 13

v3.9.7

Debian Logo DXSBash Logo

Professional Shell Environment for Linux Power Users on Debian 13

Debian GPL License Bash Zsh Fish

Buy Me A Coffee

Official Website: https://dxsbash.digitalxs.ca | Official repository: https://github.com/digitalxs/dxsbash/
DXSBash is a shell enhancement suite designed for developers, system administrators, and Linux power users. It provides a consistent, feature-rich experience across multiple shells, combining productivity tools, visual improvements, and optimized workflows.

Tested extensively on Debian 13. Please test on any system and send e-mail with detailed info with results, bugs, etc...

Command Reference

For a comprehensive list of all available commands and aliases in DXSBash, see the Commands Reference.

Or discover commands live in your shell:

aliases            # interactive fzf picker with a preview pane (if fzf is installed)
aliases git        # plain grep by substring; pipe-friendly

With fzf available, aliases (no args) opens a fuzzy-filter list; the preview pane shows the full definition of the selected alias or function. Without fzf — or when stdout is piped/redirected — it prints a plain sorted listing.

Keyboard Shortcuts

  • Ctrl+R - Search command history with fuzzy matching
  • Ctrl+F - Launch interactive directory navigator
  • Alt+C - Change to selected directory via fuzzy finder

Requirements

  • Debian 13 (extensively tested — reference platform)
  • Limited support still for Debian 12
  • Ubuntu 20.04+ (supported)
  • Arch Linux (supported, incl. Manjaro/EndeavourOS; AUR helpers detected)
  • Fedora 40+ (supported, incl. RHEL-family derivatives via dnf)
  • Administrative privileges (sudo mostly)

The installer detects your distribution from /etc/os-release and uses the native package manager: apt/nala on Debian and Ubuntu, pacman on Arch, dnf on Fedora.

Installation

One-liner (fastest):

curl -fsSL https://dxsbash.digitalxs.ca/install.sh | bash

Or clone and run manually if you'd rather inspect the script first:

git clone --depth=1 https://github.com/digitalxs/dxsbash.git
cd dxsbash
chmod +x setup.sh
./setup.sh

Or install a distribution package — see Packages (.deb and Arch).

The installer provides an interactive experience:

  1. Shows an Install / Repair / Uninstall menu
  2. Detects your Linux distribution automatically
  3. Lets you choose your preferred shell (Bash, Zsh, or Fish)
  4. Installs all required dependencies
  5. Configures your chosen shell with enhanced features
  6. Sets up visual elements and productivity tools
  7. Configures KDE terminal Konsole and Yakuake profiles and defaults

Packages (.deb and Arch)

DXSBash can also be installed as a system package. Both packages put DXSBash in /usr/share/dxsbash and add the command dxsbash-installer; each user then runs dxsbash-installer once (as themselves, not root) to set DXSBash up in their home — it clones the repository, so update-dxsbash keeps working, and runs the normal installer.

Ready-made packages: every push builds both on GitHub Actions — open the repository's Actions tab, pick the latest run and download the dxsbash-deb or dxsbash-arch artifact.

Debian / Ubuntu (.deb)

Build (needs only dpkg-deb, which Debian and Ubuntu always have):

git clone https://github.com/digitalxs/dxsbash.git && cd dxsbash
git checkout v3.9.7                    # optional: build a released version
./packaging/build-deb.sh               # → dist/dxsbash_<version>_all.deb

Install and set up:

sudo apt install ./dist/dxsbash_*_all.deb   # apt also installs the dependencies
dxsbash-installer                           # as your normal user

Check a package without installing: dpkg-deb --info / --contents on the file. Remove with sudo apt remove dxsbash (per-user setups are removed with dxsbash-uninstall).

Arch Linux (.pkg.tar.zst)

A .deb cannot be installed on Arch — build the native package instead. Run as your normal user (makepkg refuses root):

sudo pacman -S --needed base-devel git
git clone https://github.com/digitalxs/dxsbash.git && cd dxsbash
./packaging/build-arch.sh              # → dist/dxsbash-<version>-1-any.pkg.tar.zst
sudo pacman -U dist/dxsbash-*-any.pkg.tar.zst
dxsbash-installer

packaging/arch/PKGBUILD builds from the GitHub release tarball, so it can also be used on its own (e.g. for the AUR). Remove with sudo pacman -R dxsbash.

(Building the .deb on Arch also works — sudo pacman -S dpkg first — for publishing it; it just cannot be installed there.)

Non-interactive install

./setup.sh --install --shell bash --yes        # end-to-end, no prompts
DXSBASH_SHELL=zsh ./setup.sh --install --yes   # same via env var
./setup.sh --install --dry-run                 # show plan without changes

All output is mirrored to ~/.dxsbash/logs/install-YYYYMMDD-HHMMSS.log. If DXSBash is already installed, the installer suggests dxsbash-repair instead of reinstalling — use --yes to force a reinstall anyway.

The dxsbash command

Everything can be managed from a single entry point:

dxsbash update      # update to the latest release
dxsbash config      # interactive configuration menu
dxsbash gui         # graphical settings window (themes, aliases, updates)
dxsbash doctor      # health-check the installation
dxsbash audit       # security audit of the system (read-only)
dxsbash repair      # fix broken symlinks/commands
dxsbash uninstall   # remove and restore defaults
dxsbash export      # save personal settings to a tarball
dxsbash import <f>  # restore settings from a tarball
dxsbash bench       # benchmark shell startup time
dxsbash version     # show installed version

The individual commands below keep working — dxsbash is a wrapper.

Security

DXSBash includes read-only, defensive security tooling. Nothing here changes system state.

Security audit

dxsbash audit (or dxsbash-audit) runs a system security health check in the same pass/warn/fail style as dxsbash doctor:

dxsbash audit              # summary of findings
dxsbash audit --verbose    # include everything that passed
sudo dxsbash audit         # full coverage (some checks need root)

It checks pending security updates, firewall state, SSH daemon hardening (PermitRootLogin, PasswordAuthentication), UID-0/empty-password accounts and NOPASSWD sudo rules, PATH hygiene, world-writable and new SUID/SGID files (against a baseline in ~/.dxsbash/), failed SSH logins, and internal services exposed on all interfaces. Exit code is non-zero when any check fails, so it can be dropped into cron or CI.

Security summary at login

An opt-in one-line security status shown when a shell opens — pending security updates, failed SSH logins, firewall state, and whether a reboot is required. Unlike fastfetch it is also shown over SSH, where it matters most, and it reads from a background-refreshed cache so it never slows down opening a terminal.

Enable it from dxsbash config → Security summary, or:

echo 'export DXSBASH_SECSUMMARY="true"' >> ~/.dxsbash/user.conf

Updating

Update to the latest version:

update-dxsbash

Or click Check for updates in the DXSBash Settings window. Your chosen prompt theme (or hand-written starship.toml), preferences and custom aliases are always kept across updates.

Update channels

Channel You get Choose it with
stable (default) tagged releases (vX.Y.Z) only Settings → Update channel, or dxsbash-config → Updates
main every change as soon as it is pushed — newest, least tested same place
update-dxsbash --channel main      # one-off update from main
update-dxsbash --check --channel stable

Updates are decided by commits, not just version numbers: you are offered the newest release tag (stable) or the newest commit on main that your checkout does not already contain. Switching from main to stable never downgrades you — you simply move on at the next release.

Update notifications

On desktops, a daily check (a systemd user timer, installed with the menu entry) shows a notification when a new release is out on your channel — once per version. Click it (or Update now) to open the update screen. Turn it off in Settings → Startup & behavior → Notify me about updates.

Only check whether an update is available (useful for scripts and cron — exit code 10 means an update exists):

update-dxsbash --check

Repair

If symlinks or helper commands break after a system update or partial install, re-link everything without touching your settings or history:

dxsbash-repair            # interactive; auto-detects your shell
dxsbash-repair --dry-run  # preview changes
dxsbash-repair --deps     # also reinstall missing dependencies

Configuration

Tune DXSBash interactively without hand-editing rc files:

dxsbash-config

The menu lets you change:

  • Default text editor ($EDITOR / $VISUAL)
  • Shell history sizes (HISTSIZE, HISTFILESIZE)
  • Prompt style (Starship vs. built-in custom)
  • Starship theme (DXS, Tokyo Night, Gruvbox Rainbow, Catppuccin, …)
  • Fastfetch on startup (on/off)
  • Security summary at login (on/off)
  • Lightweight prompt over SSH (on/off)
  • Reset everything to defaults

Changes are written to ~/.dxsbash/user.conf and take effect in new shell sessions (or after source ~/.bashrc / source ~/.zshrc).

Settings window (GUI)

On desktops, DXSBash adds DXSBash Settings to the application menu under System (KDE Plasma, GNOME, XFCE, …). You can also open it with dxsbash gui or dxsbash-gui.

DXSBash Settings main window Custom aliases editor

From one window you can:

  • Check for updates — see whether a new release exists and install it with a progress bar and log; administrator prompts appear as a password dialog. Right-click the menu entry for a direct shortcut.
  • Pick a prompt theme visually — every theme is shown as a live preview of your prompt (your fonts, your repo), then applied in one click. Add your own… imports any Starship .toml into the picker, and Konsole/Yakuake switch to a matching color scheme.
  • Choose the update channel (stable releases or main) and get a notification when an update is out.
  • Edit custom aliases — add, edit and delete your own commands; they work in bash, zsh and fish (see below).
  • Switch the prompt engine (Starship / built-in), toggle system info at startup, the security summary and the lightweight SSH prompt, choose your editor, history size and login shell.
  • Back up / restore settings to a file, run the health check and the startup speed test, reset to defaults.

It is built on zenity. The installer sets the settings window up (zenity, menu entry, update notifications) whenever KDE Plasma or XFCE is installed — even when you run setup.sh over SSH or from a text console — and for other desktops when it runs inside a graphical session. Headless servers skip it. Existing installs get it on their next update-dxsbash. Settings are shared with dxsbash-config: change them in either tool.

dxsbash-gui --install-desktop   # add menu entry + daily update check later (e.g. desktop added after install)
dxsbash-gui --themes            # open the theme picker directly
dxsbash-gui --aliases           # open the alias editor directly

Set DXSBASH_DESKTOP=1 (or 0) when running setup.sh to force (or skip) the desktop integration. On Plasma under Wayland the open window shows zenity's taskbar icon (zenity 4 reports its own app id); the menu entry itself always shows the DXSBash icon.

Custom aliases

Aliases you add in the GUI are stored in ~/.dxsbash/custom-aliases.sh (one alias name='command' per line) and loaded after the DXSBash defaults, so they can override them. A fish copy is generated automatically. The command is shell code, exactly as you would type it in a terminal; shell keywords (if, for, function, …) are refused as names, and replacing an existing command asks for confirmation. Custom aliases are included in dxsbash export backups.

Prompt themes

Theme Preview
DXS Starship (default)
Nerd Font Symbols
Bracketed Segments
Pastel Powerline
Tokyo Night
Gruvbox Rainbow
Catppuccin Powerline

The icons need a Nerd Font in your terminal (the installer sets up FiraCode Nerd Font); Bracketed Segments works with any font.

Your own themes: drop any Starship config (*.toml) into ~/.dxsbash/themes/ — or use Add your own… in the theme picker, which also checks that Starship can read it. It then appears in both pickers with a live preview, is kept across updates, and travels with dxsbash export.

Matching terminal colors: on KDE, Konsole and Yakuake switch to a color scheme made for the theme (DXSBash, Tokyo Night, Gruvbox, Catppuccin) when you apply it; new terminal windows use it. Your own themes leave the colors as they are. Turn it off in Startup & behavior → Match terminal colors to theme.

Portable settings (export / import)

Replicate your DXSBash setup on another machine:

dxsbash export                    # → ~/dxsbash-backup-YYYYMMDD.tar.gz
dxsbash import backup.tar.gz      # on the new machine, after installing

The tarball carries ~/.dxsbash preferences and your Starship theme choice. Logs, machine-specific caches and the .dxsbash-env trust allowlist are excluded — trust decisions are per-machine and must be re-granted locally with envallow. Non-interactive imports (cron, ssh host 'dxsbash import …') must pass --yes explicitly.

SSH-aware prompt

Over SSH, DXSBash automatically switches Starship to a lightweight preset (starship-themes/ssh-lite.toml) with no git working-tree scan and no language-version lookups, so the prompt stays instant on slow links and busy servers. Opt out with:

echo 'export DXSBASH_SSH_LITE="false"' >> ~/.dxsbash/user.conf

Per-directory environments

Drop a .dxsbash-env file (POSIX sh: export KEY=value, aliases) in a project directory. When you cd there, DXSBash offers to load it — nothing is executed until you trust that exact file once:

cd ~/work/project
envallow          # trust and load .dxsbash-env (records a content hash)
envdeny           # withdraw trust

If the file changes later, it will not load again until you re-run envallow — so a tampered file can never run silently. Works in bash, zsh and fish (fish applies the portable export/alias subset).

Note: loaded variables and aliases persist for the rest of the shell session — there is no automatic unload when you leave the directory (open a new shell to get a clean environment).

Cheatsheet and benchmarking

cheat             # browse the full command reference offline (bat-rendered)
cheat git         # filter it
dxsbash bench     # startup time per shell (cold/warm)
dxsbash bench --profile   # show the slowest bash startup lines

Core Components

Shell Configurations

  • .bashrc - Enhanced Bash configuration
  • .zshrc - Zsh configuration with plugins
  • config.fish - Fish shell configuration

Tools Included

  • Starship - Cross-shell prompt with rich information
  • Zoxide - Smarter directory navigation
  • FZF - Fuzzy finder for files and history
  • Fastfetch - Optimized system information display
  • FiraCode Nerd Font - Programming font with ligatures and icons

Keyboard Shortcuts

  • Ctrl+R - Search command history with fuzzy matching
  • Ctrl+F - Launch interactive directory navigator
  • Alt+C - Change to selected directory via fuzzy finder

Command Reference

System Management

  • update - Update system packages
  • install [package] - Install packages with updates
  • whatsmyip - Show internal and external IP addresses

File Operations

  • extract <file> - Extract any archive type automatically
  • mkdirg <dir> - Create and navigate to directory
  • cpg <src> <dest> - Copy and go to destination
  • mvg <src> <dest> - Move and go to destination

Directory Navigation

  • .., ..., .... - Go up 1, 2, or 3 directories
  • bd - Go back to previous directory
  • up <n> - Go up n directories

Git Operations

  • gs - Git status
  • ga - Git add
  • gc - Git commit
  • gp - Git push
  • gl - Git log
  • gb - Git branch
  • gco - Git checkout

Software Dependencies

DXSBash installs and uses the following software packages to enhance the Linux terminal experience and DXSBash would not be possible without them:

Core Shells

Software Description Project Link
Bash GNU Bourne Again Shell gnu.org/software/bash
Zsh Z Shell zsh.org
Fish Friendly Interactive Shell fishshell.com

Terminal Enhancement Tools

Software Description Project Link
Starship Cross-shell prompt starship.rs
Zoxide Smart directory navigation github.com/ajeetdsouza/zoxide
FZF Fuzzy finder github.com/junegunn/fzf
Fastfetch System information display github.com/fastfetch-cli/fastfetch
Bat/Batcat Improved cat command github.com/sharkdp/bat
Ripgrep Fast text search github.com/BurntSushi/ripgrep
Tree Directory visualization mama.indstate.edu/users/ice/tree
Multitail Enhanced log viewing vanheusden.com/multitail

Fonts

Software Description Project Link
FiraCode Nerd Font Programming font with ligatures and icons github.com/ryanoasis/nerd-fonts

Shell-Specific Tools

Software Description Project Link
Oh My Zsh Zsh framework ohmyz.sh
zsh-autosuggestions Command suggestions for Zsh github.com/zsh-users/zsh-autosuggestions
zsh-syntax-highlighting Syntax highlighting for Zsh github.com/zsh-users/zsh-syntax-highlighting
Fisher Plugin manager for Fish github.com/jorgebucaran/fisher
fzf.fish FZF integration for Fish github.com/PatrickF1/fzf.fish
Tide Fish prompt github.com/IlanCosman/tide

Development Tools

Software Description Project Link
Git Version control system git-scm.com
Neovim Text editor neovim.io
Nano Simple text editor nano-editor.org
Joe Text editor joe-editor.sourceforge.net

System Utilities

Software Description Project Link
Nala APT frontend github.com/volitank/nala
Trash-cli Safer alternative to rm github.com/andreafrancia/trash-cli
Curl URL transfer tool curl.se
Wget File retrieval tool gnu.org/software/wget
Unzip Archive extraction infozip.sourceforge.net/UnZip.html
Pwgen Password generator sourceforge.net/projects/pwgen
Powerline Status line github.com/powerline/powerline
Plocate Fast file search plocate.sesse.net
Fontconfig Font management freedesktop.org/wiki/Software/fontconfig
Bash-completion Improved shell completion github.com/scop/bash-completion

Network Tools

Software Description Project Link
Nmcli Network management CLI developer.gnome.org/NetworkManager/stable/nmcli.html
Netstat Network statistics net-tools.sourceforge.net

UI Automation Tools

Software Description Project Link
XDotool X11 automation tool github.com/jordansissel/xdotool
XClip Clipboard management github.com/astrand/xclip

Container and Orchestration Tools

Software Description Project Link
Docker Container platform docker.com
Docker Compose Multi-container Docker docs.docker.com/compose
Kubectl Kubernetes CLI kubernetes.io/docs/reference/kubectl

Package Managers

Software Description Project Link
DNF Fedora package manager dnf.readthedocs.io
Zypper SUSE package manager en.opensuse.org/Portal:Zypper
Pacman Arch package manager archlinux.org/pacman
Emerge Gentoo package manager wiki.gentoo.org/wiki/Portage
XBPS Void Linux package manager voidlinux.org/usage/xbps
Nix NixOS package manager nixos.org/manual/nix
Yay/Paru AUR helpers github.com/Jguer/yay / github.com/Morganamilo/paru

Terminal Emulators

Software Description Project Link
Konsole KDE terminal konsole.kde.org
Yakuake KDE drop-down terminal kde.org/applications/system/org.kde.yakuake
Kitty GPU-accelerated terminal sw.kovidgoyal.net/kitty

Customization

You can customize your environment even more by editing:

  • Shell configuration: .bashrc, .zshrc, or ~/.config/fish/config.fish
  • Edit aliases: .bash_aliases
  • Prompt: ~/.config/starship.toml
  • System info: ~/.config/fastfetch/config.jsonc

Cross-Platform Compatibility Issues

  • Linux-specific Commands: Some commands (like netstat-based aliases) might not work correctly on all Linux distributions or might have different output formats.
  • X11-dependent Features: Commands like clickpaste rely on X11 utilities (xdotool) which won't work in Wayland or headless environments.
  • Hardware-dependent Commands: The cpu function assumes a specific format in /proc/stat, which might not be consistent across all Linux kernels.
  • Terminal-specific Features: The Konsole and Yakuake configurations might not translate well to other terminal emulators.

Uninstalling

Full uninstall — backs up your current configs, removes all DXSBash files, restores your distribution's defaults from /etc/skel/, and optionally reverts your login shell to bash:

dxsbash-uninstall                 # interactive
dxsbash-uninstall --dry-run       # preview only
dxsbash-uninstall --yes           # non-interactive
dxsbash-uninstall --keep-repo     # keep ~/linuxtoolbox/dxsbash
dxsbash-uninstall --no-restore    # skip /etc/skel restore

Or, to only revert shell rc files to defaults without removing the repo:

sudo reset-shell-profile [username]

You can also reach these from the installer menu:

./setup.sh            # interactive menu: Install / Repair / Uninstall
./setup.sh --repair
./setup.sh --uninstall

Tested compatibility

DXSBash was successfully compatibility tested with:

  • Debian 13
  • Konsole 25.04.2
  • Yakuake 25.04.0
  • XFce Terminal 1.0.4 (Need to change font settings to Firacode Nerd Font Regular)
  • Kitty 0.26.5

Support Development

If you find DXSBash valuable for your workflow, consider supporting its development:

Buy Me A Coffee

Contributing and development

Want to hack on DXSBash? Start with the Development Guide — it covers the architecture, symlink layout, cross-shell parity rules, the CI matrix and the release process. Contribution basics are in CONTRIBUTING.md.

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

Contact

About

Bash shell unleashed. For pros.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages