{ config, pkgs, lib, inputs, ... }: { imports = let ifExists = p: if builtins.pathExists p then p else {}; in [ ./cachix.nix # update with `cachix use --mode nixos -d . FOOBAR` ./secrets ./profiles/locale-no.nix ./profiles/upgrade-diff.nix ./profiles/lix.nix # results of 'nixos-generate-config' # nice to have if i just dump this flake into /etc/nixos on a clean install (ifExists ./configuration.nix ) (ifExists ./hardware-configuration.nix ) # TODO: move somewhere smart { options.virtualisation.isVmVariant = lib.mkOption { type = lib.types.bool; default = false; }; config.virtualisation.vmVariant = { virtualisation.isVmVariant = true; }; } ]; nixpkgs.overlays = [ (import ./overlays/wl-clipboard-timeout.nix) ]; nixpkgs.config.permittedInsecurePackages = [ pkgs.pulsar.name pkgs.zotero.name pkgs.gitea.name ]; environment.systemPackages = with pkgs; [ ddrescue gptfdisk ms-sys nvme-cli parted pciutils smartmontools testdisk usbutils ] ++ lib.optionals (builtins.elem config.nixpkgs.system [ "x86_64-linux" "aarch64_linux"]) [ cage weston ]; # TODO: selectively whitelist nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfreePredicate = pkg: true; nixpkgs.config.nonfreeLicensing = true; # used by ffmpeg hardware.enableRedistributableFirmware = true; boot.initrd.systemd.enable = true; # systemd manages initfs boot, systemd-analyse can see what happened # https://discourse.nixos.org/t/what-to-do-with-a-full-boot-partition/2049 # raise to 15 if auto upgrading boot.loader.grub.configurationLimit = lib.mkDefault 5; boot.loader.systemd-boot.configurationLimit = lib.mkDefault 5; boot.loader.generic-extlinux-compatible.configurationLimit = lib.mkDefault 5; networking.firewall.enable = true; # default #networking.nftables.enable = true; # wirewall backend, instead of iptables, breaks docker which uses iptables #networking.firewall.allowPing = false; #networking.networkmanager.wifi.backend = "iwd"; # default is wpa_supplicant, iwd doesn't support eduroam #system.switch.enable = false; #system.switch.enableNg = true; # rewritten in rust sops.secrets.nix-access-tokens = {}; sops.secrets.nix-access-tokens-all.mode = "0440"; sops.secrets.nix-access-tokens-all.group = config.users.groups."keys".name; nix.extraOptions = '' !include ${config.sops.secrets.nix-access-tokens.path} !include ${config.sops.secrets.nix-access-tokens-all.path} ''; nix.settings.experimental-features = [ "nix-command" "flakes" /* "pipe-operator" # not supported on lix 2.91 */ ]; #nix.settings.allowed-users = [ "@builders" ]; # TODO: this nix.settings.allowed-users = [ "root" "pbsds" "@wheel" ]; # default is [ "*" ] nix.settings.trusted-users = [ "root" "pbsds" "@wheel" ]; nix.settings.keep-derivations = true; # keep .drv in store, great with nix-diff nix.settings.auto-optimise-store = true; # deduplicate with hardlinks, expensive. Alternative: nix-store --optimise nix.settings.max-silent-time = 3600; #nix.settings.keep-failed = true; # fills up $TMPDIR nix.settings.log-lines = 35; #nix.optimize.automatic = true; # periodic optimization nix.gc.automatic = true; nix.gc.dates = "weekly"; nix.gc.options = lib.mkIf config.system.autoUpgrade.enable "--delete-older-than 15d"; nix.settings.min-free = 3 * 1024 * 1024 * 1024; # starts cg nix.settings.max-free = 20 * 1024 * 1024 * 1024; # condition to end gc triggered by min-free services.thermald.enable = lib.all (x: x) [ (config.nixpkgs.system == "x86_64-linux") (!config.boot.isContainer or false) ]; # no acme in VM mode: virtualisation.vmVariant = { security.acme.defaults.server = "https://127.0.0.1"; security.acme.preliminarySelfsigned = true; }; # set VM root password in VM mode virtualisation.vmVariant = { users.users.root.initialPassword = "root"; }; # fix VM networking, disable static IPs virtualisation.vmVariant = { networking.interfaces = lib.mkForce {}; networking.defaultGateway = lib.mkForce null; networking.nameservers = lib.mkForce []; networking.networkmanager.enable = lib.mkForce false; networking.useDHCP = lib.mkForce true; }; # System fonts # Nice to have when X-forwading on headless machines fonts.fontDir.enable = true; # creates /run/current-system/sw/share/X11/fonts fonts.enableDefaultPackages = true; # dejavu, freefont, gyre, liberation, unifont, noto-fonts-emoji fonts.packages = with pkgs; [ noto-fonts # includes Cousine noto-fonts-cjk-sans noto-fonts-cjk-serif noto-fonts-emoji noto-fonts-extra ]; }