nixos/flake.nix
Evie Litherland-Smith 49f4725d9a Add self (nixos config flake) to registry as "nixos"
Don't know why yet, but could be nice to have int the future. Note
this the whole config flake, rather than just the pinned version of nixpkgs
2024-01-14 14:39:07 +00:00

278 lines
9.4 KiB
Nix

{
description = "Evie's machine configurations";
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";
};
};
outputs = { self, nixpkgs, home-manager, stylix, ... }:
let
default = {
hostName = "Atlas";
user = "xenia";
system = "x86_64-linux";
group = "users";
shell = "zsh";
systemModules = [ ./system/hyprland.nix ];
serviceModules = [ ];
homeModules = [
./home/default.nix
./home/emacs.nix
./home/accounts/default.nix
./home/hyprland/default.nix
./home/nyxt/default.nix
];
stateVersion = "23.05";
};
systemConfig = { hostName ? default.hostName, user ? default.user
, system ? default.system, group ? default.group, shell ? default.shell
, systemModules ? default.systemModules
, serviceModules ? default.serviceModules
, homeModules ? default.homeModules, stateVersion ? default.stateVersion
}:
let specialArgs = { inherit hostName user; };
in nixpkgs.lib.nixosSystem {
inherit system specialArgs;
modules = [
./hosts/${hostName}/configuration.nix
./hosts/${hostName}/hardware-configuration.nix
home-manager.nixosModules.home-manager
stylix.nixosModules.stylix
({ config, lib, pkgs, ... }: {
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
programs = {
${shell}.enable = true;
nano = {
enable = true;
syntaxHighlight = true;
nanorc = ''
set nowrap
set tabstospaces
set tabsize 2
'';
};
};
nix = {
enable = true;
settings = {
experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true;
};
channel.enable = true;
registry = {
nixpkgs.flake = nixpkgs;
nixos.flake = self;
};
gc = {
automatic = true;
options = "--delete-older-than 7d";
};
optimise.automatic = true;
extraOptions = ''
keep-outputs = true
keep-derivations = true
min-free = ${toString (100 * 1024 * 1024)}
max-free = ${toString (1024 * 1024 * 1024)}
'';
};
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
"steam"
"steam-original"
"steam-run"
"nomachine-client"
];
system = { inherit stateVersion; };
networking = {
inherit hostName;
firewall.enable = true;
};
stylix = {
autoEnable = false;
targets = {
chromium.enable = true;
console.enable = true;
};
image = ./wallpapers/space.png;
base16Scheme =
"${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
override = {
scheme =
"Catppuccin Mocha, using fg and bg colours from emacs modus-vivdendi-tinted";
base00 = "0d0e1c";
base01 = "1d2235";
base04 = "c6daff";
base05 = "ffffff";
};
polarity = "dark";
opacity = {
popups = 0.5;
terminal = 0.8;
};
fonts = rec {
sizes.terminal = 12;
emoji = {
name = "Noto Color Emoji";
package = pkgs.noto-fonts-emoji;
};
monospace = {
name = "FiraCode Nerd Font";
package =
(pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; });
};
sansSerif = {
name = "Fira Sans";
package = pkgs.fira;
};
serif = sansSerif;
};
homeManagerIntegration.followSystem = true;
};
fonts = {
packages = with pkgs; [
fira
fira-mono
fira-code
(nerdfonts.override {
fonts = [ "FiraCode" "NerdFontsSymbolsOnly" ];
})
emacs-all-the-icons-fonts
weather-icons
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
];
fontconfig.enable = true;
};
users.users = let
authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINI1dWlS16Keil0MGPWmMsBzx8F9ylfz+fRwxUr8/tZ/ ion"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIANfkqd5lPTsSPU3SRYnAa1UjCYDmDeBTyzq5McmWlm6 xenia@Vanguard"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/ZSSCN5sqrA+tdoIZr5EUm5DRuBV4dQ7J+QBEtUwUU xenia@Northstar"
];
in {
root.openssh = { inherit authorizedKeys; };
${user} = {
inherit group;
isNormalUser = true;
description = "Evie Litherland-Smith";
extraGroups =
[ "networkmanager" "wheel" "video" "input" "uinput" ];
shell = pkgs.${shell};
initialHashedPassword =
"$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3";
openssh = { inherit authorizedKeys; };
};
};
home-manager = {
extraSpecialArgs = { inherit hostName; };
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 ++ serviceModules;
};
in {
nixosConfigurations = {
## Server
Legion = let
hostName = "Legion";
user = "xenia";
system = "x86_64-linux";
in systemConfig {
inherit hostName user system;
systemModules = [ ./system/default.nix ./system/autoupgrade.nix ];
serviceModules = [
./services/adguardhome.nix
./services/caddy.nix
./services/gitea.nix
./services/grafana.nix
./services/ntfy-sh.nix
./services/sshd.nix
./services/syncthing.nix
];
homeModules = [ ./home/default.nix ];
};
## Laptops
Northstar = let
hostName = "Northstar";
user = "xenia";
system = "x86_64-linux";
in systemConfig { inherit hostName user system; };
Ronin = let
hostName = "Ronin";
user = "elitherl";
system = "x86_64-linux";
in systemConfig { inherit hostName user system; };
## Desktops
Scorch = let
hostName = "Scorch";
user = "elitherl";
system = "x86_64-linux";
in systemConfig {
inherit hostName user system;
systemModules = default.systemModules ++ [ ./system/autoupgrade.nix ];
};
Vanguard = let
hostName = "Vanguard";
user = "xenia";
system = "x86_64-linux";
in systemConfig {
inherit hostName user system;
systemModules = default.systemModules
++ [ ./system/autoupgrade.nix ./system/steam.nix ];
homeModules = default.homeModules ++ [ ./home/games/default.nix ];
};
};
};
}