Modularity for system configuration

This commit is contained in:
foglar 2024-11-22 09:46:17 +01:00
parent ad997ad900
commit 57677defc0
17 changed files with 283 additions and 229 deletions

View File

@ -2,15 +2,20 @@
inputs,
pkgs,
pkgs-stable,
lib,
...
}: {
imports = [
./hardware-configuration.nix
./system/nvidia.nix
./system/packages.nix
./system/system.nix
inputs.home-manager.nixosModules.home-manager
];
nix.settings.experimental-features = ["nix-command" "flakes"];
# Bootloader.
boot.loader.systemd-boot.enable = true;
home-manager = {
extraSpecialArgs = {inherit inputs pkgs pkgs-stable;};
backupFileExtension = "backup";
@ -19,180 +24,6 @@
};
};
stylix = {
enable = true;
image = ./aurora_borealis.png;
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
#base16Scheme = "${pkgs.base16-schemes}/share/themes/onedark.yaml";
#base16Scheme = "${pkgs.base16-schemes}/share/themes/tokyo-night-dark.yaml";
polarity = "dark";
autoEnable = true;
# Set the cursor theme.
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 24;
};
fonts = {
sizes = {
desktop = 8;
applications = 10;
popups = 10;
terminal = 12;
};
monospace = {
name = "JetBrainsMono Nerd Font";
package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];};
};
};
};
# Bootloader.
boot.loader.systemd-boot.enable = true;
nix.settings.experimental-features = ["nix-command" "flakes"];
networking.hostName = "laptop"; # Define your hostname.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
services.blueman.enable = true;
# Printing
services.printing.enable = true;
services.printing.drivers = with pkgs; [gutenprint hplip splix];
hardware.printers = {
#ensurePrinters = [
# {
# name = "HP_psc_1200_series";
# location = "Home";
# deviceUri = "usb://HP/psc%201200%20series?serial=UA51SGB35WT0&interface=1";
# model = "HP_psc_1200_series.ppd";
# ppdOptions = {
# PageSize = "A4";
# };
# }
#];
#ensureDefaultPrinter = "HP_psc_1200_series";
};
# Scanning
hardware.sane.enable = true;
services.ipp-usb.enable = true;
hardware.sane.extraBackends = [pkgs.hplipWithPlugin];
# Set your time zone.
time.timeZone = "Europe/Prague";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "cs_CZ.UTF-8";
LC_IDENTIFICATION = "cs_CZ.UTF-8";
LC_MEASUREMENT = "cs_CZ.UTF-8";
LC_MONETARY = "cs_CZ.UTF-8";
LC_NAME = "cs_CZ.UTF-8";
LC_NUMERIC = "cs_CZ.UTF-8";
LC_PAPER = "cs_CZ.UTF-8";
LC_TELEPHONE = "cs_CZ.UTF-8";
LC_TIME = "cs_CZ.UTF-8";
};
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-emoji
(nerdfonts.override {fonts = ["JetBrainsMono"];})
monaspace
];
services.displayManager = {
defaultSession = "hyprland";
sddm = {
enable = true;
wayland.enable = true;
theme = "sddm-astronaut-theme";
package = lib.mkDefault pkgs.kdePackages.sddm;
extraPackages = [pkgs.sddm-astronaut pkgs.kdePackages.qtvirtualkeyboard];
};
};
services.desktopManager.plasma6.enable = true;
#services.xserver.desktopManager.gnome.enable = true;
#environment.gnome.excludePackages = with pkgs; [
# gnome-tour
# gnome-connections
# epiphany # web browser
# geary # email reader. Up to 24.05. Starting from 24.11 the package name is just geary.
# #evince # document viewer
# gnome-weather
# gnome-contacts
# gnome-maps
# gnome-logs
# gnome-music
# gnome-system-monitor
# gnome-text-editor
# yelp
# totem
# snapshot
# seahorse
#];
environment.plasma6.excludePackages = with pkgs.kdePackages; [
ark
plasma-browser-integration
konsole
oxygen
gwenview
okular
elisa
kate
krdp
khelpcenter
];
# qt = {
# enable = true;
# platformTheme = "gnome";
# style = "adwaita-dark";
# };
programs.hyprland = {
enable = true;
xwayland.enable = true;
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
portalPackage = pkgs.xdg-desktop-portal-hyprland;
};
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
programs.proxychains = {
enable = true;
chain.type = "dynamic";
proxies = {
tor-proxy = {
enable = true;
type = "socks5";
host = "127.0.0.1";
port = 9050;
};
};
};
services.tor = {
enable = true;
};
services.tor.client.enable = true;
environment.sessionVariables = {
WLR_NO_HARDWARE_CURSORS = "1";
NIXOS_OZONE_WL = "1";
@ -200,31 +31,6 @@
FLAKE = "/home/foglar/dotfiles";
};
services.xserver = {
xkb.layout = "us,cz";
xkb.options = "grp:win_space_toggle";
};
# Enable sound with pipewire.
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.foglar = {
isNormalUser = true;
description = "foglar";
@ -234,39 +40,11 @@
];
};
virtualisation.docker = {
enable = true;
rootless = {
enable = true;
setSocketVariable = true;
};
};
programs.kdeconnect.enable = true;
programs.wireshark.enable = true;
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
# wget
(sddm-astronaut.override {
themeConfig = {
ScreenWidth = 1920;
ScreenHeight = 1080;
PartialBlur = false;
};
})
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.

10
nixos/system/packages.nix Normal file
View File

@ -0,0 +1,10 @@
{...}:
{
import = [
./packages/docker.nix
./packages/programs.nix
./packages/steam.nix
./packages/tor.nix
./packages/virtual-machines.nix
];
}

