Updated everything

This commit is contained in:
2025-09-22 09:06:50 -03:00
parent 20c8ecb0bd
commit 438296b01b
51 changed files with 1778 additions and 1090 deletions

View File

@@ -0,0 +1,162 @@
# LXQt Desktop Environment with Niri Window Manager
#
# This module provides LXQt desktop environment components running with
# Niri as the Wayland compositor instead of the default window manager.
#
# Features:
# - LXQt panel, settings, file manager, and utilities
# - Niri as the tiling Wayland compositor
# - Proper Qt theming with LXQt themes and Kvantum
# - XDG portals for screen sharing and file dialogs
# - Audio, network, and power management integration
#
# Usage:
# Add this to your host configuration:
# imports = lib.flatten [
# # ... other imports ...
# "hosts/common/optional/lxqt-niri.nix"
# "hosts/common/optional/gdm.nix" # or sddm.nix for display manager
# ];
#
# The session will appear as "LXQt (Niri)" in the session list.
#
{
pkgs,
inputs,
lib,
...
}: {
imports = [
inputs.niri.nixosModules.niri
];
# Enable Niri as the window manager
programs.niri.enable = true;
# Enable LXQt desktop environment components
# Note: We don't enable services.xserver.desktopManager.lxqt.enable = true
# because it would conflict with our custom display manager configuration
services.xserver = {
enable = true;
};
# Install additional LXQt components and utilities
environment.systemPackages = with pkgs; [
# Core LXQt components that work well with other window managers
lxqt.lxqt-panel
lxqt.lxqt-session
lxqt.lxqt-config
lxqt.lxqt-themes
lxqt.lxqt-notificationd
lxqt.lxqt-powermanagement
lxqt.lxqt-policykit
lxqt.lxqt-archiver
lxqt.qterminal
lxqt.pcmanfm-qt
lxqt.lximage-qt
lxqt.qps
# Theme engines and styling
libsForQt5.qtstyleplugins
libsForQt5.qt5ct
# System tools that integrate well with LXQt
lxqt.pavucontrol-qt
qpwgraph
# Network management
libsForQt5.networkmanager-qt
# Custom session script
(writeScriptBin "niri-session" ''
#!/bin/sh
# Set up environment
export XDG_CURRENT_DESKTOP=LXQt
export XDG_SESSION_DESKTOP=lxqt-niri
export DESKTOP_SESSION=lxqt-niri
# Start LXQt session components in background
${lxqt.lxqt-session}/bin/lxqt-session &
# Start Niri as the main session
exec ${niri}/bin/niri
'')
];
# Configure XDG portals for better integration
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-wlr
];
config = {
common = {
default = ["gtk"];
"org.freedesktop.impl.portal.Screenshot" = ["wlr"];
"org.freedesktop.impl.portal.Screencast" = ["wlr"];
};
};
};
# Use LXQt's polkit agent
security.polkit.enable = true;
systemd.user.services.lxqt-policykit-agent = {
description = "LXQt PolicyKit Agent";
wantedBy = ["graphical-session.target"];
wants = ["graphical-session.target"];
after = ["graphical-session.target"];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.lxqt.lxqt-policykit}/bin/lxqt-policykit-agent";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
# Configure Qt theming (basic settings)
# Note: More specific Qt theming may be handled by system-wide theming modules
# Configure Qt theming to use LXQt
qt = {
platformTheme = lib.mkForce "lxqt";
};
# Environment variables for proper integration
environment.sessionVariables = {
NIXOS_OZONE_WL = "1";
QT_QPA_PLATFORM = "wayland;xcb";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
QT_QPA_PLATFORMTHEME = lib.mkForce "lxqt";
QT_STYLE_OVERRIDE = "kvantum";
DESKTOP_SESSION = "lxqt-niri";
XDG_CURRENT_DESKTOP = "LXQt";
XDG_SESSION_DESKTOP = "lxqt-niri";
};
# Enable necessary services for LXQt functionality
services = {
# Power management
upower.enable = true;
};
# Create a custom session file for LXQt + Niri
environment.etc."xdg/lxqt/session.conf".text = ''
[General]
__userfile__=true
window_manager=niri
'';
# Create desktop entry for the session
environment.etc."wayland-sessions/lxqt-niri.desktop".text = ''
[Desktop Entry]
Name=LXQt (Niri)
Comment=LXQt Desktop with Niri Window Manager
Exec=niri-session
Type=Application
Keywords=niri;lxqt;wayland;
'';
}