devshell: remove dependency on clan-cli

This stops the devshell from being re-built constantly, when the source code changes.

Based on a new feature in treefmt-nix: https://github.com/numtide/treefmt-nix/pull/208
This commit is contained in:
DavHau
2024-08-03 22:10:11 +07:00
parent 7de0789183
commit 6c1c615c60
7 changed files with 40 additions and 14 deletions

View File

@@ -0,0 +1,22 @@
{ ... }:
{
perSystem =
{ self', pkgs, ... }:
{
checks.devshell =
pkgs.runCommand "check-devshell-not-depends-on-clan-cli"
{
exportReferencesGraph = [
"graph"
self'.devShells.default
];
}
''
if grep -q "${self'.packages.clan-cli}" ./graph; then
echo "devshell depends on clan-cli, which is not allowed";
exit 1;
fi
mkdir $out
'';
};
}

View File

@@ -1,10 +1,11 @@
{ self, ... }: { self, ... }:
{ {
imports = [ imports = [
./impure/flake-module.nix
./backups/flake-module.nix ./backups/flake-module.nix
./installation/flake-module.nix ./devshell/flake-module.nix
./flash/flake-module.nix ./flash/flake-module.nix
./impure/flake-module.nix
./installation/flake-module.nix
]; ];
perSystem = perSystem =
{ {

View File

@@ -38,6 +38,7 @@
]; ];
shellHook = '' shellHook = ''
echo -e "${ansiEscapes.green}switch to another dev-shell using: select-shell${ansiEscapes.reset}" echo -e "${ansiEscapes.green}switch to another dev-shell using: select-shell${ansiEscapes.reset}"
export PROJECT_ROOT=$(git rev-parse --show-toplevel)
''; '';
}; };
}; };

6
flake.lock generated
View File

@@ -115,11 +115,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1721458737, "lastModified": 1722699361,
"narHash": "sha256-wNXLQ/ATs1S4Opg1PmuNoJ+Wamqj93rgZYV3Di7kxkg=", "narHash": "sha256-3GDJCoNj7PEwQaOqmNgcwoHM+Xy/fkgqeXC1y7UzV2U=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "888bfb10a9b091d9ed2f5f8064de8d488f7b7c97", "rev": "07741a9babd0754bf73fb47a6340d6289eabd1d6",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -44,7 +44,6 @@
"*.yml" "*.yml"
]; ];
}; };
treefmt.programs.mypy.directories = treefmt.programs.mypy.directories =
{ {
"pkgs/clan-cli" = { "pkgs/clan-cli" = {
@@ -53,8 +52,8 @@
}; };
"pkgs/clan-app" = { "pkgs/clan-app" = {
extraPythonPackages = extraPythonPackages =
# clan-app currently only exists on linux
(self'.packages.clan-app.externalTestDeps or [ ]) ++ self'.packages.clan-cli.testDependencies; (self'.packages.clan-app.externalTestDeps or [ ]) ++ self'.packages.clan-cli.testDependencies;
extraPythonPaths = [ "$PROJECT_ROOT/pkgs/clan-cli" ];
modules = [ "clan_app" ]; modules = [ "clan_app" ];
}; };
} }
@@ -63,8 +62,8 @@
{ {
"pkgs/clan-vm-manager" = { "pkgs/clan-vm-manager" = {
extraPythonPackages = extraPythonPackages =
# # clan-app currently only exists on linux self'.packages.clan-vm-manager.externalTestDeps ++ self'.packages.clan-cli.testDependencies;
self'.packages.clan-vm-manager.testDependencies; extraPythonPaths = [ "$PROJECT_ROOT/pkgs/clan-cli" ];
modules = [ "clan_vm_manager" ]; modules = [ "clan_vm_manager" ];
}; };
} }

View File

@@ -16,6 +16,10 @@ from clan_app.api import ImplFunc
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def remove_none(_list: list) -> list:
return [i for i in _list if i is not None]
# This implements the abstract function open_file with one argument, file_request, # This implements the abstract function open_file with one argument, file_request,
# which is a FileRequest object and returns a string or None. # which is a FileRequest object and returns a string or None.
class open_file( class open_file(
@@ -29,7 +33,7 @@ class open_file(
try: try:
gfile = file_dialog.open_finish(task) gfile = file_dialog.open_finish(task)
if gfile: if gfile:
selected_path = [gfile.get_path()] selected_path = remove_none([gfile.get_path()])
self.returns( self.returns(
SuccessDataClass( SuccessDataClass(
op_key=op_key, data=selected_path, status="success" op_key=op_key, data=selected_path, status="success"
@@ -44,7 +48,7 @@ class open_file(
try: try:
gfiles: Any = file_dialog.open_multiple_finish(task) gfiles: Any = file_dialog.open_multiple_finish(task)
if gfiles: if gfiles:
selected_paths = [gfile.get_path() for gfile in gfiles] selected_paths = remove_none([gfile.get_path() for gfile in gfiles])
self.returns( self.returns(
SuccessDataClass( SuccessDataClass(
op_key=op_key, data=selected_paths, status="success" op_key=op_key, data=selected_paths, status="success"
@@ -57,7 +61,7 @@ class open_file(
try: try:
gfile = file_dialog.select_folder_finish(task) gfile = file_dialog.select_folder_finish(task)
if gfile: if gfile:
selected_path = [gfile.get_path()] selected_path = remove_none([gfile.get_path()])
self.returns( self.returns(
SuccessDataClass( SuccessDataClass(
op_key=op_key, data=selected_path, status="success" op_key=op_key, data=selected_path, status="success"
@@ -70,7 +74,7 @@ class open_file(
try: try:
gfile = file_dialog.save_finish(task) gfile = file_dialog.save_finish(task)
if gfile: if gfile:
selected_path = [gfile.get_path()] selected_path = remove_none([gfile.get_path()])
self.returns( self.returns(
SuccessDataClass( SuccessDataClass(
op_key=op_key, data=selected_path, status="success" op_key=op_key, data=selected_path, status="success"

View File

@@ -65,6 +65,5 @@ mkShell {
export XDG_DATA_DIRS=${gtk4}/share/gsettings-schemas/gtk4-4.14.4:$XDG_DATA_DIRS export XDG_DATA_DIRS=${gtk4}/share/gsettings-schemas/gtk4-4.14.4:$XDG_DATA_DIRS
export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/gsettings-desktop-schemas-46.0:$XDG_DATA_DIRS export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/gsettings-desktop-schemas-46.0:$XDG_DATA_DIRS
''; '';
} }