linutil Documentation

Chris Titus Tech's Linux Toolbox - Linutil is a distro-agnostic toolbox designed to simplify everyday Linux tasks.

5,326 stars Shell Shell 16 files · ~18,604 tokens #linux
RAW Doc

Technical Documentation: ChrisTitusTech/linutil

ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference

Overview (`README.md`)

Chris Titus Tech's Linux Utility


Linutil is a distro-agnostic toolbox designed to simplify everyday Linux tasks. It helps you set up applications and optimize your system for specific use cases. The utility is actively developed in Rust 🦀, providing performance and reliability.

[!NOTE]
Since the project is still in active development, you may encounter some issues. Please consider submitting feedback if you do.

💡 Usage

To get started, pick which branch you would like to use, then run the command in your terminal:

bash
curl -fsSL https://christitus.com/linux | sh

Dev branch

bash
curl -fsSL https://christitus.com/linuxdev | sh

CLI arguments

View available options by running:

bash
linutil --help

For installer options:

bash
curl -fsSL https://christitus.com/linux | sh -s -- --help

⬇️ Installation

Linutil is also available as a package in various repositories:

Arch Linux

Linutil can be installed on Arch Linux with three different AUR packages:

  • linutil - Stable release compiled from source
  • linutil-bin - Stable release pre-compiled
  • linutil-git - Compiled from the last commit (not recommended)

by running:

bash
git clone https://aur.archlinux.org/<package>.git
cd <package>
makepkg -si

Replace `` with your preferred package.

If you use yay, paru or any other AUR Helper, it's even simpler:

bash
paru -S linutil

Replace paru with your preferred helper and linutil with your preferred package.

OpenSUSE

Linutil can be installed on OpenSUSE with:

bash
sudo zypper install linutil

Cargo

Linutil can be installed via Cargo with:

bash
cargo install linutil_tui

Note that crates installed using cargo install require manual updating with cargo install --force (update functionality is included in LinUtil)

Configuration

Linutil supports configuration through a TOML config file. Path to the file can be specified with --config (or -c).

Available options:

  • auto_execute - A list of commands to execute automatically (can be combined with --skip-confirmation)
  • skip_confirmation - Boolean ( Equal to --skip-confirmation)
  • size_bypass - Boolean ( Equal to --size-bypass )

Example config:

toml
# example_config.toml

auto_execute = [
    "Fastfetch",
    "Alacritty",
    "Kitty"
]

skip_confirmation = true
size_bypass = true
bash
linutil --config /path/to/example_config.toml

💖 Support

If you find Linutil helpful, please consider giving it a ⭐️ to show your support!

🎓 Documentation

For comprehensive information on how to use Linutil, visit the Linutil Official Documentation.

🛠 Contributing

We welcome contributions from the community! Before you start, please review our Contributing Guidelines to understand how to make the most effective and efficient contributions.

Docs are now here

🏅 Thanks to All Contributors

Thank you to everyone who has contributed to the development of Linutil. Your efforts are greatly appreciated, and you're helping make this tool better for everyone!

📜 Contributor Milestones

  • 2024/07 - Original Linutil Rust TUI was developed by @JustLinuxUser.
  • 2024/09 - TabList (Left Column) and various Rust Core/TUI Improvements developed by @lj3954
  • 2024/09 - Cargo Publish, AUR, Rust, and Bash additions done by @koibtw
  • 2024/09 - Rust TUI Min/Max, MultiSelection, and Bash additions done by @jeevithakannan2
  • 2024/09 - Various bash updates and standardization done by @nnyyxxxx
  • 2024/09 - Multiple bash script additions done by @guruswarupa
  • 2026/01 - TUI Refresh with Logo by @Abs313a
  • 2026/03 - Linutil docs website creation by @seanh1995

Content Index (`docs/content/_index.md`)


title: Welcome to Linutil Documentation! toc: false width: full

Welcome to the official documentation for Linutil, your go-to utility for optimizing and managing your Linux environment. Whether you’re an IT professional, power user, or regular user, Linutil provides a comprehensive set of tools to enhance your Linux experience.

Running the latest release of Linutil

  • You will first need to start a terminal.
  • Now you can run the following command:
bash
curl -fsSL https://christitus.com/linux | sh

[!IMPORTANT]
Linutil is updated frequently as of the time of writing. Consequently, features and functionalities may evolve, and the documentation may not always reflect the most current images or information.


Content Dev Index (`docs/content/dev/_index.md`)


title: Developer Reference weight: 3 toc: false

[!NOTE]
This section contains technical documentation for developers. For end-user documentation, see the User Guide.

Architecture


Content Userguide Index (`docs/content/userguide/_index.md`)


title: User Guide weight: 2

Welcome to the official User Guide for Linutil, Chris Titus Tech's Linux Utility!

What is Linutil?

Linutil is a distro-agnostic toolbox designed to simplify everyday Linux tasks. Built in Rust for performance and reliability, it provides an interactive terminal UI (TUI) that helps you:

  • Install Applications: Quickly set up popular software for your Linux system
  • System Setup: Configure your distro with optimized settings and tools
  • Security: Apply firewall baselines and harden your system
  • Utilities: Manage monitors, printers, Bluetooth, WiFi, and more
  • Gaming: Set up gaming dependencies, game launchers, emulators, and game-specific optimizations

Who Should Use Linutil?

Linutil is designed for:

  • Linux Beginners: Wanting an easy way to set up a fresh install
  • Power Users: Needing quick access to common configuration tasks
  • Developers: Setting up clean development environments fast
  • Gamers: Installing gaming dependencies and optimizing Linux for gaming
  • Privacy-Conscious Users: Applying firewall rules and security hardening

Getting Started

New to Linutil? Start here:

  1. Getting Started Guide - How to run Linutil and navigate the TUI
  2. Application Setup - Installing software via the TUI
  3. System Setup - Distro-specific setup and configuration
  4. Features & Utilities - Security, gaming, and utility tools
  5. Automation - Run Linutil unattended with a config file

Running Linutil

bash
curl -fsSL https://christitus.com/linux | sh

Dev Branch

bash
curl -fsSL https://christitus.com/linuxdev | sh

Main Categories

Applications Setup

Browse and install hundreds of popular Linux applications from within the TUI. Categories include browsers, developer tools, communication apps, design tools, and more.

Read the Application Setup Guide →

System Setup

Distro-specific scripts for Arch, Fedora, Debian, Ubuntu, and more. Includes AUR helpers, desktop environment installers, driver setup, and system configuration.

Read the System Setup Guide →

Security

Apply firewall baselines using UFW or FirewallD, following CTT's recommended security rules.

Read the Features Guide →

Utilities

Tools for monitor management, printer setup, Bluetooth, WiFi, service management, and more.

Read the Features Guide →

Gaming

Install gaming dependencies, manage game launchers, add emulators, and apply game-specific optimizations.

Read the Features Guide →

Automation

Run Linutil automatically with a TOML config file for scripted or batch setups.

Read the Automation Guide →

I want to... Go to...
Run Linutil for the first time Getting Started
Install applications Application Setup
Set up Arch Linux System Setup
Harden my firewall Features & Utilities
Automate Linutil for multiple machines Automation

Safety and Best Practices

Before using Linutil:

  • Read what each script does before running it
  • Test on non-production systems when trying new configurations
  • Keep backups of important configuration files

Getting Help

Need assistance?

Contributing

Want to help improve Linutil?

  • Report Bugs: Submit issues on GitHub
  • Suggest Features: Open feature requests
  • Contribute Scripts: Add new bash scripts
  • Improve Docs: Help expand this documentation

