Evie Litherland-Smith
c6e1dc4f02
Packaging Iosevka Custom as separate flake lets me update independently of main system nixpkgs, so easier to control when to do the main rebuilds.
265 lines
8.1 KiB
Nix
265 lines
8.1 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-unstable";
|
|
home-manager = {
|
|
url = "github:nix-community/home-manager";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
stylix = {
|
|
url = "github:danth/stylix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
iosevka-custom.url = "git+https://git.xenia.me.uk/xenia/iosevka.git";
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
home-manager,
|
|
stylix,
|
|
iosevka-custom,
|
|
...
|
|
}: let
|
|
systemConfig = {
|
|
hostName ? "Atlas",
|
|
user ? "xenia",
|
|
system ? "x86_64-linux",
|
|
stateVersion ? "23.05",
|
|
systemModules ? [],
|
|
homeModules ? [],
|
|
}: let
|
|
defaultUserShell = "zsh";
|
|
specialArgs = {
|
|
inherit hostName user;
|
|
accentColour = "base07"; # catppuccin lavender
|
|
catppuccinVariant = "Mocha";
|
|
};
|
|
in
|
|
nixpkgs.lib.nixosSystem {
|
|
inherit system specialArgs;
|
|
modules =
|
|
[
|
|
home-manager.nixosModules.home-manager
|
|
stylix.nixosModules.stylix
|
|
./hosts/${hostName}/configuration.nix
|
|
./hosts/${hostName}/hardware-configuration.nix
|
|
./system/default.nix
|
|
({
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: {
|
|
nix = {
|
|
enable = true;
|
|
settings = {
|
|
cores = 0; # Use max cores on system
|
|
max-jobs = 1; # No job concurrency
|
|
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;
|
|
stylix.fonts = let
|
|
font = name: {
|
|
name = iosevka-custom.outputs.names."iosevka-custom-${name}";
|
|
package = iosevka-custom.outputs.packages.${system}."iosevka-custom-${name}";
|
|
};
|
|
in {
|
|
serif = font "etoile";
|
|
sansSerif = font "aile";
|
|
monospace = font "nerdfont";
|
|
};
|
|
system = {
|
|
inherit stateVersion;
|
|
autoUpgrade = {
|
|
enable = true;
|
|
flake = lib.mkDefault self.outPath;
|
|
flags = [
|
|
"--update-input"
|
|
"nixpkgs"
|
|
"--no-write-lock-file"
|
|
"-L" # print build logs
|
|
];
|
|
dates = "02:00";
|
|
};
|
|
};
|
|
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";
|
|
shell = pkgs.nushell;
|
|
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 = 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 = let
|
|
hostName = "Legion";
|
|
user = "xenia";
|
|
system = "x86_64-linux";
|
|
in
|
|
systemConfig {
|
|
inherit hostName user system;
|
|
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 = let
|
|
hostName = "Northstar";
|
|
user = "xenia";
|
|
system = "x86_64-linux";
|
|
in
|
|
systemConfig {
|
|
inherit hostName user system;
|
|
systemModules = [
|
|
./system/laptop.nix
|
|
./system/hyprland.nix
|
|
./system/games.nix
|
|
];
|
|
homeModules = [
|
|
./home/hyprland/default.nix
|
|
];
|
|
};
|
|
|
|
Vanguard = let
|
|
hostName = "Vanguard";
|
|
user = "xenia";
|
|
system = "x86_64-linux";
|
|
in
|
|
systemConfig {
|
|
inherit hostName user system;
|
|
systemModules = [
|
|
./services/sshd.nix
|
|
./system/hyprland.nix
|
|
./system/games.nix
|
|
];
|
|
homeModules = [
|
|
./home/hyprland/default.nix
|
|
];
|
|
};
|
|
|
|
## Work
|
|
|
|
Ronin = let
|
|
hostName = "Ronin";
|
|
user = "elitherl";
|
|
system = "x86_64-linux";
|
|
in
|
|
systemConfig {
|
|
inherit hostName user system;
|
|
systemModules = [
|
|
./system/laptop.nix
|
|
./system/hyprland.nix
|
|
];
|
|
homeModules = [
|
|
./home/hyprland/default.nix
|
|
];
|
|
};
|
|
|
|
Scorch = let
|
|
hostName = "Scorch";
|
|
user = "elitherl";
|
|
system = "x86_64-linux";
|
|
in
|
|
systemConfig {
|
|
inherit hostName user system;
|
|
systemModules = [
|
|
./system/hyprland.nix
|
|
];
|
|
homeModules = [
|
|
./home/hyprland/default.nix
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|