feat: add nix flake

Adds Nix flake that provides a devshell and package. flutter version dropped to 3.22.0 in pubspec.yaml to match what Nixpkgs 24.05 provides.
This commit is contained in:
Martin Wimpress 2024-06-26 14:25:53 +01:00 committed by Martin Wimpress
parent d4893b5d2c
commit 1605c162cf
7 changed files with 209 additions and 1 deletions

9
.envrc Normal file
View File

@ -0,0 +1,9 @@
use flake
flutter pub get
flutter config --enable-linux-desktop
dart pub global activate flutter_distributor
echo "**********************************************************************"
echo "* flutter build linux --release *"
echo "* flutter_distributor package --platform=linux --targets=zip *"
echo "* yq eval pubspec.lock -o=json -P > pubspec.lock.json *"
echo "**********************************************************************"

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
# Files and directories created by pub
.dart_tool/
.direnv/
.packages
build/
dist/

56
devshell.nix Normal file
View File

@ -0,0 +1,56 @@
# https://manuelplavsic.ch/articles/flutter-environment-with-nix/
{
lib,
mkShell,
pkgs,
stdenv,
appimagekit,
clang,
cmake,
dart,
dpkg,
flutter,
git,
gnome,
gtk3,
ninja,
patchelf,
pcre2,
plocate,
pkg-config,
quickemu,
rpm,
}:
mkShell rec {
FLUTTER_ROOT = flutter;
DART_ROOT = "${flutter}/bin/cache/dart-sdk";
buildInputs = [
appimagekit
clang
cmake
dart
dpkg
flutter
git
gnome.zenity
gtk3
ninja
patchelf
pcre2
plocate
pkg-config
quickemu
rpm
];
# vulkan-loader and libGL shared libs are necessary for hardware decoding
LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath [ pkgs.vulkan-loader pkgs.libGL ]}";
# Packages installed via `dart pub global activate package_name` are
# located in the `$PUB_CACHE/bin` directory.
shellHook = ''
if [ -z "$PUB_CACHE" ]; then
export PATH="$PATH":"$HOME/.pub-cache/bin"
else
export PATH="$PATH":"$PUB_CACHE/bin"
fi
'';
}

40
flake.lock Normal file
View File

@ -0,0 +1,40 @@
{
"nodes": {
"flake-schemas": {
"locked": {
"lastModified": 1697467827,
"narHash": "sha256-j8SR19V1SRysyJwpOBF4TLuAvAjF5t+gMiboN4gYQDU=",
"rev": "764932025c817d4e500a8d2a4d8c565563923d29",
"revCount": 29,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.2/018b3da8-4cc3-7fbb-8ff7-1588413c53e2/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A.tar.gz"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1719254875,
"narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=",
"rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60",
"revCount": 643242,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.643242%2Brev-2893f56de08021cffd9b6b6dfc70fd9ccd51eb60/0190530b-f61b-7788-9601-b336b1caf671/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/0.1.%2A.tar.gz"
}
},
"root": {
"inputs": {
"flake-schemas": "flake-schemas",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

38
flake.nix Normal file
View File

@ -0,0 +1,38 @@
{
description = "Quickemu flake";
inputs = {
flake-schemas.url = "https://flakehub.com/f/DeterminateSystems/flake-schemas/*.tar.gz";
nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz";
};
outputs = {
self,
flake-schemas,
nixpkgs,
}: let
forAllSystems = function:
nixpkgs.lib.genAttrs [
"x86_64-linux"
# TODO: Enable when upstream supports these platforms
#"aarch64-linux"
#"x86_64-darwin"
#"aarch64-darwin"
] (system: function nixpkgs.legacyPackages.${system});
in {
# Schemas tell Nix about the structure of your flake's outputs
schemas = flake-schemas.schemas;
overlays.default = final: prev: {
quickgui = final.callPackage ./package.nix {};
};
packages = forAllSystems (pkgs: rec {
quickgui = pkgs.callPackage ./package.nix {};
default = quickgui;
});
devShells = forAllSystems (pkgs: {
default = pkgs.callPackage ./devshell.nix {};
});
};
}

64
package.nix Normal file
View File

@ -0,0 +1,64 @@
{ fetchFromGitHub
, makeDesktopItem
, copyDesktopItems
, lib
, flutter
, gnome
, quickemu
}:
let
runtimeBinDependencies = [ gnome.zenity ];
versionMatches =
builtins.match ''
.*
version:[[:blank:]]"([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+)"
.*
'' (builtins.readFile ./pubspec.yaml);
in
flutter.buildFlutterApplication rec {
pname = "quickgui";
version = builtins.concatStringsSep "" versionMatches;
src = fetchFromGitHub {
owner = "quickemu-project";
repo = "quickgui";
#rev = version;
rev = "d4893b5d2cb2e7ef271e4c2d66683e30d70352e2";
hash = "sha256-V9wSENva/5Khqzor+Umj7BooWecDqn91Bj+waDMMPyY=";
};
pubspecLock = lib.importJSON ./pubspec.lock.json;
gitHashes = {
window_size = "sha256-mn1UFA4Vqh3f5MqlTy9LueWr6qvCOHLujVoEQi0KMNw=";
};
# These things are added to LD_LIBRARY_PATH, but not PATH
runtimeDependencies = [ quickemu ];
extraWrapProgramArgs = "--prefix PATH : ${lib.makeBinPath runtimeBinDependencies}";
nativeBuildInputs = [ copyDesktopItems ];
postFixup = ''
mkdir -p $out/share/pixmaps
cp $out/app/data/flutter_assets/assets/images/logo_pink.png $out/share/pixmaps/quickemu.png
'';
desktopItems = [
(makeDesktopItem {
name = "quickgui";
exec = "quickgui";
icon = "quickgui";
desktopName = "Quickgui";
categories = [ "Development" "System" ];
})
];
meta = with lib; {
description = "Flutter frontend for quickemu";
homepage = "https://github.com/quickemu-project/quickgui";
changelog = "https://github.com/quickemu-project/quickgui/releases/";
license = licenses.mit;
maintainers = with maintainers; [ flexiondotorg heyimnova ];
platforms = [ "x86_64-linux" ];
mainProgram = "quickgui";
};
}

View File

@ -5,7 +5,7 @@ version: 1.2.8+1
environment:
sdk: ">=3.2.0 <4.0.0"
flutter: "3.22.2"
flutter: "3.22.0"
dependencies:
flutter: