Syntax error rebuilding configuration.nix that I can't trace back

I’ve been receiving a syntax error that is driving me batty. All of the web searches I’ve made seem to point to a syntax error but I can’t seem to find the source of the error.

Here is the error I’m getting after running ‘sudo nixos-rebuild switch’

error:
       … while evaluating the attribute 'config'

         at /nix/store/iivgp9sjqi3b52bbwzplk5inb3fr9vj7-nixpkgs/nixpkgs/lib/modules.nix:322:9:

          321|         options = checked options;
          322|         config = checked (removeAttrs config [ "_module" ]);
             |         ^
          323|         _module = checked (config._module);

       … while calling the 'seq' builtin

         at /nix/store/iivgp9sjqi3b52bbwzplk5inb3fr9vj7-nixpkgs/nixpkgs/lib/modules.nix:322:18:

          321|         options = checked options;
          322|         config = checked (removeAttrs config [ "_module" ]);
             |                  ^
          323|         _module = checked (config._module);

       (stack trace truncated; use '--show-trace' to show the full trace)

       error: syntax error, unexpected ',', expecting '.' or '='

       at /etc/nixos/configuration.nix:5:9:

            4|
            5| { config, pkgs, ... }:
             |         ^
            6|
building Nix...
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos' does not exist, ignoring
error:
       … while evaluating the attribute 'config'

         at /nix/store/iivgp9sjqi3b52bbwzplk5inb3fr9vj7-nixpkgs/nixpkgs/lib/modules.nix:322:9:

          321|         options = checked options;
          322|         config = checked (removeAttrs config [ "_module" ]);
             |         ^
          323|         _module = checked (config._module);

       … while calling the 'seq' builtin

         at /nix/store/iivgp9sjqi3b52bbwzplk5inb3fr9vj7-nixpkgs/nixpkgs/lib/modules.nix:322:18:

          321|         options = checked options;
          322|         config = checked (removeAttrs config [ "_module" ]);
             |                  ^
          323|         _module = checked (config._module);

       (stack trace truncated; use '--show-trace' to show the full trace)

       error: syntax error, unexpected ',', expecting '.' or '='

       at /etc/nixos/configuration.nix:5:9:

            4|
            5| { config, pkgs, ... }:
             |         ^
            6|
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos' does not exist, ignoring
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos' does not exist, ignoring
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos' does not exist, ignoring
building the system configuration...
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels/nixos' does not exist, ignoring
error:
       … while evaluating the attribute 'config.system.build.toplevel'

         at /nix/var/nix/profiles/per-user/root/channels/nixpkgs/lib/modules.nix:322:9:

          321|         options = checked options;
          322|         config = checked (removeAttrs config [ "_module" ]);
             |         ^
          323|         _module = checked (config._module);

       … while calling the 'seq' builtin

         at /nix/var/nix/profiles/per-user/root/channels/nixpkgs/lib/modules.nix:322:18:

          321|         options = checked options;
          322|         config = checked (removeAttrs config [ "_module" ]);
             |                  ^
          323|         _module = checked (config._module);

       (stack trace truncated; use '--show-trace' to show the full trace)

       error: syntax error, unexpected ',', expecting '.' or '='

       at /etc/nixos/configuration.nix:5:9:

            4|
            5| { config, pkgs, ... }:
             |         ^
            6|

I’ve spent hours combing over the configuration.nix to see if there is a missing semi-colon or bracket somewhere but there doesn’t seem to be.

Here is my configuration.nix file:

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 = "America/Los_Angeles";

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

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

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

  # Enable the GNOME Desktop Environment.
  services.xserver.displayManager.gdm.enable = true;
  services.xserver.desktopManager.gnome.enable = true;

  # Configure keymap in X11
  services.xserver = {
    layout = "us";
    xkbVariant = "";
  };

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

  # Enable sound with pipewire.
  sound.enable = true;
  hardware.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    # If you want to use JACK applications, uncomment this
    #jack.enable = true;

    # use the example session manager (no others are packaged yet so this is enabled by default,
    # no need to redefine it in your config for now)
    #media-session.enable = true;
  };

  # Enable touchpad support (enabled default in most desktopManager).
  # services.xserver.libinput.enable = true;

  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.kvasir = {
    isNormalUser = true;
    description  = "kvasir";
    extraGroups = [ "networkmanager" "wheel" ];
    packages = with pkgs; [
      firefox
      #thunderbird
    ];
  };

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

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
  thunderbird
  #  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
  #  wget
  ];

  # Some programs need SUID wrappers, can be configured further or are
  # started in user sessions.
  # programs.mtr.enable = true;
  # programs.gnupg.agent = {
  #   enable = true;
  #   enableSSHSupport = true;
  # };

  # List services that you want to enable:

  # Enable the OpenSSH daemon.
  # services.openssh.enable = true;

  # Open ports in the firewall.
  # networking.firewall.allowedTCPPorts = [ ... ];
  # networking.firewall.allowedUDPPorts = [ ... ];
  # Or disable the firewall altogether.
  # networking.firewall.enable = false;

  # This value determines the NixOS release from which the default
  # settings for stateful data, like file locations and database versions
  # on your system were taken. It‘s perfectly fine and recommended to leave
  # this value at the release version of the first install of this system.
  # Before changing this value read the documentation for this option
  # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
  system.stateVersion = "23.11"; # Did you read the comment?
}

Can anybody point me in the right direction? Much thanks to anybody that can!

<3

You removed the comment marker from the first line of your file.

Oh my! I was starting from

{ config, pkgs ... }

and didn’t even think to look above it!

Thank you so much, much appreciated. Now I can pop a few tylenol after ramming my head into this brick wall for a silly amount of time :smiley:

:slight_smile:

Adding something to your editor to visualize eval for you can help prevent this kind of thing, nixd looks to be the most fully-featured nix language server at the moment.

Hmm, I’ll have to look into that. Is there a good tutorial on nixd? I just tried to test drive it with nix-shell -p nixd, but when I ran nano it didn’t seem to be working.

I’m thinking I have to configure nano to work with it somehow. I’m still feeling my way through all of this, it’s been years and years since i really configured a Linux system, and definitely never had any exposure to Nix until now. I’m digging it though, it’s really innovative and refreshing, especially being stuck in Windows hell for so long (mostly out of laziness lol).

nano sadly doesn’t inplement the language server interface. You’ll need a real editor/IDE like vscode, emacs, neovim & co.

I’d really suggest vscode for editing nix if you’ve not used full-featured editors much - as much as I prefer emacs, that’s after decades of learning how to use it :wink: