Skip to content

Commit 105663b

Browse files
authored
GNOME 48 support (#1003)
This fixes #1002 by restoring PaperWM functionality on the latest GNOME 48. Contributions are welcome!
2 parents 68acb2a + 483e782 commit 105663b

File tree

7 files changed

+88
-22
lines changed

7 files changed

+88
-22
lines changed

flake.lock

Lines changed: 24 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,60 @@
11
{ description = "Tiled, scrollable window management for GNOME Shell";
22

33
inputs."nixpkgs".url = github:NixOS/nixpkgs;
4+
inputs."nixpkgs-gnome".url = github:NixOS/nixpkgs/gnome;
45

5-
outputs = { self, nixpkgs, flake-utils, ... }:
6+
outputs = { self, nixpkgs, nixpkgs-gnome, flake-utils, ... }:
67
flake-utils.lib.eachDefaultSystem
78
(system:
8-
let pkgs = import nixpkgs { inherit system; };
9+
let hostPkgs = import nixpkgs { inherit system; };
910
in
10-
{ packages.default = pkgs.callPackage ./default.nix {};
11-
packages.vm = let hostConfig = self.nixosConfigurations.testbox.config;
12-
localConfig = hostConfig // {
13-
virtualisation = hostConfig.virtualisation // {
14-
host.pkgs = pkgs; # Use host system's Qemu
15-
};
11+
{ packages.default = hostPkgs.callPackage ./default.nix {};
12+
13+
# This allows us to build Qemu for the host system thus avoiding
14+
# double emulation.
15+
packages.vm = let hostConfig = self.nixosConfigurations.testbox;
16+
localConfig = hostConfig.extendModules {
17+
modules = [
18+
({ modulesPath, ... }: {
19+
imports = [ "${modulesPath}/virtualisation/qemu-vm.nix" ];
20+
virtualisation.host.pkgs = hostPkgs;
21+
})
22+
];
1623
};
17-
in localConfig.system.build.vm;
24+
in localConfig.config.system.build.vm;
1825
}) // {
1926
nixosConfigurations."testbox" =
2027
let system = "x86_64-linux";
28+
pkgs-gnome = import nixpkgs-gnome { inherit system; };
2129
in nixpkgs.lib.nixosSystem {
2230
inherit system;
2331
modules = [
2432
./vm.nix
2533
{ nixpkgs.overlays = [
34+
# Introduce PaperWM into our extensions
2635
(s: super: { paperwm = self.packages.${system}.default; })
36+
37+
# Pull GNOME-specific packages from GNOME staging
38+
(s: super: {
39+
gnome-desktop = pkgs-gnome.gnome-desktop;
40+
gnome-shell = pkgs-gnome.gnome-shell.override {
41+
evolution-data-server-gtk4 = super.evolution-data-server-gtk4.override {
42+
inherit (super) webkitgtk_4_1 webkitgtk_6_0;
43+
};
44+
};
45+
gnome-session = pkgs-gnome.gnome-session.override {
46+
inherit (s) gnome-shell;
47+
};
48+
gnome-control-center = pkgs-gnome.gnome-control-center;
49+
gnome-initial-setup = pkgs-gnome.gnome-initial-setup.override {
50+
inherit (super) webkitgtk_6_0;
51+
};
52+
gnome-settings-daemon = pkgs-gnome.gnome-settings-daemon;
53+
mutter = pkgs-gnome.mutter;
54+
gdm = pkgs-gnome.gdm;
55+
xdg-desktop-portal-gnome = pkgs-gnome.xdg-desktop-portal-gnome;
56+
xdg-desktop-portal-gtk = pkgs-gnome.xdg-desktop-portal-gtk;
57+
})
2758
];
2859
}
2960
];

grab.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ export class MoveGrab {
6666

6767
grabbed = true;
6868
global.display.end_grab_op?.(global.get_current_time());
69-
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
69+
if (Utils.version[0] >= 48)
70+
global.display.set_cursor(Meta.Cursor.GRABBING);
71+
else
72+
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
7073
this.dispatcher = new Navigator.getActionDispatcher(Clutter.GrabState.POINTER);
7174
this.actor = this.dispatcher.actor;
7275

@@ -131,7 +134,10 @@ export class MoveGrab {
131134
console.debug("#grab", "begin DnD");
132135
Navigator.getNavigator().minimaps.forEach(m => typeof m === 'number'
133136
? Utils.timeout_remove(m) : m.hide());
134-
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
137+
if (Utils.version[0] >= 48)
138+
global.display.set_cursor(Meta.Cursor.GRABBING);
139+
else
140+
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
135141
let metaWindow = this.window;
136142
let clone = metaWindow.clone;
137143
let space = this.initialSpace;

keybindings.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,11 @@ export function byId(mutterId) {
365365
}
366366

367367
export function asKeyHandler(actionHandler) {
368-
return (display, mw, binding) => actionHandler(mw, Tiling.spaces.selectedSpace, { display, binding });
368+
if (Utils.version[0] >= 48) {
369+
return (display, mw, evt, binding) => actionHandler(mw, Tiling.spaces.selectedSpace, { display, binding });
370+
} else {
371+
return (display, mw, binding) => actionHandler(mw, Tiling.spaces.selectedSpace, { display, binding });
372+
}
369373
}
370374

371375
export function impliedOptions(options) {

metadata.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
"description": "Tiling window manager with a twist",
55
"url": "https://github.com/paperwm/PaperWM",
66
"settings-schema": "org.gnome.shell.extensions.paperwm",
7-
"shell-version": [ "45", "46", "47" ],
8-
"version-name": "47.1.0"
7+
"shell-version": [ "45", "46", "47", "48" ],
8+
"version-name": "48.0.0"
99
}

topbar.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,10 @@ export function enable (extension) {
7272
Main.panel.addToStatusArea('FocusButton', focusButton, 2, 'left');
7373
Main.panel.addToStatusArea('OpenPositionButton', openPositionButton, 3, 'left');
7474

75+
/* This causes a crash on GNOME 48
7576
Tiling.spaces.forEach(s => {
7677
s.workspaceLabel.clutter_text.set_font_description(menu.label.clutter_text.font_description);
77-
});
78+
});*/
7879

7980
fixWorkspaceIndicator();
8081
fixFocusModeIcon();

vm.nix

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
### Make PaperWM available in system environment
55
environment.systemPackages = with pkgs;
66
[ paperwm
7+
(lib.getBin libinput)
78
];
89

910
### Set graphical session to auto-login GNOME
@@ -24,12 +25,18 @@
2425
{ settings =
2526
{ "org/gnome/shell" =
2627
{ enabled-extensions = [ "[email protected]" ];
28+
disable-user-extensions = false;
2729
};
2830
};
31+
#NOTE: You can add more dconf settings to test with here!
2932
}
3033
];
3134
};
3235

36+
### Remove unnecessary dependencies
37+
#NOTE: This drops many GTK4 apps, re-enable if needed for testing.
38+
services.gnome.core-utilities.enable = false;
39+
3340
### Set default user
3441
users.users."user" =
3542
{ isNormalUser = true;

0 commit comments

Comments
 (0)