# # Our system configuration, as a Nix flake. # Now with bonus packages! # # vim: et:ts=2:sw=2: # { # # The sources we depend on. # inputs = { # Core and utilities. nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; # Not nix -- lix! lix.url = "git+https://git@git.lix.systems/lix-project/lix"; # Home-manager. home-manager = { url = "github:nix-community/home-manager/master"; inputs.nixpkgs.follows = "nixpkgs"; }; # Styling! stylix = { url = "github:danth/stylix"; inputs.nixpkgs.follows = "nixpkgs"; }; # Attic cache. attic = { url = "github:zhaofengli/attic"; inputs.nixpkgs.follows = "nixpkgs"; }; # Talon voice. talon = { url = "github:nix-community/talon-nix/master"; inputs.nixpkgs.follows = "nixpkgs"; }; # For our phone. nix-on-droid = { url = "github:nix-community/nix-on-droid/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; inputs.home-manager.follows = "home-manager"; }; # Flakes for packages. nil.url = "github:oxalica/nil"; agenix.url = "github:ryantm/agenix"; openxc7.url = "github:openXC7/toolchain-nix"; niri.url = "github:sodiboo/niri-flake"; waveforms.url = "github:liff/waveforms-flake"; esp-dev.url = "github:mirrexagon/nixpkgs-esp-dev"; # Flatpack support nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1"; # Various system type support. darwin.url = "github:lnl7/nix-darwin/master"; darwin.inputs.nixpkgs.follows = "nixpkgs"; nix-hardware.url = "github:nixos/nixos-hardware"; }; # # Package definitions for each of our various types. # Used in the outputs section. # # # Our various products; mostly machine configurations. # outputs = { self, nixpkgs, flake-utils, home-manager, openxc7, darwin, agenix, nil, lix, niri, stylix, waveforms, esp-dev, attic, nix-flatpak, nix-on-droid, nixos-hardware, talon, ... }: # # Include our package repository. # (import ./packages) { inherit flake-utils nixpkgs; deprekages = self.outputs.packages; esp-dev = esp-dev.outputs.packages; } # # Our per-machine configurations. # Appeneded to the output of the packages generated by eachDefaultSystem. # // rec { # # Helpers. # # Common to all machines, Linux or macOS. commonModuleSet = [ ./nixos/packages ./nixos/dotfiles ./nixos/configs/stylix ./nixos/configs/ld.nix ./nixos/configs/lix.nix ./nixos/configs/nix.nix ./nixos/configs/ccache.nix ./nixos/configs/location.nix ./nixos/configs/calendar.nix ./nixos/configs/syncthing.nix ./nixos/configs/include-conf.nix ./nixos/configs/flake-registry.nix ./nixos/configs/storage-optimization.nix ./nixos/services/tailscale.nix agenix.nixosModules.default home-manager.nixosModules.home-manager ]; # Modules for all linux machines. linuxModuleSet = [ ./nixos/configuration.linux.nix ./nixos/configs/udev.nix ./nixos/configs/dmesg.nix ./nixos/configs/printing.nix ./nixos/configs/virt-host.nix ./nixos/configs/mount-rsync-kate.nix ./nixos/configs/mount-fastmail-tmllc.nix ./nixos/overlays/fixup-canon.nix # ]; # Modules for Linux machines with Wayland GUIs. linuxGuiModuleSet = [ nix-flatpak.nixosModules.nix-flatpak ./nixos/dotfiles/vscode.nix ./nixos/packages/gui.nix ./nixos/packages/wine.nix ./nixos/packages/flatpak.nix ./nixos/packages/proprietary.nix ./nixos/configs/gui ./nixos/configs/flatpak.nix ./nixos/configs/music-server ./nixos/configs/fonts-linux.nix ./nixos/overlays/fixup-nheko ./nixos/overlays/fixup-signal ./nixos/overlays/fixup-imhex.nix #./nixos/overlays/customize-gajim ./nixos/overlays/sddm-no-vnc.nix ./nixos/overlays/fixup-armcord.nix ./nixos/overlays/jd-gui-wayland.nix ./nixos/overlays/fixup-mattermost.nix ./nixos/overlays/yubikey-touch-shitpost ./nixos/overlays/add-depends-calibre.nix ]; # Modules for all darwin machines. darwinModuleSet = [ ./nixos/configuration.darwin.nix ./nixos/packages/homebrew.nix ./nixos/packages/appstore.nix ./nixos/configs/fonts-darwin.nix ./nixos/configs/autosetup-darwin-aarch64.nix ]; # Modules for offline linux machines. linuxOfflineModuleSet = [ ./nixos/packages/offline.nix ./nixos/configs/waydroid.nix ]; # Helper functions for creating modules in the defintions below. darwinModules = extraModules: commonModuleSet ++ darwinModuleSet ++ extraModules; linuxModules = extraModules: commonModuleSet ++ linuxModuleSet ++ extraModules; linuxGuiModules = extraModules: linuxModules (linuxGuiModuleSet ++ extraModules); linuxOfflineGuiModules = extraModules: linuxGuiModules (linuxOfflineModuleSet ++ extraModules); # Helper that populates all of our special arguments. mkSpecialArgsGeneric = ( system: is-hm-standalone: is-droid: { inherit nixpkgs stylix is-hm-standalone is-droid ; niri = niri.outputs; nil = nil.outputs.packages.${system}; deprekages = self.outputs.packages.${system}; agenix = agenix.outputs.packages.${system}; openxc7 = openxc7.outputs.packages.${system}; attic = attic.outputs.packages.${system}; esp-dev = esp-dev.outputs.packages.${system}; lix = lix.outputs.packages.${system}; talon = talon.outputs.packages.${system}; waveforms = waveforms.outputs.packages.${system}; # Helper to convert hm modules into NixOS or nix-on-droid modules. callHm = module: (specialArgs: (import module) specialArgs); normalizeModule = if is-hm-standalone then (module: module) else ( if is-droid then ( module: ( { deprekages, nil, ... }: { home-manager.config = { pkgs, ... }@specialArgs: (import module) (specialArgs // { inherit deprekages nil; }); } ) ) else ( module: ( { deprekages, nil, ... }: { home-manager.users.deprekated = { pkgs, ... }@specialArgs: (import module) (specialArgs // { inherit deprekages nil; }); } ) ) ); } ); # Generic mkSpecialArgs for NixOS. mkSpecialArgs = system: (mkSpecialArgsGeneric system false false); # Specialized mkSpecialArgs for standalone home-manager. mkSpecialArgsHm = system: pkgs: ((mkSpecialArgsGeneric system true false) // { inherit pkgs; }); mkSpecialArgsDroid = system: pkgs: ((mkSpecialArgsGeneric system false true) // { inherit pkgs; }); # # Hosts! # # Trailblazer (main desktop). nixosConfigurations.trailblazer = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = mkSpecialArgs system; modules = linuxOfflineGuiModules [ ./nixos/hosts/trailblazer ]; }; # Valere (powerful laptop). nixosConfigurations.kanbaru = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = mkSpecialArgs system; modules = linuxOfflineGuiModules [ ./nixos/hosts/kanbaru.nix ./nixos/configs/steam.nix ./nixos/configs/virtualbox.nix ./nixos/configs/power-saving.nix ]; }; # Miko (mid-tier t2+x64 laptop that's nice and smol). nixosConfigurations.miko = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = mkSpecialArgs system; modules = linuxOfflineGuiModules [ ./nixos/hosts/miko.nix ./nixos/configs/power-saving.nix ./nixos/configs/looking-glass.nix nixos-hardware.nixosModules.apple-t2 ]; }; # Hinata (travel laptop). nixosConfigurations.hinata = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = mkSpecialArgs system; modules = linuxOfflineGuiModules [ ./nixos/hosts/hinata.nix ./nixos/configs/cellular.nix ./nixos/configs/power-saving.nix ]; }; # Veth (purse laptop). nixosConfigurations.veth = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = mkSpecialArgs system; modules = linuxGuiModules [ ./nixos/hosts/veth ./nixos/configs/power-saving.nix ]; }; # Komashi (TMLLC T16 gen2). nixosConfigurations.komashi = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = mkSpecialArgs system; modules = linuxOfflineGuiModules [ ./nixos/hosts/komashi ./nixos/configs/cellular.nix ./nixos/configs/virtualbox.nix ./nixos/configs/nfc-kernel.nix ./nixos/configs/power-saving.nix ]; }; # Utol (TMLLC T14 Gen1) nixosConfigurations.utol = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = mkSpecialArgs system; modules = linuxGuiModules [ ./nixos/hosts/utol ./nixos/configs/cellular.nix ./nixos/configs/power-saving.nix ./nixos/packages/offline.nix ]; }; # Aigis (aarch64-linux, apple-silicon, build machine). nixosConfigurations.aigis = nixpkgs.lib.nixosSystem rec { system = "aarch64-linux"; specialArgs = mkSpecialArgs system; modules = linuxGuiModules [ ./nixos/hosts/aigis.nix ./nixos/configs/power-saving.nix ]; }; # Nomon (TMLLC aarch64-linux, broadcom-silicon, test machine). nixosConfigurations.nomon = nixpkgs.lib.nixosSystem rec { system = "aarch64-linux"; specialArgs = mkSpecialArgs system; modules = linuxModules [ ./nixos/hosts/salas.nix ]; }; # Roshar (TMLLC aarch64-darwin, apple-silicon build machine). darwinConfigurations.roshar = darwin.lib.darwinSystem rec { system = "aarch64-darwin"; specialArgs = mkSpecialArgs system; modules = darwinModules [ ./nixos/hosts/roshar.nix ]; }; # Mako (x86_64-darwin, apple-silicon build machine). darwinConfigurations.mako = darwin.lib.darwinSystem rec { system = "x86_64-darwin"; specialArgs = mkSpecialArgs system; modules = darwinModules [ ./nixos/hosts/mako.nix ]; }; # Daikon, the UndefineD test machine. homeConfigurations.daikon = home-manager.lib.homeManagerConfiguration rec { pkgs = import nixpkgs { system = "aarch64-linux"; config.allowUnfree = true; }; extraSpecialArgs = mkSpecialArgsHm "aarch64-linux" pkgs; modules = [ ./nixos/hosts/daikon.nix ./nixos/dotfiles/hm.nix ./nixos/packages/hm.nix ]; }; # Design, our phone. nixOnDroidConfigurations.design = nix-on-droid.lib.nixOnDroidConfiguration rec { pkgs = import nixpkgs { system = "aarch64-linux"; config.allowUnfree = true; config.permittedInsecurePackages = [ "olm-3.2.16" ]; }; extraSpecialArgs = mkSpecialArgsDroid "aarch64-linux" pkgs; modules = [ ./nixos/hosts/design.nix ./nixos/configuration.droid.nix ./nixos/dotfiles/droid.nix ./nixos/configs/nix.droid.nix #./nixos/configs/droid-gui.nix ./nixos/configs/flake-registry.nix ./nixos/packages/droid.nix ./nixos/packages/offline.droid.nix #./nixos/packages/gui.droid.nix ]; }; }; }