initial commit

Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
2025-09-13 17:14:59 +05:30
commit de91a303e2
9 changed files with 234 additions and 0 deletions

7
.clang-format Normal file
View File

@@ -0,0 +1,7 @@
BasedOnStyle: GNU
IndentWidth: 4
BreakBeforeBraces: Attach
AlwaysBreakTemplateDeclarations: Yes
AlignConsecutiveAssignments: Consecutive
BreakAfterAttributes: Always
AllowShortEnumsOnASingleLine: False

12
.clang-tidy Normal file
View File

@@ -0,0 +1,12 @@
Checks: '
, clang-analyzer-*
, cppcoreguidelines-*
, -cppcoreguidelines-avoid-magic-numbers
, -cppcoreguidelines-pro-bounds-constant-array-index
, -cppcoreguidelines-macro-usage
, -cppcoreguidelines-avoid-const-or-ref-data-members
, -cppcoreguidelines-non-private-member-variables-in-classes
, -cppcoreguidelines-avoid-non-const-global-variables
, -cppcoreguidelines-pro-type-member-init
, -cppcoreguidelines-init-variables
'

2
.clangd Normal file
View File

@@ -0,0 +1,2 @@
CompileFlags:
CompilationDatabase: build/

10
.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
# Direnv
.envrc
.direnv/
# Emacs
*~
\#*\#
# Cache
.cache/

61
flake.lock generated Normal file
View File

@@ -0,0 +1,61 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1757686808,
"narHash": "sha256-PL+Z3OrNpFNHddbsBaxeojYkWObYc2NlyhTmsmpt+hc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "098982b6eca9b809cc2f583e733338f5a36b3ad8",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"utils": "utils"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

85
flake.nix Normal file
View File

@@ -0,0 +1,85 @@
{
description = "singh5 discord bot";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
utils.url = "github:numtide/flake-utils";
};
outputs =
inputs@{
self,
nixpkgs,
utils,
}:
utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
};
src = pkgs.lib.sourceFilesBySuffices ./. [
".hh"
".cc"
".build"
".options"
];
llvm = pkgs.llvmPackages_21;
package =
{ stdenv }:
stdenv.mkDerivation {
name = "singh5";
version = "0.1";
inherit src;
outputs = [ "out" ];
nativeBuildInputs = with pkgs; [
meson
ninja
pkg-config
];
buildInputs = with pkgs; [
(dpp.override { inherit stdenv; })
(ffmpeg.overrideAttrs (_: {
inherit stdenv;
makeFlags = [
"HOSTCC=$\{CC}"
"HOSTLD=$\{LD}"
];
}))
];
};
shell =
{ stdenv }:
pkgs.mkShell.override { inherit stdenv; } {
name = "singh5";
inputsFrom = [ (package { inherit stdenv; }) ];
packages = with pkgs; [
llvm.clang-tools
];
};
in
{
packages = rec {
singh5 = package { stdenv = pkgs.gcc15Stdenv; };
singh5-clang = package { stdenv = llvm.libcxxStdenv; };
default = singh5-clang;
};
devShells = rec {
singh5 = shell { stdenv = pkgs.gcc15Stdenv; };
singh5-clang = shell { stdenv = llvm.libcxxStdenv; };
default = singh5-clang;
};
formatter = pkgs.nixfmt-tree;
}
);
}

13
meson.build Normal file
View File

@@ -0,0 +1,13 @@
project('singh5', 'cpp',
version : '0.1',
license : 'GPLv3',
default_options : ['warning_level=3',
'werror=true',
'optimization=3',
'cpp_std=c++23'])
compiler = meson.get_compiler('cpp')
lib_cpp_args = []
subdir('src')

29
src/main.cc Normal file
View File

@@ -0,0 +1,29 @@
#include <cstdlib>
#include <dpp/dpp.h>
const char *
get_bot_token () {
return getenv ("BOT_TOKEN");
}
int
main () {
dpp::cluster bot (get_bot_token ());
bot.on_log (dpp::utility::cout_logger ());
bot.on_slashcommand ([] (const dpp::slashcommand_t &event) {
if (event.command.get_command_name () == "ping") {
event.reply ("Pong!");
}
});
bot.on_ready ([&bot] (const dpp::ready_t &_) {
if (dpp::run_once<struct register_bot_commands> ()) {
bot.global_command_create (
dpp::slashcommand ("ping", "Ping pong!", bot.me.id));
}
});
bot.start (dpp::st_wait);
}

15
src/meson.build Normal file
View File

@@ -0,0 +1,15 @@
sources = files(
'main.cc',
)
dpp = dependency('dpp', version: '>=10.1.2', static: true)
libavformat = dependency('libavformat', version: '>=61.7.100')
libavcodec = dependency('libavcodec', version: '>=61.19.101')
executable(
'singh5',
sources,
dependencies: [ dpp, libavformat, libavcodec ],
install : true,
cpp_args: lib_cpp_args
)