jc-gentoo-portage - An opinionated, performance-oriented Gentoo Portage /etc/portage configuration

The jc-gentoo-portage repository houses an opinionated, performance-oriented Gentoo Portage (/etc/portage) configuration. This repository can be used as an inspiration to build a lean and fast Gentoo operating system. Features: Maximizes execution performance across the system by globally enabling xs, asm, orc, jit, and threads, forcing packages to use hand-written assembly routines and JIT compilation loops. Disables telemetry and remote RPC calls by globally setting -telemetry, -geoclue, -geolocation, -cloudproviders, -google, and -gnome-online-accounts. Optimizes Rust compiler outputs by enforcing modern instruction sets via target-cpu=native, opt-level=3, and strip=symbols. Links long-running daemons and high-throughput parsing utilities against jemalloc to guarantee flat memory profiles and … Continue reading

A Shell Script that Configures the GNOME Desktop Programmatically

The jc-gnome-settings repository provides the jc-gnome-settings.sh script, which holds James Cherti's settings to customize the GNOME desktop environment, including window management, notifications, desktop behavior, keyboard settings, and more, to enhance the user experience. Requirements gsettings Usage Clone the repository: git clone https://github.com/jamescherti/jc-gnome-settings Navigate to the repository directory: cd jc-gnome-settings Run the script to configure GNOME: ./jc-gnome-settings.sh Author and License The jc-gnome-settings tool has been written by James Cherti and is distributed under terms of the MIT license. Links jc-gnome-settings @GitHub Other projects by the same author: jc-dotfiles @GitHub: A collection of UNIX/Linux configuration files. You can either install them directly … Continue reading

A Shell Script that Automates XFCE Desktop Configuration

The jc-xfce-settings project provides the jc-xfce-settings.sh script, which holds James Cherti's settings to customize the XFCE desktop environment, including window management, notifications, desktop behavior, keyboard settings, and more, to enhance the user experience. (The jc-xfce-settings.sh script was created with the help of watch-xfce-xfconf) Requirements The XFCE Desktop Environment, and xfconf-query utility that is part of XFCE. Usage Clone the repository: git clone https://github.com/jamescherti/jc-xfce-settings Navigate to the repository directory: cd jc-xfce-settings Run the script to configure XFCE: ./jc-xfce-settings.sh Features Title Bar Customization: Simplifies button layout for easier window management. Font and Display Settings: Enables anti-aliasing, hinting, and configures RGBA rendering. File … Continue reading

ansible-role-flatpak - An Ansible role that configures Flatpak, adds Flathub as a remote repository, and manages Flatpak packages and updates

The ansible-role-flatpak Ansible role installs and configures Flatpak, adds Flathub as a remote repository, and optionally manages Flatpak packages and updates. This role supports specific Linux distributions: Debian-based, Gentoo, and Arch Linux. Requirements Supported operating systems: Debian/Ubuntu (and their derivatives), Gentoo, or Arch Linux. Ansible collections: community.general Role Variables The following variables can be set to customize the role's behavior: Variable Description Default flatpak_packages List of Flatpak packages to install. [] flatpak_update_script Whether to enable automatic daily updates and cleanup of Flatpak packages. false flatpak_update_script_cmd_prefix Optional prefix command to run before the Flatpak update command (e.g., nice, ionice). '' flatpak_update_script_cmd_suffix … Continue reading

How Breaking Windows 30 Years Ago Turned Me Into a Software Developer and Linux Professional

Every technology professional has an origin story. Mine began in 1995, centered around a Packard Bell corner computer running Windows 95. This beige chassis dominating the desk instantly transports me back to the very beginning of my career. I do not just see outdated hardware; I feel a profound nostalgia for the quiet, uninterrupted hours I spent discovering the inner workings of operating systems and programming languages. That computer was my gateway into the digital realm. First programming language The idea of computers controlling vehicles and medical devices remotely with artificial intelligence, as depicted in the science-fiction movies I watched … Continue reading

update-iptables - A low-level Linux firewall for advanced users

The update-iptables script implements a firewall for managing network traffic and routing. It supports a modular configuration model through drop-in scripts located in /etc/update-iptables.d/. Each file is a shell script executed sequentially during firewall initialization. This low-level firewall script is intended for Linux system administrators who require precise control over packet states, network address translation, and custom routing chains. Rules are defined directly through iptables without the abstraction layers commonly introduced by modern firewall management tools. If this low-level firewall proves useful, please support the project by ⭐ starring update-iptables on GitHub, helping more developers discover it. Requirements bash iptables … Continue reading

ansible-role-auto-upgrade - Ansible role for automated upgrades of Linux systems

The ansible-role-auto-upgrade Ansible role automates regular upgrades of supported operating systems: - Debian-based systems (e.g., Ubuntu, Debian, Linux Mint). This role provides a simpler alternative to unattended-upgrades for applying system updates. (In future versions, Arch Linux and Gentoo will also be supported.) License Copyright (c) 2025-2026 James Cherti. Distributed under terms of the MIT license. Do you like ansible-role-auto-upgrade? Please star ansible-role-auto-upgrade on GitHub. Links The GitHub repository of 'auto-upgrade'

