home about
Topics: Ubuntu, Linux, Development Environment, Programming, Productivity

Linux development environment setup

Posted Dec. 1, 2025

Preparation (after OS installation)

  • Install recommended NVIDIA drivers: Open the "Software & Updates" application, navigate to the "Additional Drivers" tab, and select the recommended NVIDIA driver for your GPU. Apply the changes and reboot when prompted. Alternatively, install via terminal:
  • Power Management (Powertop): Linux's battery management on laptops tends to be less optimized than other operating systems. Powertop helps optimize power consumption and extend battery life. Install with:
  • GNOME: I use GNOME desktop environment for simplicity. To further customize and optimize it, install GNOME Tweaks by running: You can use GNOME Tweaks to adjust various settings such as themes, fonts, and extensions to enhance your desktop experience. Here are some of my favorite GNOME extensions:
    • Dash to Dock: Turn the GNOME dash into a nice-looking dock for easier access to applications.
    • Caffeine-NG: Prevents your computer from going to sleep or activating the screensaver when certain applications are running.
    • Blur my Shell: Adds a blur effect to the GNOME shell elements for a sleek look.
    • Vitals: Monitors system resources like CPU, RAM, and network usage directly from the top bar.
  • If you want even more customization, consider KDE Plasma desktop environment. Personally, I prefer GNOME for its simplicity. I've used KDE before when I was still on Debian, but one thing I noticed is that it takes up more power and resources, and since I use a laptop, I prefer to save battery life with GNOME.
  • GDM settings: lock screen customization, auto login, etc. Install GDM settings with:

Basic Rice

Simple GNOME desktop rice using fastfetch. Link to my config: github

GNOME desktop rice
Display any image on the terminal using chafa:

Change Some Default Behaviors

  • Change keybinding: on Linux, copy and paste in the terminal is defaulted as Ctrl+Shift+C and Ctrl+Shift+V. To change it to Ctrl+C and Ctrl+V, open the terminal, then go to the burger menu, then Preferences > Shortcuts, and change the Copy and Paste shortcuts. After changing, restart the terminal. Now, Ctrl+Shift+C will be automatically mapped to cancel command (SIGINT), and Ctrl+C and Ctrl+V will work as expected for copy and paste

    A quick word about Emacs

    Please note that if you change this keybinding, and you're using Emacs, it will interfere with Emacs keybindings in the terminal. For example, Ctrl+C is used for various commands in Emacs. If you want to use Emacs keybindings, you can either keep the default Ctrl+Shift+C and Ctrl+Shift+V for copy and paste, or you can remap the copy and paste shortcuts to something else that doesn't conflict with Emacs.
  • Better Bash autocompletion: Install bash-completion for improved command-line experience: After installation, verify, and then source it: Next, add the following line to your ~/.bashrc file to enable bash-completion automatically on terminal startup: The next thing I did is to enable a menu-style tab completion by adding the following lines to ~/.inputrc : Finally, reload it with: How this works: let's say you're in a folder called UCLA, with the following folders inside: now, when you press CS + Tab, it will rotate through different options of the CS folders. Then simply press enter to select the desired folder.
  • Remap certain keys (optional). One of the annoying things about Laptops made in recent years is that they come with the copilot key, which is located where the right Ctrl key should be. To remap it back to Ctrl, first install keyd to tell which keycode corresponds to the copilot key: After installation, remember to verify with Next, monitor which keycode corresponds to the copilot key by running: Add the following to /etc/keyd/default.conf : Then, reload with

DevOps and Text Editors

  • VSCode: My primary code editor. Simply use the Software Center to install it via snap. If you dislike snap, install with: Settings: on Linux, again, copy and paste is defaulted as Ctrl+Shift+C and Ctrl+Shift+V. To change it back to Ctrl+C and Ctrl+V, go to Settings > Keyboard Shortcuts, and paste the following JSON:

    A quick note about Snap

    Snap is one of the most common criticisms of Ubuntu, mostly because of perceived performance issues. I am not a big fan of it either. That said, it is worth remembering that you don't have to use Snap at all if it does not fit your needs. Like many things in Linux, it comes down to preference and the flexibility to choose what works best for you.
  • Neovim: Terminal-based text editor. Install with:
  • Git: Version control system. Install with:
  • Docker: Containerization platform. Follow the official installation guide:

