Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Add Nix devenv
  • Loading branch information
BinaryQuantumSoul committed Sep 9, 2025
commit 88b086e5e8c53345cdc7e0448c318a9282b45543
2 changes: 2 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
eval "$(devenv direnvrc)"
use devenv
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ veshell.log
.flutter_sdk
target
.vscode/vmService.json
.devenv*

// debug config folder
.veshell
.veshell
103 changes: 103 additions & 0 deletions devenv.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
{
"nodes": {
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1757003908,
"owner": "cachix",
"repo": "devenv",
"rev": "ac8ebf17828c0e7d9be0270d359123fffcc6f066",
"type": "github"
},
"original": {
"dir": "src/modules",
"owner": "cachix",
"repo": "devenv",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1755960406,
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1755783167,
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "4a880fb247d24fbca57269af672e8f78935b0328",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "rolling",
"repo": "devenv-nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": [
"git-hooks"
]
}
}
},
"root": "root",
"version": 7
}
120 changes: 120 additions & 0 deletions devenv.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
{ pkgs, lib, config, inputs, ... }:
let
flutterHash = "sha256-s5T16+cMmL2ustJQjwFbfS8G+/TJW/WCEF1IO4WgbXQ=";
flutterEngineHash = "sha256-XNZGEFE7ryNhA9Fc33n0v/uq7+IjdDDAMpqEVECRxws=";
in
let
# Parse Flutter version from Cargo metadata
cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml);
flutterVersion = cargoToml.package.metadata.flutter_version;

# Get Flutter from GitHub
flutter = pkgs.flutter.overrideAttrs (oldAttrs: {
src = pkgs.fetchFromGitHub {
owner = "flutter";
repo = "flutter";
rev = flutterVersion;
sha256 = flutterHash;
};
version = flutterVersion;
});

# Parse Flutter engine revision from Flutter
engineRevisionFile = "${flutter}/bin/internal/engine.version";
engineRevision = if builtins.pathExists engineRevisionFile
then lib.strings.removeSuffix "\n" (builtins.readFile engineRevisionFile)
else "stable";

# Get Flutter Engine from GitHub
flutterEngine = pkgs.stdenv.mkDerivation rec {
pname = "flutter-engine";
version = engineRevision;

src = pkgs.fetchurl {
name = "flutter-engine-${version}.tar.gz";
url = "https://github.com/meta-flutter/flutter-engine/releases/download/linux-engine-sdk-debug-x86_64-${version}/linux-engine-sdk-debug-x86_64-${version}.tar.gz";
sha256 = flutterEngineHash;
};

nativeBuildInputs = with pkgs; [gnutar gzip];

unpackPhase = ''
runHook preUnpack
mkdir -p $out
tar -xzf $src
mv flutter/engine/src/out/linux_debug_x64/engine-sdk/* $out/
runHook postUnpack
'';

meta = with lib; {
description = "Flutter engine libraries for Linux";
homepage = "https://flutter.dev";
license = licenses.bsd3;
platforms = platforms.linux;
};
};
in
{
packages = with pkgs; [
clang
cmake
ninja
pkg-config
rustc
cargo
rustfmt
clippy
rust-analyzer
gtk3
sysprof
libsysprof-capture
pcre2
openssl
systemd
seatd
unzip
jq
git
libxkbcommon libinput libgbm
xwayland
pulseaudio
];

env = {
RUST_BACKTRACE = "1";
SKIP_FLUTTER_ENGINE_DOWNLOAD = "1";
FLUTTER_PATH = flutter;
FLUTTER_ENGINE_PATH = flutterEngine;
LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
LD_LIBRARY_PATH = "${pkgs.wayland}/lib:${pkgs.pulseaudio}/lib";
};

languages.dart = {
enable = true;
package = flutter;
};

enterShell = ''
echo "=== Flutter Installation ==="

# Symlink Flutter SDK
if [ -d ".flutter_sdk" ] && [ ! -L ".flutter_sdk" ]; then
echo "Removing existing .flutter_sdk directory..."
rm -rf .flutter_sdk
fi
echo "Linking Flutter SDK..."
ln -sfn ${flutter} .flutter_sdk

# Symlink Flutter Engine
echo "Linking Flutter Engine..."
mkdir -p extra/third_party/flutter_engine/debug
ln -sf "${flutterEngine}/lib/libflutter_engine.so" extra/third_party/flutter_engine/debug/libflutter_engine.so
ln -sf "${flutterEngine}/include/flutter_embedder.h" extra/third_party/flutter_engine/flutter_embedder.h

echo "=== Version Information ==="
echo "Flutter version: $(${flutter}/bin/flutter --version --machine | jq -r '.flutterVersion')"
echo "Dart version: $(${flutter}/bin/flutter --version --machine | jq -r '.dartSdkVersion')"
echo "Engine revision: $(${flutter}/bin/flutter --version --machine | jq -r '.engineRevision')"
echo "Channel: $(${flutter}/bin/flutter --version --machine | jq -r '.channel')"
'';
}
4 changes: 4 additions & 0 deletions devenv.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
inputs:
nixpkgs:
url: github:cachix/devenv-nixpkgs/rolling