{ description = "system"; inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; # Primary package set: Rolling release unstable nixpkgs-stable.url = "nixpkgs/nixos-25.11"; # Stable channel used for packages that cannot be volatile nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; # Smaller unstable channel with faster binary cache updates stylix.url = "github:danth/stylix"; # System-wide theming (colors, fonts, wallpaper) via Home Manager typst-within.url = "github:schrottkatze/typst"; # Custom fork of typst crane.url = "github:ipetkov/crane"; # Nix rust project library nixcord.url = "github:kaylorben/nixcord"; # Nix configured Discord home-manager = { # home environment nix configuration and config handler url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; fenix = { # Rust toolchain manager url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-unstable-small, typst-within, home-manager, nixos-hardware, stylix, fenix, crane, ... } @ inputs: let # Global System configuration variables system = "x86_64-linux"; # Instantiate the three package sets for the target system pkgs = nixpkgs.legacyPackages.${system}; pkgs-stable = nixpkgs-stable.legacyPackages.${system}; pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; # Pre-build the complete rust tool-chain and combine it into a single derivation rs-toolchain = with fenix.packages.${system}; combine [ complete.toolchain ]; # Set up crane with the custom Rust toolchain above instead of the nixpkgs default crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain; # A nixpkgs overlay that adds locally-built Rust binaries to the package set (NOTE: At least I assume that's what's happening here...) rs-programs = final: prev: { s10e-jrnl = crane-lib.buildPackage { pname = "s10e-bs"; # NOTE: There's a discrepancy between the package names. Idk if it's on purpose or no version = "0.0.1"; src = crane-lib.cleanCargoSource (crane-lib.path ./.); }; }; in { # Default Nix formatter formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; # Global dev shell configuration devShells."x86_64-linux".default = pkgs.mkShell { buildInputs = [ rs-toolchain pkgs.pkg-config pkgs.glsl_analyzer pkgs.openssl ]; }; nixosConfigurations = { # DESKTOP # (NOTE: I assume from our conversations) monosodium-glutamate-g = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs pkgs-unstable-small pkgs-stable rs-programs ; }; system = "x86_64-linux"; modules = [ stylix.nixosModules.stylix # Enable Stylix themeing ./hosts/monosodium-glutamate-g/configuration.nix # Host specific config home-manager.nixosModules.home-manager # Embed HM as a host module { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { inherit pkgs-unstable-small pkgs-stable typst-within; }; home-manager.sharedModules = [ inputs.nixcord.homeModules.nixcord # Enable Nixcord as an HM module for all users ]; # HM CONFIG: jade home-manager.users.jade = { nixosConfig, pkgs, ... }: { # Mirror the system timezone into the user session home.sessionVariables.TZ = nixosConfig.time.timeZone; # Pin HM state version to system state version to keep migration in sync home.stateVersion = "${nixosConfig.system.stateVersion}"; }; } ]; }; # DEVICE # (NOTE: I got no clue what this is, fix it urself) denkbrett = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs pkgs-unstable-small pkgs-stable rs-programs ; }; system = "x86_64-linux"; # NOTE: Maybe use ${system} ? modules = [ # Do the same as in the Desktop (MGS) stylix.nixosModules.stylix ./hosts/denkbrett/configuration.nix home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { inherit pkgs-unstable-small pkgs-stable typst-within; }; home-manager.sharedModules = [ inputs.nixcord.homeModules.nixcord ]; home-manager.users.jade = { nixosConfig, pkgs, ... }: { home.sessionVariables.TZ = nixosConfig.time.timeZone; home.stateVersion = "22.11"; # Pin to an older version }; } ]; }; }; }; }