summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-29 14:48:38 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-29 14:48:38 +1000
commit416a41affeaecf1ac6720fde4bae5d33e5ec3d75 (patch)
tree837c3d4acd4418363d6924f620a48f076dca7d41
parentnix: fixes (diff)
downloadcaelestia-shell-416a41affeaecf1ac6720fde4bae5d33e5ec3d75.tar.gz
caelestia-shell-416a41affeaecf1ac6720fde4bae5d33e5ec3d75.tar.bz2
caelestia-shell-416a41affeaecf1ac6720fde4bae5d33e5ec3d75.zip
lib: add version script
-rw-r--r--CMakeLists.txt13
-rw-r--r--assets/cpp/CMakeLists.txt10
-rw-r--r--assets/cpp/version.cpp26
-rw-r--r--flake.nix1
-rw-r--r--nix/default.nix14
5 files changed, 60 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 513e9de..a814315 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,18 @@ if(NOT DEFINED VERSION)
endif()
endif()
+if(NOT DEFINED GIT_REVISION)
+ execute_process(COMMAND git rev-parse HEAD
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_REVISION
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ if("${GIT_REVISION}" STREQUAL "")
+ message(FATAL_ERROR "GIT_REVISION is not set and failed to get from git")
+ endif()
+endif()
+
string(REGEX REPLACE "^v" "" VERSION "${VERSION}")
project(caelestia-shell VERSION ${VERSION} LANGUAGES CXX)
@@ -20,6 +32,7 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
+set(DISTRIBUTOR "Unset" CACHE STRING "Distributor")
set(INSTALL_LIBDIR "usr/lib/caelestia" CACHE STRING "Library install dir")
set(INSTALL_QMLDIR "usr/lib/qt6/qml" CACHE STRING "QML install dir")
set(INSTALL_QSCONFDIR "etc/xdg/quickshell/caelestia" CACHE STRING "Quickshell config install dir")
diff --git a/assets/cpp/CMakeLists.txt b/assets/cpp/CMakeLists.txt
index ef12370..18beabf 100644
--- a/assets/cpp/CMakeLists.txt
+++ b/assets/cpp/CMakeLists.txt
@@ -3,6 +3,16 @@ find_package(PkgConfig REQUIRED)
pkg_check_modules(PIPEWIRE REQUIRED libpipewire-0.3)
pkg_check_modules(AUBIO REQUIRED aubio)
+# Version
+add_executable(version version.cpp)
+target_compile_definitions(version PRIVATE
+ PROJECT_NAME="${PROJECT_NAME}"
+ VERSION="${VERSION}"
+ GIT_REVISION="${GIT_REVISION}"
+ DISTRIBUTOR="${DISTRIBUTOR}"
+)
+install(TARGETS version DESTINATION ${INSTALL_LIBDIR})
+
# Beat detector
add_executable(beat_detector beat-detector.cpp)
target_include_directories(beat_detector PRIVATE ${PIPEWIRE_INCLUDE_DIRS} ${AUBIO_INCLUDE_DIRS})
diff --git a/assets/cpp/version.cpp b/assets/cpp/version.cpp
new file mode 100644
index 0000000..e1a0cf3
--- /dev/null
+++ b/assets/cpp/version.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+
+int main(int argc, char* argv[]) {
+ if (argc > 1) {
+ std::string arg = argv[1];
+
+ if (arg == "-t" || arg == "--terse") {
+ std::cout << PROJECT_NAME << std::endl;
+ std::cout << VERSION << std::endl;
+ std::cout << GIT_REVISION << std::endl;
+ std::cout << DISTRIBUTOR << std::endl;
+ } else if (arg == "-s" || arg == "--short") {
+ std::cout << PROJECT_NAME << " " << VERSION << ", revision " << GIT_REVISION << ", distrubuted by: " << DISTRIBUTOR << std::endl;
+ } else {
+ std::cout << "Usage: " << argv[0] << " [-t | --terse] [-s | --short]" << std::endl;
+ return arg != "-h" && arg != "--help";
+ }
+ } else {
+ std::cout << "Project: " << PROJECT_NAME << std::endl;
+ std::cout << "Version: " << VERSION << std::endl;
+ std::cout << "Git revision: " << GIT_REVISION << std::endl;
+ std::cout << "Distributor: " << DISTRIBUTOR << std::endl;
+ }
+
+ return 0;
+}
diff --git a/flake.nix b/flake.nix
index df68a37..deb00c7 100644
--- a/flake.nix
+++ b/flake.nix
@@ -30,6 +30,7 @@
packages = forAllSystems (pkgs: rec {
caelestia-shell = pkgs.callPackage ./nix {
+ rev = self.rev or self.dirtyRev;
quickshell = inputs.quickshell.packages.${pkgs.system}.default.override {
withX11 = false;
withI3 = false;
diff --git a/nix/default.nix b/nix/default.nix
index a022a4a..3fd5325 100644
--- a/nix/default.nix
+++ b/nix/default.nix
@@ -1,4 +1,5 @@
{
+ rev,
lib,
stdenv,
makeWrapper,
@@ -64,6 +65,12 @@
fontDirectories = [material-symbols rubik nerd-fonts.caskaydia-cove];
};
+ cmakeVersionFlags = [
+ (lib.cmakeFeature "VERSION" version)
+ (lib.cmakeFeature "GIT_REVISION" rev)
+ (lib.cmakeFeature "DISTRIBUTOR" "Nix Flake")
+ ];
+
assets = stdenv.mkDerivation {
name = "caelestia-assets";
src = ./../assets/cpp;
@@ -71,7 +78,7 @@
nativeBuildInputs = [cmake ninja pkg-config];
buildInputs = [aubio pipewire];
- cmakeFlags = [(lib.cmakeFeature "INSTALL_LIBDIR" "${placeholder "out"}/lib")];
+ cmakeFlags = [(lib.cmakeFeature "INSTALL_LIBDIR" "${placeholder "out"}/lib")] ++ cmakeVersionFlags;
};
plugin = stdenv.mkDerivation {
@@ -82,7 +89,7 @@
buildInputs = [qt6.qtbase qt6.qtdeclarative];
dontWrapQtApps = true;
- cmakeFlags = [(lib.cmakeFeature "INSTALL_QMLDIR" qt6.qtbase.qtQmlPrefix)];
+ cmakeFlags = [(lib.cmakeFeature "INSTALL_QMLDIR" qt6.qtbase.qtQmlPrefix)] ++ cmakeVersionFlags;
};
in
stdenv.mkDerivation {
@@ -96,11 +103,10 @@ in
cmakeBuildType = "Release";
cmakeFlags = [
- (lib.cmakeFeature "VERSION" version)
(lib.cmakeBool "DONT_BUILD_PLUGIN" true)
(lib.cmakeBool "DONT_BUILD_ASSETS" true)
(lib.cmakeFeature "INSTALL_QSCONFDIR" "${placeholder "out"}/share/caelestia-shell")
- ];
+ ] ++ cmakeVersionFlags;
prePatch = ''
substituteInPlace assets/pam.d/fprint \