nixos/flake.nix
Evie Litherland-Smith ecc9fae75a Major changes: switch to tracking nixos-23.11 and remove stylix.
Motivated by the xz backdoor bug, switch NixOS system to track 23.11
instead of unstable, and will bump version numbers as they come along
rather than do rolling release.
Reverted a couple of changes that were introduced in recent nixpkgs
versions, only major one was switching back to swaylock as hyprlock
isn't in nixpkgs 23.11

Remove stylix and replace with lower-level base16.nix, partly because
stylix was doing something strange pulling in extra flakes (and
breaking on 23.11), partly because I was most of the way there anyway.
Remove last references to stylix in config, mostly just changing
stylix.colors to scheme (from base16) and defining fonts in
specialArgs to be used in the same way as before.
2024-03-31 12:59:24 +01:00

243 lines
7.5 KiB
Nix

{
description = "Evie's machine configurations";
nixConfig = {
extra-substituters = ["https://nix.xenia.me.uk"];
extra-trusted-public-keys = ["nix.xenia.me.uk:VaQu+8hshk7aSbW3z91pgkKbYeAcO3Q0AomqP8RaaLc="];
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11";
home-manager = {
url = "github:nix-community/home-manager/release-23.11";
inputs.nixpkgs.follows = "nixpkgs";
};
iosevka-custom.url = "git+https://git.xenia.me.uk/pixelifytica/iosevka.git";
base16.url = "github:SenchoPens/base16.nix";
tt-schemes = {
url = "github:tinted-theming/schemes";
flake = false;
};
};
outputs = {
nixpkgs,
home-manager,
iosevka-custom,
base16,
tt-schemes,
...
}: let
systemConfig = {
hostName ? "Atlas",
user ? "pixelifytica",
system ? "x86_64-linux",
stateVersion ? "23.05",
systemModules ? [],
homeModules ? [],
}: let
defaultUserShell = "zsh";
specialArgs = {
inherit hostName user;
accentColour = "base07"; # catppuccin lavender
catppuccinVariant = "Mocha";
fonts = with import nixpkgs {inherit system;};
with iosevka-custom.outputs; rec {
sizes = {
applications = 16;
desktop = 20;
popups = 20;
terminal = 16;
};
serif = sansSerif;
sansSerif = {
name = names."iosevka-custom-aile";
package = packages.${system}."iosevka-custom-aile";
};
monospace = {
name = names."iosevka-custom-nerdfont";
package = packages.${system}."iosevka-custom-nerdfont";
};
emoji = {
name = "EmojiOne Color";
package = emojione;
};
};
};
in
nixpkgs.lib.nixosSystem {
inherit system specialArgs;
modules =
[
home-manager.nixosModules.home-manager
base16.nixosModule
./hosts/${hostName}/configuration.nix
./hosts/${hostName}/hardware-configuration.nix
./system/default.nix
({
config,
lib,
pkgs,
catppuccinVariant ? "Mocha",
...
}: {
scheme = "${tt-schemes}/base16/catppuccin-${lib.strings.toLower catppuccinVariant}.yaml";
nix = {
enable = true;
package = pkgs.nixVersions.nix_2_19;
settings = {
cores = 0;
max-jobs = "auto";
trusted-users = ["root" user];
experimental-features = ["nix-command" "flakes"];
auto-optimise-store = true;
};
channel.enable = true;
nixPath = ["nixpkgs=${pkgs.path}"];
registry.nixpkgs.flake = nixpkgs;
gc = {
automatic = true;
options = "--delete-older-than 7d";
};
optimise.automatic = true;
extraOptions = ''
keep-outputs = false
keep-derivations = false
min-free = ${toString (100 * 1024 * 1024)}
max-free = ${toString (1024 * 1024 * 1024)}
'';
};
nixpkgs.config.allowUnfree = true;
networking = {inherit hostName;};
programs.${defaultUserShell}.enable = true;
system = {inherit stateVersion;};
users = {
defaultUserShell = pkgs.${defaultUserShell};
users = let
authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINI1dWlS16Keil0MGPWmMsBzx8F9ylfz+fRwxUr8/tZ/ ion"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDOcgeR3hh23aTiXnyC37xdP8oXfTZbbjgWzkUyxhT9P root@Vanguard"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIANfkqd5lPTsSPU3SRYnAa1UjCYDmDeBTyzq5McmWlm6 xenia@Vanguard"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/ZSSCN5sqrA+tdoIZr5EUm5DRuBV4dQ7J+QBEtUwUU xenia@Northstar"
];
in {
root.openssh = {inherit authorizedKeys;};
${user} = {
group = "users";
isNormalUser = true;
description = "Evie Litherland-Smith";
extraGroups = ["networkmanager" "wheel" "video" "input" "uinput"];
initialHashedPassword = "$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3";
openssh = {inherit authorizedKeys;};
};
};
};
home-manager = {
extraSpecialArgs = {inherit (config) scheme;} // specialArgs;
useGlobalPkgs = true;
useUserPackages = true;
users = {
root = {
imports = [./home/default.nix];
home = {
inherit stateVersion;
username = "root";
homeDirectory = "/root";
};
programs.home-manager.enable = true;
};
${user} = let
username = user;
homeDirectory = "/home/${user}";
in {
imports =
[./hosts/${hostName}/home.nix ./home/default.nix]
++ homeModules;
home = {inherit username homeDirectory stateVersion;};
programs.home-manager.enable = true;
xdg.userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_PROJECTS_DIR = "${homeDirectory}/Projects";
};
};
};
};
};
})
]
++ systemModules;
};
in {
nixosConfigurations = {
## Server
Legion = systemConfig {
hostName = "Legion";
systemModules = [
./services/nix-serve.nix
./services/caddy.nix
./services/gitea.nix
./services/grafana.nix
./services/minecraft.nix
./services/sshd.nix
./services/syncthing.nix
];
homeModules = [./home/default.nix];
};
## Personal
Northstar = systemConfig {
hostName = "Northstar";
systemModules = [
./system/laptop.nix
./system/hyprland.nix
];
homeModules = [
./home/hyprland/default.nix
];
};
Vanguard = systemConfig {
hostName = "Vanguard";
systemModules = [
./system/hyprland.nix
./system/games.nix
];
homeModules = [
./home/hyprland/default.nix
];
};
## Work
Ronin = systemConfig {
hostName = "Ronin";
user = "elitherl";
systemModules = [
./system/laptop.nix
./system/hyprland.nix
];
homeModules = [
./home/hyprland/default.nix
./home/email/work.nix
];
};
Scorch = systemConfig {
hostName = "Scorch";
user = "elitherl";
systemModules = [
./system/hyprland.nix
];
homeModules = [
./home/hyprland/default.nix
./home/email/work.nix
];
};
};
};
}