Read Contributing Guide →


Content Userguide Automation Index (`docs/content/userguide/automation/_index.md`)


title: Automation weight: 6

Linutil supports automation via a TOML config file. This lets you run predefined scripts automatically — useful for setting up multiple machines, provisioning servers, or scripting a consistent Linux environment.

Config File

Create a TOML file with your desired settings:

toml
# example_config.toml

auto_execute = [
    "Fastfetch",
    "Alacritty",
    "Kitty"
]

skip_confirmation = true
size_bypass = true

Then run Linutil with your config:

bash
linutil --config /path/to/example_config.toml

Or via the one-liner:

bash
curl -fsSL https://christitus.com/linux | sh -s -- --config /path/to/example_config.toml

Config Options

Option Type Description
auto_execute list of strings Script names to run automatically on launch
skip_confirmation boolean Skip confirmation prompts before running scripts
size_bypass boolean Bypass terminal size requirements

CLI Flags

The same options are available as command-line flags:

bash
linutil --skip-confirmation --size-bypass
Flag Description
--config / -c Path to TOML config file
--skip-confirmation Skip all confirmation prompts
--size-bypass Bypass minimum terminal size check

Use Cases

Provision a New Machine

Create a config that installs your standard set of tools:

toml
auto_execute = [
    "Bash Prompt",
    "Fastfetch",
    "VS Code",
    "Docker",
    "ZSH Prompt"
]

skip_confirmation = true

Run it on any new Linux install to get your environment set up in one shot.

Server Setup

toml
auto_execute = [
    "Full System Update",
    "UFW Firewall Baselines (CTT)",
    "Docker"
]

skip_confirmation = true

Finding Script Names

Script names in auto_execute must match exactly as they appear in the Linutil TUI. Browse the TUI to find the exact name, or check the auto-generated Walkthrough page for a complete list.

[!TIP]
Use --skip-confirmation together with auto_execute for fully unattended runs. Without it, Linutil will still pause and ask before executing each script.


Content Userguide Features Index (`docs/content/userguide/features/_index.md`)


title: Features & Utilities weight: 4

Beyond application installation and system setup, Linutil includes categories for security hardening, gaming, and a wide range of system utilities.

Security

Apply firewall baselines to protect your Linux system. Based on CTT's recommended security rules — for more detail see christitus.com/linux-security-mistakes.

UFW Firewall Baselines

UFW (Uncomplicated Firewall) is a user-friendly frontend for iptables. This script:

  • Installs UFW if not present
  • Applies CTT's recommended baseline rules for IPv4 and IPv6
  • Enables the firewall
bash
# Check UFW status after running the script
sudo ufw status verbose

FirewallD Baselines

An alternative to UFW, FirewallD is the default firewall manager on Fedora and RHEL-based systems. This script configures FirewallD with CTT's recommended rules.

Gaming

Gaming Dependencies

Installs the libraries and tools needed to run games on Linux across different distributions, such as Wine, Vulkan support, MangoHud, GameMode, and related runtime dependencies. Steam and Lutris are managed separately from the Game Launchers section.

Proton Compatibility Tools

The Gaming tab includes ProtonPlus and ProtonUp-Qt under Tools and Setups. Both entries use an interactive Install, Uninstall, or Abort prompt, try native packages first, and fall back to Flathub Flatpak packages:

Tool Flatpak ID
ProtonPlus com.vysp3r.ProtonPlus
ProtonUp-Qt net.davidotek.pupgui2

Game Launchers

The Gaming tab includes a Game Launchers section for managing common launchers with an interactive Install, Uninstall, or Abort prompt.

Launcher Behavior
Steam Uses native packages on Arch-based systems; uses Flatpak on several other distros where native availability is less consistent
Lutris Uses the native package manager on supported distros
RetroArch Uses native packages where available, with Flatpak fallback for selected distros
Heroic Uses Flatpak on non-Arch systems; on Arch-based systems builds heroic-games-launcher-bin directly from AUR

On NixOS, these entries print declarative configuration guidance instead of modifying the system imperatively.

Emulators

Emulator Console
RetroArch Multi-system frontend
Dolphin GameCube / Wii
PCSX2 PlayStation 2
RPCS3 PlayStation 3
Ryujinx Nintendo Switch
mGBA Game Boy Advance
MelonDS Nintendo DS / DSi
bsnes / snes9x Super Nintendo
Mupen64Plus / Gopher64 Nintendo 64
Flycast Sega Dreamcast
Kronos Sega Saturn
XEMU Original Xbox
Blastem Sega Genesis

[!NOTE]
No game ROMs or BIOS files are included. You must supply your own legally obtained files.

Game-Specific Configs

  • Diablo II Resurrected — Loot Filter: Highlights high-value drops for Battle.net and single player
  • Fallout 76 — INI & Mods: Performance and stability improvements
  • Arc Raiders — Match Optimizations: Shorter transition videos and optimized config for VRR

Utilities

Monitor Control

Script Description
Auto Detect Displays Detect and apply recommended monitor config
Set Resolution Change the resolution of a connected monitor
Set Brightness Adjust monitor brightness
Change Orientation Rotate a monitor
Scale Monitors Change display scaling
Set Primary Monitor Designate the primary display
Extend Displays Extend across multiple monitors
Duplicate Displays Mirror displays
Disable / Enable Monitor Toggle a monitor on or off
Manage Arrangement Set the physical arrangement of monitors
Reset Scaling Revert scaling to default

Printers

Script Description
CUPS Install the CUPS printing system
Epson Drivers Install Epson printer drivers
HP Drivers Install HP printer drivers

System Utilities

Script Description
Bluetooth Manager Manage Bluetooth devices
WiFi Manager Manage wireless connections
Service Manager Enable, disable, and manage systemd services
Numlock on Startup Enable Num Lock at boot
Auto Mount Drive Automate mounting a drive at startup
Ollama Manage Ollama (local AI model runner)
US Locale Setup Fix US UTF-8 locale and folder listings

Content Userguide Getting Started Index (`docs/content/userguide/getting-started/_index.md`)


title: Getting Started with Linutil weight: 1

Welcome to Linutil!

Linutil is a distro-agnostic Linux toolbox built in Rust. It provides an interactive terminal UI (TUI) for installing applications, configuring your system, and running common Linux setup tasks — all from one place.

System Requirements

Before running Linutil, ensure your system meets these requirements:

  • Operating System: Any modern Linux distribution (Arch, Fedora, Debian, Ubuntu, openSUSE, etc.)
  • Shell: Bash or a compatible POSIX shell
  • Internet Connection: Required for downloading applications and scripts
  • curl: Pre-installed on most distributions

Running Linutil

Linutil runs directly from a single curl command — no installation required.

bash
curl -fsSL https://christitus.com/linux | sh

Dev Branch (Latest Features)

bash
curl -fsSL https://christitus.com/linuxdev | sh

[!NOTE]
The dev branch may contain untested features. Use the stable branch for day-to-day use.

Installing Linutil Locally

If you prefer a persistent local install, Linutil is available through several package managers.

Arch Linux (AUR)

bash
# Using paru
paru -S linutil

# Using yay
yay -S linutil

# Stable pre-compiled binary
paru -S linutil-bin

openSUSE

bash
sudo zypper install linutil

Cargo

bash
cargo install linutil_tui

[!NOTE]
Cargo installs require manual updates via cargo install --force linutil_tui, or use the built-in Linutil Updater script inside the tool.

CLI Arguments

View all available options:

bash
linutil --help

Common Options

Flag Description
--config / -c Path to a TOML config file
--skip-confirmation Skip confirmation prompts
--size-bypass Bypass terminal size requirements

Once Linutil launches, you'll see a tree-style menu on the left and a description panel on the right.

Keyboard Shortcuts

Key Action
↑ / ↓ or j / k Move up/down in the list
Enter or → Select / expand item
← Collapse / go back
Space Multi-select an item
/ Search/filter items
q or Escape Quit / go back
t Toggle multi-select mode

Linutil is organized into these main categories:

  • Applications Setup — Install popular Linux software
  • Gaming — Gaming dependencies, emulators, game configs
  • Security — Firewall setup and hardening
  • System Setup — Distro-specific configuration (Arch, Fedora, Debian, Ubuntu, etc.)
  • Utilities — Monitor control, printers, Bluetooth, WiFi, and more

Your First Steps

Here are recommended actions for new users:

1. Browse and Install Applications

  1. Navigate to Applications Setup
  2. Browse categories (browsers, developer tools, communication apps, etc.)
  3. Select an application and press Enter to run the install script

2. Set Up Your Distro

  1. Navigate to System Setup
  2. Find your distribution (Arch, Fedora, Debian, Ubuntu)
  3. Run distro-specific scripts like AUR helpers, RPM Fusion, or package updates

3. Configure Utilities

  1. Navigate to Utilities
  2. Set up monitors, manage Bluetooth/WiFi, or configure services

Troubleshooting First Run

Script Won't Download

If the curl command fails, check your internet connection or try:

bash
curl -fsSL https://raw.githubusercontent.com/ChrisTitusTech/linutil/main/linutil.sh | sh

Permission Errors

Most scripts require sudo access. Linutil will prompt for your password when needed.

Terminal Size Warning

If you get a terminal size warning, resize your terminal to be larger, or use the --size-bypass flag:

bash
curl -fsSL https://christitus.com/linux | sh -s -- --size-bypass

Next Steps


Content Userguide Store Index (`docs/content/userguide/store/_index.md`)


title: Application Setup weight: 2

The Applications Setup section of Linutil lets you install popular Linux software through pre-written install scripts. Each script handles package manager differences across distros automatically.

Finding Applications

Use the search feature to quickly find what you need:

  • Press / while in the TUI to open the search/filter
  • Type part of the application name
  • The list filters in real time

Installing an Application

  1. Navigate to Applications Setup in the main menu
  2. Browse categories or search for the app you want
  3. Select the application and press Enter
  4. Linutil will run the install script — you may be prompted for your sudo password

Application Categories

Communication Apps

App Description
Discord Voice, video, and text chat for communities
Signal End-to-end encrypted messaging
Slack Team collaboration platform
Telegram Fast, cloud-based messaging
Thunderbird Open-source email client
Zoom Video conferencing

Developer Tools

App Description
VS Code Lightweight code editor by Microsoft
VS Codium VS Code without Microsoft telemetry
Cursor AI-powered code editor
Neovim CTT's configured Neovim setup
Zed High-performance code editor written in Rust
GitHub Desktop GUI for Git and GitHub
Docker Container platform
Podman Daemonless container engine

Web Browsers

App Description
Firefox Open-source browser by Mozilla
Brave Privacy-focused Chromium browser
LibreWolf Privacy-hardened Firefox fork
Chromium Open-source base for Chrome
Zen Browser Privacy-focused browser
Tor Browser Anonymity browser via Tor network

Design Tools

App Description
GIMP Full-featured raster image editor
Inkscape Vector graphics editor
Krita Digital painting and 2D animation
Blender 3D modeling and animation
OBS Studio Screen recording and live streaming
Kdenlive Non-linear video editor

Terminal & Shell

App Description
Alacritty GPU-accelerated terminal emulator
Kitty Feature-rich GPU terminal emulator
Ghostty Highly customizable terminal
Bash Prompt CTT's .bashrc configuration
ZSH Prompt ZSH shell with basic configuration

Other Notable Apps

App Description
Fastfetch System info display tool
Flatpak / Flathub Universal Linux app sandbox
Bottles Run Windows apps on Linux
Waydroid Run Android apps on Linux
DWM-Titus CTT's configured DWM window manager
Rofi App launcher and window switcher
Auto CPU Frequency Automatic CPU power optimizer

Updating Linutil Itself

Two scripts in Applications Setup manage Linutil's own lifecycle:

  • Linutil Installer — Installs a distro-specific Linutil package locally
  • Linutil Updater — Updates your local Linutil crate installation

[!TIP]
If you installed Linutil via cargo install linutil_tui, use the Linutil Updater script to keep it current instead of running cargo install --force manually.


Content Userguide Tweaks Index (`docs/content/userguide/tweaks/_index.md`)


title: System Setup weight: 3

The System Setup section contains distro-specific and general configuration scripts to get your Linux system set up quickly. These scripts handle driver installation, package manager configuration, desktop environments, and more.

Distro-Specific Setup

Arch Linux

Script Description
Arch Server Setup Minimal Arch server install in under 5 minutes
Hyprland (JaKooLit) Install JaKooLit's Hyprland configuration
Paru AUR Helper Install the paru AUR helper
Yay AUR Helper Install the yay AUR helper
Install Chaotic-AUR Add the Chaotic-AUR repo for prebuilt AUR packages
Nvidia Drivers + HW Accel Install and configure Nvidia drivers with hardware acceleration
Omarchy Rice by DHH Simplified Hyprland config by DHH
Linux Neptune (SteamDeck) Valve's fork of the Linux kernel for Steam Deck
Virtualization Install QEMU, Libvirt, and Virt-Manager

Fedora

Script Description
Configure DNF Optimize DNF for parallel downloads
RPM Fusion Add RPM Fusion free and non-free repositories
Multimedia Codecs Install multimedia codecs with RPM Fusion
Nvidia Proprietary Drivers Install proprietary Nvidia drivers
Hyprland (JaKooLit) Install JaKooLit's Hyprland configuration
Virtualization Enable virtualization via DNF
Btrfs Assistant + Snapper Btrfs snapshots with grub-btrfs integration
Upgrade Fedora Release Upgrade system to the next Fedora release

Debian

Script Description
Hyprland (JaKooLit) Install JaKooLit's Hyprland configuration

Ubuntu

Script Description
Hyprland (JaKooLit) Install JaKooLit's Hyprland configuration
Full System Cleanup Remove unused packages, clear cache, empty trash
Full System Update Update all packages to the latest available
Gaming Dependencies Install gaming runtime dependencies across distros
Global Theme Install and configure a global desktop theme
Remove Snaps Remove Snap and prevent it from reinstalling
Build Prerequisites Install software build dependencies
TTY Fonts Set the default TTY font to Terminus 32 Bold

Alpine

Script Description
Alpine Update Upgrade Alpine to the latest stable or edge release

Desktop Environment Setup

These scripts work across distros and let you install or uninstall full desktop environments and window managers interactively.

Install Desktop Environment

An interactive menu lets you choose from:

Desktop Environments: GNOME, KDE Plasma, XFCE, Cinnamon, MATE, Budgie, LXQt, LXDE

Window Managers: i3, Sway, DWM, Awesome, BSPWM, Openbox, Fluxbox

Uninstall Desktop Environment

The reverse operation — interactively select which DE or WM to remove.

General System Scripts

These scripts work across all distributions:

Script Description
Full System Update Update all packages using your distro's package manager
Full System Cleanup Clear package caches, temp files, and trash
Gaming Dependencies Install runtime dependencies needed for gaming on Linux
Build Prerequisites Install common software build dependencies

