Files
frank-nix/hosts/shared/nixos.nix
T

330 lines
6.8 KiB
Nix

{
config,
pkgs,
lib,
inputs,
...
}:
let
unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system};
in
{
boot = {
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
systemd-boot.configurationLimit = 10;
timeout = 0;
};
consoleLogLevel = 3;
extraModulePackages = [ config.boot.kernelPackages.kvmfr ];
kernelParams = [
"quiet"
"rd.udev.log_level=3"
"rd.systemd.show_status=auto"
"kvmfr.static_size_mb=128"
];
initrd = {
verbose = false;
kernelModules = [
"vfio"
"vfio_pci"
"vfio_iommu_type1"
"kvmfr"
];
};
kernelModules = [
"ntsync"
];
plymouth = {
enable = true;
theme = "bgrt";
};
};
services = {
# Allow kvmfr module to be used by QEMU/KVM.
udev.packages = [
(pkgs.writeTextFile {
name = "kvmfr";
text = ''
SUBSYSTEM=="kvmfr", GROUP="kvm", MODE="0660", TAG+="uaccess"
'';
destination = "/etc/udev/rules.d/70-kvmfr.rules";
})
];
# Configures snapshots for home subvolume.
# Requires /home/.snapshots subvolume to function.
snapper = {
snapshotInterval = "hourly";
cleanupInterval = "1d";
configs = {
home = {
SUBVOLUME = "/home";
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
TIMELINE_LIMIT_HOURLY = "10";
TIMELINE_LIMIT_DAILY = "7";
TIMELINE_LIMIT_WEEKLY = "2";
TIMELINE_LIMIT_MONTHLY = "0";
TIMELINE_LIMIT_YEARLY = "0";
BACKGROUND_COMPARISON = "yes";
NUMBER_CLEANUP = "no";
NUMBER_MIN_AGE = "1800";
NUMBER_LIMIT = "50";
NUMBER_LIMIT_IMPORTANT = "10";
EMPTY_PRE_POST_CLEANUP = "yes";
EMPTY_PRE_POST_MIN_AGE = "1800";
};
};
};
# Completely disable xserver support (RIP X11).
xserver.enable = false;
# Configure pipewire. Disables 32Bit ALSA since it causes build errors
# and is largely vestigial.
pipewire = {
enable = true;
pulse.enable = true;
alsa.enable = true;
alsa.support32Bit = lib.mkForce false;
};
openssh.enable = true;
affinity-thumbnailer.enable = true;
# Enables m(ulticast)DNS (a.k.a. Bonjour) support.
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
networking = {
wireless.enable = true;
networkmanager.enable = true;
networkmanager.plugins = with pkgs; [ networkmanager-openvpn ];
firewall = {
trustedInterfaces = [
"virbr0"
"br0"
];
allowedTCPPorts = [ 22 ];
};
};
time.timeZone = "America/New_York";
i18n = {
defaultLocale = "en_US.UTF-8";
extraLocales = [
"ja_JP.UTF-8/UTF-8"
];
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";
};
};
security.rtkit.enable = true;
programs = {
bash = {
enable = true;
interactiveShellInit = ''
eval "$(jump shell)"
bind -x '"\eOQ": clear;fastfetch'
'';
};
starship = {
enable = true;
settings = {
character = {
success_symbol = "[λ](bold green)";
error_symbol = "[λ](bold red)";
};
};
};
virt-manager.enable = true;
ssh.startAgent = true;
firefox.enable = true;
appimage = {
enable = true;
binfmt = true;
};
neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
configure = {
customRC = ''
set nocompatible
set backspace=indent,eol,start
set tabstop=2
set shiftwidth=2
set expandtab
'';
packages.myPlugins = with pkgs.vimPlugins; {
start = [
vim-lastplace
vim-nix
];
opt = [ ];
};
};
};
};
virtualisation = {
spiceUSBRedirection.enable = true;
libvirtd = {
enable = true;
qemu = {
package = pkgs.qemu_kvm;
runAsRoot = true;
swtpm.enable = true;
verbatimConfig = ''
namespaces = []
cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc","/dev/hpet", "/dev/vfio/vfio",
"/dev/kvmfr0"
]
'';
};
};
};
users.users.frank = {
isNormalUser = true;
description = "Frank LoTurco";
extraGroups = [
"networkmanager"
"wheel"
"libvirtd"
"input"
"video"
];
};
nixpkgs = {
config.allowUnfree = true;
overlays = [
inputs.affinity-nix.overlays.default
];
};
nix = {
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
optimise = {
automatic = true;
dates = "weekly";
};
settings = {
experimental-features = [
"nix-command"
"flakes"
];
use-xdg-base-directories = true;
};
};
environment = {
systemPackages = with pkgs; [
wget
vorta
dnsmasq
guestfs-tools
unrar
btrfs-assistant
nil
bash-language-server
devenv
nerd-fonts.hack
jump
affinity-v3
unstable.winetricks
unstable.fastfetch
inputs.nix-gaming.packages.${pkgs.stdenv.hostPlatform.system}.wine-tkg
inputs.appimage-manager.packages.${pkgs.stdenv.hostPlatform.system}.default
(callPackage ../../packages/virtiofsd-looking-glass/package.nix { })
(callPackage ../../packages/heidisql/package.nix { })
(callPackage ../../packages/looking-glass-client/package.nix { })
];
shellAliases = {
l = "ls -alh";
ll = "ls -l";
ls = "ls --color=tty";
ff = "clear;fastfetch --logo nixos2";
wget = "wget --hsts-file=$XDG_DATA_HOME/wget-hsts";
nb = "nix-build";
nix-rebuild = "sudo nixos-rebuild switch";
};
sessionVariables = rec {
XDG_CACHE_HOME = "$HOME/.cache";
XDG_CONFIG_HOME = "$HOME/.config";
XDG_DATA_HOME = "$HOME/.local/share";
XDG_STATE_HOME = "$HOME/.local/state";
HISTFILE = "$XDG_STATE_HOME/bash/history";
DOTNET_CLI_HOME = "$XDG_DATA_HOME/dotnet";
GTK2_RC_FILES = "$XDG_CONFIG_HOME/gtk-2.0/gtkrc";
WINE_BIN = "${inputs.nix-gaming.packages.${pkgs.stdenv.hostPlatform.system}.wine-tkg}/bin/.wine";
WINEPREFIX = "$XDG_DATA_HOME/wine";
};
};
system.stateVersion = "26.05";
}