{ description = "Sealight NixOS Config"; inputs = { # Nixpkgs nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; unstable.url = "github:nixos/nixpkgs/nixos-unstable"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; nix-on-droid.url = "github:nix-community/nix-on-droid/release-24.05"; nix-on-droid.inputs.nixpkgs.follows = "nixpkgs"; nix-on-droid.inputs.home-manager.follows = "home-manager"; # Home manager home-manager.url = "github:nix-community/home-manager/release-24.05"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; hardware.url = "github:nixos/nixos-hardware"; # Tools agenix.url = "github:ryantm/agenix"; agenix.inputs.nixpkgs.follows = "nixpkgs"; deploy-rs.url = "github:serokell/deploy-rs"; deploy-rs.inputs.nixpkgs.follows = "nixpkgs"; disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; # My Packages poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main"; poonam.inputs.nixpkgs.follows = "nixpkgs"; basant.url = "git+ssh://gitea@git.sealight.xyz/aynish/basant?ref=main"; vimwikicli.url = "git+ssh://gitea@git.sealight.xyz/aynish/vimwiki-cli?ref=main"; basant.inputs.nixpkgs.follows = "nixpkgs"; basant.inputs.poonam.follows = "poonam"; vimwikicli.inputs.nixpkgs.follows = "nixpkgs"; grasp.url = "git+ssh://gitea@git.sealight.xyz/aynish/grasp.git?ref=main"; grasp.inputs.nixpkgs.follows = "nixpkgs"; # Matrix nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; # Others nur.url = "github:nix-community/NUR"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; tidalcycles.url = "github:mitchmindtree/tidalcycles.nix"; tidalcycles.inputs.nixpkgs.follows = "unstable"; # TODO hundred rabbits software # TODO needs secrets # dhyan.url = "git+ssh://gitea@git.sealight.xyz/aynish/dhyan?ref=main"; # dhyan.inputs.nixpkgs.follows = "nixpkgs"; # TODO needs secrets # muneem.url = "git+ssh://gitea@git.sealight.xyz/aynish/muneem?ref=main"; # muneem.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self , nixpkgs , unstable , nixos-hardware , home-manager , nix-on-droid , deploy-rs , agenix , disko , basant , grasp , nix-matrix-appservices , nur , tidalcycles , rust-overlay , vimwikicli , ... }@inputs: let forAllSystems = nixpkgs.lib.genAttrs [ "aarch64-linux" "i686-linux" "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ]; unstableOverlay = final: prev: { # We already have these in scope unstable = unstable.legacyPackages.${prev.system}; deploy = deploy-rs.packages.${prev.system}.deploy-rs; }; vimwikiOverlay = final: prev: { vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; }; nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ "ripcord" "vcv-rack" "SunVox" "renoise" ]; # config.permittedInsecurePackages = [ # "python3.10-django-3.1.14" # Needed for archivebox deployments on curve # # Check when archive box updates it's dependeny # ]; overlays = [ rust-overlay.overlays.default tidalcycles.overlays.default agenix.overlays.default nur.overlay nix-matrix-appservices.overlay unstableOverlay vimwikiOverlay self.overlays.additions self.overlays.modifications ]; }); # for when space matters litePkgsFor = forAllSystems (system: import nixpkgs { inherit system; # config.permittedInsecurePackages = [ # "forgejo-1.19.4-0" # Needed for archivebox deployments on curve # # Check when archive box updates it's dependeny # ]; overlays = [ agenix.overlays.default self.overlays.additions self.overlays.modifications tidalcycles.overlays.default # needed for nvim which comes pre-installed lol ]; }); in { # Your custom packages # Acessible through 'nix build', 'nix shell', etc packages = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in import ./pkgs { pkgs = pkgs; } ); # Devshell for bootstrapping # Acessible through 'nix develop' or 'nix-shell' (legacy) devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in import ./shell.nix { pkgs = pkgs; } ); # Your custom packages and modifications, exported as overlays overlays = import ./overlays; # Reusable nixos modules you might want to export # These are usually stuff you would upstream into nixpkgs nixosModules = import ./modules/nixos; # Reusable home-manager modules you might want to export # These are usually stuff you would upstream into home-manager homeManagerModules = import ./modules/home-manager; # NixOS configuration entrypoint nixosConfigurations = { curve = nixpkgs.lib.nixosSystem rec { specialArgs = { inherit inputs self; }; system = "x86_64-linux"; pkgs = nixpkgsFor.${system}; modules = [ ./hosts/curve agenix.nixosModules.age self.nixosModules.backup self.nixosModules.wireguard self.nixosModules.wallabag nixos-hardware.nixosModules.lenovo-thinkpad-x270 home-manager.nixosModules.home-manager { nix.registry.nixpkgs.flake = nixpkgs; nix.registry.unstable.flake = unstable; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.anish = import ./home/gui; } ]; }; helix = nixpkgs.lib.nixosSystem rec { specialArgs = { inherit inputs self; }; system = "x86_64-linux"; pkgs = litePkgsFor.${system}; modules = [ ./hosts/helix agenix.nixosModules.age self.nixosModules.backup self.nixosModules.wireguard basant.nixosModule # self.nixosModules.microbin disko.nixosModules.disko { nixpkgs.flake.setNixPath = false; nixpkgs.flake.setFlakeRegistry = false; } ]; }; lituus = nixpkgs.lib.nixosSystem rec { specialArgs = { inherit inputs self; }; system = "x86_64-linux"; pkgs = nixpkgsFor.${system}; modules = [ ./hosts/lituus agenix.nixosModules.age self.nixosModules.backup self.nixosModules.hesienbridge nix-matrix-appservices.nixosModule home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.anish = import ./home/core; } ]; }; box = nixpkgs.lib.nixosSystem rec { specialArgs = { inherit inputs self; }; system = "x86_64-linux"; pkgs = nixpkgsFor.${system}; modules = [ ./hosts/box agenix.nixosModules.age self.nixosModules.backup self.nixosModules.wireguard self.nixosModules.gonic self.nixosModules.gpodder2go self.nixosModules.wallabag self.nixosModules.ulogger-server grasp.nixosModule home-manager.nixosModules.home-manager { nix.registry.nixpkgs.flake = nixpkgs; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.anish = import ./home/core; } ]; }; }; # Standalone home-manager configuration entrypoint # Available through 'home-manager --flake .#your-username@your-hostname' homeConfigurations = { "anish@work" = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgsFor."x86_64-linux"; # Home-manager requires 'pkgs' instance extraSpecialArgs = { inherit inputs; }; modules = [ ./home/core.nix ./home/profiles/firefox ]; }; }; nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration { pkgs = import nixpkgs { system = "aarch64-linux"; }; modules = [ ./hosts/droid { home-manager = { config = ./home/core/default.nix; useGlobalPkgs = true; }; } ]; }; deploy.nodes = { box = { hostname = "mossnet.lan"; autoRollback = false; magicRollback = false; remoteBuild = true; profiles.system = { user = "root"; path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; }; }; lituus = { hostname = "sealight.xyz"; # autoRollback = false; profiles.system = { user = "root"; path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.lituus; }; }; helix = { hostname = "git.sealight.xyz"; autoRollback = false; magicRollback = false; profiles.system = { user = "root"; path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.helix; }; }; }; checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; }; }