Skip to content

System Applications

NullString1 edited this page Jan 13, 2026 · 1 revision

System Applications

System-level packages installed globally in NullOS.

Overview

System packages are installed via NixOS configuration and available to all users. They're defined in modules/software/packages.nix.

Rebuild command:

sudo nixos-rebuild switch --flake .#yourhostname

Current System Packages

Core System Tools

File Management:

  • p7zip - Archive compression (.7z, .zip, etc.)
  • gdu - Graphical disk usage analyzer
  • dysk - Modern disk usage utility
  • eza - Modern ls replacement with colors and icons

System Monitoring:

  • btop - Resource monitor (CPU, RAM, disk, network)
  • inxi - System information tool
  • lm_sensors - Hardware temperature monitoring
  • nvtopPackages.full - GPU monitoring for NVIDIA

Text Processing:

  • ripgrep - Fast grep alternative
  • fd - Fast find alternative
  • jq - JSON processor
  • yq-go - YAML processor

Network Tools:

  • nmap - Network scanner
  • nettools - Basic network utilities
  • openfortivpn - Fortinet VPN client
  • wget - File downloader
  • curl - Data transfer tool

Development Tools

Build Tools:

  • gcc - GNU Compiler Collection
  • gnumake - Make build tool
  • cmake - Cross-platform build system

Android Development:

  • android-tools - ADB and fastboot
  • Android Studio (via separate module)

Version Control:

  • git - Version control system
  • gh (via home-manager) - GitHub CLI

Analysis Tools:

  • binwalk - Binary file analysis
  • hexdump - Hex viewer
  • hexedit - Hex editor

Multimedia

Image Viewing:

  • eog - Eye of GNOME image viewer

Video Editing:

  • ffmpeg - Command-line video/audio editing
  • obs-studio - Screen recording and streaming

Media Libraries:

  • mesa-demos - OpenGL demos and utilities

Desktop Applications

Productivity:

  • obsidian - Note-taking application
  • Browser (configured via variables.nix)

Databases:

  • dbgate - Universal database client

Communication:

  • telegram-desktop - Telegram messenger

Utilities

System:

  • brightnessctl - Screen brightness control
  • libnotify - Desktop notifications
  • killall - Process termination utility
  • appimage-run - AppImage support
  • pciutils - PCI utilities (lspci)
  • usbutils - USB utilities (lsusb)

File Systems:

  • ntfs3g - NTFS support
  • exfat - exFAT support

Fun:

  • lolcat - Colorful terminal output
  • cmatrix - Matrix-style terminal screensaver

Package Categories

Security & Privacy

environment.systemPackages = with pkgs; [
  gnupg
  pass  # Password manager
];

Configured via:

programs.gnupg.agent = {
  enable = true;
  enableSSHSupport = true;
};

Virtualization

Docker and VM support configured separately in modules/services/virtualisation.nix:

virtualisation = {
  docker.enable = true;
  libvirtd.enable = true;
};

Packages:

  • docker
  • docker-compose
  • virt-manager (if enabled)

Gaming

Configured in modules/software/steam.nix:

programs.steam = {
  enable = true;
  remotePlay.openFirewall = true;
  gamescopeSession.enable = true;
};

programs.gamemode.enable = true;

Packages:

  • steam
  • gamemode
  • mangohud

Programs vs Packages

Program Modules

Some applications have dedicated program modules:

programs = {
  neovim = {
    enable = true;
    defaultEditor = true;
  };
  
  hyprland.enable = true;
  hyprlock.enable = true;
  
  dconf.enable = true;
  seahorse.enable = true;  # GNOME keyring GUI
  
  fuse.userAllowOther = true;
  
  direnv = {
    enable = true;
    enableZshIntegration = true;
    silent = true;
  };
};

Benefits:

  • Additional configuration options
  • System integration
  • Service management

Simple Packages

Packages without special configuration:

environment.systemPackages = with pkgs; [
  vim
  wget
  htop
];

Adding System Packages

Step 1: Find Package

Search on https://search.nixos.org/packages or:

nix search nixpkgs package-name

Step 2: Edit Configuration

Add to modules/software/packages.nix:

environment.systemPackages = with pkgs; [
  # Existing packages...
  
  # Add new package
  your-package
];

