nixos-framework-laptop-config/home/desktop/hyprland.nix
2024-12-28 19:33:49 -05:00

172 lines
4.7 KiB
Nix

{
config,
lib,
pkgs,
options,
inputs,
osConfig,
...
}: {
imports = [
inputs.ags.homeManagerModules.default
inputs.anyrun.homeManagerModules.default
];
options.my.desktop.hyprland.enable = lib.mkEnableOption "my Hyprland based desktop environment";
config = lib.mkIf config.my.desktop.hyprland.enable {
my.desktop.wayland = true;
wayland.windowManager.hyprland = {
enable = true;
package = osConfig.programs.hyprland.package;
extraConfig = ''
source=${./hyprland}/hyprland.conf
'';
systemd.variables = options.wayland.windowManager.hyprland.systemd.variables.default ++ ["XDG_SESSION_TYPE"];
};
services.cliphist = {
enable = true;
systemdTarget = "hyprland-session.target"; # defaults to graphical-session.target
};
systemd.user.targets.hyprland-session.Unit.Wants = ["plasma-polkit-agent.service"];
programs.ags = {
enable = true;
configDir = ./ags;
};
systemd.user.services.ags = {
Unit.Description = "Aylur's Gtk Shell";
Unit.PartOf = ["hyprland-session.target"];
Install.WantedBy = ["hyprland-session.target"];
Service = let
app = pkgs.writeShellApplication {
name = "ags-wrapped";
runtimeInputs = [config.programs.ags.package pkgs.coreutils];
text = ''ags "$@"'';
};
in {
# Service = {
BusName = "com.github.Aylur.ags.ags";
# ExecStart = "${config.programs.ags.package}/bin/ags --config ${config.programs.ags.configDir}/config.js";
ExecStart = "${app}/bin/ags-wrapped --config ${config.programs.ags.configDir}/config.js";
OOMScoreAdjust = -500;
};
# TODO: reloadTriggers?
# restartTriggers = [ config.programs.ags.configDir ];
};
programs.anyrun = {
enable = true;
config.plugins = with inputs.anyrun.packages.${pkgs.stdenv.hostPlatform.system}; [
applications
dictionary
# kidex
randr
rink
shell
# stdin
symbols
# translate
# websearch
];
};
programs.swaylock = {
enable = true;
settings = {
color = "808080";
font-size = 24;
indicator-idle-visible = false;
indicator-radius = 100;
line-color = "ffffff";
show-failed-attempts = true;
};
};
services.swayidle = let
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
in {
enable = true;
systemdTarget = "hyprland-session.target"; # defaults to graphical-session.target
extraArgs = [
"-w" # Wait for command to finish executing before continuing
"idlehint"
"300"
];
events = [
{
event = "before-sleep";
command = "${swaylock} -f";
}
# after-resume
{
event = "lock";
command = "${swaylock} -f";
}
{
event = "unlock";
command = "kill -s USR1 swaylock";
}
];
timeouts = [
{
timeout = 300;
command = "${swaylock} -f";
} # 300
{
timeout = 600;
command = "${hyprctl} dispatch dpms off";
resumeCommand = "${hyprctl} dispatch dpms on";
}
# { timeout = 900; command = "${pkgs.systemd}/bin/systemctl suspend"; }
];
};
# TDOD: replace with ags
services.swayosd.enable = true;
services.udiskie.enable = osConfig.services.udisks2.enable;
systemd.user.services.swww = {
Unit.Description = "Animated wallpaper daemon for wayland";
Unit.Documentation = ["man:swww(1)"];
Unit.PartOf = ["hyprland-session.target"];
Install.WantedBy = ["hyprland-session.target"];
# Service.ExecStart = "${pkgs.swww}/bin/swww init --no-daemon";
Service.ExecStart = let
app = pkgs.writeShellApplication {
name = "swww-wrapped";
runtimeInputs = [pkgs.swww];
text = ''
swww init --no-daemon
'';
};
in "${app}/bin/swww-wrapped";
};
systemd.user.services.wayvnc = {
Unit.Description = "Wayland VNC server";
Unit.PartOf = ["graphical-session.target"];
Service.ExecStart = "${pkgs.wayvnc}/bin/wayvnc";
};
# Not sure if this should be per desktop
services.mpris-proxy.enable = true;
programs.foot.settings.colors.alpha = 0.6;
home.packages = [
pkgs.swww
pkgs.wofi
pkgs.polkit-kde-agent
pkgs.libsForQt5.qtwayland
pkgs.qt6Packages.qtwayland
pkgs.grimblast # screenshots on hyprland
pkgs.gnome.gnome-system-monitor
pkgs.gnome.nautilus
];
};
}