{ description = "My Nix flake for cross-platform development environment"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; snowfall-lib = { url = "github:snowfallorg/lib"; inputs.nixpkgs.follows = "nixpkgs"; }; tmux = { url = "github:jakehamilton/tmux"; }; }; outputs = inputs: inputs.snowfall-lib.mkFlake { inherit inputs; src = ./.; overlays = with inputs; [ tmux.overlay ]; # Build the package set for the homies environment packages = { homies = let pkgs = import inputs.nixpkgs { system = "aarch64-darwin"; # Default, will be overridden by system-specific builds }; in pkgs.buildEnv { name = "homies"; paths = with pkgs; [ # Core tools tmux helix zsh git openssh # Terminal applications alacritty starship htop # Docker support docker-client docker-compose # Programming languages and language servers (default always included) odin ols # Odin Language Server harper # Harper Language Server # Additional dev tools gcc gnumake curl wget jq ripgrep findutils # Language support packages (optional ones you can enable conditionally) rustc # For enabling Rust support rust-analyzer # For Rust LSP python3 # For Python support #python3Packages.pyright # For Python LSP #nodejs # For JavaScript/TypeScript support #nodePackages.typescript-language-server # For TS LSP go # For Go support gopls # For Go LSP #openjdk # For Java support #jdt.ls # For Java LSP ]; }; }; # System-specific configuration systemConfigs = { # x86_64-linux system config "x86_64-linux" = { pkgs, ... }: { # This is where you'd define system-specific configurations # But in pure Nix, packages are handled through the packages attribute above }; # aarch64-linux system config (ARM Mac/Linux) "aarch64-linux" = { pkgs, ... }: { }; # darwin (MacOS) system config "aarch64-darwin" = { pkgs, ... }: { }; # x86_64-darwin (Intel Mac) system config "x86_64-darwin" = { pkgs, ... }: { }; }; # Make the packages available in the flake # This is what users will run to build/install homies # nix build .#homies # nix profile install .#homies }; }