{ 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"; }; hyprland = { url = "github:hyprwm/Hyprland"; inputs.nixpkgs.follows = "nixpkgs"; }; anyrun = { url = "github:Kirottu/anyrun"; inputs.nixpkgs.follows = "nixpkgs"; }; wallpapers.url = "git+https://git.xenia.me.uk/xenia/wallpapers.git"; catppuccin-alacritty = { url = "github:catppuccin/alacritty"; flake = false; }; catppuccin-bat = { url = "github:catppuccin/bat"; flake = false; }; catppuccin-fish = { url = "github:catppuccin/fish"; flake = false; }; catppuccin-gitui = { url = "github:catppuccin/gitui"; flake = false; }; catppuccin-hyprland = { url = "github:catppuccin/hyprland"; flake = false; }; catppuccin-zathura = { url = "github:catppuccin/zathura"; flake = false; }; catppuccin-zsh = { url = "github:catppuccin/zsh-syntax-highlighting"; flake = false; }; }; outputs = { self, nixpkgs, ... }@inputs: let flakeURL = "git+https://git.xenia.me.uk/xenia/nixos.git?ref=main"; catppuccin-themes = with inputs; { alacritty = "${catppuccin-alacritty}/catppuccin-mocha.yml"; bat = "${catppuccin-bat}/Catppuccin-mocha.tmTheme"; fish = "${catppuccin-fish}/themes/Catppuccin Mocha.theme"; gitui = "${catppuccin-gitui}/theme/mocha.ron"; hyprland = "${catppuccin-hyprland}/themes/mocha.conf"; zathura = "${catppuccin-zathura}/src/catppuccin-mocha"; zsh = "${catppuccin-zsh}/themes/catppuccin_mocha-zsh-syntax-highlighting.zsh"; }; 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/service.nix ./home/pass/service.nix ./home/git/default.nix ./home/ssh/default.nix ./home/tui/default.nix ./home/tmux/default.nix ./home/hyprland/default.nix ./home/alacritty/default.nix ./home/firefox/default.nix ./home/zathura/default.nix ./home/emacs/server.nix ./home/neovim/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 pkgs = import nixpkgs { inherit system; config.allowUnfree = true; overlays = [ (final: prev: { waybar = prev.waybar.overrideAttrs (oldAttrs: { mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; }); }) ]; }; commonModule = { nix = { settings = { experimental-features = [ "nix-command" "flakes" ]; auto-optimise-store = true; }; gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 30d"; }; extraOptions = '' keep-outputs = true keep-derivations = true min-free = ${toString (100 * 1024 * 1024)} max-free = ${toString (1024 * 1024 * 1024)} ''; }; networking = { inherit hostName; networkmanager.enable = true; }; environment = { systemPackages = with pkgs; [ git neofetch ]; localBinInPath = true; shellAliases.nou = ''sudo nixos-rebuild switch --flake "${flakeURL}"''; }; services = { power-profiles-daemon.enable = true; passSecretService.enable = true; }; virtualisation.podman.enable = true; time.timeZone = "Europe/London"; i18n = let locale = "en_GB.UTF-8"; in { # Select internationalisation properties. defaultLocale = locale; extraLocaleSettings = { LC_ADDRESS = locale; LC_IDENTIFICATION = locale; LC_MEASUREMENT = locale; LC_MONETARY = locale; LC_NAME = locale; LC_NUMERIC = locale; LC_PAPER = locale; LC_TELEPHONE = locale; LC_TIME = locale; }; }; programs.${shell}.enable = true; system = { inherit stateVersion; autoUpgrade.flake = flakeURL; }; users.users.${user} = { inherit group; isNormalUser = true; description = "Evie Litherland-Smith"; extraGroups = [ "networkmanager" "wheel" "video" ]; shell = pkgs.${shell}; openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIANfkqd5lPTsSPU3SRYnAa1UjCYDmDeBTyzq5McmWlm6 xenia@Vanguard" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINI1dWlS16Keil0MGPWmMsBzx8F9ylfz+fRwxUr8/tZ/ ion" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII1tJFdbiyJApuVZFvo9E9kjlBwvXZeySqVuS2qGdxha tux@monarch" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDI44C35I2x9tqzeZDmIpbzmGJWXfATn/Wp5KzVRdlCi root@debian" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKMVEXJTqWkrpmvinPJGsSvome9bCd0CM4iu13aVG6UZ elitherl@Ronin" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/ZSSCN5sqrA+tdoIZr5EUm5DRuBV4dQ7J+QBEtUwUU xenia@Northstar" ]; }; home-manager = { useGlobalPkgs = true; useUserPackages = true; extraSpecialArgs = { inherit hostName user shell inputs catppuccin-themes; hyprland = inputs.hyprland; anyrun = inputs.anyrun; wallpapers = inputs.wallpapers; }; users.${user} = let username = user; homeDirectory = "/home/${user}"; in { imports = [ ./home/shell/${shell}.nix ./hosts/${hostName}/home.nix ] ++ homeModules; home = { inherit username homeDirectory stateVersion; }; programs.home-manager.enable = true; xdg.userDirs = { enable = true; createDirectories = true; extraConfig = { XDG_PROJECTS_DIR = "${homeDirectory}/Projects"; }; }; }; }; }; in nixpkgs.lib.nixosSystem { inherit pkgs; specialArgs = { inherit hostName user group shell inputs; }; modules = [ ./hosts/${hostName}/configuration.nix ./hosts/${hostName}/hardware-configuration.nix inputs.home-manager.nixosModules.home-manager commonModule ] ++ systemModules ++ serviceModules; }; homeConfig = { hostName ? default.hostName, user ? default.user , system ? default.system, shell ? default.shell , homeModules ? default.homeModules, stateVersion ? default.stateVersion }: inputs.home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages.${system}; extraSpecialArgs = { inherit hostName user shell inputs catppuccin-themes; hyprland = inputs.hyprland; anyrun = inputs.anyrun; wallpapers = inputs.wallpapers; }; modules = [ ./home/shell/${shell}.nix ./hosts/${hostName}/home.nix { home = { inherit stateVersion; username = user; homeDirectory = nixpkgs.lib.mkDefault "/home/${user}"; }; } ] ++ homeModules; }; in { nixosConfigurations = { Legion = let hostName = "Legion"; user = "xenia"; system = "x86_64-linux"; in systemConfig { inherit hostName user system; systemModules = [ ]; 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/git/default.nix ./home/ssh/default.nix ./home/tui/default.nix ]; }; Northstar = let hostName = "Northstar"; user = "xenia"; system = "x86_64-linux"; in systemConfig { inherit hostName user system; systemModules = default.systemModules ++ [ ]; }; Ronin = let hostName = "Ronin"; user = "elitherl"; system = "x86_64-linux"; in systemConfig { inherit hostName user systemConfig; }; Vanguard = let hostName = "Vanguard"; user = "xenia"; system = "x86_64-linux"; in systemConfig { inherit hostName user system; systemModules = [ ./system/gamepass.nix ]; serviceModules = [ ./services/sshd/default.nix ]; homeModules = [ ./home/git/default.nix ./home/ssh/default.nix ./home/tui/default.nix ]; }; }; homeConfigurations = { "tux@Monarch" = let hostName = "Monarch"; user = "tux"; system = "aarch64-darwin"; shell = "zsh"; in homeConfig { inherit hostName user system shell; homeModules = [ ./home/accounts/default.nix ./home/pass/default.nix ./home/git/default.nix ./home/ssh/default.nix ./home/tui/default.nix ./home/tmux/default.nix ./home/alacritty/default.nix ./home/emacs/default.nix ]; }; }; }; }