{ 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"; }; nix-index-database = { url = "github:Mic92/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:danth/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; # Non-flake inputs crafted-emacs = { url = "github:SystemCrafters/crafted-emacs"; flake = false; }; tokyonight-folke = { url = "github:folke/tokyonight.nvim"; flake = false; }; }; outputs = { self, nixpkgs, home-manager, nix-index-database, stylix, ... }@inputs: let default = { hostName = "Atlas"; user = "xenia"; system = "x86_64-linux"; group = "users"; shell = "zsh"; systemModules = [ ./system/hyprland.nix ]; homeModules = [ ./home/accounts/default.nix ./home/emacs/default.nix ./home/hyprland/default.nix ./home/alacritty.nix ./home/default.nix ./home/firefox.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 ? [ ] , homeModules ? default.homeModules, stateVersion ? default.stateVersion }: let specialArgs = { inherit hostName user; }; extraSpecialArgs = specialArgs // { inherit (inputs) crafted-emacs tokyonight-folke; }; in nixpkgs.lib.nixosSystem { inherit system specialArgs; modules = [ ./hosts/${hostName}/configuration.nix ./hosts/${hostName}/hardware-configuration.nix home-manager.nixosModules.home-manager nix-index-database.nixosModules.nix-index 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 ''; }; command-not-found.enable = false; nix-index.enable = true; }; nix = { enable = true; settings = { experimental-features = [ "nix-command" "flakes" ]; auto-optimise-store = true; }; channel.enable = false; nixPath = [ "nixpkgs=${pkgs.path}" "/nix/var/nix/profiles/per-user/root/channels" ]; 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" "discord" "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.5; 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" "FiraMono" "DejaVuSansMono" "Noto" "ComicShannsMono" "NerdFontsSymbolsOnly" ]; }) emacs-all-the-icons-fonts weather-icons noto-fonts noto-fonts-cjk noto-fonts-emoji liberation_ttf ]; 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 = let authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINI1dWlS16Keil0MGPWmMsBzx8F9ylfz+fRwxUr8/tZ/ ion" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIANfkqd5lPTsSPU3SRYnAa1UjCYDmDeBTyzq5McmWlm6 xenia@Vanguard" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/ZSSCN5sqrA+tdoIZr5EUm5DRuBV4dQ7J+QBEtUwUU xenia@Northstar" ]; in { root = { shell = pkgs.${shell}; openssh = { inherit authorizedKeys; }; }; ${user} = { inherit group; isNormalUser = true; description = "Evie Litherland-Smith"; extraGroups = [ "networkmanager" "wheel" "video" ]; shell = pkgs.${shell}; initialHashedPassword = "$y$j9T$tHIPQt09Kf3KH2eIRze3g/$2mwSlcq27DTGvHNPJ5EP9/1CfL3bXP0F6oS/Vuffmn3"; openssh = { inherit authorizedKeys; }; }; }; 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/ntfy-sh/default.nix ./services/sshd/default.nix ./services/syncthing/default.nix ]; homeModules = [ ./home/default.nix ./home/media.nix ./home/emacs/default.nix ]; }; 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; }; Vanguard = let hostName = "Vanguard"; user = "xenia"; system = "x86_64-linux"; in systemConfig { inherit hostName user system; systemModules = default.systemModules ++ [ ./system/steam.nix ]; homeModules = default.homeModules ++ [ ./home/obs.nix ]; }; }; }; }