refactor: split systems into archetypes

refactor(module): move kernel config to module

refactor(module): move nix config to module

refactor(module): move networking config to module

refactor(module): move nix config to module

refactor(module): move grub config to module
This commit is contained in:
Jo 2024-09-06 17:43:30 +02:00
parent 067bc992b6
commit b43660c227
9 changed files with 228 additions and 66 deletions

View file

@ -18,7 +18,18 @@
# All other arguments come from the home home. # All other arguments come from the home home.
config, config,
... ...
}: with lib; with lib.${namespace}; { }: with lib; with lib.${namespace};
let
zed-fhs = pkgs.buildFHSUserEnv {
name = "zed";
targetPkgs = pkgs:
with pkgs; [
zed-editor
];
runScript = "zed";
};
in
{
imports = [ imports = [
./apps/gnome.nix ./apps/gnome.nix
]; ];
@ -54,7 +65,7 @@
nodejs_22 nodejs_22
bun bun
devenv devenv
zed-editor zed-fhs
### Rust development specific ### Rust development specific
rustup rustup
@ -71,7 +82,7 @@
sidequest sidequest
]; ];
puzzlevision.apps.zed-editor.enable = true; #lib.puzzlevision.apps.zed-editor.enable = true;
home.stateVersion = "24.05"; home.stateVersion = "24.05";
} }

View file

@ -27,8 +27,6 @@ let
in { in {
options.${namespace}.apps.zed-editor = { enable = mkEnableOption "zed-editor"; }; options.${namespace}.apps.zed-editor = { enable = mkEnableOption "zed-editor"; };
home.packages = [zed-fhs];
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = [zed-fhs]; home.packages = [zed-fhs];
}; };

View file

@ -0,0 +1,40 @@
{
lib,
pkgs,
inputs,
namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal".
system, # The system architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format, # A normalized name for the system target (eg. `iso`).
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems, # An attribute map of your defined hosts.
config,
...
}: with lib; with lib.${namespace};
let
cfg = config.${namespace}.archetypes.workstation;
in {
options.${namespace}.archetypes.workstation = { enable = mkEnableOption "Enable the workstation archetype for your current system"; };
config = mkIf cfg.enable {
environment.sessionVariables = {
NIXOS_OZONE_WL = "1"; # Chromium/Electron native Wayland support
MOZ_ENABLE_WAYLAND = "1"; # Firefox native Wayland support
};
# Enable modules
puzzlevision = {
common = {
nix.enable = true; # Standard Nix configuration
grub.enable = true; # Bootloader grub
networking.enable = true; # Networkmanager configuration
kernel.enable = true; # Kernel modifications
bluetooth.enable = true; # Bluetooth support
};
desktop.gnome.enable = true;
};
};
}

View file

@ -0,0 +1,37 @@
{
lib,
pkgs,
inputs,
namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal".
system, # The system architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format, # A normalized name for the system target (eg. `iso`).
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems, # An attribute map of your defined hosts.
config,
...
}: with lib; with lib.${namespace};
let
cfg = config.${namespace}.common.bluetooth;
in {
options.${namespace}.common.bluetooth = { enable = mkEnableOption "Enable bluetooth support on your current system"; };
config = mkIf cfg.enable {
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
package = pkgs.bluez;
settings = {
General = {
ControllerMode = "dual";
FastConnectable = "true";
Experimental = "true";
KernelExperimental = "true";
};
};
};
}
}

View file

@ -0,0 +1,38 @@
{
lib,
pkgs,
inputs,
namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal".
system, # The system architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format, # A normalized name for the system target (eg. `iso`).
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems, # An attribute map of your defined hosts.
config,
...
}: with lib; with lib.${namespace};
let
cfg = config.${namespace}.common.grub;
in {
options.${namespace}.common.grub = { enable = mkEnableOption "grub"; };
config = mkIf cfg.enable {
boot.loader.grub = {
enable = true;
devices = [ "nodev" ];
efiInstallAsRemovable = true;
efiSupport = true;
extraEntries = ''
menuentry "Reboot" {
reboot
}
menuentry "Poweroff" {
halt
}
'';
};
}
}

View file

