{ description = "An opinionated flake containing the NixOS, nix-darwin, and home-manager configurations for multiple systems."; # Other flakes that we want to pull from inputs = { # Used for system packages nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # Used for specific stable packages nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05"; # Used for MacOS system config darwin = { url = "github:lnl7/nix-darwin/master"; inputs.nixpkgs.follows = "nixpkgs"; }; # Used for Windows Subsystem for Linux compatibility wsl = { url = "github:nix-community/NixOS-WSL"; inputs.nixpkgs.follows = "nixpkgs"; }; # Used for user packages and dotfiles home-manager = { url = "github:nix-community/home-manager/master"; inputs.nixpkgs.follows = "nixpkgs"; # Use system packages list for their inputs }; # Community packages; used for Firefox extensions nur = { url = "github:nix-community/nur"; inputs.nixpkgs.follows = "nixpkgs"; }; # # Use official Firefox binary for macOS # firefox-darwin = { # url = "github:bandithedoge/nixpkgs-firefox-darwin"; # inputs.nixpkgs.follows = "nixpkgs"; # }; # Better App install management in macOS mac-app-util = { url = "github:hraban/mac-app-util"; inputs.nixpkgs.follows = "nixpkgs"; # Use system packages list for their inputs }; # Manage disk format and partitioning disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; # # Wallpapers # wallpapers = { # url = "gitlab:exorcist365/wallpapers"; # flake = false; # }; # Used to generate NixOS images for other platforms nixos-generators = { url = "github:nix-community/nixos-generators"; inputs.nixpkgs.follows = "nixpkgs"; }; # Convert Nix to Neovim config nix2vim = { url = "github:gytis-ivaskevicius/nix2vim"; inputs.nixpkgs.follows = "nixpkgs"; }; # # Neovim plugins # base16-nvim-src = { # url = "github:RRethy/base16-nvim"; # flake = false; # }; # nvim-lspconfig-src = { # # https://github.com/neovim/nvim-lspconfig/tags # url = "github:neovim/nvim-lspconfig/v0.1.8"; # flake = false; # }; # cmp-nvim-lsp-src = { # url = "github:hrsh7th/cmp-nvim-lsp"; # flake = false; # }; # baleia-nvim-src = { # # https://github.com/m00qek/baleia.nvim/tags # url = "github:m00qek/baleia.nvim"; # flake = false; # }; # nvim-treesitter-src = { # # https://github.com/nvim-treesitter/nvim-treesitter/tags # url = "github:nvim-treesitter/nvim-treesitter/v0.9.2"; # flake = false; # }; # telescope-nvim-src = { # # https://github.com/nvim-telescope/telescope.nvim/releases # url = "github:nvim-telescope/telescope.nvim/0.1.8"; # flake = false; # }; # telescope-project-nvim-src = { # url = "github:nvim-telescope/telescope-project.nvim"; # flake = false; # }; # toggleterm-nvim-src = { # # https://github.com/akinsho/toggleterm.nvim/tags # url = "github:akinsho/toggleterm.nvim/v2.12.0"; # flake = false; # }; # bufferline-nvim-src = { # # https://github.com/akinsho/bufferline.nvim/releases # url = "github:akinsho/bufferline.nvim/v4.6.1"; # flake = false; # }; # nvim-tree-lua-src = { # url = "github:kyazdani42/nvim-tree.lua"; # flake = false; # }; # hmts-nvim-src = { # url = "github:calops/hmts.nvim"; # flake = false; # }; # fidget-nvim-src = { # # https://github.com/j-hui/fidget.nvim/tags # url = "github:j-hui/fidget.nvim/v1.4.5"; # flake = false; # }; # nvim-lint-src = { # url = "github:mfussenegger/nvim-lint"; # flake = false; # }; # tiny-inline-diagnostic-nvim-src = { # url = "github:rachartier/tiny-inline-diagnostic.nvim"; # flake = false; # }; # snipe-nvim-src = { # url = "github:leath-dub/snipe.nvim"; # flake = false; # }; # Tree-Sitter Grammars tree-sitter-bash = { url = "github:tree-sitter/tree-sitter-bash/master"; flake = false; }; tree-sitter-python = { url = "github:tree-sitter/tree-sitter-python/master"; flake = false; }; tree-sitter-lua = { url = "github:MunifTanjim/tree-sitter-lua/main"; flake = false; }; tree-sitter-ini = { url = "github:justinmk/tree-sitter-ini"; flake = false; }; tree-sitter-puppet = { url = "github:amaanq/tree-sitter-puppet"; flake = false; }; tree-sitter-rasi = { url = "github:Fymyte/tree-sitter-rasi"; flake = false; }; tree-sitter-vimdoc = { url = "github:neovim/tree-sitter-vimdoc"; flake = false; }; # MPV Scripts zenyd-mpv-scripts = { url = "github:zenyd/mpv-scripts"; flake = false; }; # # Git alternative # # Fixes: https://github.com/martinvonz/jj/issues/4784 # jujutsu = { # url = "github:martinvonz/jj"; # inputs.nixpkgs.follows = "nixpkgs"; # }; # Nextcloud Apps nextcloud-news = { # https://github.com/nextcloud/news/releases url = "https://github.com/nextcloud/news/releases/download/25.0.0-alpha12/news.tar.gz"; flake = false; }; nextcloud-external = { # https://github.com/nextcloud-releases/external/releases url = "https://github.com/nextcloud-releases/external/releases/download/v5.5.2/external-v5.5.2.tar.gz"; flake = false; }; nextcloud-cookbook = { # https://github.com/christianlupus-nextcloud/cookbook-releases/releases/ url = "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.2/cookbook-0.11.2.tar.gz"; flake = false; }; nextcloud-snappymail = { # https://github.com/the-djmaze/snappymail/releases # https://snappymail.eu/repository/nextcloud url = "https://snappymail.eu/repository/nextcloud/snappymail-2.38.2-nextcloud.tar.gz"; # url = "https://github.com/nmasur/snappymail-nextcloud/releases/download/v2.36.3/snappymail-2.36.3-nextcloud.tar.gz"; flake = false; }; }; outputs = { nixpkgs, ... }@inputs: let lib = import ./lib inputs; # Global configuration for my systems globals = let baseName = "masu.rs"; in rec { user = "noah"; fullName = "Noah Masur"; gitName = fullName; gitEmail = "7386960+nmasur@users.noreply.github.com"; dotfilesRepo = "https://github.com/nmasur/dotfiles"; hostnames = { audiobooks = "read.${baseName}"; books = "books.${baseName}"; budget = "money.${baseName}"; content = "cloud.${baseName}"; download = "download.${baseName}"; files = "files.${baseName}"; git = "git.${baseName}"; imap = "imap.purelymail.com"; influxdb = "influxdb.${baseName}"; irc = "irc.${baseName}"; mail = "noahmasur.com"; metrics = "metrics.${baseName}"; minecraft = "minecraft.${baseName}"; n8n = "n8n.${baseName}"; notifications = "ntfy.${baseName}"; paperless = "paper.${baseName}"; photos = "photos.${baseName}"; prometheus = "prom.${baseName}"; secrets = "vault.${baseName}"; smtp = "smtp.purelymail.com"; status = "status.${baseName}"; stream = "stream.${baseName}"; transmission = "transmission.${baseName}"; }; }; in rec { inherit lib; # inherit buildDarwin pkgsBySystem; # # # Contains my full system builds, including home-manager # # nixos-rebuild switch --flake .#tempest # nixosConfigurations = # (builtins.mapAttrs ( # name: module: # buildNixos { # pkgs = pkgsBySystem.x86_64-linux; # modules = [ module ]; # } # ) x86_64-linux-hosts) # // (builtins.mapAttrs ( # name: module: # buildNixos { # pkgs = pkgsBySystem.aarch64-linux; # modules = [ module ]; # } # ) aarch64-linux-hosts); # # # Contains my full Mac system builds, including home-manager # # darwin-rebuild switch --flake .#lookingglass # darwinConfigurations = builtins.mapAttrs ( # name: module: # buildDarwin { # pkgs = pkgsBySystem.aarch64-darwin; # modules = [ module ]; # } # ) aarch64-darwin-hosts; # # # For quickly applying home-manager settings with: # # home-manager switch --flake .#tempest # homeConfigurations = builtins.mapAttrs ( # name: module: # buildHome { # pkgs = pkgsBySystem.x86_64-linux; # module = [ module ]; # } # ) nixosModules; # Disk formatting, only used once diskoConfigurations = { root = import ./hosts/x86_64-linux/swan/root.nix; }; # packages = # let # staff = # system: # import ./hosts/staff { # inherit # inputs # globals # overlays # system # ; # }; # neovim = # system: # let # pkgs = import nixpkgs { inherit system overlays; }; # in # import ./modules/common/neovim/package { # inherit pkgs; # colors = (import ./colorscheme/gruvbox-dark).dark; # }; # in # { # x86_64-linux.staff = staff "x86_64-linux"; # x86_64-linux.arrow = inputs.nixos-generators.nixosGenerate rec { # system = "x86_64-linux"; # format = "iso"; # modules = import ./hosts/arrow/modules.nix { inherit inputs globals overlays; }; # }; # x86_64-linux.arrow-aws = inputs.nixos-generators.nixosGenerate rec { # system = "x86_64-linux"; # format = "amazon"; # modules = import ./hosts/arrow/modules.nix { inherit inputs globals overlays; } ++ [ # ( # { ... }: # { # boot.kernelPackages = inputs.nixpkgs.legacyPackages.x86_64-linux.linuxKernel.packages.linux_6_6; # amazonImage.sizeMB = 16 * 1024; # permitRootLogin = "prohibit-password"; # boot.loader.systemd-boot.enable = inputs.nixpkgs.lib.mkForce false; # boot.loader.efi.canTouchEfiVariables = inputs.nixpkgs.lib.mkForce false; # services.amazon-ssm-agent.enable = true; # users.users.ssm-user.extraGroups = [ "wheel" ]; # } # ) # ]; # }; # # Package Neovim config into standalone package # x86_64-linux.neovim = neovim "x86_64-linux"; # x86_64-darwin.neovim = neovim "x86_64-darwin"; # aarch64-linux.neovim = neovim "aarch64-linux"; # aarch64-darwin.neovim = neovim "aarch64-darwin"; # }; # Get the custom packages that I have placed under the nmasur namespace packages = lib.forAllSystems (system: lib.pkgsBySystem.${system}.nmasur); # Development environments devShells = lib.forAllSystems (system: { default = lib.pkgsBySystem.${system}.nmasur.dotfiles-devshell; }); checks = lib.forAllSystems ( system: let pkgs = import nixpkgs { inherit system; overlays = lib.overlays; }; in { neovim = pkgs.runCommand "neovim-check-health" { buildInputs = [ inputs.self.packages.${system}.neovim ]; } '' mkdir -p $out export HOME=$TMPDIR nvim -c "checkhealth" -c "write $out/health.log" -c "quitall" # Check for errors inside the health log if $(grep "ERROR" $out/health.log); then cat $out/health.log exit 1 fi ''; } ); formatter = lib.forAllSystems ( system: let pkgs = import nixpkgs { inherit system; inherit (lib) overlays; }; in pkgs.nixfmt-rfc-style ); # Templates for starting other projects quickly templates = (import ./templates nixpkgs.lib); }; }