{ 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 = { 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/hyprland/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 group shell;}; 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, ... }: let flakeURL = "https://git.xenia.me.uk/xenia/nixos.git?ref=main"; in { boot.loader = { systemd-boot.enable = true; efi.canTouchEfiVariables = true; }; programs = { ${shell}.enable = true; command-not-found.enable = false; nano = { enable = true; syntaxHighlight = true; nanorc = '' set nowrap set tabstospaces set tabsize 2 ''; }; }; nix = { enable = true; settings = { trusted-users = ["root" user]; experimental-features = ["nix-command" "flakes"]; auto-optimise-store = true; }; channel.enable = true; nixPath = ["nixpkgs=${pkgs.path}"]; registry = { nixpkgs.flake = nixpkgs; nixos = { from = { type = "indirect"; id = "nixos"; }; to = { type = "git"; url = flakeURL; }; }; pyenv = { from = { type = "indirect"; id = "pyenv"; }; to = { type = "git"; url = "https://git.xenia.me.uk/utils/pyenv.git"; }; }; jupyter = { from = { type = "indirect"; id = "jupyter"; }; to = { type = "git"; url = "https://git.xenia.me.uk/xenia/nix-jupyter.git"; }; }; }; 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; system = { inherit stateVersion; autoUpgrade = { enable = true; flake = "git+${flakeURL}"; dates = "02:30"; }; }; networking = { inherit hostName; firewall.enable = true; }; stylix = { autoEnable = false; targets = { chromium.enable = true; console.enable = true; fish.enable = true; }; image = ./wallpapers/sweet/Sweet-space.png; base16Scheme = ./schemes/modus-vivendi-tinted.yaml; polarity = "dark"; opacity = { applications = 0.85; desktop = 1.0; popups = 0.5; terminal = 0.85; }; fonts = rec { sizes = { applications = 16; desktop = 18; popups = 18; terminal = 16; }; serif = monospace; sansSerif = monospace; monospace = { name = "Iosevka Nerd Font"; package = pkgs.nerdfonts.override {fonts = ["Iosevka"];}; }; emoji = { name = "Noto Color Emoji"; package = pkgs.noto-fonts-emoji; }; }; homeManagerIntegration.followSystem = true; }; fonts = { packages = with pkgs; [ (nerdfonts.override {fonts = ["NerdFontsSymbolsOnly"];}) emacs-all-the-icons-fonts weather-icons noto-fonts noto-fonts-cjk noto-fonts-emoji ]; fontconfig.enable = true; }; users = { defaultUserShell = pkgs.${shell}; 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} = { inherit group; 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 ++ serviceModules; }; in { nixosConfigurations = { ## Server Legion = let hostName = "Legion"; user = "xenia"; system = "x86_64-linux"; in systemConfig { inherit hostName user system; systemModules = [./system/default.nix]; serviceModules = [ ./services/adguardhome.nix ./services/caddy.nix ./services/gitea.nix ./services/grafana.nix ./services/minecraft.nix # ./services/ntfy-sh.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 = default.systemModules ++ [./system/games.nix]; }; Vanguard = let hostName = "Vanguard"; user = "xenia"; system = "x86_64-linux"; in systemConfig { inherit hostName user system; systemModules = default.systemModules ++ [./system/games.nix]; }; ## Work 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;}; }; }; }