{ 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 ]; }; }