269 lines
5.8 KiB
Nix
269 lines
5.8 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
username,
|
|
system,
|
|
hostname,
|
|
inputs,
|
|
...
|
|
}:
|
|
{
|
|
imports = [
|
|
./declarative-nm.nix
|
|
# ./vm.nix
|
|
./steam.nix
|
|
./networking.nix
|
|
|
|
inputs.nixos-hardware.nixosModules.common-pc-ssd
|
|
inputs.disko.nixosModules.disko
|
|
inputs.lanzaboote.nixosModules.lanzaboote
|
|
];
|
|
|
|
nixpkgs.config.allowUnfree = true;
|
|
|
|
# allow overclocking (I actually underclock but lol)
|
|
hardware.amdgpu.overdrive.ppfeaturemask = "0xFFF7FFFF";
|
|
|
|
hardware.enableRedistributableFirmware = true;
|
|
hardware.cpu.amd.updateMicrocode = true;
|
|
|
|
services.greetd = {
|
|
enable = true;
|
|
settings = {
|
|
default_session = {
|
|
command = "${lib.getExe pkgs.greetd.tuigreet} --time --cmd niri-session";
|
|
user = username;
|
|
};
|
|
};
|
|
};
|
|
|
|
system.activationScripts = {
|
|
# FIX: https://github.com/NixOS/nix/issues/2982
|
|
"profile-channel-dummy".text = ''
|
|
#!/bin/sh
|
|
mkdir -p /nix/var/nix/profiles/per-user/root/channels
|
|
'';
|
|
};
|
|
|
|
swapDevices = [ ];
|
|
|
|
nix = {
|
|
# optimize the store
|
|
optimise.automatic = true;
|
|
|
|
# enable flakes!
|
|
settings.experimental-features = [
|
|
"nix-command"
|
|
"flakes"
|
|
];
|
|
};
|
|
|
|
system.activationScripts = {
|
|
# extract all my secureboot keys
|
|
# TODO! proper secrets management
|
|
"secureboot-keys".text = ''
|
|
#!/usr/bin/env sh
|
|
rm -fr ${config.boot.lanzaboote.pkiBundle} || true
|
|
mkdir -p ${config.boot.lanzaboote.pkiBundle}
|
|
${lib.getExe pkgs.gnutar} xf ${./secrets/secureboot.tar} -C ${config.boot.lanzaboote.pkiBundle}
|
|
chown -R root:wheel ${config.boot.lanzaboote.pkiBundle}
|
|
chmod -R 500 ${config.boot.lanzaboote.pkiBundle}
|
|
'';
|
|
};
|
|
|
|
# kernel options
|
|
boot = {
|
|
kernelPackages = pkgs.linuxPackages_latest;
|
|
# kernelPackages = pkgs.linuxPackages;
|
|
|
|
lanzaboote = {
|
|
enable = true;
|
|
# TODO: proper secrets management so this is not stored in nix store
|
|
pkiBundle = "/var/lib/sbctl";
|
|
};
|
|
|
|
# Bootloader.
|
|
loader = {
|
|
efi.canTouchEfiVariables = true;
|
|
|
|
timeout = 1;
|
|
/*
|
|
Lanzaboote currently replaces the systemd-boot module.
|
|
This setting is usually set to true in configuration.nix
|
|
generated at installation time. So we force it to false
|
|
for now.
|
|
*/
|
|
systemd-boot.enable = lib.mkForce false;
|
|
systemd-boot.configurationLimit = 10;
|
|
};
|
|
|
|
initrd = {
|
|
compressor = "zstd";
|
|
availableKernelModules = [
|
|
"xhci_pci"
|
|
"thunderbolt"
|
|
"nvme"
|
|
"usbhid"
|
|
"amdgpu"
|
|
];
|
|
};
|
|
|
|
kernelModules = [
|
|
"kvm-amd"
|
|
"ip_tables"
|
|
"iptable_nat"
|
|
"msr"
|
|
];
|
|
};
|
|
|
|
environment.etc = {
|
|
# override default nixos /etc/issue
|
|
"issue".text = "";
|
|
};
|
|
|
|
services = {
|
|
# fwupd for updating firmware
|
|
fwupd = {
|
|
enable = true;
|
|
extraRemotes = [ "lvfs-testing" ];
|
|
};
|
|
|
|
# auto detect network printers
|
|
avahi = {
|
|
enable = true;
|
|
nssmdns4 = true;
|
|
openFirewall = true;
|
|
};
|
|
|
|
# Enable CUPS to print documents.
|
|
printing = {
|
|
enable = true;
|
|
drivers = with pkgs; [ hplip ];
|
|
};
|
|
|
|
# I don't want fingerprint login
|
|
fprintd.enable = false;
|
|
|
|
# Making sure mullvad works on boot
|
|
mullvad-vpn.enable = true;
|
|
};
|
|
|
|
# EST
|
|
time.timeZone = "America/New_York";
|
|
|
|
security = {
|
|
# lets use doas and not sudo!
|
|
doas.enable = true;
|
|
sudo.enable = false;
|
|
# Configure doas
|
|
doas.extraRules = [
|
|
{
|
|
users = [ username ];
|
|
keepEnv = true;
|
|
persist = true;
|
|
}
|
|
];
|
|
};
|
|
|
|
# Select internationalisation properties.
|
|
i18n.defaultLocale = "en_US.UTF-8";
|
|
|
|
# Enable Bluetooth
|
|
hardware.bluetooth = {
|
|
enable = true;
|
|
powerOnBoot = true;
|
|
|
|
# Enable experimental features for battery % of bluetooth devices
|
|
settings.General.Experimental = true;
|
|
};
|
|
|
|
# Apply gtk themes by enabling dconf
|
|
programs.dconf.enable = true;
|
|
|
|
# Enable sound with pipewire.
|
|
services.pulseaudio.enable = false; # pipewire >>>>>>> pulseaudio
|
|
security.rtkit.enable = true;
|
|
services.pipewire = {
|
|
enable = true;
|
|
alsa.enable = true;
|
|
alsa.support32Bit = true;
|
|
pulse.enable = true;
|
|
};
|
|
|
|
# Define my user account (the rest of the configuration if found in `~/.config/home-manager/...`)
|
|
users.users.${username} = {
|
|
isNormalUser = true;
|
|
extraGroups = [
|
|
"networkmanager"
|
|
"wheel"
|
|
"video"
|
|
"camera"
|
|
"adbusers"
|
|
];
|
|
hashedPasswordFile = "${./secrets/password-hash}";
|
|
};
|
|
|
|
services.gvfs.enable = true;
|
|
programs.gphoto2.enable = true;
|
|
|
|
programs.adb.enable = true;
|
|
|
|
# Enable thermal data
|
|
services.thermald.enable = true;
|
|
|
|
services.pcscd.enable = true;
|
|
programs.gnupg.agent = {
|
|
enable = true;
|
|
pinentryPackage = pkgs.pinentry-curses;
|
|
enableSSHSupport = false;
|
|
};
|
|
|
|
# System packages
|
|
environment.systemPackages = with pkgs; [
|
|
mullvad-vpn
|
|
|
|
#secureboot ctl
|
|
sbctl
|
|
|
|
dmidecode
|
|
|
|
doas-sudo-shim
|
|
|
|
glib
|
|
usbutils
|
|
libmtp
|
|
man-pages
|
|
man-pages-posix
|
|
|
|
# needed for home-manager
|
|
git
|
|
];
|
|
|
|
# wayland with electron/chromium applications
|
|
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
|
|
|
# https://nixos.wiki/wiki/Fish#Setting_fish_as_your_shell
|
|
programs.fish.enable = true;
|
|
programs.bash = {
|
|
interactiveShellInit = ''
|
|
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
|
|
then
|
|
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
|
|
exec ${lib.getExe pkgs.fish} $LOGIN_OPTION
|
|
fi
|
|
'';
|
|
};
|
|
|
|
# port 53317 for localsend
|
|
networking.firewall.allowedUDPPorts = [ 53317 ];
|
|
networking.firewall.allowedTCPPorts = [ 53317 ];
|
|
|
|
system.stateVersion = "25.05";
|
|
nixpkgs.hostPlatform = "x86_64-linux";
|
|
|
|
documentation.enable = true;
|
|
documentation.man.enable = true;
|
|
documentation.dev.enable = true;
|
|
}
|