mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 10:05:59 +01:00
Nix: remove duplicate options from modules (#4012)
This commit is contained in:
parent
01e5c59d75
commit
f7cde9c92c
3 changed files with 28 additions and 260 deletions
26
flake.nix
26
flake.nix
|
@ -62,13 +62,16 @@
|
||||||
inherit
|
inherit
|
||||||
(pkgsFor.${system})
|
(pkgsFor.${system})
|
||||||
# hyprland-packages
|
# hyprland-packages
|
||||||
|
|
||||||
hyprland
|
hyprland
|
||||||
hyprland-unwrapped
|
hyprland-unwrapped
|
||||||
hyprland-debug
|
hyprland-debug
|
||||||
hyprland-legacy-renderer
|
hyprland-legacy-renderer
|
||||||
# hyprland-extras
|
# hyprland-extras
|
||||||
|
|
||||||
xdg-desktop-portal-hyprland
|
xdg-desktop-portal-hyprland
|
||||||
# dependencies
|
# dependencies
|
||||||
|
|
||||||
hyprland-protocols
|
hyprland-protocols
|
||||||
wlroots-hyprland
|
wlroots-hyprland
|
||||||
udis86
|
udis86
|
||||||
|
@ -76,17 +79,18 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
devShells = eachSystem (system: {
|
devShells = eachSystem (system: {
|
||||||
default = pkgsFor.${system}.mkShell.override {
|
default =
|
||||||
stdenv = pkgsFor.${system}.gcc13Stdenv;
|
pkgsFor.${system}.mkShell.override {
|
||||||
} {
|
stdenv = pkgsFor.${system}.gcc13Stdenv;
|
||||||
name = "hyprland-shell";
|
} {
|
||||||
nativeBuildInputs = with pkgsFor.${system}; [cmake python3];
|
name = "hyprland-shell";
|
||||||
buildInputs = [self.packages.${system}.wlroots-hyprland];
|
nativeBuildInputs = with pkgsFor.${system}; [cmake python3];
|
||||||
inputsFrom = [
|
buildInputs = [self.packages.${system}.wlroots-hyprland];
|
||||||
self.packages.${system}.wlroots-hyprland
|
inputsFrom = [
|
||||||
self.packages.${system}.hyprland
|
self.packages.${system}.wlroots-hyprland
|
||||||
];
|
self.packages.${system}.hyprland
|
||||||
};
|
];
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
formatter = eachSystem (system: nixpkgs.legacyPackages.${system}.alejandra);
|
formatter = eachSystem (system: nixpkgs.legacyPackages.${system}.alejandra);
|
||||||
|
|
|
@ -4,171 +4,11 @@ self: {
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
cfg = config.wayland.windowManager.hyprland;
|
inherit (pkgs.stdenv.hostPlatform) system;
|
||||||
defaultHyprlandPackage = self.packages.${pkgs.stdenv.hostPlatform.system}.default.override {
|
|
||||||
enableXWayland = cfg.xwayland.enable;
|
package = self.packages.${system}.default;
|
||||||
};
|
|
||||||
in {
|
in {
|
||||||
disabledModules = ["services/window-managers/hyprland.nix"];
|
config = {
|
||||||
|
wayland.windowManager.hyprland.package = lib.mkDefault package;
|
||||||
meta.maintainers = [lib.maintainers.fufexan];
|
|
||||||
|
|
||||||
options.wayland.windowManager.hyprland = {
|
|
||||||
enable =
|
|
||||||
lib.mkEnableOption null
|
|
||||||
// {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Whether to enable Hyprland, the dynamic tiling Wayland compositor
|
|
||||||
that doesn't sacrifice on its looks.
|
|
||||||
|
|
||||||
You can manually launch Hyprland by executing {command}`Hyprland` on
|
|
||||||
a TTY.
|
|
||||||
|
|
||||||
See <https://wiki.hyprland.org> for more information.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
package = lib.mkOption {
|
|
||||||
type = with lib.types; nullOr package;
|
|
||||||
default = defaultHyprlandPackage;
|
|
||||||
defaultText = lib.literalExpression ''
|
|
||||||
hyprland.packages.''${pkgs.stdenv.hostPlatform.system}.default.override {
|
|
||||||
enableXWayland = config.wayland.windowManager.hyprland.xwayland.enable;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Hyprland package to use. Will override the 'xwayland' option.
|
|
||||||
|
|
||||||
Defaults to the one provided by the flake. Set it to
|
|
||||||
{package}`pkgs.hyprland` to use the one provided by nixpkgs or
|
|
||||||
if you have an overlay.
|
|
||||||
|
|
||||||
Set to null to not add any Hyprland package to your path. This should
|
|
||||||
be done if you want to use the NixOS module to install Hyprland.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
plugins = lib.mkOption {
|
|
||||||
type = with lib.types; listOf (either package path);
|
|
||||||
default = [];
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
List of Hyprland plugins to use. Can either be packages or
|
|
||||||
absolute plugin paths.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
systemdIntegration = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = pkgs.stdenv.isLinux;
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Whether to enable {file}`hyprland-session.target` on
|
|
||||||
Hyprland startup. This links to {file}`graphical-session.target`.
|
|
||||||
Some important environment variables will be imported to systemd
|
|
||||||
and dbus user environment before reaching the target, including
|
|
||||||
- {env}`DISPLAY`
|
|
||||||
- {env}`HYPRLAND_INSTANCE_SIGNATURE`
|
|
||||||
- {env}`WAYLAND_DISPLAY`
|
|
||||||
- {env}`XDG_CURRENT_DESKTOP`
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
disableAutoreload =
|
|
||||||
lib.mkEnableOption null
|
|
||||||
// {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Whether to disable automatically reloading Hyprland's configuration when
|
|
||||||
rebuilding the Home Manager profile.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
xwayland.enable = lib.mkEnableOption (lib.mdDoc "XWayland") // {default = true;};
|
|
||||||
|
|
||||||
extraConfig = lib.mkOption {
|
|
||||||
type = lib.types.nullOr lib.types.lines;
|
|
||||||
default = "";
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Extra configuration lines to add to {file}`~/.config/hypr/hyprland.conf`.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
recommendedEnvironment =
|
|
||||||
lib.mkEnableOption null
|
|
||||||
// {
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Whether to set the recommended environment variables.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
warnings =
|
|
||||||
if (cfg.systemdIntegration || cfg.plugins != []) && cfg.extraConfig == null
|
|
||||||
then [
|
|
||||||
''
|
|
||||||
You have enabled hyprland.systemdIntegration or listed plugins in hyprland.plugins.
|
|
||||||
Your Hyprland config will be linked by home manager.
|
|
||||||
Set hyprland.extraConfig or unset hyprland.systemdIntegration and hyprland.plugins to remove this warning.
|
|
||||||
''
|
|
||||||
]
|
|
||||||
else [];
|
|
||||||
|
|
||||||
home.packages =
|
|
||||||
lib.optional (cfg.package != null) cfg.package
|
|
||||||
++ lib.optional cfg.xwayland.enable pkgs.xwayland;
|
|
||||||
|
|
||||||
home.sessionVariables =
|
|
||||||
lib.mkIf cfg.recommendedEnvironment {NIXOS_OZONE_WL = "1";};
|
|
||||||
|
|
||||||
xdg.configFile."hypr/hyprland.conf" = lib.mkIf (cfg.systemdIntegration || cfg.extraConfig != null || cfg.plugins != []) {
|
|
||||||
text =
|
|
||||||
(lib.optionalString cfg.systemdIntegration ''
|
|
||||||
exec-once=${pkgs.dbus}/bin/dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP && systemctl --user start hyprland-session.target
|
|
||||||
'')
|
|
||||||
+ lib.concatStrings (builtins.map (entry: let
|
|
||||||
plugin =
|
|
||||||
if lib.types.package.check entry
|
|
||||||
then "${entry}/lib/lib${entry.pname}.so"
|
|
||||||
else entry;
|
|
||||||
in "plugin = ${plugin}\n")
|
|
||||||
cfg.plugins)
|
|
||||||
+ (
|
|
||||||
if cfg.extraConfig != null
|
|
||||||
then cfg.extraConfig
|
|
||||||
else ""
|
|
||||||
);
|
|
||||||
|
|
||||||
onChange = let
|
|
||||||
hyprlandPackage =
|
|
||||||
if cfg.package == null
|
|
||||||
then defaultHyprlandPackage
|
|
||||||
else cfg.package;
|
|
||||||
in
|
|
||||||
lib.mkIf (!cfg.disableAutoreload) ''
|
|
||||||
( # execute in subshell so that `shopt` won't affect other scripts
|
|
||||||
shopt -s nullglob # so that nothing is done if /tmp/hypr/ does not exist or is empty
|
|
||||||
for instance in /tmp/hypr/*; do
|
|
||||||
HYPRLAND_INSTANCE_SIGNATURE=''${instance##*/} ${hyprlandPackage}/bin/hyprctl reload config-only \
|
|
||||||
|| true # ignore dead instance(s)
|
|
||||||
done
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.targets.hyprland-session = lib.mkIf cfg.systemdIntegration {
|
|
||||||
Unit = {
|
|
||||||
Description = "Hyprland compositor session";
|
|
||||||
Documentation = ["man:systemd.special(7)"];
|
|
||||||
BindsTo = ["graphical-session.target"];
|
|
||||||
Wants = ["graphical-session-pre.target"];
|
|
||||||
After = ["graphical-session-pre.target"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
imports = [
|
|
||||||
(lib.mkRemovedOptionModule ["wayland" "windowManager" "hyprland" "xwayland" "hidpi"]
|
|
||||||
"Support for this option has been removed. Refer to https://wiki.hyprland.org/Configuring/XWayland for more info")
|
|
||||||
(lib.mkRemovedOptionModule ["wayland" "windowManager" "hyprland" "xwayland" "enableNvidiaPatches"]
|
|
||||||
"Nvidia patches are no longer needed for Hyprland")
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,96 +2,20 @@ inputs: {
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
options,
|
|
||||||
...
|
...
|
||||||
}:
|
}: let
|
||||||
with lib; let
|
|
||||||
cfg = config.programs.hyprland;
|
|
||||||
inherit (pkgs.stdenv.hostPlatform) system;
|
inherit (pkgs.stdenv.hostPlatform) system;
|
||||||
|
cfg = config.programs.hyprland;
|
||||||
|
|
||||||
finalPortalPackage = cfg.portalPackage.override {
|
package = inputs.self.packages.${system}.hyprland;
|
||||||
|
portalPackage = inputs.self.packages.${system}.xdg-desktop-portal-hyprland.override {
|
||||||
hyprland = cfg.finalPackage;
|
hyprland = cfg.finalPackage;
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
# disables Nixpkgs Hyprland module to avoid conflicts
|
config = {
|
||||||
disabledModules = ["programs/hyprland.nix"];
|
programs.hyprland = {
|
||||||
|
package = lib.mkDefault package;
|
||||||
options.programs.hyprland = {
|
portalPackage = lib.mkDefault portalPackage;
|
||||||
enable =
|
|
||||||
mkEnableOption null
|
|
||||||
// {
|
|
||||||
description = mdDoc ''
|
|
||||||
Hyprland, the dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
|
|
||||||
|
|
||||||
You can manually launch Hyprland by executing {command}`Hyprland` on a TTY.
|
|
||||||
|
|
||||||
A configuration file will be generated in {file}`~/.config/hypr/hyprland.conf`.
|
|
||||||
See <https://wiki.hyprland.org> for more information.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkPackageOptionMD inputs.self.packages.${system} "hyprland" { };
|
|
||||||
|
|
||||||
finalPackage = mkOption {
|
|
||||||
type = types.package;
|
|
||||||
readOnly = true;
|
|
||||||
default = cfg.package.override {
|
|
||||||
enableXWayland = cfg.xwayland.enable;
|
|
||||||
};
|
|
||||||
defaultText =
|
|
||||||
literalExpression
|
|
||||||
"`programs.hyprland.package` with applied configuration";
|
|
||||||
description = mdDoc ''
|
|
||||||
The Hyprland package after applying configuration.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
portalPackage = mkPackageOptionMD inputs.xdph.packages.${system} "xdg-desktop-portal-hyprland" {};
|
|
||||||
|
|
||||||
xwayland.enable = mkEnableOption (mdDoc "support for XWayland") // {default = true;};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
environment.systemPackages = [cfg.finalPackage];
|
|
||||||
|
|
||||||
# NixOS changed the name of this attribute between NixOS 23.05 and
|
|
||||||
# 23.11
|
|
||||||
fonts = if builtins.hasAttr "enableDefaultPackages" options.fonts
|
|
||||||
then {enableDefaultPackages = mkDefault true;}
|
|
||||||
else {enableDefaultFonts = mkDefault true;};
|
|
||||||
|
|
||||||
hardware.opengl.enable = mkDefault true;
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
dconf.enable = mkDefault true;
|
|
||||||
xwayland.enable = mkDefault cfg.xwayland.enable;
|
|
||||||
};
|
|
||||||
|
|
||||||
security.polkit.enable = true;
|
|
||||||
|
|
||||||
services.xserver.displayManager.sessionPackages = [cfg.finalPackage];
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = mkDefault true;
|
|
||||||
extraPortals = [finalPortalPackage];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = with lib; [
|
|
||||||
(
|
|
||||||
mkRemovedOptionModule
|
|
||||||
["programs" "hyprland" "xwayland" "hidpi"]
|
|
||||||
"XWayland patches are deprecated. Refer to https://wiki.hyprland.org/Configuring/XWayland"
|
|
||||||
)
|
|
||||||
(
|
|
||||||
mkRemovedOptionModule
|
|
||||||
["programs" "hyprland" "enableNvidiaPatches"]
|
|
||||||
"Nvidia patches are no longer needed"
|
|
||||||
)
|
|
||||||
(
|
|
||||||
mkRemovedOptionModule
|
|
||||||
["programs" "hyprland" "nvidiaPatches"]
|
|
||||||
"Nvidia patches are no longer needed"
|
|
||||||
)
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue