{ outputs = inputs @ {flake-parts, ...}: flake-parts.lib.mkFlake {inherit inputs;} ({self, ...}: { # We define our own systems below. you can still use this to add system specific outputs to your flake. # See: https://flake.parts/getting-started systems = ["x86_64-linux"]; # import clan-core modules imports = [ inputs.clan-core.flakeModules.default inputs.git-hooks.flakeModule ./clanServices/flake-module.nix ]; perSystem = { config, inputs', pkgs, ... }: { devShells = rec { default = pkgs.mkShell { inherit (config.pre-commit.devShell) shellHook nativeBuildInputs; packages = [ inputs'.clan-core.packages.clan-cli pkgs.alejandra (pkgs.writeShellApplication { name = "nix-follows"; text = '' nix flake metadata --json | jq -r '(.locks.nodes.root.inputs | keys) as $root_input_keys | .locks.nodes | to_entries[] | select(.key | IN($root_input_keys[])) | select((.value | has("flake") | not) or (.value.flake == true)) | select(.value | has("inputs")) | .key as $parent_key | .value.inputs | keys[] | select(IN($root_input_keys[])) | $parent_key + ".inputs." + . + ".follows = \"" + . + "\";"' ''; runtimeInputs = [pkgs.jq]; }) ]; }; zola = let theme = inputs.zola-theme; themeName = (builtins.fromTOML (builtins.readFile "${theme}/theme.toml")).name; in pkgs.mkShell { inputsFrom = [default]; packages = [pkgs.zola]; shellHook = '' mkdir themes ln -s ${inputs.zola-theme} themes/${themeName} ''; }; }; pre-commit.settings.hooks = { alejandra.enable = true; check-merge-conflicts.enable = true; flake-checker.enable = true; deadnix.enable = true; nil.enable = true; }; }; # Define your clan # See: https://docs.clan.lol/reference/nix-api/buildclan/ clan = { # Clan wide settings. (Required) meta.name = "cool-clan"; # Ensure to choose a unique name. specialArgs = { inherit inputs self; }; inventory = { machines = { moritz-desktop.tags = ["peer" "client" "worker"]; moritz-laptop.tags = ["peer" "client" "worker"]; moritz-server.tags = ["client" "worker"]; }; instances."remote-builders" = { module.name = "remote-builders"; roles.client.tags.client = {}; roles.worker.tags.worker = {}; }; services.zerotier.default = { roles.peer.tags = [ "peer" ]; roles.controller.machines = [ "moritz-server" ]; }; }; }; }); inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; master.url = "github:nixos/nixpkgs"; stable.url = "github:nixos/nixpkgs/nixos-25.05"; # New flake-parts input flake-parts.url = "github:hercules-ci/flake-parts"; clan-core.url = "git+https://git.clan.lol/clan/clan-core"; clan-core.inputs.nixpkgs.follows = "nixpkgs"; # Needed if your configuration uses nixpkgs unstable. flake-utils.url = "github:numtide/flake-utils"; git-hooks.url = "github:cachix/git-hooks.nix"; home-manager.url = "github:nix-community/home-manager"; impermanence.url = "github:nix-community/impermanence"; jovian.url = "github:Jovian-Experiments/Jovian-NixOS"; nix-index-database.url = "github:Mic92/nix-index-database"; nix-monitored.url = "github:ners/nix-monitored"; nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; nur.url = "github:nix-community/NUR"; treefmt-nix.url = "github:numtide/treefmt-nix"; flake-compat.url = "github:edolstra/flake-compat"; niri.url = "github:sodiboo/niri-flake"; systems.url = "github:nix-systems/default"; stylix.url = "github:nix-community/stylix"; base16-helix.url = "github:MoritzBoehme/base16-helix/fix-primary-cursor-color"; base16-helix.flake = false; # Programs timers.url = "git+https://gitea.moritzboeh.me/moritz/timers.git"; filetags.url = "git+https://gitea.moritzboeh.me/moritz/filetags.git"; # Neovim neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; nixvim.url = "github:nix-community/nixvim"; # Laptop asus-touchpad-numpad-driver.url = "github:MoritzBoehme/asus-touchpad-numpad-driver/german-layout"; asus-touchpad-numpad-driver.flake = false; # Firefox user.js arkenfox-userjs.url = "github:arkenfox/user.js"; arkenfox-userjs.flake = false; zola-theme.url = "github:Speyll/anemone"; zola-theme.flake = false; # NOTE: create follows statements with nix-follows clan-core.inputs.flake-parts.follows = "flake-parts"; clan-core.inputs.systems.follows = "systems"; clan-core.inputs.treefmt-nix.follows = "treefmt-nix"; filetags.inputs.flake-utils.follows = "flake-utils"; filetags.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.inputs.systems.follows = "systems"; git-hooks.inputs.flake-compat.follows = "flake-compat"; git-hooks.inputs.nixpkgs.follows = "nixpkgs"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; jovian.inputs.nixpkgs.follows = "nixpkgs"; neovim-nightly-overlay.inputs.flake-compat.follows = "flake-compat"; neovim-nightly-overlay.inputs.flake-parts.follows = "flake-parts"; neovim-nightly-overlay.inputs.git-hooks.follows = "git-hooks"; neovim-nightly-overlay.inputs.nixpkgs.follows = "nixpkgs"; neovim-nightly-overlay.inputs.treefmt-nix.follows = "treefmt-nix"; niri.inputs.nixpkgs.follows = "nixpkgs"; nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; nix-monitored.inputs.nixpkgs.follows = "nixpkgs"; nixos-mailserver.inputs.flake-compat.follows = "flake-compat"; nixos-mailserver.inputs.git-hooks.follows = "git-hooks"; nixos-mailserver.inputs.nixpkgs.follows = "nixpkgs"; nixvim.inputs.flake-parts.follows = "flake-parts"; nixvim.inputs.nixpkgs.follows = "nixpkgs"; nixvim.inputs.systems.follows = "systems"; nur.inputs.flake-parts.follows = "flake-parts"; nur.inputs.nixpkgs.follows = "nixpkgs"; nur.inputs.treefmt-nix.follows = "treefmt-nix"; stylix.inputs.base16-helix.follows = "base16-helix"; stylix.inputs.flake-compat.follows = "flake-compat"; stylix.inputs.flake-parts.follows = "flake-parts"; stylix.inputs.git-hooks.follows = "git-hooks"; stylix.inputs.home-manager.follows = "home-manager"; stylix.inputs.nixpkgs.follows = "nixpkgs"; stylix.inputs.nur.follows = "nur"; stylix.inputs.systems.follows = "systems"; timers.inputs.nixpkgs.follows = "nixpkgs"; treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; }; }