{ lib, config, pkgs, machineInfos, modulesPath, ... }: with lib; { imports = [ ./filesystem.nix ./boot.nix ./linux.nix ./nix.nix ./network.nix ./hardware.nix ./users.nix (modulesPath + "/installer/scan/not-detected.nix") ]; options.machineType = mkOption { type = types.enum [ "workstation" "server" ]; default = "workstation"; example = "server"; description = '' What is the type of this machine. ''; }; options.isProfessional = mkOption { type = types.bool; default = false; example = true; description = '' Whether or not this machine is used for professionnal purposes. ''; }; options.enableDocker = mkOption { type = types.bool; default = false; example = true; description = '' Whether or not to enable the docker stack. ''; }; config = { machineType = machineInfos.machineType; system.stateVersion = machineInfos.stateVersion; networking.hostName = machineInfos.hostname; virtualisation.docker.enable = config.enableDocker; # Only enable fish shell if there is at least one user using it. programs.fish.enable = builtins.any (user: user.shell == pkgs.fish) (builtins.attrValues config.machineUsers); # We always want to disable the X server as only workstation use windows manager # and they always use wayland. services.xserver.enable = false; assertions = [ { assertion = !(config.machineType == "server" && config.isProfessional); message = "Only workstations can be professionnal hardware"; } ]; }; }