[!TIP]
Always run a Full System Update before installing new software or applying major configuration changes.


Content Userguide Updates Index (`docs/content/userguide/updates/_index.md`)


title: Updating Linutil weight: 5

Linutil is actively developed and updated frequently. There are a few ways to keep your installation current.

Running the Latest Version Directly

The simplest way to always use the latest release is to run the curl command each time:

bash
curl -fsSL https://christitus.com/linux | sh

This always pulls the latest stable release without any local install needed.

Updating a Local Install

If you installed Linutil locally (via Cargo, AUR, or openSUSE packages), use the appropriate method to update.

Linutil Updater (Built-in)

The easiest way to update a Cargo-based install is the Linutil Updater script inside the tool itself:

  1. Run Linutil
  2. Navigate to Applications Setup
  3. Select Linutil Updater
  4. The script will update your local linutil_tui crate

Cargo

bash
cargo install --force linutil_tui

Arch Linux (AUR)

bash
# Using paru
paru -Syu linutil

# Using yay
yay -Syu linutil

openSUSE

bash
sudo zypper update linutil

Dev Branch

To test the latest unreleased features, use the dev branch:

bash
curl -fsSL https://christitus.com/linuxdev | sh

[!WARNING]
The dev branch may contain untested or unstable features. Not recommended for daily use.

Checking the Current Version

After installing Linutil locally, you can check the version with:

bash
linutil --version

Release Notes

All releases and changelogs are available on the GitHub Releases page.


Archetypes Default (`docs/archetypes/default.md`)


title: '{{ replace .File.ContentBaseName "-" " " | title }}' date: '{{ .Date }}' draft: true


Content CONTRIBUTING (`docs/content/CONTRIBUTING.md`)


title: Contributing Guide toc: true

Thank you for considering contributing to Linutil! We appreciate your effort in helping improve this project. Please follow these guidelines to make the contribution process smooth for everyone.

1. Install Rust

Make sure you have Rust installed on your machine:

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Or visit rust-lang.org for full instructions.

2. Fork and Clone the Repo

  1. Fork the repository on GitHub
  2. Clone your fork locally:
bash
git clone https://github.com/YOUR_USERNAME/linutil.git
cd linutil

3. Make Your Changes

  • Edit the relevant files
  • Run cargo run to test your changes locally
  • Ensure everything works as expected before submitting

4. Adding a New Script

If you're adding a new shell script:

  1. Place it in the appropriate subdirectory under tabs/
  2. Fill out all fields in tab_data.toml for your script
  3. Run cargo xtask docgen to regenerate the documentation

Without completing tab_data.toml and running docgen, your script will not appear in the TUI or the documentation.

5. Understand the Existing Code

  • Have a clear reason: Don't change the way things are done without a valid reason. Be prepared to explain why a change is necessary and how it improves the project.
  • Respect existing conventions: Changes should align with the existing code style and project philosophy.

6. Learn from Past Pull Requests

  • Check merged PRs: Reviewing accepted contributions gives you a sense of what is welcome.
  • Study rejected PRs: This helps you avoid mistakes and proposals that have already been declined.

7. Write Clean Commit Messages

  • Use the imperative mood: "Add feature X" not "Added feature X"
  • Be descriptive about what changed and why
  • Avoid committing a change and then immediately following it with a fix — amend or squash instead

8. Keep PRs Small and Focused

  • One feature or fix per pull request
  • Avoid combining unrelated changes in a single PR — it makes review harder and may delay merging

9. Test Your Code

  • Review your code for readability and correctness before submitting
  • Do not submit AI-generated code without thoroughly reviewing and testing it first
  • Failure to test after multiple review requests may result in the PR being closed

10. Code Review

  • All PRs go through code review — expect feedback and be open to revisions
  • If you're comfortable, reviewing other contributors' PRs is a great way to give back

11. Contributing Beyond Code

  • Test the tool across different distros and report issues
  • Write clear bug reports with steps to reproduce, distro info, and error output
  • Propose reasonable feature requests that fit the scope and style of the project
  • Improve documentation to help other users

12. License

By contributing to Linutil, you agree that your contributions will be licensed under the project's MIT License.


We look forward to your contributions — thank you for helping make Linutil better for everyone!


Content KnownIssues (`docs/content/KnownIssues.md`)


title: Known Issues toc: true

This page tracks known issues and limitations in Linutil. If you encounter a bug not listed here, please open an issue on GitHub.

Terminal Compatibility

Minimum Terminal Size

Linutil requires a minimum terminal size to display the TUI correctly. If your terminal is too small, you will see a warning and the TUI will not load.

Workaround: Resize your terminal to be larger, or use the --size-bypass flag:

bash
curl -fsSL https://christitus.com/linux | sh -s -- --size-bypass

Rendering Issues in Some Terminals

The TUI is built with ratatui and tested against common terminals (Alacritty, Kitty, GNOME Terminal, Konsole, etc.). Older or minimalist terminals may have rendering issues with box-drawing characters.

Workaround: Use a modern terminal emulator.

Script-Specific Issues

Scripts May Fail on Unsupported Distros

Some scripts are written for a specific distribution (e.g., Arch, Fedora). Running them on an unsupported distro may fail or produce unexpected results.

Workaround: Only run scripts listed under your distro's section in System Setup, or scripts that are explicitly distro-agnostic.

Nvidia Driver Scripts Require Manual Steps on Some Systems

The Nvidia driver installation scripts may not cover every hardware configuration. Secure Boot, older GPUs, or custom kernel setups can cause driver installation to fail.

Workaround: Refer to your distro's official Nvidia documentation for manual installation if the script fails.

Cargo Installs Require Manual Updates

If you installed Linutil via cargo install linutil_tui, updates are not automatic.

Workaround: Use the built-in Linutil Updater script inside the TUI, or run:

bash
cargo install --force linutil_tui

Active Development

Linutil is under active development. Since scripts are contributed by the community and updated frequently, some scripts may:

  • Lag behind upstream package name changes
  • Temporarily break after a distro update changes a package or dependency
  • Not yet cover all edge cases for every distro version

Workaround: Check open issues and recent pull requests for known fixes. Running the stable curl command always fetches the latest release:

bash
curl -fsSL https://christitus.com/linux | sh

Reporting Bugs

When opening a bug report, please include:

  • Your Linux distribution and version
  • Terminal emulator being used
  • The exact script or menu item that failed
  • The full error output from the terminal
  • Steps to reproduce the issue

Open an issue on GitHub →


Content Faq (`docs/content/faq.md`)


title: Frequently Asked Questions toc: true

General

What is Linutil?

Linutil is Chris Titus Tech's Linux Utility — a distro-agnostic TUI toolbox built in Rust for installing apps, configuring your system, and running common Linux setup tasks.

Is Linutil safe to use?

Yes. All scripts are open source and available on GitHub. You can inspect any script before running it. However, always review what a script does before executing it, as some scripts make significant system changes.

What Linux distributions does Linutil support?

Linutil is distro-agnostic — it runs on any modern Linux distribution. Some scripts are distro-specific (Arch, Fedora, Debian, Ubuntu, Alpine), while others work across all distros.

Does Linutil require root/sudo?

Linutil itself does not require root to launch. Individual scripts that make system-level changes will prompt for sudo when needed.


Running Linutil

How do I run Linutil?

bash
curl -fsSL https://christitus.com/linux | sh