@ -0,0 +1,32 @@
{
lib,
pkgs,
inputs,
namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal".
system, # The system architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format, # A normalized name for the system target (eg. `iso`).
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems, # An attribute map of your defined hosts.
config,
...
}: with lib; with lib.${namespace};
let
cfg = config.${namespace}.common.kernel;
in {
options.${namespace}.common.kernel = {
enable = mkEnableOption "Modify the standard kernel settings";
version = mkOption {
type = lib.types.str;
default = "latest";
example = "latest";
description = "Set the kernel version to be used by your system"
};
};
config = mkIf cfg.enable {
kernelPackages = pkgs.linuxPackages_${cfg.version};
};
}

View file

@ -0,0 +1,24 @@
{
lib,
pkgs,
inputs,
namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal".
system, # The system architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format, # A normalized name for the system target (eg. `iso`).
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems, # An attribute map of your defined hosts.
config,
...
}: with lib; with lib.${namespace};
let
cfg = config.${namespace}.common.networking;
in {
options.${namespace}.common.networking = { enable = mkEnableOption "networking"; };
config = mkIf cfg.enable {
networking.networkmanager.enable = true;
};
}

View file

@ -0,0 +1,40 @@
{
lib,
pkgs,
inputs,
namespace, # The flake namespace, set in flake.nix. If not set, defaults to "internal".
system, # The system architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
format, # A normalized name for the system target (eg. `iso`).
virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
systems, # An attribute map of your defined hosts.
config,
...
}: with lib; with lib.${namespace};
let
cfg = config.${namespace}.common.nix;
in {
options.${namespace}.common.nix = { enable = mkEnableOption "nix"; };
config = mkIf cfg.enable {
nix = {
settings = {
auto-optimise-store = true;
builders-use-substitutes = true;
experimental-features = [ "nix-command" "flakes" ];
keep-derivations = true;
keep-outputs = true;
max-jobs = "auto";
};
# Garbage collection configuration.
gc = {
automatic = true;
dates = "daily";
options = "--delete-older-than 3d";
};
};
}
}

View file

@ -29,35 +29,11 @@ with lib.${namespace};
inputs.hardware.nixosModules.common-pc-laptop-ssd inputs.hardware.nixosModules.common-pc-laptop-ssd
]; ];
nix = {
settings = {
auto-optimise-store = true;
builders-use-substitutes = true;
experimental-features = [ "nix-command" "flakes" ];
keep-derivations = true;
keep-outputs = true;
max-jobs = "auto";
warn-dirty = false;
};
# Garbage collection configuration.
gc = {
automatic = true;
dates = "daily";
options = "--delete-older-than 3d";
};
};
# Set hostname # Set hostname
# Todo: move to common/networking module
networking.hostName = "puzzlevision"; networking.hostName = "puzzlevision";
# Enable networking through networkmanager (required for most desktop environments).
networking.networkmanager.enable = true;
boot = { boot = {
# Always run the latest kernel.
kernelPackages = pkgs.linuxPackages_latest;
# Configure additional kernel modules. # Configure additional kernel modules.
extraModulePackages = [ extraModulePackages = [
pkgs.linuxPackages_latest.rtl8821ce # Use custom network-card driver. pkgs.linuxPackages_latest.rtl8821ce # Use custom network-card driver.
@ -66,23 +42,6 @@ with lib.${namespace};
blacklistedKernelModules = [ blacklistedKernelModules = [
"rtw88_8821ce" # Block the default network-card driver. "rtw88_8821ce" # Block the default network-card driver.
]; ];
# Grub configuration.
loader.grub = {
enable = true;
devices = [ "nodev" ];
efiInstallAsRemovable = true;
efiSupport = true;
extraEntries = ''
menuentry "Reboot" {
reboot
}
menuentry "Poweroff" {
halt
}
'';
};
}; };
# Set timezone. # Set timezone.
@ -127,24 +86,8 @@ with lib.${namespace};
pulse.enable = true; pulse.enable = true;
}; };
# Bluetooth configuration. # Set system Type
hardware.bluetooth = { puzzlevision.archetypes.workstation.enable = true;
enable = true;
powerOnBoot = true;
package = pkgs.bluez;
settings = {
General = {
ControllerMode = "dual";
FastConnectable = "true";
Experimental = "true";
KernelExperimental = "true";
};
};
};
# Enable Gnome
puzzlevision.desktop.gnome.enable = true;
# Enable flatpak support. # Enable flatpak support.
services.flatpak.enable = true; services.flatpak.enable = true;
@ -177,7 +120,6 @@ with lib.${namespace};
nano nano
firefox firefox
chromium chromium
lutris
vlc vlc
spotify spotify