@@ -1,3 +1,3 @@
|
|||||||
# nix-lib
|
# nix-lib
|
||||||
|
|
||||||
NixOS libraries and utilities
|
Nix library function definitions and utilities.
|
||||||
|
48
flake.lock
generated
Normal file
48
flake.lock
generated
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1754725699,
|
||||||
|
"narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"treefmt-nix": "treefmt-nix"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1754847726,
|
||||||
|
"narHash": "sha256-2vX8QjO5lRsDbNYvN9hVHXLU6oMl+V/PsmIiJREG4rE=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "7d81f6fb2e19bf84f1c65135d1060d829fae2408",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
31
flake.nix
Normal file
31
flake.nix
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
treefmt-nix = {
|
||||||
|
url = "github:numtide/treefmt-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
inputs:
|
||||||
|
(
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
|
||||||
|
pkgs = import inputs.nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
treefmt = inputs.treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
lib.${system} = import ./lib { inherit pkgs; };
|
||||||
|
|
||||||
|
formatter.${system} = treefmt.config.build.wrapper;
|
||||||
|
checks.${system}.formatting = treefmt.config.build.check inputs.self;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
5
lib/default.nix
Normal file
5
lib/default.nix
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
fetchers = import ./fetchers { inherit pkgs; };
|
||||||
|
runtime = import ./runtime { inherit pkgs; };
|
||||||
|
}
|
4
lib/fetchers/default.nix
Normal file
4
lib/fetchers/default.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
sshKnownHosts = import ./sshKnownHosts { inherit pkgs; };
|
||||||
|
}
|
33
lib/fetchers/sshKnownHosts/default.nix
Normal file
33
lib/fetchers/sshKnownHosts/default.nix
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
pkgs.lib.fetchers.withNormalizedHash { } (
|
||||||
|
{
|
||||||
|
host,
|
||||||
|
name ? "ssh-known-hosts-${host}",
|
||||||
|
outputHash,
|
||||||
|
outputHashAlgo,
|
||||||
|
port ? 22,
|
||||||
|
keyTypes ? [
|
||||||
|
"rsa"
|
||||||
|
"ecdsa"
|
||||||
|
"ed25519"
|
||||||
|
],
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
keyTypeArgs = pkgs.lib.concatStringsSep "," keyTypes;
|
||||||
|
in
|
||||||
|
pkgs.runCommandLocal name
|
||||||
|
{
|
||||||
|
inherit outputHash outputHashAlgo;
|
||||||
|
outputHashMode = "flat";
|
||||||
|
preferLocalBuild = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
openssh
|
||||||
|
gnugrep
|
||||||
|
coreutils
|
||||||
|
];
|
||||||
|
}
|
||||||
|
''
|
||||||
|
ssh-keyscan -p ${toString port} -t ${keyTypeArgs} ${host} | grep -v '^#' | sort > $out
|
||||||
|
''
|
||||||
|
)
|
4
lib/runtime/default.nix
Normal file
4
lib/runtime/default.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
merge = import ./merge { inherit pkgs; };
|
||||||
|
}
|
4
lib/runtime/merge/default.nix
Normal file
4
lib/runtime/merge/default.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
keyValue = import ./keyValue { inherit pkgs; };
|
||||||
|
}
|
11
lib/runtime/merge/keyValue/default.nix
Normal file
11
lib/runtime/merge/keyValue/default.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
"${
|
||||||
|
pkgs.writeShellApplication {
|
||||||
|
name = "merge-key-value";
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
coreutils
|
||||||
|
gawk
|
||||||
|
];
|
||||||
|
text = builtins.readFile ./key-value.sh;
|
||||||
|
}
|
||||||
|
}/bin/merge-key-value"
|
15
lib/runtime/merge/keyValue/key-value.sh
Normal file
15
lib/runtime/merge/keyValue/key-value.sh
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
source=$(realpath -m "$1")
|
||||||
|
target=$(realpath -m "$2")
|
||||||
|
|
||||||
|
if [[ -f "$target" ]]; then
|
||||||
|
temp=$(mktemp)
|
||||||
|
awk -F '=' 'NR==FNR{a[$1]=$0;next}($1 in a){$0=a[$1]}1' "$source" "$target" > "$temp"
|
||||||
|
mv "$temp" "$target"
|
||||||
|
else
|
||||||
|
mkdir -p "$(dirname "$target")"
|
||||||
|
cp "$source" "$target"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Configuration file $target has been updated."
|
26
treefmt.nix
Normal file
26
treefmt.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
projectRootFile = "flake.nix";
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
nixfmt = {
|
||||||
|
enable = true;
|
||||||
|
strict = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
shellcheck.enable = true;
|
||||||
|
prettier.enable = true;
|
||||||
|
gofmt.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
settings.global.excludes = [
|
||||||
|
# Git
|
||||||
|
"*/.gitignore"
|
||||||
|
".gitattributes"
|
||||||
|
".envrc"
|
||||||
|
# Manifest Files
|
||||||
|
"*/package.json"
|
||||||
|
"*/go.mod"
|
||||||
|
"*/bun.lockb"
|
||||||
|
];
|
||||||
|
}
|
Reference in New Issue
Block a user