C and C++ Development Environment

  • Essentials: Core development tools including build-essential, gdb, g++-multilib, and related packages. Install with:
  • CMake and CMake GUI: Build system generator with GUI support for easier project configuration. Install with:
  • Package Managers:
    • Vcpkg: Microsoft's C++ package manager. Install with: Add the export lines to your .bashrc file to make them permanent.
    • Conan: Alternative C++ package manager. Install with:
  • GPU Programming:
    • CUDA Toolkit: GPU programming framework. Follow the installation instructions on the NVIDIA website. After installation, add these lines to your .bashrc: Replace "13.1" with your installed version. Update the environment: to update the environment variables. Verify the installation by running:
    • cuDNN: Deep learning library. Follow the instructions on the NVIDIA cuDNN website.
  • Profiling:
    • Valgrind: Memory debugging, leak detection, and profiling tool. Install with:
    • Perf: Performance analysis tool. Install with:
  • Common Libraries:
    • Boost: Comprehensive C++ library collection. Install with:
    • Eigen: C++ template library for linear algebra. Install with:
    • OpenMPI: Parallel programming framework. Install with:
    • FFTW: Discrete Fourier transform library. Install with:

Python and Anaconda

  • Python: Most Linux distributions include Python by default. Check your version: To prevent pip from installing packages globally (which helps keep your system clean), create a pip configuration file:
  • Anaconda: Python development and package management platform. Download the installer from the Anaconda website and follow the installation instructions. Verify installation: Managing your Anaconda environments:
    • Prevent Auto-Activation: If you don't want the (base) environment to start every time you open a terminal, run:
    • Create a New Environment: To create a new environment with a specific Python version, run:
    • Activate an Environment: To activate an environment, run:
    • Deactivate an Environment: To deactivate the current environment, run:
    Note: The global pip restriction mentioned earlier can interfere with pip usage inside Anaconda environments. To temporarily override it, prefix your pip commands with:

JavaScript and Web

  • Node.js and npm: JavaScript runtime and package manager. Install with:
  • Yarn: Alternative JavaScript package manager. Install with:
  • Cwebp: WebP image conversion tool. Install with: Now, you can convert images to WebP format using the cwebp command. For example:

Rust and Cargo

  • Rust and Cargo: Systems programming language with built-in package manager. Install with:
  • Verify the installation by running:

Engineering Softwares

  • MATLAB: Numerical computing environment. Download from MathWorks and follow their installation instructions. To add MATLAB to your application menu, create ~/.local/share/applications/matlab.desktop with this content: Then, refresh the application menu by running: Note that in some cases, Linux might not let you update or install new packages due to MATLAB installation not having access to root. If that's the case, then you need to give yourself ownership of the MATLAB install: then ensure write permission
  • KiCAD: PCB design software. Install with:
  • LTspice: Circuit simulation tool. LTSpice is mainly a Windows application, but it can be run on Linux using Wine. Follow instruction on how to install wine on Ubuntu on their official website. Next, download and install LTspice (64 bit) using Wine: Next, simply start and run the application with You can also create a desktop shortcut for easier access. First, create the launcher file. Run this command to create a new .desktop file: Then, add the following content to the file: Finally, make it executable
  • Audacity: Audio editing software. Install with:
  • Master PDF Editor: PDF editing software. Installation steps:
    • First, download the installer from the Master PDF Editor website.
    • Next, open the terminal and navigate to the directory where the installer was downloaded, then install it via apt.
    • Then, run the installer with: ./master-pdf-editor-*.run
    • Follow the on-screen instructions to complete the installation.

Other Useful Softwares

  • Firefox
  • Spotify:
  • VLC Media Player: Versatile media player. Install with:
  • ksnip: Equivalent of Window's snipping tool, a screenshot tool with annotation features. Install with:
  • Telegram: Messaging app. Install with:

Final Words

Try not to worry too much about what other people say. Choose what works best for you, but take some time to research before settling on a distro. Some people prefer Arch's rolling release, while I value the stability and long-term support that Ubuntu provides. The best way to learn is by exploring different options and discovering what fits your workflow and preferences. Linux is built around choice and customization, so experiment freely and shape it into something that feels right for you.