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:
Stable Branch (Recommended)
curl -fsSL https://christitus.com/linux | shDev branch
curl -fsSL https://christitus.com/linuxdev | shCLI arguments
View available options by running:
linutil --helpFor installer options:
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 sourcelinutil-bin- Stable release pre-compiledlinutil-git- Compiled from the last commit (not recommended)
by running:
git clone https://aur.archlinux.org/<package>.git
cd <package>
makepkg -siReplace `` with your preferred package.
If you use yay, paru or any other AUR Helper, it's even simpler:
paru -S linutilReplace paru with your preferred helper and linutil with your preferred package.
OpenSUSE
Linutil can be installed on OpenSUSE with:
sudo zypper install linutilCargo
Linutil can be installed via Cargo with:
cargo install linutil_tuiNote 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:
# example_config.toml
auto_execute = [
"Fastfetch",
"Alacritty",
"Kitty"
]
skip_confirmation = true
size_bypass = truelinutil --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:
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
- Architecture & Design - Code structure, data flow, and how Linutil works internally
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:
- Getting Started Guide - How to run Linutil and navigate the TUI
- Application Setup - Installing software via the TUI
- System Setup - Distro-specific setup and configuration
- Features & Utilities - Security, gaming, and utility tools
- Automation - Run Linutil unattended with a config file
Running Linutil
Stable Branch (Recommended)
curl -fsSL https://christitus.com/linux | shDev Branch
curl -fsSL https://christitus.com/linuxdev | shMain 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.
Security
Apply firewall baselines using UFW or FirewallD, following CTT's recommended security rules.
Utilities
Tools for monitor management, printer setup, Bluetooth, WiFi, service management, and more.
Gaming
Install gaming dependencies, manage game launchers, add emulators, and apply game-specific optimizations.
Automation
Run Linutil automatically with a TOML config file for scripted or batch setups.
Quick Links
| 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?
- Documentation: You're reading it! Use the navigation menu
- FAQ: Check Frequently Asked Questions
- Known Issues: Review Known Issues
- Discord: Join the community Discord
- GitHub: Report bugs on GitHub Issues
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
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:
# example_config.toml
auto_execute = [
"Fastfetch",
"Alacritty",
"Kitty"
]
skip_confirmation = true
size_bypass = trueThen run Linutil with your config:
linutil --config /path/to/example_config.tomlOr via the one-liner:
curl -fsSL https://christitus.com/linux | sh -s -- --config /path/to/example_config.tomlConfig 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:
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:
auto_execute = [
"Bash Prompt",
"Fastfetch",
"VS Code",
"Docker",
"ZSH Prompt"
]
skip_confirmation = trueRun it on any new Linux install to get your environment set up in one shot.
Server Setup
auto_execute = [
"Full System Update",
"UFW Firewall Baselines (CTT)",
"Docker"
]
skip_confirmation = trueFinding 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-confirmationtogether withauto_executefor 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
# Check UFW status after running the script
sudo ufw status verboseFirewallD 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.
Stable Branch (Recommended)
curl -fsSL https://christitus.com/linux | shDev Branch (Latest Features)
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)
# Using paru
paru -S linutil
# Using yay
yay -S linutil
# Stable pre-compiled binary
paru -S linutil-binopenSUSE
sudo zypper install linutilCargo
cargo install linutil_tui[!NOTE]
Cargo installs require manual updates viacargo install --force linutil_tui, or use the built-in Linutil Updater script inside the tool.
CLI Arguments
View all available options:
linutil --helpCommon Options
| Flag | Description |
|---|---|
--config / -c |
Path to a TOML config file |
--skip-confirmation |
Skip confirmation prompts |
--size-bypass |
Bypass terminal size requirements |
Navigating the TUI
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 |
Menu Structure
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
- Navigate to Applications Setup
- Browse categories (browsers, developer tools, communication apps, etc.)
- Select an application and press
Enterto run the install script
2. Set Up Your Distro
- Navigate to System Setup
- Find your distribution (Arch, Fedora, Debian, Ubuntu)
- Run distro-specific scripts like AUR helpers, RPM Fusion, or package updates
3. Configure Utilities
- Navigate to Utilities
- 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:
curl -fsSL https://raw.githubusercontent.com/ChrisTitusTech/linutil/main/linutil.sh | shPermission 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:
curl -fsSL https://christitus.com/linux | sh -s -- --size-bypassNext Steps
- Application Setup — Learn about installing software
- System Setup — Distro-specific configuration
- Features & Utilities — Security, gaming, and utilities
- Automation — Run Linutil with a config file
- FAQ — Common questions and answers
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
- Navigate to Applications Setup in the main menu
- Browse categories or search for the app you want
- Select the application and press
Enter - Linutil will run the install script — you may be prompted for your
sudopassword
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 viacargo install linutil_tui, use the Linutil Updater script to keep it current instead of runningcargo install --forcemanually.
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:
curl -fsSL https://christitus.com/linux | shThis 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:
- Run Linutil
- Navigate to Applications Setup
- Select Linutil Updater
- The script will update your local
linutil_tuicrate
Cargo
cargo install --force linutil_tuiArch Linux (AUR)
# Using paru
paru -Syu linutil
# Using yay
yay -Syu linutilopenSUSE
sudo zypper update linutilDev Branch
To test the latest unreleased features, use the dev branch:
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:
linutil --versionRelease 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:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shOr visit rust-lang.org for full instructions.
2. Fork and Clone the Repo
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/linutil.git
cd linutil3. Make Your Changes
- Edit the relevant files
- Run
cargo runto test your changes locally - Ensure everything works as expected before submitting
4. Adding a New Script
If you're adding a new shell script:
- Place it in the appropriate subdirectory under
tabs/ - Fill out all fields in
tab_data.tomlfor your script - Run
cargo xtask docgento 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:
curl -fsSL https://christitus.com/linux | sh -s -- --size-bypassRendering 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:
cargo install --force linutil_tuiActive 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:
curl -fsSL https://christitus.com/linux | shReporting 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
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?
curl -fsSL https://christitus.com/linux | shWhat'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 linutilorparu -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:
curl -fsSL https://christitus.com/linux | sh -s -- --size-bypassScripts & 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?
- Check the error output shown in the terminal
- Make sure your system is fully updated before running scripts
- Search GitHub Issues for the same error
- 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:
- Fork and clone the repo
- Make your changes (scripts go in the appropriate
tabs/subdirectory) - Test with
cargo run - 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?
linutil --versionWhere 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:
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.tomlfiles 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:
cargo xtask docgenThis 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`
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:
directories = [
"applications-setup",
"gaming",
"security",
"system-setup",
"utils"
]`ListNode`
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`
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 shellLocalFile— 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:
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.
[[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:
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:
AppState::handle_confirm_command()creates aRunningCommandfrom the list of selectedCommandvaluesRunningCommand::new()allocates a PTY viaportable-pty(NativePtySystem)- The command is spawned inside the PTY as a child process
- A reader thread reads output from the PTY master and writes it into a shared
Arc<Mutex<Vec>>buffer - An atomic flag (
TERMINAL_UPDATED) is set when new output arrives, triggering a TUI redraw - The PTY output is decoded by a
vt100parser and rendered as aPseudoTerminalwidget (fromtui-term) inside a floating window - The user can scroll up/down to review output, or press
Ctrl-Cto kill the process - When the process exits, the floating window title changes to
SUCCESS(green) orFAILED(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:
┌──────────────┬────────────────────────────────┐
│ 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:
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
- Create a shell script in
core/tabs/<tab-name>/<category>/your-script.sh - Add an entry to the corresponding
tab_data.toml:
[[data.entries]]
name = "Your Script"
description = "What it does."
script = "<category>/your-script.sh"
task_list = "I"- Add preconditions if the script is distro-specific
- Run
cargo xtask docgento update the documentation - Run
cargo runto 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 ---
- Files Extracted: 16
- Estimated Token Budget: ~18520 tokens
- Canonical Reference: https://codewiki.google/github.com/ChrisTitusTech/linutil