nixos/flake.nix
Evie Litherland-Smith e24e35a64f Misc fixes (mostlt for Legion)
Move stylix config up to flake.nix as config wouldn't build without it,
also move wallpapers directory up to top level to match

Only enable git-sync where it's defined, rather than in home/default.nix
2023-10-18 06:57:42 +01:00

285 lines
9.7 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";
};
anyrun = {
url = "github:Kirottu/anyrun";
inputs.nixpkgs.follows = "nixpkgs";
};
watershot = {
url = "github:Kirottu/watershot";
inputs.nixpkgs.follows = "nixpkgs";
};
# Non-flake inputs
doom-emacs = {
url = "github:doomemacs/doomemacs";
flake = false;
};
gitui = {
url = "github:extrawurst/gitui";
flake = false;
};
tokyonight-folke = {
url = "github:folke/tokyonight.nvim";
flake = false;
};
};
outputs = { self, nixpkgs, home-manager, stylix, ... }@inputs:
let
default = {
hostName = "Atlas";
user = "xenia";
system = "x86_64-linux";
group = "users";
shell = "zsh";
systemModules = [ ./system/hyprland.nix ];
serviceModules =
[ ./services/sshd/default.nix ./services/syncthing/default.nix ];
homeModules = [
./home/accounts/default.nix
./home/emacs/default.nix
./home/ferdium/default.nix
./home/hyprland/default.nix
./home/alacritty.nix
./home/default.nix
./home/firefox.nix
./home/kdeconnect.nix
./home/media.nix
./home/pass.nix
./home/zathura.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;
inherit (inputs) anyrun watershot;
};
extraSpecialArgs = specialArgs // {
inherit (inputs) doom-emacs gitui tokyonight-folke;
};
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;
nix = {
enable = true;
settings = {
experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true;
};
channel.enable = false;
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
registry = {
nixpkgs.to = {
type = "path";
path = pkgs.path;
};
};
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; };
stylix = {
image = ./wallpapers/default.jpg;
base16Scheme =
"${pkgs.base16-schemes}/share/themes/tokyo-night-dark.yaml";
polarity = "dark";
opacity = {
popups = 0.8;
terminal = 0.8;
};
fonts = rec {
emoji = {
name = "Noto Color Emoji";
package = pkgs.noto-fonts-emoji;
};
monospace = {
name = "Fira Mono";
package = pkgs.fira-mono;
};
sansSerif = {
name = "Fira Sans";
package = pkgs.fira;
};
serif = sansSerif;
};
homeManagerIntegration.followSystem = true;
};
fonts = {
packages = with pkgs; [
fira
fira-mono
fira-code
fira-code-symbols
(nerdfonts.override { fonts = [ "FiraCode" ]; })
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
emacs-all-the-icons-fonts
];
fontconfig = {
enable = true;
defaultFonts = rec {
sansSerif = [ "Fira Sans" "DejaVu Sans" ];
serif = sansSerif;
monospace = [ "Fira Mono" "DejaVu Sans Mono" ];
emoji = [ "Noto Color Emoji" "Noto Emoji" ];
};
};
};
users.users.${user} = {
inherit group;
isNormalUser = true;
description = "Evie Litherland-Smith";
extraGroups = [ "networkmanager" "wheel" "video" ];
shell = pkgs.${shell};
initialHashedPassword =
"$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3";
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIANfkqd5lPTsSPU3SRYnAa1UjCYDmDeBTyzq5McmWlm6 xenia@Vanguard"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINI1dWlS16Keil0MGPWmMsBzx8F9ylfz+fRwxUr8/tZ/ ion"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDI44C35I2x9tqzeZDmIpbzmGJWXfATn/Wp5KzVRdlCi root@debian"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKMVEXJTqWkrpmvinPJGsSvome9bCd0CM4iu13aVG6UZ elitherl@Ronin"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/ZSSCN5sqrA+tdoIZr5EUm5DRuBV4dQ7J+QBEtUwUU xenia@Northstar"
];
};
home-manager = {
inherit extraSpecialArgs;
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 = {
Legion = let
hostName = "Legion";
user = "xenia";
system = "x86_64-linux";
in systemConfig {
inherit hostName user system;
systemModules = [ ./system/default.nix ];
serviceModules = [
# ./services/adguardhome/default.nix
./services/gitea/default.nix
./services/nextcloud/default.nix
./services/sshd/default.nix
./services/syncthing/default.nix
# ./services/terraria/windy_limbo_of_melancholy.nix
# ./services/traefik/adguardhome.nix
./services/traefik/gitea.nix
./services/traefik/nextcloud.nix
# ./services/traefik/qbittorrent.nix
];
homeModules = [ ./home/default.nix ];
};
Northstar = let
hostName = "Northstar";
user = "xenia";
system = "x86_64-linux";
in systemConfig {
inherit hostName user system;
systemModules = default.systemModules ++ [ ./system/steam.nix ];
};
Ronin = let
hostName = "Ronin";
user = "elitherl";
system = "x86_64-linux";
in systemConfig { inherit hostName user system; };
Scorch = let
hostName = "Scorch";
user = "elitherl";
system = "x86_64-linux";
in systemConfig { inherit hostName user system; };
Vanguard = let
hostName = "Vanguard";
user = "xenia";
system = "x86_64-linux";
in systemConfig {
inherit hostName user system;
systemModules = default.systemModules ++ [ ./system/steam.nix ];
};
};
};
}