{ inputs, outputs, lib, config, pkgs, ... }: { imports = [ ./components/bootloader.nix ./components/networking.nix ./components/packages-base.nix ./components/security.nix ./locales/paris.nix ./programs/neovim.nix ./programs/zsh.nix ./programs/git.nix ./services/sshd.nix ]; nix = { settings = { # Enable flakes and new 'nix' command experimental-features = "nix-command flakes"; # Deduplicate and optimize nix store auto-optimise-store = true; }; # This will add each flake input as a registry # To make nix3 commands consistent with your flake registry = (lib.mapAttrs (_: flake: {inherit flake;})) ((lib.filterAttrs (_: lib.isType "flake")) inputs); # This will additionally add your inputs to the system's legacy channels # Making legacy nix commands consistent as well, awesome! nixPath = ["/etc/nix/path"]; }; environment.etc = lib.mapAttrs' (name: value: { name = "nix/path/${name}"; value.source = value.flake; }) config.nix.registry; nixpkgs = { overlays = [ outputs.overlays.additions outputs.overlays.modifications outputs.overlays.unstable-packages ]; # Unfree packages that can be installes regardless of the mchine's fre software policy config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ # Steam "steam" "steam-original" "steam-run" # Nvidia drivers "nvidia-x11" "nvidia-settings" ]; }; # 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; }; services = { fwupd.enable = true; tailscale.enable = true; }; }