What's the difference between the stable and dev branch?

  • Stable (https://christitus.com/linux) — Tested, recommended for daily use
  • Dev (https://christitus.com/linuxdev) — Latest commits, may be unstable

Can I install Linutil permanently?

Yes. It's available via:

  • AUR (Arch): paru -S linutil or paru -S linutil-bin
  • openSUSE: sudo zypper install linutil
  • Cargo: cargo install linutil_tui

The TUI won't open — it says my terminal is too small

Resize your terminal window to be larger, or bypass the size check:

bash
curl -fsSL https://christitus.com/linux | sh -s -- --size-bypass

Scripts & Features

How do I find a specific script in the TUI?

Press / while in the TUI to open the search filter and type part of the script name.

Can I run scripts without the interactive TUI?

Yes, using a TOML config file with auto_execute. See the Automation guide for details.

A script failed — what should I do?

  1. Check the error output shown in the terminal
  2. Make sure your system is fully updated before running scripts
  3. Search GitHub Issues for the same error
  4. Open a new issue if it hasn't been reported

Can I undo changes made by a script?

This depends on the script. Some changes (like installing packages) can be reversed manually. For major system changes, it's good practice to have backups or snapshots beforehand (e.g., using Btrfs + Snapper on Fedora).


Contributing

How can I contribute?

See the Contributing Guide for full details. In short:

  1. Fork and clone the repo
  2. Make your changes (scripts go in the appropriate tabs/ subdirectory)
  3. Test with cargo run
  4. Submit a pull request

How do I add a new script?

Fill out all fields in tab_data.toml for your script, then run cargo xtask docgen to regenerate the documentation. See the Contributing Guide for more.

Where do I report bugs?

Open an issue on GitHub. Include your distro, terminal, and any relevant error output.


Updates

How do I update Linutil?

  • Curl method: Just re-run curl -fsSL https://christitus.com/linux | sh — it always fetches the latest
  • Cargo: Use the built-in Linutil Updater script, or run cargo install --force linutil_tui
  • AUR: paru -Syu linutil
  • openSUSE: sudo zypper update linutil

How do I check what version I'm running?

bash
linutil --version

Where can I see release notes?

On the GitHub Releases page.


Content Dev Architecture (`docs/content/dev/architecture.md`)


title: Architecture & Design weight: 1 toc: true

This document describes how Linutil is structured internally — the crate layout, data model, TUI design, script execution pipeline, and the build tooling.

Workspace Layout

Linutil is a Cargo workspace with three crates:

text
linutil/
├── core/       # linutil_core  — backend library
├── tui/        # linutil_tui   — binary (the TUI you run)
└── xtask/      # build tooling (cargo xtask docgen)

`core/` — `linutil_core`

The library crate. Responsible for:

  • Defining the data model (Tab, ListNode, Command)
  • Parsing all tab_data.toml files and building the menu tree
  • Embedding all scripts into the binary at compile time using include_dir!
  • Extracting embedded scripts to a temp directory at runtime
  • Evaluating preconditions to filter out scripts unsupported on the current system
  • Parsing the user's TOML config file

`tui/` — `linutil_tui`

The binary crate. Responsible for:

  • Setting up the terminal (crossterm alternate screen, raw mode)
  • Running the main event loop
  • Rendering the entire TUI layout via ratatui
  • Handling all keyboard and mouse input
  • Launching scripts in a pseudo-terminal (PTY) via portable-pty
  • Parsing CLI arguments via clap

`xtask/`

Cargo's task runner extension. Run with:

bash
cargo xtask docgen

This reads all tab_data.toml files and generates docs/content/userguide/userguide.md — the auto-generated walkthrough page. Always run this after adding or editing a script entry.


Data Model

The menu is a tree of ListNode items, grouped into named Tabs.

`Tab`

rust
pub struct Tab {
    pub name: String,
    pub tree: Tree<Rc<ListNode>>,
}

Each Tab maps to one top-level category. The five built-in tabs are defined in core/tabs/tabs.toml:

toml
directories = [
    "applications-setup",
    "gaming",
    "security",
    "system-setup",
    "utils"
]

`ListNode`

rust
pub struct ListNode {
    pub name: String,
    pub description: String,
    pub command: Command,
    pub task_list: String,
    pub multi_select: bool,
}

Every item in the TUI is a ListNode. A node is either a directory (has children, command = Command::None) or a leaf command (no children, has a runnable command).

`Command`

rust
pub enum Command {
    Raw(String),       // inline shell command
    LocalFile {        // shell script file
        executable: String,
        args: Vec<String>,
        file: PathBuf,
    },
    None,              // directory node
}
  • Raw — a short command string run directly by the shell
  • LocalFile — a script file whose interpreter is read from the shebang line (e.g. #!/bin/bash)
  • None — marks a category/folder node

Tab Data Format

Each tab is defined by a tab_data.toml file inside core/tabs/<tab-name>/. Example:

toml
name = "Applications Setup"

[[data]]
name = "Communication Apps"

[[data.entries]]
name = "Discord"
description = "Discord is a versatile communication platform..."
script = "communication-apps/discord-setup.sh"
task_list = "I"

[[data.entries]]
name = "Some Inline Command"
description = "Runs a quick command"
command = "echo hello"
task_list = "MP"

Entry Fields

Field Required Description
name Yes Display name shown in the TUI
description No Shown in the description floating window (d key)
script One of Path to a shell script (relative to the tab directory)
command One of Inline shell command string
entries One of Nested sub-entries (makes this node a directory)
task_list No One or more flag codes shown next to the item name
multi_select No Whether this command can be queued in multi-select mode (default: true)
preconditions No Conditions that must pass for the entry to be shown

Task List Flags

Flags shown to the right of each command name, defined in state.rs:

Flag Meaning
D Disk modifications (privileged)
FI Flatpak installation
FM File modification
I Installation (privileged)
K Kernel modifications (privileged)
MP Package manager actions
SI Full system installation
SS Systemd actions (privileged)
RP Package removal

Preconditions

Preconditions let a script declare when it should be visible. If any precondition fails, the entry is hidden from the TUI.

toml
[[data.entries]]
name = "Paru AUR Helper"
script = "paru-setup.sh"

[[data.entries.preconditions]]
matches = true
data = { containing_file = "/etc/os-release" }
values = ["Arch Linux", "Manjaro"]

Precondition Types

Type Checks
environment Whether an environment variable equals one of the given values
containing_file Whether a file's contents contain all of the given strings
command_exists Whether a command is present on $PATH
file_exists Whether a file path exists on disk

The matches field inverts the check when false (i.e. "must NOT match").


Script Embedding

All files under core/tabs/ are embedded into the compiled binary at build time using the include_dir! macro:

rust
const TAB_DATA: Dir = include_dir!("$CARGO_MANIFEST_DIR/tabs");

At runtime, get_tabs() extracts the embedded directory to a system temp directory (/tmp/linutil_scripts_XXXX), and all LocalFile commands reference scripts inside that temp dir. The temp directory is cleaned up automatically when TabList is dropped.

This means a single binary contains everything — no external script files needed after build.


Script Execution Pipeline

When a user selects a command and confirms it:

  1. AppState::handle_confirm_command() creates a RunningCommand from the list of selected Command values
  2. RunningCommand::new() allocates a PTY via portable-pty (NativePtySystem)
  3. The command is spawned inside the PTY as a child process
  4. A reader thread reads output from the PTY master and writes it into a shared Arc<Mutex<Vec>> buffer
  5. An atomic flag (TERMINAL_UPDATED) is set when new output arrives, triggering a TUI redraw
  6. The PTY output is decoded by a vt100 parser and rendered as a PseudoTerminal widget (from tui-term) inside a floating window
  7. The user can scroll up/down to review output, or press Ctrl-C to kill the process
  8. When the process exits, the floating window title changes to SUCCESS (green) or FAILED (red)

Using a real PTY (instead of piped stdio) means scripts that use terminal colors, interactive prompts, or check isatty() work correctly.


TUI Layout

The TUI is rendered by AppState::draw() and divided into these regions:

text
┌──────────────┬────────────────────────────────┐
│   Logo /     │  [ Search bar                ] │
│   Version    ├────────────────────────────────┤
│              │                                │
│  Tab List    │   Item List                    │
│              │                                │
│  System Info │                                │
├──────────────┴────────────────────────────────┤
│   Keyboard hint bar                           │
└───────────────────────────────────────────────┘
  • Left column: Logo (or version label), tab list, system info panel
  • Right column: Search bar (top) + scrollable item list
  • Bottom bar: Context-sensitive keyboard shortcut hints
  • Floating windows: Overlaid on the item list for running commands, previews, descriptions, and confirmation prompts

Focus State Machine

AppState tracks a Focus enum:

State Description
TabList User is navigating the left tab panel
List User is navigating the item list
Search The search bar is active
FloatingWindow A modal is open (preview, description, running command, guide)
ConfirmationPrompt User is being asked to confirm before running a command

Input is dispatched to the currently focused component.


Config File

Linutil reads an optional TOML config file at startup (--config path). The linutil_core::Config struct deserializes it:

rust
pub struct Config {
    auto_execute: Option<Vec<String>>,
    skip_confirmation: Option<bool>,
    size_bypass: Option<bool>,
}

After parsing, auto_execute command names are looked up by name in the loaded TabList (using Tab::find_command_by_name), and the resulting Vec<Rc<ListNode>> is placed directly into selected_commands to be run immediately on startup.


Adding a New Script

  1. Create a shell script in core/tabs/<tab-name>/<category>/your-script.sh
  2. Add an entry to the corresponding tab_data.toml:
toml
[[data.entries]]
name = "Your Script"
description = "What it does."
script = "<category>/your-script.sh"
task_list = "I"
  1. Add preconditions if the script is distro-specific
  2. Run cargo xtask docgen to update the documentation
  3. Run cargo run to test it locally

Key Dependencies

Crate Purpose
ratatui TUI rendering framework
crossterm Cross-platform terminal control (raw mode, events)
portable-pty Pseudo-terminal allocation for running commands
tui-term PTY output rendering widget for ratatui
vt100-ctt VT100 terminal emulator (parses ANSI escape codes)
ego-tree Generic tree structure used for the menu
include_dir Embed entire directory trees into the binary at compile time
serde + toml Deserialize tab_data.toml and config files
clap CLI argument parsing
tree-sitter-bash Bash syntax highlighting in script previews

Content Userguide Walkthrough (`docs/content/userguide/walkthrough.md`)

Walkthrough

Applications Setup

Communication Apps

  • Discord: Discord is a versatile communication platform for gamers and communities, offering voice, video, and text chat features.
  • Jitsi: Jitsi Meet is an open-source video conferencing tool that allows users to host and join secure meetings directly from their web browsers without the need for downloads.
  • Signal: Signal is a privacy-focused messaging app that provides end-to-end encryption for secure text, voice, and video communication.
  • Slack: Slack is a collaboration platform designed for team communication, featuring channels, direct messaging, file sharing, and integrations with various productivity tools.
  • Telegram: Telegram is a cloud-based messaging app known for its speed and security, offering features like group chats, channels, and end-to-end encrypted calls.
  • Thunderbird: Thunderbird is a free, open-source email client that offers powerful features like customizable email management, a built-in calendar, and extensive add-ons for enhanced functionality.
  • ZapZap: ZapZap is an open source whatsapp desktop client for Linux users developed by rafatosta.
  • Zoom: Zoom is a widely-used video conferencing platform that allows users to host virtual meetings, webinars, and online collaboration with features like screen sharing and recording.

Design Tools

  • Ardour: Ardour is a free and open-source digital audio workstation and hard disk recorder.
  • Audacity: Audacity is a free and open-source digital audio editor and recording application software.
  • Blender: Blender is a free and open-source 3D computer graphics software tool set.
  • Darktable: Darktable is a free and open-source photography application and raw developer.
  • GNU Image Manipulation Program (GIMP): GIMP is a free and open-source raster graphics editor. It is commonly used for photo retouching, image editing, free-hand drawing, and converting between different image file formats.
  • Handbrake: HandBrake is a free and open-source transcoder for digital video files.
  • Inkscape: Inkscape is a free and open-source software vector graphics editor.
  • Krita: Krita is a free and open-source raster graphics editor designed primarily for digital art and 2D animation.
  • MyPaint: MyPaint is a free and open-source raster graphics editor for digital painting.
  • Natron: Natron is a powerful, free, and open-source VFX compositing application geared towards digital post-production work.
  • OBS Studio: OBS Studio is a free and open-source, cross-platform screencasting and live streaming software application.
  • Olive: Olive is a free and open-source cross-platform non-linear video editing application.
  • OpenShot: OpenShot Video Editor is a free and open-source video editor.
  • Pinta: Pinta is an open-source, cross-platform bitmap image drawing and editing program inspired by Paint.NET.
  • Scribus: Scribus is free and open-source desktop publishing software available for most desktop operating systems.
  • Synfig Studio: Synfig Studio is a free and open-source vector-based 2D animation software.
  • Tenacity: Tenacity is an easy-to-use, cross-platform multi-track audio editor/recorder.

Developer Tools

  • Cursor: Next-generation AI-powered code editor built on VS Code, designed for enhanced productivity with integrated AI assistance.
  • Github Desktop: GitHub Desktop is a user-friendly application that simplifies the process of managing Git repositories and interacting with GitHub, providing a graphical interface for tasks like committing, branching, and syncing changes.
  • JetBrains Toolbox: JetBrains Toolbox is a collection of tools and an app that help developers work with JetBrains products.
  • Meld: Meld is a visual diff and merge tool that helps compare files, directories, and version-controlled projects.
  • Neovim: Neovim is a refactor, and sometimes redactor, in the tradition of Vim.
    It is not a rewrite but a continuation and extension of Vim.
    This command configures neovim from CTT's neovim configuration.
    https://github.com/ChrisTitusTech/neovim
  • Ngrok: Ngrok is a tool that creates secure, temporary tunnels to expose local servers to the internet for testing and development.
  • Sublime Text: Sublime Text is a fast, lightweight, and customizable text editor known for its simplicity, powerful features, and wide range of plugins for various programming languages.
  • VS Code: Visual Studio Code (VS Code) is a lightweight, open-source code editor with built-in support for debugging, version control, and extensions for various programming languages and frameworks.
  • VS Codium: VSCodium is a free, open-source version of Visual Studio Code (VS Code) that removes Microsoft-specific telemetry and branding.
  • Zed: Zed is a next-generation code editor written in rust, designed for high-performance collaboration with humans and AI.

Office Suites

PDF Suites

Web Browsers

  • Brave: Brave is a free and open-source web browser developed by Brave Software, Inc. based on the Chromium web browser.
  • Brave Origin: Brave Origin is a minimalist version of Brave that strips out optional features like VPN, crypto wallet, Rewards, and Leo AI, keeping only core privacy protections and ad blocking.
  • Chromium: Chromium is an open-source web browser project started by Google, to provide the source code for the proprietary Google Chrome browser.
  • Google Chrome: Google Chrome is a fast, secure, and free web browser, built for the modern web.
  • LibreWolf: LibreWolf is a fork of Firefox, focused on privacy, security, and freedom.
  • Lynx: Lynx is a highly configurable text-based web browser for use on cursor-addressable character cell terminals.
  • Mozilla Firefox: Mozilla Firefox is a free and open-source web browser developed by the Mozilla Foundation.
  • Thorium: Thorium is a Chromium-based browser focused on privacy and performance.
  • Tor Browser: Tor Browser is a free and open-source firefox-based web browser designed for anonymity and censorship circumvention.
  • Vivaldi: Vivaldi is a freeware, cross-platform web browser developed by Vivaldi Technologies.
  • waterfox: Waterfox is the privacy-focused web browser engineered to give you speed, control, and peace of mind on the internet.
  • Zen Browser: Zen Browser is a privacy-focused web browser designed for enhanced security and a seamless browsing experience.
  • Alacritty: Alacritty is a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration. By integrating with other applications, rather than reimplementing their functionality, it manages to provide a flexible set of features with high performance. The supported platforms currently consist of BSD, Linux, macOS and Windows. This command installs and configures alacritty terminal emulator.
  • Android Debloater: Universal Android Debloater (UAD) is a tool designed to help users remove bloatware and unnecessary pre-installed applications from Android devices, enhancing performance and user experience.
  • Bash Prompt: The .bashrc file is a script that runs every time a new terminal session is started in Unix-like operating systems. It is used to configure the shell session, set up aliases, define functions, and more, making the terminal easier to use and more powerful. This command configures the key sections and functionalities defined in the .bashrc file from CTT's mybash repository. https://github.com/ChrisTitusTech/mybash
  • Dank Shell: DankMaterialShell is a complete desktop shell for niri, Hyprland, MangoWC, Sway, labwc, Scroll, Miracle WM, and other Wayland compositors. It replaces waybar, swaylock, swayidle, mako, fuzzel, polkit, and everything else you'd normally stitch together to make a desktop
  • Docker: Docker is an open platform that uses OS-level virtualization to deliver software in packages called containers.
  • Fastfetch: Fastfetch is a neofetch-like tool for fetching system information and displaying it prettily. It is written mainly in C, with performance and customizability in mind. This command installs fastfetch and configures from CTT's mybash repository. https://github.com/ChrisTitusTech/mybash
  • Flatpak / Flathub: Flatpak is a universal application sandbox for Linux that uses isolated packages from Flathub to prevent conflicts and system alterations, while alleviating dependency concerns. This command installs Flatpak and adds the Flathub repository
  • Ghostty: Ghostty is a terminal emulator that has embedded web technologies, allowing for a highly customizable and visually appealing terminal experience.
  • Grub Theme: Installs ChrisTitusTech's Top 5 Bootloader Themes script to allow for easy customization of GRUB.
  • Kitty: kitty is a free and open-source GPU-accelerated terminal emulator for Linux, macOS, and some BSD distributions, focused on performance and features. kitty is written in a mix of C and Python programming languages. This command installs and configures kitty.
  • Linutil Installer: Installs a distro-specific Linutil package locally.
  • Linutil Updater: Updates your local Linutil crate installation.
  • Noctalia Shell: Noctalia is a native Wayland desktop shell for people who want a polished, configurable Linux desktop without stitching together a separate bar, launcher, notification daemon, lock screen, wallpaper tool, and settings UI.
  • Podman: Podman is a daemon-less open platform that uses OS-level virtualization to deliver software in packages called containers.
  • Podman-compose: Podman Compose is a tool for defining and running multi-container applications using Podman.
  • Rofi: Rofi is a window switcher, run dialog, ssh-launcher and dmenu replacement that started as a clone of simpleswitcher, written by Sean Pringle and later expanded by Dave Davenport. This command installs and configures rofi with configuration from CTT's DWM repo. https://github.com/ChrisTitusTech/dwm-titus
  • Shelly: Shelly is a modern, visual, and intuitive interface for your Arch Linux system. Not just a wrapper, but a native ground-up experience.
  • ZSH Prompt: The Z shell is a Unix shell that can be used as an interactive login shell and as a command interpreter for shell scripting. Zsh is an extended Bourne shell with many improvements, including some features of Bash, ksh, and tcsh. This command installs ZSH prompt and provides basic configuration.

Gaming

Emulators

Multi-System Emulators

  • RetroArch Game Emulator: Frontend for emulators, game engines and media players. NO Games or Bios' are included

Nintendo Emulators

  • bsnes: Super Nintendo Emulator. NO Games are included
  • Dolphin Emulator: GameCube and Wii Emulator. NO Games are included
  • Gopher 64: N64 Emulator. NO Games are included
  • MelonDS: Nintendo DS and DSi Emulator. NO Games are included
  • mGBA: Nintendo Game Boy Advance Emulator. NO Games are included
  • Mupen 64 Plus: N64 Emulator. NO Games are included
  • Ryujinx: Nintendo Switch emulator. NO Games are included
  • snes9x: Super Nintendo Emulator. NO Games are included

PlayStation Emulators

  • PCSX2: A Playstation 2 emulator. NO Games or Bios' are included
  • Play!: An Experimental Playstation 2 emulator. NO Games or Bios' are included
  • RPCS3: A Playstation 3 emulator. NO Games or Bios' are included

Sega Emulators

  • Blastem: A Genesis emulator. NO Games are included
  • Flycast: A Dreamcase emulator. NO Games are included
  • Kronos: A Sega Saturn emulator. NO Games are included

Xbox Emulators

  • XEMU: An Original Xbox emulator. NO Games or Bios' are included
  • Xenia: An Experimental Xbox 360 emulator. NO Games or Bios' are included

Tools and Setups

  • Auto CPU Frequency: Automatic CPU speed & power optimizer.
    https://github.com/AdnanHodzic/auto-cpufreq
  • Auto Mount Drive: This utility is designed to help with automating the process of mounting a drive on to your system.
  • Bottles: Bottles allows Windows software, like applications and games, to run on Linux. Bottles also provides tools to categorize, organize and optimize your applications.
  • Gaming Dependencies: Installs gaming runtime dependencies across distributions. Steam and Lutris are managed separately from Game Launchers.
  • ProtonPlus: Manage ProtonPlus installation with native packages first and Flatpak fallback.
  • ProtonUp-Qt: Manage ProtonUp-Qt installation with native packages first and Flatpak fallback.
  • General GPU Drivers: Auto-detects your GPU and installs a recommended driver stack for your distro, with NixOS guidance.
  • Nvidia Drivers & Hardware Acceleration: Opens the Arch-specific NVIDIA installer (kept under System Setup / Arch).
  • Waydroid: Waydroid is an emulator that allows you to run Android apps and games on Linux.

Game Launchers

  • Steam: Manage Steam launcher installation with Install, Uninstall, or Abort actions.
  • Lutris: Manage Lutris launcher installation with Install, Uninstall, or Abort actions.
  • RetroArch: Manage RetroArch launcher installation with Install, Uninstall, or Abort actions.
  • Heroic: Manage Heroic launcher installation with Install, Uninstall, or Abort actions.
  • Arc Raiders Titus Mods: Applies optimized game configuration files from ChrisTitusTech/arc-raiders. Sets Engine.ini to read-only to prevent the game from overwriting the settings, disables motion blur, and enables VRR optimizations.
  • Diablo II Resurrected Loot Filter: Installs a loot filter for Diablo II Resurrected from ChrisTitusTech/d2r-loot-filter. Highlights high runes and other valuable items. Works on Battle.net and single player. After install, add launch option: -mod lootfilter -txt
  • EverQuest Legends MIDI Fix: Configures native Lutris to start a stable FluidSynth MIDI device, maps Wine to it, and loads the SC-55 SoundCanvas bank for EverQuest Legends music. Downloads a verified 177 MiB SoundFont and preserves the original Lutris and Wine registry configuration.
  • Fallout 76 INI and Mods: Installs a custom Fallout76Custom.ini and mods from ChrisTitusTech/fallout76-configs via Steam. Improves performance and stability with quality of life tweaks.
  • Starfield Titus INI and Mods: Installs custom Starfield mods from ChrisTitusTech/starfield-config via steam.

Security

  • FirewallD Firewall Baselines (CTT): Configure FirewallD with CTT's recommended baseline rules for improved system security. For more information visit: https://christitus.com/linux-security-mistakes
  • Lynis Security Audit: Install Lynis when needed, run an elevated system security audit with live results, then optionally remove Lynis.
  • UFW Firewall Baselines (CTT): Developed to ease iptables firewall configuration, UFW provides a user friendly way to create an IPv4 or IPv6 host-based firewall. This command installs UFW and configures UFW based on CTT's recommended rules. For more information visit: https://christitus.com/linux-security-mistakes

System Setup

Alpine

  • Alpine Update: Upgrades Alpine Linux to either latest stable or edge repositories

Arch

  • Arch Server Setup: This command installs a minimal arch server setup under 5 minutes.
  • DWM-Titus: DWM is a dynamic window manager for X.
    It manages windows in tiled, monocle and floating layouts.
    All of the layouts can be applied dynamically, optimising the environment for the application in use and the task performed.
    This command installs and configures DWM and a desktop manager.
    The list of patches applied can be found in CTT's DWM repository
    https://github.com/ChrisTitusTech/dwm-titus
  • Hyprland JaKooLit: Install JaKooLit's Hyprland configuration
  • Install CachyOS Repository and Kernel: To deliver a performance-optimized distribution, CachyOS recompiles Arch Linux packages specifically for the x86-64-v3, x86-64-v4, and Zen4+ architectures.
  • Install Chaotic-AUR Repository: Chaotic-AUR provides prebuilt binaries for popular AUR packages, saving compilation time. To know more visit: https://aur.chaotic.cx/
  • Linux Neptune for SteamDeck: Valve's fork of Linux Kernel for the SteamDeck
  • Nvidia Drivers & Hardware Acceleration: This script installs and configures nvidia drivers with Hardware Acceleration.
  • Omarchy Rice by DHH: Simplified Hyprland configuration by DHH the ruby on rails dude.
  • Paru AUR Helper: Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
  • Virtualization: QEMU, Libvirt, Virt-Manager installation and configuration.
  • Yay AUR Helper: Yet Another Yogurt - An AUR Helper Written in Go. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers

Debian

  • Hyprland JaKooLit: Install JaKooLit's Hyprland configuration

Desktop Environment Setup

  • Install Desktop Environment: This script allows you to install various desktop environments (GNOME, KDE, XFCE, Cinnamon, MATE, Budgie, LXQt, LXDE) and window managers (i3, Sway, DWM, Awesome, BSPWM, Openbox, Fluxbox) using your distro's package manager. The script provides an interactive menu to select your preferred desktop environment or window manager, and handles the installation process automatically.
  • Uninstall Desktop Environment: This script allows you to uninstall desktop environments and window managers that were previously installed. It provides an interactive menu to select which desktop environment or window manager to remove, and handles the uninstallation process automatically.

Fedora

  • Btrfs Assistant, Snapper Config, grub-btrfs: Installs Btrfs Assistant, Snapper, dnf snapper plugin and takes the first root(/) and /home snapshots. Enables snapper-timeline and snapper-cleanup services. Installs Grub-Btrfs. Notice: To perform a system recovery via grub-btrfs, perform a restore operation with Btrfs Assistant GUI after booting into the snapshot. Notice: If you used the default Fedora disk partitioning during OS installation, the /boot configured as an separate EXT4 partition. Therefore, it cannot be included in root snapshots. Backup separately.
  • Configure DNF: Optimizes DNF for parallel downloads
  • Hyprland JaKooLit: Install JaKooLit's Hyprland configuration
  • Multimedia Codecs: This script is designed to install multimedia codecs, and to ensure RPM Fusion repositories are installed.
  • Nvidia Proprietary Drivers: This script is designed to download the proprietary NVIDIA drivers in Fedora.
  • RPM Fusion: RPM Fusion provides software that the Fedora Project or Red Hat doesn't want to ship. That software is provided as precompiled RPMs for all current Fedora versions and current Red Hat Enterprise Linux or clones versions; you can use the RPM Fusion repositories with tools like yum and PackageKit. For more information visit: https://rpmfusion.org/
  • Upgrade to a New Fedora Release: Upgrades system to the next Fedora release
  • Virtualization: Enables Virtualization through dnf

Ubuntu

  • Hyprland JaKooLit: Install JaKooLit's Hyprland configuration
  • Build Prerequisites: This script is designed to handle the installation of various software dependencies across different Linux distributions
  • Enable SSD TRIM: Enable weekly SSD TRIM through systemd's fstrim.timer and run an initial trim. This is the recommended alternative to mounting with the continuous discard option. For more information visit: https://wiki.archlinux.org/title/Solid_state_drive#TRIM
  • Full System Cleanup: This script is designed to remove unnecessary packages, clean old cache files, remove temporary files, and to empty the trash.
  • Full System Update: This command updates your system to the latest packages available for your distro
  • Full System Update (Topgrade): This command uses topgrade to update your system packages, configs, and more from various sources
  • Global Theme: This script is designed to handle the installation and configuration of global theming
  • Remove Snaps: This script is designed to remove snap
  • TTY Fonts: This Script will set the default TTY font to Terminus size 32 Bold

Utilities

Monitor Control

  • Auto Detect Displays: This script is designed to detect and apply recommended configuration for monitors connected with your system
  • Change Orientation: This script is designed to change the orientation of monitors in your system
  • Disable Monitor: This script is designed to disable a monitor in your system
  • Duplicate Displays: This script is designed to duplicate display among multi-monitor setup in your system
  • Enable Monitor: This script is designed to enable a monitor in your system
  • Extend Displays: This script is designed to extend display among multi-monitor setup in your system
  • Manage Arrangement: This script is designed to arrange monitors in multi-monitor setup in your system
  • Reset Scaling: This script is designed to reset scaling of a monitor in your system
  • Scale Monitors: This script is designed to change the scaling of monitors in your system
  • Set Brightness: This script is designed to change the Brightness of monitors connected to your system
  • Set Primary Monitor: This script is designed to set a Primary monitor in your system
  • Set Resolution: This script is designed to change the resolution of monitors connected to your system

Printers

  • CUPS: This script will install the CUPS system, required for most printer drivers on Linux.
  • Epson printer drivers: This script will install the Epson printer drivers.
  • HP printer drivers: This script will install HP printer drivers.

User Account Manager

  • Bluetooth Manager: This utility is designed to manage bluetooth in your system
  • Numlock on Startup: This utility is designed to enable Num Lock at boot, rather than within desktop environments like KDE or GNOME
  • Locale Setup: This allows the user to set their locale
  • Ollama: This utility is designed to manage ollama in your system
  • Ranalama: This utility is designed to manage ramalama in your system
  • Service Manager: This utility is designed to manage services in your system
  • US Locale Setup: This fixes US UTF-8 Locale and Folder listings
  • WiFi Manager: This utility is designed to manage wifi in your system

--- METRICS ---