{ description = "hand7s'es flake"; nixConfig = { max-jobs = "auto"; builders = ""; require-sigs = true; sandbox = true; sandbox-fallback = false; auto-optimise-store = true; allowed-users = [ "@wheel" ]; trusted-users = [ "root" "@wheel" ]; experimental-features = [ "nix-command" "flakes" ]; extra-substituters = [ "https://cache.nixos.org" "https://cache.garnix.io" "https://nix-community.cachix.org" "https://chaotic-nyx.cachix.org" "https://hyprland.cachix.org" "https://devenv.cachix.org" "https://hydra.nix-community.org" "https://attic.xuyh0120.win/lantian" ]; extra-trusted-public-keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8=" "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc=" ]; }; inputs = { "agenix" = { flake = true; type = "github"; owner = "yaxitech"; repo = "ragenix"; }; "agenix-rekey" = { flake = true; type = "github"; owner = "oddlama"; repo = "agenix-rekey"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "ayugram-desktop" = { flake = true; type = "github"; owner = "ndfined-crp"; repo = "ayugram-desktop"; }; "cachix" = { flake = true; type = "github"; owner = "cachix"; repo = "cachix"; }; "chaotic" = { flake = true; type = "github"; owner = "chaotic-cx"; repo = "nyx"; ref = "nyxpkgs-unstable"; }; "deploy-rs" = { flake = true; type = "github"; owner = "serokell"; repo = "deploy-rs"; }; "devenv" = { flake = true; type = "github"; owner = "cachix"; repo = "devenv"; }; "disko" = { flake = true; type = "github"; owner = "nix-community"; repo = "disko"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "flake-parts" = { flake = true; type = "github"; owner = "hercules-ci"; repo = "flake-parts"; }; "freesm" = { flake = true; type = "github"; owner = "freesmteam"; repo = "freesmlauncher"; }; "fenix" = { flake = true; type = "github"; owner = "nix-community"; repo = "fenix"; }; "finix" = { flake = true; type = "github"; owner = "finix-community"; repo = "finix"; }; "github-actions-nix" = { flake = true; type = "github"; owner = "synapdeck"; repo = "github-actions-nix"; }; "git-hooks-nix" = { flake = true; type = "github"; owner = "cachix"; repo = "git-hooks.nix"; }; "hjem" = { flake = true; type = "github"; owner = "feel-co"; repo = "hjem"; }; "hjem-rum" = { flake = true; type = "github"; owner = "snugnug"; repo = "hjem-rum"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; "hjem" = { follows = "hjem"; }; }; }; "home-manager" = { flake = true; type = "github"; owner = "nix-community"; repo = "home-manager"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "homebrew-bundle" = { flake = false; type = "github"; owner = "homebrew"; repo = "homebrew-bundle"; }; "homebrew-cask" = { flake = false; type = "github"; owner = "homebrew"; repo = "homebrew-cask"; }; "homebrew-core" = { flake = false; type = "github"; owner = "homebrew"; repo = "homebrew-core"; }; "hyprland" = { flake = true; type = "github"; owner = "hyprwm"; repo = "Hyprland"; }; "impermanence" = { flake = true; type = "github"; owner = "nix-community"; repo = "impermanence"; }; "lanzaboote" = { flake = true; type = "github"; owner = "nix-community"; repo = "lanzaboote"; ref = "v0.4.2"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "nekoflake" = { flake = true; type = "github"; owner = "s0me1newithhand7s"; repo = "nekoflake"; }; "nix-darwin" = { flake = true; type = "github"; owner = "LnL7"; repo = "nix-darwin"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "nix-cachyos-kernel" = { flake = true; type = "github"; owner = "xddxdd"; repo = "nix-cachyos-kernel"; ref = "release"; }; "nix-homebrew" = { flake = true; type = "github"; owner = "zhaofengli"; repo = "nix-homebrew"; }; "nix-index-database" = { flake = true; type = "github"; owner = "nix-community"; repo = "nix-index-database"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "nixos-avf" = { flake = true; type = "github"; owner = "nix-community"; repo = "nixos-avf"; }; "nixos-anywhere" = { flake = true; type = "github"; owner = "nix-community"; repo = "nixos-anywhere"; }; "nixos-cli" = { flake = true; type = "github"; owner = "nix-community"; repo = "nixos-cli"; }; "nixos-wsl" = { flake = true; type = "github"; owner = "nix-community"; repo = "nixos-wsl"; ref = "main"; }; "nixpkgs" = { flake = true; type = "github"; owner = "nixos"; repo = "nixpkgs"; ref = "nixos-unstable"; }; "noctalia" = { flake = true; type = "github"; owner = "noctalia-dev"; repo = "noctalia-shell"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; "quickshell" = { follows = "quickshell"; }; }; }; "quickshell" = { flake = true; type = "git"; url = "https://git.outfoxxed.me/quickshell/quickshell"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "sops-nix" = { flake = true; type = "github"; owner = "Mic92"; repo = "sops-nix"; }; "spicetify-nix" = { flake = true; type = "github"; owner = "Gerg-L"; repo = "spicetify-nix"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "stylix" = { flake = true; type = "github"; owner = "nix-community"; repo = "stylix"; }; "system-manager" = { flake = true; type = "github"; owner = "numtide"; repo = "system-manager"; inputs = { "nixpkgs" = { follows = "nixpkgs"; }; }; }; "treefmt-nix" = { flake = true; type = "github"; owner = "numtide"; repo = "treefmt-nix"; }; }; outputs = inputs @ {self, ...}: inputs.flake-parts.lib.mkFlake { inherit inputs self ; } { debug = true; systems = [ "x86_64-linux" "aarch64-linux" ]; imports = [ inputs."agenix-rekey".flakeModule inputs."disko".flakeModules.default inputs."treefmt-nix".flakeModule inputs."home-manager".flakeModules."home-manager" inputs."git-hooks-nix".flakeModule inputs."devenv".flakeModule inputs."github-actions-nix".flakeModule ]; flake = let inherit (inputs."nixpkgs".lib) nixosSystem filesystem genAttrs optionals elem ; makeModules = modulesList: map ( { input, opt ? "default", }: inputs.${input}.nixosModules.${opt} ) modulesList; defaultHost = { name, arch ? "x86_64-linux", ... }: nixosSystem { system = let arches = { "mabel" = "aarch64-linux"; "blossom" = "riscv64-linux"; }; in arches.${name} or arch; specialArgs = { inherit inputs self ; }; modules = [ "${self}/${name}" ] ++ defaultModules ++ optionals ( name == "wanda" ) extraModules.wanda ++ optionals ( name == "mabel" ) extraModules.mabel ++ optionals ( elem name [ "hazel" "lynn" "yara" "ivy" "mel" ] ) ( extraModules.kyra ++ filesystem.listFilesRecursive "${self}/kyra/" ); }; defaultModules = makeModules [ { input = "agenix"; } { input = "agenix-rekey"; } { input = "disko"; opt = "disko"; } { input = "home-manager"; } { input = "stylix"; opt = "stylix"; } { input = "sops-nix"; opt = "sops"; } { input = "lanzaboote"; opt = "lanzaboote"; } { input = "nix-index-database"; opt = "nix-index"; } { input = "nixos-cli"; opt = "nixos-cli"; } ]; extraModules = { wanda = makeModules [ { input = "nixos-wsl"; } ]; mabel = makeModules [ { input = "nixos-avf"; opt = "avf"; } ]; kyra = makeModules [ { input = "impermanence"; opt = "impermanence"; } ]; }; defaultSystems = genAttrs [ "ada" "isla" "viola" "mabel" "wanda" "florence" "hazel" "lynn" "yara" "ivy" "mel" ] ( name: defaultHost { inherit name ; } ); in { # Main PC nixosConfigurations = defaultSystems // { # olive, blossom and maybe gonna be routers and etc "fawn" = inputs.finix.lib.finixSystem { inherit (self.inputs.nixpkgs) lib; specialArgs = { inherit inputs ; }; modules = [ ]; }; }; # home-manager homeConfigurations = { "hand7s" = inputs.home-manager.lib.homeManagerConfiguration { pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; extraSpecialArgs = { osConfig.networking.hostName = ""; inherit inputs self ; }; modules = [ "${self}/hand7s/standalone.nix" inputs."agenix".homeManagerModules."default" inputs."spicetify-nix".homeManagerModules."default" inputs."hyprland".homeManagerModules."default" inputs."chaotic".homeManagerModules."default" inputs."sops-nix".homeManagerModules."sops" inputs."nix-index-database".homeModules."nix-index" inputs."noctalia".homeModules."default" inputs."stylix".homeModules."stylix" ]; }; }; }; perSystem = { config, pkgs, ... }: { # numtide/treefmt-nix, treefmt integrated into nix treefmt = { flakeFormatter = true; flakeCheck = true; programs = { "alejandra" = { enable = true; priority = 1; includes = [ "*.nix" ]; }; "statix" = { enable = true; priority = 1; includes = [ "*.nix" ]; disabled-lints = [ "empty_pattern" ]; }; "deadnix" = { enable = true; priority = 1; includes = [ "*.nix" ]; }; }; settings = { global = { on-unmatched = "warn"; excludes = [ "secrets/*" ".sops.yaml" ".gitignore" ]; }; }; }; # cachix/git-hooks-nix, pre-commit-hooks integrated into nix pre-commit = { check = { enable = true; }; settings = { enable = true; package = pkgs.prek; gitPackage = pkgs.git; hooks = { "alejandra" = { enable = true; settings = { verbosity = "quiet"; check = true; }; }; "deadnix" = { enable = true; settings = { edit = false; }; }; "statix" = { enable = true; }; }; }; }; # cachix/devenv, basically a devShells, even better than numtide/devshells devenv = { shells = { "default" = { enterShell = config.pre-commit.shellHook; devenv = { root = toString /home/hand7s/Projects/flake; }; packages = [ pkgs.just config.treefmt.build.wrapper ] ++ config.pre-commit.settings.enabledPackages; }; }; }; # synapdeck/github-actions-nix, declaretive gha githubActions = { enable = true; workflows = { "flake_update" = { name = "flake lock updater"; on = { workflowDispatch = {}; schedule = [ { cron = "0 0 * * *"; } ]; }; jobs = { "locking" = { name = "flake.lock update"; runsOn = "ubuntu-latest"; continueOnError = false; permissions = "write-all"; steps = [ { name = "checkout"; uses = "actions/checkout@v6"; } { name = "nix install"; uses = "DeterminateSystems/nix-installer-action@v21"; } { name = "flake.lock check"; uses = "DeterminateSystems/flake-checker-action@v12"; with_ = { fail-mode = true; }; } { name = "flake.lock update"; uses = "DeterminateSystems/update-flake-lock@v28"; with_ = { pr-title = "Update `flake.lock` GitHub Action"; pr-assignees = "s0me1newithhand7s"; pr-reviewers = "s0me1newithhand7s"; pr-lables = '' "CI/CD" ''; }; } ]; }; }; }; "fmt_run" = { name = "flake_format"; on = { workflowDispatch = {}; push = {}; workflowDispatch = { types = [ "opened" "edited" "synchronize" "reopened" ]; }; }; jobs = { "fmt" = { runsOn = "ubuntu-latest"; continueOnError = false; permissions = "write-all"; steps = [ { name = "checkout"; uses = "actions/checkout@v6"; } { name = "nix install"; uses = "DeterminateSystems/nix-installer-action@v21"; } { name = "flake.lock check"; uses = "DeterminateSystems/flake-checker-action@v12"; with_ = { fail-mode = true; }; } { name = "formatter run"; run = '' nix develop -c prek run -a ''; } ]; }; }; }; }; }; }; }; }