Refactor as prep for multiple hosts

This commit is contained in:
Tristan D. 2023-10-16 23:54:37 +02:00
parent 3e82609242
commit 1fc5d8b70f
Signed by: tristan
SSH key fingerprint: SHA256:U7y6eMb7CQDaTHv9XoX6/BaQnPqyxxKc+Xnfcefi6rY
11 changed files with 268 additions and 292 deletions

View file

@ -62,28 +62,22 @@ Here's a brief rundown of the directory structure:
### Top-Level Files
- `flake.nix`: Nix Flake configuration file.
- `configuration.nix`: Main NixOS system configuration entry point.
- `disko.nix`: Disk and filesystem configuration.
- `hardware.nix`: Hardware-related configurations like drivers.
- `home.nix`: Configurations related to user home directories. (home-manager)
- `users.nix`: User account and privilege settings.
### `home-mods` Directory
#### `home-mods` Directory
Stores modules related to specific user applications or environments.
- `dev/default.nix`: Developer-specific configurations.
- `firefox/default.nix`: Firefox browser settings.
- `plasma/default.nix`: KDE Plasma desktop settings.
- `virt/default.nix`: Virtualization-related settings.
#### `os-mods` Directory
### `os-mods` Directory
Holds system-level modules for network, virtualization, desktop etc.
Holds system-level modules for network, virtualization, etc.
#### `users` Directory
- `network/default.nix`: Network-related settings.
- `virt/default.nix`: OS-level virtualization settings.
Holds home-manager configuration for the users listed in `users.nix`
#### `systems` Directory
Holds system specific nixos configuration (e.g. hardware quirks).
## 🙏 Made possible by

View file

@ -1,171 +0,0 @@
{
config,
pkgs,
inputs,
system,
...
}: {
imports = [
./hardware.nix
./os-mods/network
./os-mods/virt
];
nix = {
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 2w";
};
settings.auto-optimise-store = true;
package = pkgs.nixFlakes;
extraOptions = ''
experimental-features = nix-command flakes
'';
};
fonts.fontDir.enable = true;
fonts.fonts = with pkgs; [
emacs-all-the-icons-fonts
corefonts
vistafonts
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
fira
fira-code
fira-code-symbols
mplus-outline-fonts.githubRelease
dina-font
proggyfonts
(nerdfonts.override {fonts = ["FiraCode" "DroidSansMono" "NerdFontsSymbolsOnly"];})
];
networking.hostName = "nixos-pulse";
services.fwupd.enable = true;
time.timeZone = "Europe/Berlin";
i18n = {
defaultLocale = "en_US.UTF-8";
extraLocaleSettings = {
LANG = "en_US.UTF-8";
LC_ADDRESS = "de_DE.UTF-8";
LC_COLLATE = "de_DE.UTF-8";
LC_CTYPE = "en_US.UTF-8";
LC_IDENTIFICATION = "de_DE.UTF-8";
LC_MEASUREMENT = "de_DE.UTF-8";
LC_MESSAGES = "en_US.UTF-8";
LC_MONETARY = "de_DE.UTF-8";
LC_NAME = "de_DE.UTF-8";
LC_NUMERIC = "de_DE.UTF-8";
LC_PAPER = "de_DE.UTF-8";
LC_TELEPHONE = "de_DE.UTF-8";
LC_TIME = "de_DE.UTF-8";
};
};
services.xserver = {
enable = true;
layout = "us";
xkbVariant = "alt-intl";
desktopManager.plasma5.enable = true;
displayManager = {
defaultSession = "plasmawayland";
sddm.enable = true;
# autoLogin = {
# enable = true;
# user = "tristand";
# };
};
};
services.printing.enable = true;
services.printing.drivers = with pkgs; [
gutenprint
gutenprintBin
hplipWithPlugin
brlaser
brgenml1cupswrapper
];
sound.enable = true;
hardware.bluetooth.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
security.sudo.wheelNeedsPassword = false;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
environment.sessionVariables = {
EDITOR = "nvim";
};
environment.systemPackages = with pkgs; [
cifs-utils
neovim
veracrypt
vim
];
programs.nix-ld.dev.enable = true;
programs.command-not-found.enable = false;
programs.nix-index-database.comma.enable = true;
programs.dconf.enable = true;
programs.fish.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = 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
};
services.btrfs.autoScrub.enable = true;
# For SMB
services.gvfs.enable = true;
services.avahi.enable = true;
services.avahi.nssmdns = true;
##
services.openssh.enable = true;
networking.firewall.allowedTCPPorts = [22];
# networking.firewall.allowedUDPPorts = [ ... ];
# Samba
networking.firewall.extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns'';
powerManagement.powertop.enable = true;
systemd.services.powertop.postStart = ''
HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u)
for i in $HIDDEVICES; do
echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product
echo 'on' > /sys/bus/usb/devices/$i/power/control
done
'';
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