ansible-role-reniced - An Ansible role that configures reniced

The ansible-role-reniced Ansible role configures reniced on Debian and Ubuntu based operating systems. Customizations When reniced_conf is defined, it is used as the configuration content. Include the role using: - name: Import role reniced when: ansible_facts.os_family == "Debian" ansible.builtin.import_role: name: reniced Variables: reniced_conf: | # high prio network services 0 ^apache 0 ^nfsd 0 ^ntpd 0 ^openvpn 0 ^portmap 0 ^ppp 0 ^rpc. 0 ^sshd # medium prio network services 5 ^inn$ 5 ^mysqld # low prio network services 15i ^amavisd-new 15i ^clamd 15 ^controlchan 15 ^exim4 15 ^freshclam 15 ^innwatch 12 ^mailman 15 ^rc.news 15i ^spamd # long running … Continue reading

The Importance of Backups: Why Failing to Create or Test Them Leads to Regret

Data loss is an inevitable reality in the digital age. It is not a matter of "if," but "when." Whether you're managing critical infrastructure for a large enterprise or simply storing personal documents, photos, and legal files on your own computer, the risk of data loss is ever-present. Despite this, many people and organizations fail to prioritize backups until it is too late. Throughout my career as an IT specialist, I have witnessed this problem repeatedly. The pattern is always the same: individuals and companies lose data, panic ensues, and attempts are made to recover what could have been easily … Continue reading

Pathaction | A universal Makefile for any file in the filesystem: Rule-driven commands for any file or directory

The pathaction tool is a flexible command-line utility for running commands on files and directories. Pass a file path as an argument, and the tool handles the rest, whether you are working with code, media, or configurations. Think of pathaction like a Makefile for any file or directory in the filesystem. It uses a .pathaction.yaml file to determine which command to run, and you can use Jinja2 templating to make those commands dynamic. You can also use tags to define multiple actions for the exact same file type. For example, you can set up one tag to run a script, … Continue reading

13 Useful GNOME Shell Extensions for a Better Desktop Experience (Available in the official Debian repositories or on the GNOME Extensions website for other distributions)

GNOME Shell offers a clean and modern UI, but it often lacks functionality desired by power users and those coming from other desktop environments. GNOME Shell extensions provide a way to restore or add features to your desktop. In this article, you’ll explore some of the most useful GNOME Shell extensions available directly from the official Debian repositories via apt (available in Debian Bookworm and newer). For users running distributions other than Debian, this article provides a link to the GNOME Shell Extensions page for each extension, allowing installation on any supported distribution. Extension Management The GNOME Shell Extension Prefs … Continue reading

Installing Arch Linux onto a separate partition from an existing Debian-based distribution (Ubuntu, Debian, Linux Mint...), without using the Arch Linux installation media

Installing Arch Linux typically begins with booting from official installation media. However, it is also possible to bootstrap an Arch Linux installation from within a running Debian-based system (Ubuntu, Debian, Linux Mint, etc.). This method is advantageous in environments where rebooting into live media is impractical or when remote installation is desired. This article outlines a workflow for installing Arch Linux from a Debian-based system using pacman, pacstrap, arch-chroot, and pacman-key. Prerequisites Ensure your Debian system has the necessary tools to begin the installation process: This command installs the Arch Linux bootstrap tools, makepkg, the pacman package manager, and required … Continue reading

Bash shell: Interactive Menu to Insert any String from the Tmux Scrollback Buffer Into the Shell Prompt

Imagine you're working in a tmux session, navigating logs, editing config files, or running commands, and you suddenly need to reuse a path, a variable name, or a keyword that appeared earlier on the tmux scrollback buffer. Instead of scrolling back or retyping it manually, you press Ctrl-n, type a few fuzzy letters, press enter, and the desired string from the tmux scrollback is instantly inserted at your cursor. The tmux scrollback buffer is the internal history of terminal output that tmux maintains for each pane. It consists of the lines that have scrolled off the visible screen but are … Continue reading

Linux: Setting the default GDM login monitor in a multi-monitor setup using GNOME display settings

If you're using a multi-monitor setup with GDM (GNOME Display Manager) and the login screen consistently appears on the wrong monitor, this article presents a tested solution that can be applied either manually or automated, ensuring that the GDM monitor configuration matches that of your primary user setup. The issue Consider the following scenario: You have two monitors connected to an Nvidia graphics card, and despite setting the primary monitor correctly in GNOME, the GDM login screen still appears on the secondary monitor. Even if the secondary monitor is turned off, GDM continues to display the login prompt there, as … Continue reading

Configuring Linux on a ThinkPad T420s Laptop (Debian, Ubuntu, Linux Mint...)

ThinkPad T420s laptops, despite their age, remain reliable for web browsing, word processing, and various other tasks. Linux can breathe new life into such dated computers, allowing them to perform efficiently. I configured one of these laptops for my son, and he is now able to do his homework using it. With proper configuration, ThinkPad laptops can achieve optimal performance and power management. This article provides a guide to configuring X11/Xorg, kernel parameters, firmware, fan control, and power management settings to optimize the ThinkPad t420s for modern use. Some instructions in this article are specific to Debian/Ubuntu-based distributions, but they … Continue reading