NixOS - Programme installieren

Situation

NixOS ist inder der Grundinstallation gestartet und läuft. Nun sollen weitere Programm installiert werden.

Situation

Das Schema , dies zu tun, ist recht übersichtlich.
In einer Datei werden die Eintragungen vorgenommen.
Abschließend wird ein Kommanfo ausgeführt, damit die Eintragungen übernommen werden. Dabei wird die Sofware installiert. Im Bootmenü erscheint dann eine neue Version, die nach einem Neustart automatisch gestartet wird.

Bei dein Eintragungen selbst muss man genau hinschauen. Syntaxfehler schleichen sich schnell ein.

1. Wo wird das eingestellt?

sudo nano /etc/nixos/configuration.nix

2. Wie wird es eingetragen?

Suchen Sie in der Datei nach dem Bereich 'environment.systemPackages'. Dort finden Sie eine Liste, die in eckigen Klammern [ ... ] gefasst ist. Fügen Sie dort einfach den Namen des Programms hinzu.

Das Ganze sieht dann beispielsweise so aus (hier am Beispiel von git, vim und curl):

environment.systemPackages = with pkgs; [
  vim
  git
  curl
  firefox  # Hier werden die neuen Programme untereinander aufgelistet.
];

3. Die Änderung aktivieren

Speichern Sie die Datei (in nano mit Strg+o, Enter und schließen Sie mit Strg+x).

Damit NixOS das Programm nun tatsächlich herunterlädt und installiert, führen Sie diesen Befehl aus:

sudo nixos-rebuild switch

Wichtiger Sonderfall: Unfreie Software (z. B. Steam, Treiber für manche Grafikkarten, Spotify, VS Code)

Einige populäre Programme sind proprietär. Wenn Sie ein solches Programm hinzufügen, wird NixOS beim Aktualisieren Fehlermeldungen ausgeben, weil standardmäßig nur Open-Source-Software erlaubt ist.

Um unfreie Software zu erlauben, fügen Sie folgende Zeile irgendwo in Ihre configuration.nix ein:

nixpkgs.config.allowUnfree = true;

/etc/nixos/configuration.nix

Beispieldatei mit Kommentaren

# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
    ];

  # Bootloader.
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  networking.hostName = "nixos"; # Define your hostname.
  # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.

  # Configure network proxy if necessary
  # networking.proxy.default = "http://user:password@proxy:port/";
  # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";

  # Enable networking
  networking.networkmanager.enable = true;

  # Set your time zone.
  time.timeZone = "Europe/Berlin";

  # Select internationalisation properties.
  i18n.defaultLocale = "de_DE.UTF-8";

  i18n.extraLocaleSettings = {
    LC_ADDRESS = "de_DE.UTF-8";
    LC_IDENTIFICATION = "de_DE.UTF-8";
    LC_MEASUREMENT = "de_DE.UTF-8";
    LC_MONETARY = "de_DE.UTF-8";
    LC_NAME = "de_DE.UTF-8";
    LC_NUMERIC = "de_DE.UTF-8";
    LC_PAPER = "de_DE.UTF-8";
    LC_TELEPHONE = "de_DE.UTF-8";
    LC_TIME = "de_DE.UTF-8";
  };

  # Enable the X11 windowing system.
  services.xserver.enable = true;

  # Enable the Cinnamon Desktop Environment.
  services.xserver.displayManager.lightdm.enable = true;
  services.xserver.desktopManager.cinnamon.enable = true;

  # Configure keymap in X11
  services.xserver.xkb = {
    layout = "de";
    variant = "";
  };

  # Configure console keymap
  console.keyMap = "de";

  # Enable CUPS to print documents.
  services.printing.enable = true;

  # Enable sound with pipewire.
  services.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
  };

  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users."wheezy" = {
    isNormalUser = true;
    description = "wheezy";
    # "cdrom" hinzugefügt, damit Brasero und Sound Juicer brennen/lesen dürfen
    extraGroups = [ "networkmanager" "wheel" "cdrom" ]; 
    packages = with pkgs; [
    #  thunderbird
    ];
  };

  # Install firefox.
  programs.firefox.enable = true;

  # Allow unfree packages
  nixpkgs.config.allowUnfree = true;

  # List packages installed in system profile.
  ### Ich habe mich für eine alphabetische
  ### Sortierung entschieden.
  environment.systemPackages = with pkgs; [
   ausweisapp
   bluefish
   brasero
   cheese
   clementine
   darktable
   filezilla
   flameshot
   gedit
   gimp
   keepassxc
   libreoffice-fresh
   lmms
   mc
   nano
   onlyoffice-desktopeditors   
   signal-desktop
   simple-scan
   sound-juicer
   thunderbird
   vlc
  ];

  system.stateVersion = "26.05"; # Künftige NixOS Version beibehalten

### Akkuschonung Anfang
  # WICHTIG: Den Standard-Dienst deaktivieren, um Konflikte zu vermeiden
services.power-profiles-daemon.enable = false;

# TLP aktivieren und Schwellenwerte setzen (Beispiel: Laden ab 75%, Stopp bei 80%)
services.tlp = {
  enable = true;
  settings = {
    START_CHARGE_THRESH_BAT0 = 75;
    STOP_CHARGE_THRESH_BAT0 = 80;
  };
};
### Akkuschonung Ende

### Bluetooth aktivieren Anfang
  hardware.bluetooth = {
    enable = true;
    powerOnBoot = true; 
  };
### Bluetooth aktivieren Ende

### Bluetooth Stromsparen abschalten Anfang
services.tlp.settings = {
  # Verhindert, dass TLP Bluetooth beim Booten abschaltet
  DEVICES_TO_DISABLE_ON_STARTUP = "";
  DEVICES_TO_ENABLE_ON_STARTUP = "bluetooth";
};
### Buetooth Stromsparen abschalten Ende

### Zweite Platte einbinden Anfang
### Im Rechner ist eine zweite Festplatte, 
### die nachträglich eingebunden werden soll.
### Der Mountpunkt ist bereits eingerichtet.
  fileSystems."/mnt/data" = {
    device = "/dev/disk/by-uuid/87654321-ce8e-5eif-c432-eg36548gfj46"; 
    fsType = "ext4";
    options = [ "users" "nofail" ];
  };
### Zweite Platte einbinden Ende

### Apache Anfang
### Der Webserver soll auf die zweite Festplatte 
### zugreifen. Bei einer Neuinstallation bleiben 
### die Dateien des Webservers erhalten.
services.httpd = {
  enable = true;
  adminAddr = "admin@example.com";
  virtualHosts.localhost = {
    # Hier den Pfad zur zweiten Festplatte eintragen:
    documentRoot = "/mnt/data/hidrive-himmelsrand/webserver/html";
  };
};
### Apache Ende
###letzte schliessende Klammer
}