dotfiles-nix/system/default.nix

248 lines
5.7 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, ... }:
{
imports =
[
./hardware-configuration.nix
./sway-quirks.nix
./gnome.nix
];
# bootloader stuff
boot = {
# enable grub
loader.efi.canTouchEfiVariables = true;
loader.grub = {
enable = true;
device = "nodev";
efiSupport = true; # disable for legacy bios
gfxmodeEfi = "1024x768";
useOSProber = true; # use os prober to find systems
default = "saved"; # set index here to use static default entry
extraEntriesBeforeNixOS = true; # add entries before nixos
extraEntries = ''
menuentry "Firmware" {
fwsetup
}
menuentry "Shutdown" {
halt
}
'';
};
# enable plymouth (hides booting logs)
plymouth = {
enable = true;
theme = "blockchain";
themePackages = with pkgs; [
(adi1090x-plymouth-themes.override {
selected_themes = [ "blockchain" "rings" ];
})
];
};
# enable silent boot
consoleLogLevel = 0;
initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"loglevel=3"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
"ipv6.disable=1" # disable ipv6
];
kernelModules = [
# "v4l2loopback" # for virtual camera in obs
# "snd-aloop" # for sound tricks
];
kernel.sysctl = { # disable ipv6
"net.ipv6.conf.all.disable_ipv6" = "1";
"net.ipv6.conf.default.disable_ipv6" = "1";
"net.ipv6.conf.lo.disable_ipv6" = "1";
};
# emulate arm64 for docker
binfmt.emulatedSystems = [
"aarch64-linux"
];
};
# Network settings
networking = {
hostName = "desktop";
firewall = {
enable = true;
allowedTCPPorts = [
# 25565 # minecraft
];
};
enableIPv6 = false; # disable ipv6
networkmanager.enable = true;
};
hardware.i2c.enable = true; # for hdmi
time.timeZone = "Europe/Moscow"; # timezone
# set russian locale
i18n.defaultLocale = "ru_RU.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "ru_RU.UTF-8";
LC_IDENTIFICATION = "ru_RU.UTF-8";
LC_MEASUREMENT = "ru_RU.UTF-8";
LC_MONETARY = "ru_RU.UTF-8";
LC_NAME = "ru_RU.UTF-8";
LC_NUMERIC = "ru_RU.UTF-8";
LC_PAPER = "ru_RU.UTF-8";
LC_TELEPHONE = "ru_RU.UTF-8";
LC_TIME = "ru_RU.UTF-8";
};
# tty settings
console = {
enable = true;
packages = [ pkgs.terminus_font ];
font = "ter-v16n";
};
# basic X server settings
services.xserver.enable = true;
services.xserver.xkb.options = "grp:alt_caps_toggle";
services.xserver.xkb.layout = "us,ru";
services.libinput.enable = true;
services.libinput.mouse.middleEmulation = false;
services.xserver.displayManager.setupCommands = ''
${pkgs.numlockx}/bin/numlockx on
'';
# enable zram + zwap
zramSwap.enable = true;
# enable nvidia drivers
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.stable;
modesetting.enable = true;
nvidiaSettings = true;
open = true;
};
# enable graphics
hardware.graphics.enable = true;
# enable bluetooth support
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
# sound settings (enable pipewire + alsa)
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
# user settings
users.users.user = {
isNormalUser = true;
description = "user";
extraGroups = [
"networkmanager"
"wheel"
# "vboxusers"
"dialout"
"plugdev"
"kvm"
# "adbusers"
# "docker"
];
};
# enable adb
programs.adb.enable = true;
users.extraGroups.adbusers.members = [ "user" ];
# obs
programs.obs-studio = {
enable = true;
enableVirtualCamera = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-gstreamer
obs-vkcapture
];
};
# system-wide packages
environment.systemPackages = with pkgs; [
vim curl git openssl helix
];
# enable xdg portal and flatpak
xdg.portal.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
xdg.portal.config.common.default = "gtk";
services.flatpak.enable = true;
# nix store optimisations
nix.gc = { # garbage collector
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
nix.optimise.automatic = true;
# enable flakes and nix command
nix.settings.experimental-features = [
"nix-command"
"flakes"
# "impure-derivations" # allow impure derivations
# "ca-derivations"
];
# nixpkgs configs
nixpkgs.config.allowUnfree = true;
nixpkgs.config.joypixels.acceptLicense = true;
nixpkgs.config.cudaSupport = true;
# install virtualbox
virtualisation.virtualbox.host.enable = true;
users.extraGroups.vboxusers.members = [ "user" ];
# install docker
virtualisation.docker.enable = true;
users.extraGroups.docker.members = [ "user" ];
virtualisation.oci-containers.backend = "docker";
virtualisation.docker.rootless = {
enable = false; # enable if you need rootless docker
setSocketVariable = true;
};
# waydroid
virtualisation.waydroid.enable = true;
system.stateVersion = "25.05";
}