# NoMines A modern GTK4/gtkmm implementation of the classic Minesweeper game with multiple difficulty levels, a persistent leaderboard, keyboard shortcuts, and light/dark theme support. ![Game Screenshot](screenshots/screen1.png) ## Features - Multiple difficulty levels: Beginner, Intermediate, Expert, and Master - Persistent leaderboard tracking the best time per difficulty - Follows the system light/dark theme - Win/lose animations, including a confetti win celebration - Keyboard shortcuts: `R` / `Ctrl+N` new game, `1`–`4` difficulty, `L` leaderboard - Right-click chording on revealed cells - Modern GTK4 user interface with client-side decorations - Modern C++20 implementation ## Building from Source ### Dependencies - GTK 4.0 or later - gtkmm 4.0 or later - sigc++ 3.0 or later - Meson build system - Ninja build system ### Ubuntu/Debian Install dependencies: ```bash sudo apt install build-essential meson ninja-build libgtkmm-4.0-dev libsigc++-3.0-dev ``` ### Fedora Install dependencies: ```bash sudo dnf install gcc-c++ meson ninja-build gtkmm4.0-devel libsigc++3-devel ``` ### Arch Linux Install dependencies: ```bash sudo pacman -S base-devel meson ninja gtkmm-4.0 libsigc++-3.0 ``` ### Building the Project Clone the repository: ```bash git clone https://github.com/bemagri/nomines cd nomines ``` Configure and build with Meson: ```bash meson setup build meson compile -C build ``` Run the game: ```bash ./build/nomines ``` ### Installing To install system-wide: ```bash meson install -C build ``` ## Using Nix If you use the Nix package manager, you can build and run the application with: ```bash nix build ./result/bin/nomines ``` Or run it directly from the flake: ```bash nix run ``` The Nix flake also provides a development shell with all dependencies: ```bash nix develop ``` ## Building a Flatpak NoMines ships a Flatpak manifest (`io.github.bemagri.nomines.yml`) that builds the gtkmm stack (libsigc++, glibmm, gtkmm) against the GNOME 46 runtime: ```bash flatpak install -y flathub org.gnome.Platform//46 org.gnome.Sdk//46 flatpak-builder --user --install --force-clean build-flatpak io.github.bemagri.nomines.yml flatpak run io.github.bemagri.nomines ``` Note: the manifest's `commit` must match the pushed `v1.0.0` tag (update it if the history is rebased before pushing). ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. ## License This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.