49
flake.lock generated
View file

@ -42,27 +42,6 @@
"type": "github"
}
},
"envfs": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1696892863,
"narHash": "sha256-Gs8dvjM6zFqJmoKWl2CMdfavF49E29lSnvN2Q9Fdm9c=",
"owner": "Mic92",
"repo": "envfs",
"rev": "fe2be4f5c4885ddbbce583395ab34a7bb4daf4b7",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "envfs",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
@ -95,27 +74,6 @@
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"envfs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1673362319,
"narHash": "sha256-Pjp45Vnj7S/b3BRpZEVfdu8sqqA6nvVjvYu59okhOyI=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "82c16f1682cf50c01cb0280b38a1eed202b3fe9f",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
@ -336,11 +294,11 @@
},
"nur": {
"locked": {
"lastModified": 1697470606,
"narHash": "sha256-TP3UN5RktQpqDVj5mA6rb1Nu4vGTnctWkbe5sef4LEw=",
"lastModified": 1697496340,
"narHash": "sha256-u2RgKrd/54mXdJh/Iwu9KpZODZ3BsVzJFuff/2EyM3Q=",
"owner": "nix-community",
"repo": "NUR",
"rev": "cc83a858d3dbf50a934a4f74fe5508ac2fa72bc5",
"rev": "e12ac1f3da3af8568ff715dead8a9dfdce1b95f8",
"type": "github"
},
"original": {
@ -404,7 +362,6 @@
"inputs": {
"disko": "disko",
"emacs-overlay": "emacs-overlay",
"envfs": "envfs",
"home-manager": "home-manager",
"nix-index-database": "nix-index-database",
"nix-ld": "nix-ld",

100
flake.nix
View file

@ -49,25 +49,31 @@
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
envfs = {
url = "github:Mic92/envfs";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-ld = {
url = "github:Mic92/nix-ld";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {self, nixpkgs, ...}@inputs: let
outputs = {
self,
nixpkgs,
nixpkgs-unstable,
home-manager,
emacs-overlay,
nur,
nix-index-database,
disko,
...
} @ inputs: let
system = "x86_64-linux";
unstable-pkgs = import inputs.nixpkgs-unstable pkgs-args;
unstable-pkgs = import nixpkgs-unstable pkgs-args;
unstable-overlay = final: prev: {
unstable = unstable-pkgs.pkgs;
};
overlays = [
inputs.emacs-overlay.overlay
unstable-overlay
emacs-overlay.overlay
];
pkgs-args = {
system = system;
@ -77,61 +83,59 @@
};
};
pkgs = import nixpkgs pkgs-args;
hmModules = [
nix-index-database.hmModules.nix-index
nur.hmModules.nur
inputs.plasma-manager.homeManagerModules.plasma-manager
];
osModules = [
disko.nixosModules.disko
home-manager.nixosModules.home-manager
nix-index-database.nixosModules.nix-index
nur.nixosModules.nur
inputs.nix-ld.nixosModules.nix-ld
inputs.tuxedo-nixos.nixosModules.default
];
args = {
inherit inputs;
inherit system;
};
in {
formatter = {
${system} = pkgs.alejandra;
};
diskoConfigurations = {
nixos-pulse = import ./disko.nix;
nixos-pulse = import ./systems/nixos-pulse/disko.nix;
};
homeConfigurations = {
"tristand" = inputs.home-manager.lib.homeManagerConfiguration {
"tristand" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [
./home.nix
inputs.plasma-manager.homeManagerModules.plasma-manager
inputs.nix-index-database.hmModules.nix-index
inputs.nur.hmModules.nur
{
_module.args.inputs = inputs;
_module.args.system = system;
}
];
modules =
[
./users/tristand.nix
{
_module = {inherit args;};
}
]
++ hmModules;
};
};
nixosConfigurations = {
nixos-pulse = inputs.nixpkgs.lib.nixosSystem {
modules = [
./configuration.nix
./users.nix
./disko.nix
inputs.disko.nixosModules.disko
inputs.envfs.nixosModules.envfs
inputs.home-manager.nixosModules.home-manager
inputs.nix-index-database.nixosModules.nix-index
inputs.nix-ld.nixosModules.nix-ld
inputs.nur.nixosModules.nur
inputs.tuxedo-nixos.nixosModules.default
{
_module.args.inputs = inputs;
_module.args.system = system;
nix.registry.nixpkgs.flake = inputs.nixpkgs;
nixos-pulse = nixpkgs.lib.nixosSystem {
modules =
[
./systems/nixos-pulse
{
_module = {inherit args;};
nixpkgs.pkgs = pkgs;
nix.registry.nixpkgs.flake = nixpkgs;
nixpkgs.pkgs = pkgs;
home-manager.useUserPackages = true;
home-manager.useGlobalPkgs = true;
home-manager.sharedModules = [
inputs.plasma-manager.homeManagerModules.plasma-manager
inputs.nix-index-database.hmModules.nix-index
inputs.nur.hmModules.nur
];
hardware.tuxedo-control-center.enable = true;
hardware.tuxedo-control-center.package = inputs.tuxedo-nixos.packages.${system}.default;
}
];
home-manager.sharedModules = hmModules;
}
]
++ osModules;
};
};
};

View file

@ -14,7 +14,7 @@
personalDoomConfSrc = builtins.fetchGit {
url = "https://git.vlt81.de/tristan/doom";
ref = "main";
rev = "3973c2a97e549640f14ed073bbb8102ebd8a839b";
rev = "e6d22f794c68a5f3ac56861e7e2ed6642cdef16a";
};
in {
xdg.enable = true;

81
os-mods/base/default.nix Normal file
View file

@ -0,0 +1,81 @@
{
config,
pkgs,
...
}: {
nix = {
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 2w";
};
settings.auto-optimise-store = true;
package = pkgs.nixFlakes;
extraOptions = ''
experimental-features = nix-command flakes
'';
};
services.fwupd.enable = true;
# locale
time.timeZone = "Europe/Berlin";
i18n = {
defaultLocale = "en_US.UTF-8";
extraLocaleSettings = {
LANG = "en_US.UTF-8";
LC_ADDRESS = "de_DE.UTF-8";
LC_COLLATE = "de_DE.UTF-8";
LC_CTYPE = "en_US.UTF-8";
LC_IDENTIFICATION = "de_DE.UTF-8";
LC_MEASUREMENT = "de_DE.UTF-8";
LC_MESSAGES = "en_US.UTF-8";
LC_MONETARY = "de_DE.UTF-8";
LC_NAME = "de_DE.UTF-8";
LC_NUMERIC = "de_DE.UTF-8";
LC_PAPER = "de_DE.UTF-8";
LC_TELEPHONE = "de_DE.UTF-8";
LC_TIME = "de_DE.UTF-8";
};
};
####################
security.rtkit.enable = true;
security.sudo.wheelNeedsPassword = false;
environment.sessionVariables = {
EDITOR = "nvim";
};
environment.systemPackages = with pkgs; [
neovim # editor
veracrypt
vim # fallback ed
];
# nix convenience
services.envfs.enable = true;
programs.nix-ld.dev.enable = true;
programs.command-not-found.enable = false;
programs.nix-index-database.comma.enable = true;
###################
programs.fish.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
services.openssh.enable = true;
# For SMB ####
services.gvfs.enable = true;
services.avahi.enable = true;
services.avahi.nssmdns = true;
# netbios dns
networking.firewall.extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns'';
##############
}

View file

@ -0,0 +1,83 @@
{
config,
lib,
pkgs,
...
}: {
programs.dconf.enable = true;
# fonts
fonts.fontDir.enable = true;
fonts.fonts = with pkgs; [
emacs-all-the-icons-fonts
corefonts
vistafonts
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
fira
fira-code
fira-code-symbols
mplus-outline-fonts.githubRelease
dina-font
proggyfonts
(nerdfonts.override {fonts = ["FiraCode" "DroidSansMono" "NerdFontsSymbolsOnly"];})
];
# Desktop env
services.xserver = {
enable = true;
layout = "us";
xkbVariant = "alt-intl";
desktopManager.plasma5.enable = true;
displayManager = {
defaultSession = "plasmawayland";
sddm.enable = true;
# autoLogin = {
# enable = true;
# user = "tristand";
# };
};
};
#########################
## audio
sound.enable = true;
hardware.bluetooth.enable = true;
hardware.pulseaudio.enable = false;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
#########
## printing
services.printing.enable = true;
services.printing.drivers = with pkgs; [
gutenprint
gutenprintBin
hplipWithPlugin
brlaser
brgenml1cupswrapper
];
environment.systemPackages = with pkgs; [
cifs-utils
];
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
};
}

View file

@ -4,20 +4,28 @@
pkgs,
modulesPath,
system,
inputs,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
../../os-mods/base
../../os-mods/desktop
../../os-mods/network
../../os-mods/virt
../../users
./disko.nix
];
system.stateVersion = "23.05";
zramSwap.enable = true;
nixpkgs.hostPlatform = lib.mkDefault system;
boot = {
kernelPackages = pkgs.linuxPackages_latest;
loader = {
systemd-boot = {
enable = true;
configurationLimit = 20;
configurationLimit = 32;
};
efi.canTouchEfiVariables = true;
};
@ -32,9 +40,11 @@
extraModulePackages = [];
};
services.btrfs.autoScrub.enable = true;
services.xserver.videoDrivers = ["amdgpu"];
networking = {
hostName = "nixos-pulse";
useDHCP = lib.mkDefault true;
interfaces = {
enp5s0f4u1u1c2 = {
@ -70,9 +80,21 @@
ACTION=="remove", KERNEL=="enp5s0f4u1u1c2", RUN+="${pkgs.systemd}/bin/systemctl stop network-addresses-enp5s0f4u1u1c2.service"
'';
nixpkgs.hostPlatform = lib.mkDefault system;
# energy saving stuff
powerManagement.powertop.enable = true;
systemd.services.powertop.postStart = ''
HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u)
for i in $HIDDEVICES; do
echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product
echo 'on' > /sys/bus/usb/devices/$i/power/control
done
'';
hardware = {
tuxedo-control-center = {
enable = true;
package = inputs.tuxedo-nixos.packages.${system}.default;
};
opengl = {
driSupport = true;
driSupport32Bit = true;
@ -88,4 +110,6 @@
systemd.tmpfiles.rules = [
"L+ /opt/rocm/hip - - - - ${pkgs.hip}"
];
zramSwap.enable = true;
}

View file

@ -14,10 +14,14 @@
hashedPassword = "$6$Wj.XY8JgH5EWuog4$HnbtPJXDEqKXFrzkPVEjih3PytcpBCrkfL7TAwkXd0IFced7kGMlZNliNsAqQ3XqfyUzAYiiKTIqoPVJEk.s..";
};
home-manager.users.tristand = import ./home.nix {
inherit pkgs;
inherit config;
inherit inputs;
inherit system;
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
users.tristand = import ./tristand.nix {
inherit pkgs;
inherit config;
inherit inputs;
inherit system;
};
};
}

View file

@ -12,10 +12,10 @@
wallpaperPath = "${wallpaper}/share/wallpapers/nixos-wallpaper.png";
in {
imports = [
./home-mods/dev
./home-mods/firefox
./home-mods/plasma
./home-mods/virt
../home-mods/dev
../home-mods/firefox
../home-mods/plasma
../home-mods/virt
];
home.file.".background".source = wallpaperPath;