Step 3: Rebuild

sudo nixos-rebuild switch --flake .#yourhostname

System vs Home Packages

When to Use System Packages

System-level:

  • Required by multiple users
  • System services dependencies
  • Low-level tools (drivers, kernel modules)
  • Security tools
  • Virtualization

When to Use Home Manager

User-level:

  • Desktop applications
  • Personal productivity tools
  • Development tools
  • Dotfile configurations

Package Organization

Current Structure

environment.systemPackages = with pkgs; [
  # System monitoring
  btop
  inxi
  
  # File management
  p7zip
  gdu
  
  # Development
  android-tools
  binwalk
  
  # Multimedia
  ffmpeg
  eog
  
  # Network
  nmap
  wget
  
  # Utilities
  brightnessctl
  killall
];

Recommended Organization

environment.systemPackages = with pkgs; 
  # Core utilities
  let
    coreUtils = [
      vim
      git
      wget
    ];
    
    monitoring = [
      btop
      inxi
      lm_sensors
    ];
    
    multimedia = [
      ffmpeg
      eog
    ];
  in
  coreUtils ++ monitoring ++ multimedia;

Conditional Packages

Per-Machine Packages

environment.systemPackages = with pkgs; [
  # Common packages
  vim
  git
] ++ lib.optionals (vars.hostname == "nslapt") [
  # Laptop only
  powertop
  tlp
] ++ lib.optionals (vars.hostname == "nspc") [
  # Desktop only
  obs-studio
];

GPU-Specific

environment.systemPackages = with pkgs; [
  # Common
  mesa
] ++ lib.optionals vars.useNvidiaPrime [
  # NVIDIA tools
  nvtopPackages.full
  nvidia-system-monitor
];

Special Packages

Unfree Packages

Already enabled in NullOS:

nixpkgs.config.allowUnfree = true;

Examples:

  • vscode
  • discord
  • spotify
  • steam

Broken/Insecure Packages

Override if needed:

nixpkgs.config = {
  allowUnfree = true;
  allowBroken = true;  # Not recommended
  allowInsecure = true;  # Not recommended
  
  permittedInsecurePackages = [
    "specific-package-version"
  ];
};

Package Versions

Stable vs Unstable

NullOS uses unstable by default but includes stable overlay:

# Use stable version
environment.systemPackages = [
  pkgs.stable.firefox
];

Specific Version

Pin to specific commit:

# In flake.nix inputs
nixpkgs-old.url = "github:nixos/nixpkgs/commit-hash";

# Use
environment.systemPackages = [
  inputs.nixpkgs-old.legacyPackages.${system}.package
];

Removing Packages

Edit modules/software/packages.nix and remove the line:

environment.systemPackages = with pkgs; [
  vim
  git
  # removed-package  # Delete this line
];

Rebuild:

sudo nixos-rebuild switch --flake .#yourhostname

Default Applications

File Associations

xdg.mime.defaultApplications = {
  "text/html" = "firefox.desktop";
  "x-scheme-handler/http" = "firefox.desktop";
  "x-scheme-handler/https" = "firefox.desktop";
  "application/pdf" = "okular.desktop";
  "image/png" = "eog.desktop";
};

Default Editor

programs.neovim = {
  enable = true;
  defaultEditor = true;
};

# Or set directly
environment.variables.EDITOR = "nvim";

Performance Considerations

Build Time

System packages are built during nixos-rebuild:

  • More packages = longer rebuild time
  • Use binary cache when possible
  • Consider moving some to home-manager

Disk Space

Check package sizes:

nix path-info -Sh /run/current-system

Optimize store:

sudo nix-store --optimise

Troubleshooting

Package Not Found

# Search for package
nix search nixpkgs package-name

# Check attribute path
nix eval nixpkgs#package.meta.description

Build Failed

# Check build log
nix log /nix/store/failed-build

# Try stable version
pkgs.stable.package

Conflicts

# Check what provides command
which command
type command

# Use different attribute
pkgs.package-specific

Complete Package List

View all installed system packages:

# Current generation
nix-store -q --requisites /run/current-system | grep -v '\.drv$'

# Or simpler
nix-env -qa --installed '*' --profile /nix/var/nix/profiles/system

Next Steps

Clone this wiki locally