219 lines
8.1 KiB
Nix
219 lines
8.1 KiB
Nix
{
|
|
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;
|
|
};
|
|
};
|
|
|
|
flake = {
|
|
templates.rust = {
|
|
description = "Crane + Fenix flake with mold for faster local builds.";
|
|
path = ./templates/rust;
|
|
};
|
|
templates.elixir-phoenix = {
|
|
description = "A flake for building development environment of Phoenix project.";
|
|
path = ./templates/elixir-phoenix;
|
|
};
|
|
};
|
|
|
|
# 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.instances = {
|
|
sshd-basic = {
|
|
module = {
|
|
name = "sshd";
|
|
input = "clan-core";
|
|
};
|
|
roles.server.tags.all = {};
|
|
roles.client.tags.all = {};
|
|
};
|
|
zerotier = {
|
|
module = {
|
|
name = "zerotier";
|
|
input = "clan-core";
|
|
};
|
|
roles.peer.tags.all = {};
|
|
roles.controller.machines.moritz-server = {};
|
|
};
|
|
user-moritz = {
|
|
module = {
|
|
name = "users";
|
|
input = "clan-core";
|
|
};
|
|
roles.default.tags.all = {};
|
|
roles.default.settings.user = "moritz";
|
|
roles.default.settings.groups = [
|
|
"wheel"
|
|
"networkmanager"
|
|
"video"
|
|
"input"
|
|
];
|
|
};
|
|
user-root = {
|
|
module = {
|
|
name = "users";
|
|
input = "clan-core";
|
|
};
|
|
roles.default.tags.all = {};
|
|
roles.default.settings.user = "root";
|
|
};
|
|
};
|
|
};
|
|
});
|
|
|
|
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/79e816c2e63df5024e28292fee0d92dc106ff66c"; # HACK: to fix upstream issue
|
|
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";
|
|
|
|
# Helix
|
|
helix.url = "github:helix-editor/helix";
|
|
|
|
# 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";
|
|
helix.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";
|
|
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";
|
|
};
|
|
}
|