View File

@ -0,0 +1,9 @@
{...}: {
virtualisation.docker = {
enable = true;
rootless = {
enable = true;
setSocketVariable = true;
};
};
}

View File

@ -0,0 +1,5 @@
{...}:
{
programs.kdeconnect.enable = true;
programs.wireshark.enable = true;
}

View File

@ -0,0 +1,9 @@
{...}:
{
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
}

View File

@ -0,0 +1,20 @@
{...}:
{
programs.proxychains = {
enable = true;
chain.type = "dynamic";
proxies = {
tor-proxy = {
enable = true;
type = "socks5";
host = "127.0.0.1";
port = 9050;
};
};
};
services.tor = {
enable = true;
};
services.tor.client.enable = true;
}

View File

@ -0,0 +1,5 @@
{...}:
{
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
}

View File

@ -0,0 +1,18 @@
{...}:
{
# Enable sound with pipewire.
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
}

View File

@ -0,0 +1,48 @@
{
inputs,
pkgs,
...
}:
{
services.desktopManager.plasma6.enable = true;
#services.xserver.desktopManager.gnome.enable = true;
#environment.gnome.excludePackages = with pkgs; [
# gnome-tour
# gnome-connections
# epiphany # web browser
# geary # email reader. Up to 24.05. Starting from 24.11 the package name is just geary.
# #evince # document viewer
# gnome-weather
# gnome-contacts
# gnome-maps
# gnome-logs
# gnome-music
# gnome-system-monitor
# gnome-text-editor
# yelp
# totem
# snapshot
# seahorse
#];
environment.plasma6.excludePackages = with pkgs.kdePackages; [
ark
plasma-browser-integration
konsole
oxygen
gwenview
okular
elisa
kate
krdp
khelpcenter
];
programs.hyprland = {
enable = true;
xwayland.enable = true;
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
portalPackage = pkgs.xdg-desktop-portal-hyprland;
};
}

View File

@ -0,0 +1,8 @@
{pkgs, ...}: {
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-emoji
(nerdfonts.override {fonts = ["JetBrainsMono"];})
monaspace
];
}

View File

@ -0,0 +1,23 @@
{...}: {
# Set your time zone.
time.timeZone = "Europe/Prague";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "cs_CZ.UTF-8";
LC_IDENTIFICATION = "cs_CZ.UTF-8";
LC_MEASUREMENT = "cs_CZ.UTF-8";
LC_MONETARY = "cs_CZ.UTF-8";
LC_NAME = "cs_CZ.UTF-8";
LC_NUMERIC = "cs_CZ.UTF-8";
LC_PAPER = "cs_CZ.UTF-8";
LC_TELEPHONE = "cs_CZ.UTF-8";
LC_TIME = "cs_CZ.UTF-8";
};
services.xserver = {
xkb.layout = "us,cz";
xkb.options = "grp:win_space_toggle";
};
}

View File

@ -0,0 +1,14 @@
{...}: {
networking.hostName = "laptop"; # Define your hostname.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
services.blueman.enable = true;
}

View File

@ -0,0 +1,29 @@
{
pkgs,
...
}:
{
# Printing
services.printing.enable = true;
services.printing.drivers = with pkgs; [gutenprint hplip splix];
hardware.printers = {
#ensurePrinters = [
# {
# name = "HP_psc_1200_series";
# location = "Home";
# deviceUri = "usb://HP/psc%201200%20series?serial=UA51SGB35WT0&interface=1";
# model = "HP_psc_1200_series.ppd";
# ppdOptions = {
# PageSize = "A4";
# };
# }
#];
#ensureDefaultPrinter = "HP_psc_1200_series";
};
# Scanning
hardware.sane.enable = true;
services.ipp-usb.enable = true;
hardware.sane.extraBackends = [pkgs.hplipWithPlugin];
}

28
nixos/system/sys/sddm.nix Normal file
View File

@ -0,0 +1,28 @@
{
pkgs,
lib,
...
}:
{
services.displayManager = {
defaultSession = "hyprland";
sddm = {
enable = true;
wayland.enable = true;
theme = "sddm-astronaut-theme";
package = lib.mkDefault pkgs.kdePackages.sddm;
extraPackages = [pkgs.sddm-astronaut pkgs.kdePackages.qtvirtualkeyboard];
};
};
environment.systemPackages = with pkgs; [
(sddm-astronaut.override {
themeConfig = {
ScreenWidth = 1920;
ScreenHeight = 1080;
PartialBlur = false;
};
})
];
}

View File

@ -0,0 +1,36 @@
{
pkgs,
...
}:
{
stylix = {
enable = true;
image = ./aurora_borealis.png;
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
#base16Scheme = "${pkgs.base16-schemes}/share/themes/onedark.yaml";
#base16Scheme = "${pkgs.base16-schemes}/share/themes/tokyo-night-dark.yaml";
polarity = "dark";
autoEnable = true;
# Set the cursor theme.
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 24;
};
fonts = {
sizes = {
desktop = 8;
applications = 10;
popups = 10;
terminal = 12;
};
monospace = {
name = "JetBrainsMono Nerd Font";
package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];};
};
};
};
}

14
nixos/system/system.nix Normal file
View File

@ -0,0 +1,14 @@
{...}:
{
imports = [
./sys/audio.nix
./sys/desktops.nix
./sys/fonts.nix
./sys/locales.nix
./sys/network.nix
./sys/nvidia.nix
./sys/printing.nix
./sys/sddm.nix
./sys/style.nix
];
}