Compare commits

...

4 commits

12 changed files with 153 additions and 4 deletions

View file

@ -1,8 +1,8 @@
{
{pkgs, ...}: {
wayland.windowManager.hyprland.settings = {
exec-once = [
# TODO: Add this (probably only vesktop)
"${pkgs.systemd}/bin/systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
"${pkgs.systemd}/bin/dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=$XDG_CURRENT_DESKTOP"
];
};
}

View file

@ -8,6 +8,10 @@
hyprPkgs = (import ./packages {inherit pkgs;});
# TODO: Switch to flake
hyprlandPkg = pkgs.hyprland;
xdgDesktopPortalHyprlandPkg = pkgs.xdg-desktop-portal-hyprland;
cfg = osConfig.myOptions.home-manager.wms.hyprland;
in {
imports = [
@ -30,10 +34,19 @@ in {
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
package = hyprlandPkg;
systemd = {
enable = true;
variables = ["--all"];
};
};
xdg.portal = {
enable = true;
configPackages = [hyprlandPkg];
extraPortals = [
xdgDesktopPortalHyprlandPkg
];
};
};
}

View file

@ -37,7 +37,9 @@ start_recording() {
# Wee need 'y' stdin to confirm that we want to override the file
# since mktemp creates a blank file there already
echo "y" | wf-recorder -g "$geom" -f "$file"
# TODO: The -x 420p is a temporary fix to address the recordings appearing
# corrupted in firefox/discord/... See: <https://github.com/ammen99/wf-recorder/issues/218>
echo "y" | wf-recorder -g "$geom" -f "$file" -x yuv420p
# If wf-recorder process ends directly, rather than a trap being hit
# we also want to run the save_file func

View file

@ -4,5 +4,11 @@
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
# Specify which portals should be used by the individual interfaces
# see: <https://github.com/flatpak/xdg-desktop-portal/blob/1.18.1/doc/portals.conf.rst.in>
config.common = {
# Use this portal for every interface, unless a specific override is present
default = ["gtk"];
};
};
}

View file

@ -4,5 +4,6 @@
./programs
./fonts.nix
./runners.nix
./display
];
}

View file

@ -0,0 +1,5 @@
{
imports = [
./wayland
];
}

View file

@ -0,0 +1,8 @@
{
imports = [
./wms
./xdg-portals.nix
./xwayland.nix
./services.nix
];
}

View file

@ -0,0 +1,29 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) mkIf getExe;
cfgEnabled = config.myOptions.home-manager.wms.isWayland;
in {
config = mkIf cfgEnabled {
systemd.services = {
# Seat management daemon
# (Takes care of mediating access to shared devices (graphics, input), without requiring
# applications like Wayland compositors being granted root privileges)
seatd = {
enable = true;
description = "Seat management daemon";
script = "${getExe pkgs.seatd} -g wheel";
serviceConfig = {
Type = "simple";
Restart = "always";
RestartSec = "1";
};
wantedBy = ["multi-user.target"];
};
};
};
}

View file

@ -0,0 +1,5 @@
{
imports = [
./hyprland
];
}

View file

@ -0,0 +1,30 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) mkIf;
cfgEnabled = config.myOptions.home-manager.wms.hyprland.enable;
# TODO: Switch to flake
hyprlandPkg = pkgs.hyprland;
xdgDesktopPortalHyprlandPkg = pkgs.xdg-desktop-portal-hyprland;
in {
config = mkIf cfgEnabled {
services.displayManager.sessionPackages = [hyprlandPkg];
xdg.portal = {
enable = true;
configPackages = [hyprlandPkg];
extraPortals = [xdgDesktopPortalHyprlandPkg];
};
programs.hyprland = {
enable = true;
package = hyprlandPkg;
portalPackage = xdgDesktopPortalHyprlandPkg;
};
};
}

View file

@ -0,0 +1,37 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib) mkIf;
cfgEnabled = config.myOptions.home-manager.wms.isWayland;
cfgHyprlandEnabled = config.myOptions.home-manager.wms.hyprland.enable;
in {
config = mkIf cfgEnabled {
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
];
# Specify which portals should be used by the individual interfaces
# see: <https://github.com/flatpak/xdg-desktop-portal/blob/1.18.1/doc/portals.conf.rst.in>
config.common = let
# Note: this assumes a wlroots based compositor if it's not hyprland
# which may not always actually be the case, however, I can't be bothered to handle
# everything here and I don't plan on moving WMs any time soon.
portal = if cfgHyprlandEnabled then "hyprland" else "wlr";
in {
# Use this portal for every interface, unless a specific override is present
default = ["gtk"];
# Fix flameshot on hyprland / wlroots compositors
"org.freedesktop.impl.portal.Screencast" = [portal];
"org.freedesktop.impl.portal.Screenshot" = [portal];
};
};
};
}

View file

@ -0,0 +1,13 @@
{
config,
lib,
...
}: let
inherit (lib) mkIf;
cfgEnabled = config.myOptions.home-manager.wms.isWayland;
in {
config = mkIf cfgEnabled {
programs.xwayland.enable = true;
};
}