248 lines
5.7 KiB
Nix
248 lines
5.7 KiB
Nix
# 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";
|
||
}
|