ISO image file
https://channels.nixos.org/?prefix=nixos-24.05
⇨ latest-nixos-gnome-x86_64-linux.iso [~2.6GB]
• latest-nixos-plasma6-x86_64-linux.iso [~3.2GB]
• latest-nixos-minimal-x86_64-linux.iso [~1.0GB]
Files location: /nix/store
Edit configuration
$ sudoedit /etc/nixos/configuration.nix
or
$ sudo vim /etc/nixos/configuration.nix
or
$ sudo EDITOR=vim nixos-rebuild edit
Only evaluate configuration without building
$ nix-instantiate '<nixpkgs/nixos>' -A system
-A, --attr
Rebuild and activate
$ sudo nixos-rebuild switch
and also set custom boot entry name
$ sudo nixos-rebuild switch -p mybootentryname
or build and activate without adding boot entry
$ sudo nixos-rebuild test
or build and set default boot entry but do not activate
$ sudo nixos-rebuild boot
or build in a sandbox
$ nixos-rebuild build-vm
$ ./result/bin/run-*-vm
Roll back to previous system configuration
$ sudo nixos-rebuild switch --rollback
List generations (build date, version, kernel)
$ nixos-rebuild list-generations
Delete old generations
$ sudo nix-collect-garbage -d
-d, --delete-old
List subscribed update channels
$ sudo nix-channel --list
Update main channel nixos
$ sudo nix-channel --update nixos
or all channels
$ sudo nix-channel --update
Switch to bleeding edge channel
$ sudo nix-channel --add https://channels.nixos.org/nixos-unstable nixos
Upgrade all packages from all channels
$ sudo nixos-rebuild switch --upgrade-all
Upgrade packages from main channel nixos
$ sudo nixos-rebuild switch --upgrade
or in two steps
$ sudo nix-channel --update nixos
$ sudo nixos-rebuild switch
Remove old packages
$ sudo nix-collect-garbage
Optimize store (by creating hard links)
$ nix-store --optimise
List all system packages (every derivation installed)
$ nix-store -q --requisites /run/current-system
-q, --query
-R, --requisites
List dependencies
$ nix-store -q --references /run/current-system/sw
or with cleaner output
$ nix-store -q --references /run/current-system/sw | cut -d'-' -f2- | sort | uniq | less
nix-shell
- temporarily modifies $PATH
- can be used to try software before permanently installing
nix-env
- permanently modifies a local profile of installed packages
- must be updated and maintained by user
- better to use nix-shell or NixOS configuration
Search packages
https://search.nixos.org/packages
Transient package install (destroyed after shell has exited)
$ nix-shell -p terminator
-p, --packages
Imperative (ad-hoc) package install
$ nix-env -iA nixos.terminator
-i, --install
-A, --attr
--dry-run Print what would be done without actually doing it (for --install, --upgrade, --uninstall, --switch-generation, --delete-generations, --rollback operations)
Uninstall package
$ nix-env -e terminator
-e, --uninstall
or remove everything
$ nix-env -e '.*'
Delete unreachable store paths
$ nix-store --gc
--print-live List all store paths reachable from the roots
--print-dead Show paths that would be deleted
Update the channel (before upgrading packages)
$ nix-channel --update nixos
Upgrade a package
$ nix-env --upgrade terminator
or upgrade all packages
$ nix-env -u
-u, --upgrade
Prevent package upgrade
$ nix-env --set-flag keep true terminator
Show installed packages
$ nix-env -q
-q, --query
Show available packages
$ nix-env -qa
-a, --available
or show available including attribute paths
$ nix-env -qaP
-P, --attr-path
List all generations
$ nix-env --list-generations
Roll back last undesirable nix-env action
$ nix-env --rollback
or switch to specific generation
$ nix-env --switch-generation 75
-G, --switch-generation
Delete all generations
$ nix-env --delete-generations old
Delete specific generations
$ nix-env --delete-generations 3 4 8
or keep last 5 generations
$ nix-env --delete-generations +5
Run garbage collector after updates or removals
$ nix-store --gc
Collect garbage without deleting generations
$ nix-collect-garbage
Collect garbage and delete all old generations of all profiles
$ nix-collect-garbage -d
-d, --delete-old
Add NixGL wrapper to launch GL or Vulkan applications
$ nix-channel --add https://github.com/nix-community/nixGL/archive/main.tar.gz nixgl
$ nix-channel --update nixgl
$ nix-env -iA nixgl.auto.nixGLDefault
then run the app
$ ~/.nix-profile/bin/nixGL ~/.nix-profile/bin/kodi
Locate packages providing specific files
$ nix-env -iA nix-index
$ nix-index
$ nix-locate pattern
/etc/nixos/configuration.nix
Set hostname
networking.hostName = "mbp";
Disable firewall
networking.firewall.enable = false;
Set static IP address
{
networking.interfaces.eth0.ipv4.addresses = [ {
address = "192.168.1.2";
prefixLength = 24;
} ];
}
{
networking.defaultGateway = "192.168.1.1";
networking.nameservers = [ "8.8.8.8" ];
}
Enable zram swap [4*1024 (MB) = 4 GB]
zramSwap.enable = true;
swapDevices = [ {
device = "/var/lib/swapfile";
size = 4*1024;
} ];
Enable kernel SysRq
boot.kernel.sysctl."kernel.sysrq" = 1;
Disable PC speaker beep
boot.blacklistedKernelModules = [ "snd_pcsp" ];
Enable laptop thermal control
services.thermald.enable = true;
Enable TLP power management daemon
services.tlp.enable = true;
Prevent sleep (suspend to RAM) when closing laptop lid
services.logind.extraConfig = "HandleLidSwitch=ignore\nHandleLidSwitchExternalPower=ignore";
Enable SSH and X11 Forwarding
services.openssh.enable = true;
services.openssh.settings.X11Forwarding = true;
Enable launching X11 via startx
services.xserver.displayManager.startx.enable = true;
Enable OpenGL and Mesa
hardware.opengl.enable = true;
hardware.opengl.extraPackages = [ pkgs.mesa.drivers ];
Enable KDE Plasma Desktop Environment
services.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true;
Add Plasma desktop/login manager user sddm to video group
users.users.sddm = { extraGroups = [ "video" ]; };
Use Plasma X11 instead of Wayland
services.displayManager.defaultSession = "plasmax11";
Change the name for user account
users.users.myusername = {
isNormalUser = true;
description = "Overlord";
extraGroups = [ "networkmanager" "wheel" ];
};
Select Linux kernel version
{
boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_6_54;
}
Install packages system-wide
environment.systemPackages = with pkgs; [
vim
wget
x11vnc
xorg.xkill
xdotool
gnome.dconf-editor
mc
screen
htop
nmap
inxi
fastfetch
tldr
terminator
brave
];
Enable Flatpak support
{
services.flatpak.enable = true;
}
{
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
xdg.portal.config.common.default = "gtk";
}
Add Flatpak remote and update repo
$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ flatpak update
Enable AppImage support
{
environment.systemPackages = [ pkgs.appimage-run ];
}
Run AppImage
$ appimage-run foo.appimage