Initial commit

This commit is contained in:
2025-04-03 13:25:43 +02:00
commit 7cf082535e
7 changed files with 2461 additions and 0 deletions

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use flake

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
/target
result
result-*

2297
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

12
Cargo.toml Normal file
View File

@@ -0,0 +1,12 @@
[package]
name = "kagami"
version = "0.1.0"
edition = "2024"
[dependencies]
clap = { version = "4.5.35", features = ["derive"] }
clap_complete = "4.5.47"
gix = "0.70.0"
sd-notify = "0.4.5"
tracing = "0.1.41"
tracing-journald = "0.3.1"

48
flake.lock generated Normal file
View File

@@ -0,0 +1,48 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1743583204,
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1743647602,
"narHash": "sha256-fXd8fA6HR7MlUJQzz31zjBzUji4HpGCJ7CMVKSZOe8c=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "5b2d60b2e25bcb498103f6fae08da561f6b671da",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

45
flake.nix Normal file
View File

@@ -0,0 +1,45 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
rust-overlay.url = "github:oxalica/rust-overlay";
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, nixpkgs, rust-overlay }:
let
inherit (nixpkgs) lib;
systems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
forAllSystems = f: lib.genAttrs systems (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [
(import rust-overlay)
];
};
rust-bin = rust-overlay.lib.mkRustBin { } pkgs.buildPackages;
toolchain = rust-bin.stable.latest.default.override {
extensions = [ "rust-src" "rust-analyzer" "rust-std" ];
};
in f system pkgs toolchain);
in {
devShells = forAllSystems (system: pkgs: toolchain: {
default = pkgs.mkShell {
nativeBuildInputs = [
toolchain
pkgs.gitoxide
];
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library";
};
});
};
}

54
src/main.rs Normal file
View File

@@ -0,0 +1,54 @@
use std::path::PathBuf;
use clap::{CommandFactory, Parser, command};
use clap_complete::{Shell, generate};
#[derive(Parser, Debug)]
#[command(version, about)]
struct Args {
#[command(subcommand)]
command: Command,
#[arg(short, long)]
config: PathBuf,
}
#[derive(Parser, Debug, Clone)]
enum Command {
/// Mirror repositories as specified in the config
Rror,
/// Create a linktree of the latest backups of the repositories, for use with cgit et al.
Linktree,
/// Validate the configuration provided configuration file
ValidateConfig,
/// Generate shell completions
#[command(hide = true)]
GenerateCompletions(GenerateCompletionArgs),
}
#[derive(Parser, Debug, Clone)]
struct GenerateCompletionArgs {
#[arg(long, default_value = "bash")]
shell: Shell,
}
fn main() {
let args = Args::parse();
match args.command {
Command::GenerateCompletions(args) => {
generate(
args.shell,
&mut Args::command(),
"kagami",
&mut std::io::stdout(),
);
}
_ => {
unimplemented!()
}
}
}