Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
31 changes: 24 additions & 7 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

49 changes: 40 additions & 9 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -1,29 +1,60 @@
{ description = "Tiled, scrollable window management for GNOME Shell";

inputs."nixpkgs".url = github:NixOS/nixpkgs;
inputs."nixpkgs-gnome".url = github:NixOS/nixpkgs/gnome;

outputs = { self, nixpkgs, flake-utils, ... }:
outputs = { self, nixpkgs, nixpkgs-gnome, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem
(system:
let pkgs = import nixpkgs { inherit system; };
let hostPkgs = import nixpkgs { inherit system; };
in
{ packages.default = pkgs.callPackage ./default.nix {};
packages.vm = let hostConfig = self.nixosConfigurations.testbox.config;
localConfig = hostConfig // {
virtualisation = hostConfig.virtualisation // {
host.pkgs = pkgs; # Use host system's Qemu
};
{ packages.default = hostPkgs.callPackage ./default.nix {};

# This allows us to build Qemu for the host system thus avoiding
# double emulation.
packages.vm = let hostConfig = self.nixosConfigurations.testbox;
localConfig = hostConfig.extendModules {
modules = [
({ modulesPath, ... }: {
imports = [ "${modulesPath}/virtualisation/qemu-vm.nix" ];
virtualisation.host.pkgs = hostPkgs;
})
];
};
in localConfig.system.build.vm;
in localConfig.config.system.build.vm;
}) // {
nixosConfigurations."testbox" =
let system = "x86_64-linux";
pkgs-gnome = import nixpkgs-gnome { inherit system; };
in nixpkgs.lib.nixosSystem {
inherit system;
modules = [
./vm.nix
{ nixpkgs.overlays = [
# Introduce PaperWM into our extensions
(s: super: { paperwm = self.packages.${system}.default; })

# Pull GNOME-specific packages from GNOME staging
(s: super: {
gnome-desktop = pkgs-gnome.gnome-desktop;
gnome-shell = pkgs-gnome.gnome-shell.override {
evolution-data-server-gtk4 = super.evolution-data-server-gtk4.override {
inherit (super) webkitgtk_4_1 webkitgtk_6_0;
};
};
gnome-session = pkgs-gnome.gnome-session.override {
inherit (s) gnome-shell;
};
gnome-control-center = pkgs-gnome.gnome-control-center;
gnome-initial-setup = pkgs-gnome.gnome-initial-setup.override {
inherit (super) webkitgtk_6_0;
};
gnome-settings-daemon = pkgs-gnome.gnome-settings-daemon;
mutter = pkgs-gnome.mutter;
gdm = pkgs-gnome.gdm;
xdg-desktop-portal-gnome = pkgs-gnome.xdg-desktop-portal-gnome;
xdg-desktop-portal-gtk = pkgs-gnome.xdg-desktop-portal-gtk;
})
];
}
];
Expand Down
10 changes: 8 additions & 2 deletions grab.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ export class MoveGrab {

grabbed = true;
global.display.end_grab_op?.(global.get_current_time());
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
if (Utils.version[0] >= 48)
global.display.set_cursor(Meta.Cursor.GRABBING);
else
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
this.dispatcher = new Navigator.getActionDispatcher(Clutter.GrabState.POINTER);
this.actor = this.dispatcher.actor;

Expand Down Expand Up @@ -131,7 +134,10 @@ export class MoveGrab {
console.debug("#grab", "begin DnD");
Navigator.getNavigator().minimaps.forEach(m => typeof m === 'number'
? Utils.timeout_remove(m) : m.hide());
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
if (Utils.version[0] >= 48)
global.display.set_cursor(Meta.Cursor.GRABBING);
else
global.display.set_cursor(Meta.Cursor.MOVE_OR_RESIZE_WINDOW);
let metaWindow = this.window;
let clone = metaWindow.clone;
let space = this.initialSpace;
Expand Down
6 changes: 5 additions & 1 deletion keybindings.js
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,11 @@ export function byId(mutterId) {
}

export function asKeyHandler(actionHandler) {
return (display, mw, binding) => actionHandler(mw, Tiling.spaces.selectedSpace, { display, binding });
if (Utils.version[0] >= 48) {
return (display, mw, evt, binding) => actionHandler(mw, Tiling.spaces.selectedSpace, { display, binding });
} else {
return (display, mw, binding) => actionHandler(mw, Tiling.spaces.selectedSpace, { display, binding });
}
}

export function impliedOptions(options) {
Expand Down
4 changes: 2 additions & 2 deletions metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
"description": "Tiling window manager with a twist",
"url": "https://github.com/paperwm/PaperWM",
"settings-schema": "org.gnome.shell.extensions.paperwm",
"shell-version": [ "45", "46", "47" ],
"version-name": "47.1.0"
"shell-version": [ "45", "46", "47", "48" ],
"version-name": "48.0.0"
}
3 changes: 2 additions & 1 deletion topbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ export function enable (extension) {
Main.panel.addToStatusArea('FocusButton', focusButton, 2, 'left');
Main.panel.addToStatusArea('OpenPositionButton', openPositionButton, 3, 'left');

/* This causes a crash on GNOME 48
Tiling.spaces.forEach(s => {
s.workspaceLabel.clutter_text.set_font_description(menu.label.clutter_text.font_description);
});
});*/

fixWorkspaceIndicator();
fixFocusModeIcon();
Expand Down
7 changes: 7 additions & 0 deletions vm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
### Make PaperWM available in system environment
environment.systemPackages = with pkgs;
[ paperwm
(lib.getBin libinput)
];

### Set graphical session to auto-login GNOME
Expand All @@ -24,12 +25,18 @@
{ settings =
{ "org/gnome/shell" =
{ enabled-extensions = [ "[email protected]" ];
disable-user-extensions = false;
};
};
#NOTE: You can add more dconf settings to test with here!
}
];
};

### Remove unnecessary dependencies
#NOTE: This drops many GTK4 apps, re-enable if needed for testing.
services.gnome.core-utilities.enable = false;

### Set default user
users.users."user" =
{ isNormalUser = true;
Expand Down