Home: Rename home/modules to home/homemodules
This commit is contained in:
180
home/homemodules/hyprland/default.nix
Normal file
180
home/homemodules/hyprland/default.nix
Normal file
@ -0,0 +1,180 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
lib,
|
||||
mylib,
|
||||
pkgs,
|
||||
nixosConfig,
|
||||
username,
|
||||
...
|
||||
}: let
|
||||
inherit (config.modules) hyprland color;
|
||||
|
||||
# Autostart programs
|
||||
always-exec = import ./autostart.nix {inherit lib pkgs config hyprland;};
|
||||
|
||||
# Keybindings
|
||||
always-bind = import ./mappings.nix {inherit lib config hyprland;};
|
||||
|
||||
# Mousebindings
|
||||
always-bindm = {
|
||||
"$mainMod, mouse:272" = ["movewindow"];
|
||||
"$mainMod, mouse:273" = ["resizewindow"];
|
||||
};
|
||||
in {
|
||||
options.modules.hyprland = import ./options.nix {inherit lib mylib;};
|
||||
|
||||
config = lib.mkIf hyprland.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = nixosConfig.programs.hyprland.enable;
|
||||
message = "Can't enable Hyprland module with Hyprland disabled!";
|
||||
}
|
||||
{
|
||||
assertion = builtins.hasAttr "hyprlock" nixosConfig.security.pam.services;
|
||||
message = "Can't enable Hyprland module without Hyprlock PAM service!";
|
||||
}
|
||||
{
|
||||
assertion = hyprland.hyprpanel.enable != hyprland.caelestia.enable;
|
||||
message = "Can't enable Hyprpanel and Caelestia at the same time!";
|
||||
}
|
||||
];
|
||||
|
||||
gtk = {
|
||||
enable = true;
|
||||
iconTheme.package = lib.mkDefault color.iconPackage;
|
||||
iconTheme.name = color.iconTheme;
|
||||
};
|
||||
|
||||
modules = {
|
||||
hyprpanel.enable = hyprland.hyprpanel.enable;
|
||||
};
|
||||
|
||||
home = {
|
||||
pointerCursor = {
|
||||
gtk.enable = lib.mkDefault true;
|
||||
x11.enable = lib.mkDefault true;
|
||||
package = lib.mkDefault color.cursorPackage;
|
||||
name = color.cursor;
|
||||
size = color.cursorSize;
|
||||
};
|
||||
|
||||
packages = with pkgs; [
|
||||
hyprpaper # Wallpaper setter
|
||||
hyprpicker # Color picker
|
||||
# hyprpolkitagent # Ugly polkit authentication GUI
|
||||
hyprland-qt-support
|
||||
hyprsunset # Blue light filter
|
||||
|
||||
wl-clipboard
|
||||
clipman # Clipboard manager (wl-paste)
|
||||
libnotify
|
||||
inotify-tools # Includes inotifywait
|
||||
|
||||
ncpamixer # Audio control
|
||||
slurp # Region selector for screensharing
|
||||
grim # Grab images from compositor
|
||||
|
||||
# Deps for Qt5 and Qt6 apps (e.g., Nextcloud)
|
||||
qt5.qtwayland
|
||||
qt6.qtwayland
|
||||
];
|
||||
|
||||
file = {
|
||||
".config/hypr/keybindings.info".text = let
|
||||
fixupHomeDir = key:
|
||||
builtins.replaceStrings ["/home/${username}"] ["~"] key;
|
||||
|
||||
fixupNixStore = key: let
|
||||
# The pattern has to match the entire string, otherwise it won't work
|
||||
matches = builtins.match ".*/nix/store/(.*)/.*" key;
|
||||
in
|
||||
if (matches == null)
|
||||
then key
|
||||
else builtins.replaceStrings matches ["..."] key;
|
||||
|
||||
fixupNoMod = key:
|
||||
builtins.replaceStrings ["<-"] ["<"] key;
|
||||
|
||||
mkBindHelpKey = key:
|
||||
builtins.replaceStrings ["$mainMod" " " ","] ["${hyprland.keybindings.main-mod}" "-" ""] key;
|
||||
|
||||
mkBindHelpAction = action:
|
||||
builtins.replaceStrings [","] [""] action;
|
||||
|
||||
mkBindHelp = key: action: "<${mkBindHelpKey key}>: ${mkBindHelpAction action}";
|
||||
|
||||
mkBindsHelp = key: actions:
|
||||
actions
|
||||
|> builtins.map (mkBindHelp key)
|
||||
|> builtins.map fixupNoMod
|
||||
|> builtins.map fixupNixStore
|
||||
|> builtins.map fixupHomeDir;
|
||||
in
|
||||
(hyprland.keybindings.bindings // always-bind)
|
||||
|> builtins.mapAttrs mkBindsHelp
|
||||
|> builtins.attrValues
|
||||
|> builtins.concatLists
|
||||
|> builtins.concatStringsSep "\n";
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
hyprlock = import ./hyprlock.nix {inherit config hyprland color;};
|
||||
caelestia = import ./caelestia.nix {inherit config hyprland color;};
|
||||
};
|
||||
|
||||
services = {
|
||||
dunst = import ./dunst.nix {inherit pkgs config hyprland color;};
|
||||
hypridle = import ./hypridle.nix {inherit config hyprland color;};
|
||||
hyprpaper = import ./hyprpaper.nix {inherit config hyprland color;};
|
||||
};
|
||||
|
||||
# Make sure the units only start when using Hyprland
|
||||
systemd.user.services.dunst.Unit.After = lib.mkIf hyprland.dunst.enable (lib.mkForce ["hyprland-session.target"]);
|
||||
systemd.user.services.dunst.Unit.PartOf = lib.mkIf hyprland.dunst.enable (lib.mkForce ["hyprland-session.target"]);
|
||||
systemd.user.services.hypridle.Install.WantedBy = lib.mkIf (!hyprland.caelestia.enable) (lib.mkForce ["hyprland-session.target"]);
|
||||
systemd.user.services.hypridle.Unit.After = lib.mkIf (!hyprland.caelestia.enable) (lib.mkForce ["hyprland-session.target"]);
|
||||
systemd.user.services.hypridle.Unit.PartOf = lib.mkIf (!hyprland.caelestia.enable) (lib.mkForce ["hyprland-session.target"]);
|
||||
systemd.user.services.hyprpaper.Install.WantedBy = lib.mkIf (!hyprland.caelestia.enable) (lib.mkForce ["hyprland-session.target"]);
|
||||
systemd.user.services.hyprpaper.Unit.After = lib.mkIf (!hyprland.caelestia.enable) (lib.mkForce ["hyprland-session.target"]);
|
||||
systemd.user.services.hyprpaper.Unit.PartOf = lib.mkIf (!hyprland.caelestia.enable) (lib.mkForce ["hyprland-session.target"]);
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||
|
||||
systemd.enable = true; # Enable hyprland-session.target
|
||||
systemd.variables = ["--all"]; # Import PATH into systemd
|
||||
xwayland.enable = true;
|
||||
|
||||
plugins = builtins.concatLists [
|
||||
(lib.optionals
|
||||
hyprland.bars.enable
|
||||
[inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprbars])
|
||||
(lib.optionals
|
||||
hyprland.dynamicCursor.enable
|
||||
[inputs.hypr-dynamic-cursors.packages.${pkgs.stdenv.hostPlatform.system}.hypr-dynamic-cursors])
|
||||
(lib.optionals
|
||||
hyprland.trails.enable
|
||||
[inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprtrails])
|
||||
(lib.optionals
|
||||
hyprland.hyprspace.enable
|
||||
[inputs.hyprspace.packages.${pkgs.stdenv.hostPlatform.system}.Hyprspace])
|
||||
];
|
||||
|
||||
settings = import ./settings.nix {
|
||||
inherit
|
||||
lib
|
||||
config
|
||||
hyprland
|
||||
color
|
||||
always-exec
|
||||
always-bind
|
||||
always-bindm
|
||||
;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user