diff --git a/modules/profiles/desktop.nix b/modules/profiles/desktop.nix index 5afad86..dd23e9b 100644 --- a/modules/profiles/desktop.nix +++ b/modules/profiles/desktop.nix @@ -100,7 +100,12 @@ in enable = true; startInBackground = true; }; + systemd.user.services.nextcloud-client.Service = { + RestartSec = "500ms"; + Restart = "on-failure"; + }; }; + services = { illum.enable = true; resolved.enable = true; diff --git a/modules/programs/hyprland/default.nix b/modules/programs/hyprland/default.nix index 89c19f8..3a323e4 100644 --- a/modules/programs/hyprland/default.nix +++ b/modules/programs/hyprland/default.nix @@ -1,7 +1,6 @@ { config , lib , pkgs -, inputs , ... } @ args: @@ -9,8 +8,7 @@ with lib; let cfg = config.my.programs.hyprland; - hyprland-nvidia = pkgs.hyprland.override { enableNvidiaPatches = true; }; - hyprland = if cfg.nvidiaSupport then hyprland-nvidia else pkgs.hyprland; + hyprland = config.programs.hyprland.finalPackage; in { options.my.programs.hyprland = { @@ -50,16 +48,33 @@ in rofi.enable = true; }; wallpapers.enable = true; - services.dunst.enable = true; - services.wallpaper.enable = true; + services = { + dunst.enable = true; + wallpaper = { + enable = true; + target = "hyprland-session.target"; + }; + spotify-player.target = "hyprland-session.target"; + }; + }; + + programs.hyprland = { + enable = true; + enableNvidiaPatches = cfg.nvidiaSupport; }; home-manager.users.moritz = { # enable home-manager module wayland.windowManager.hyprland = { enable = true; - package = hyprland; + enableNvidiaPatches = cfg.nvidiaSupport; extraConfig = import ./_config.nix args; + systemd.extraCommands = [ + "systemctl --user stop hyprland-session.target" + "sleep 1.5" + "systemctl --user start hyprland-session.target" + "systemctl --user start xdg-desktop-portal-hyprland.service" + ]; }; # add waybar as a status bar @@ -69,7 +84,7 @@ in # start using systemd service systemd = { enable = true; - target = "graphical-session.target"; + target = "hyprland-session.target"; }; settings = { @@ -128,23 +143,13 @@ in timeout = 30 * 60; command = "${pkgs.systemd}/bin/systemctl suspend-and-hibernate"; }; - systemdTarget = "graphical-session.target"; - }; - - systemd.user.services.nextcloud-client.Service = { - RestartSec = "500ms"; - Restart = "on-failure"; + systemdTarget = "hyprland-session.target"; }; }; # adds pam module for swaylock security.pam.services.swaylock = { }; - systemd.user.services.xdg-desktop-portal-hyprland = { - after = [ "hyprland-session.target" ]; - requiredBy = [ "xdg-desktop-portal.service" ]; - }; - # add user packages for wayland and hyprland in particular users.users.moritz.packages = with pkgs; [ brightnessctl # control brightness @@ -177,7 +182,6 @@ in __GL_VRR_ALLOWED = "0"; }); - services = { dbus.enable = true; # use pipewire (needed for screensharing) @@ -196,18 +200,31 @@ in user = "moritz"; }; defaultSession = "hyprland"; - sessionPackages = [ hyprland ]; # can't set the defaultSession otherwise }; }; }; security.rtkit.enable = true; + home-manager.users.moritz.systemd.user.services = + let + units = [ "waybar" ]; + mkAfter = _: { + Unit = { + After = [ "hyprland-session.target" ]; + Wants = [ "hyprland-session.target" ]; + }; + }; + in + genAttrs units mkAfter; - # desktop portal (for screensharing) - xdg.portal = { - enable = true; - wlr.enable = mkForce false; - extraPortals = [ pkgs.xdg-desktop-portal-hyprland ]; - }; + systemd.user.services = + let + units = [ "pipewire" "xdg-desktop-portal" "xdg-desktop-portal-hyprland" "wireplumber" ]; + mkAfter = _: { + after = [ "hyprland-session.target" ]; + wants = [ "hyprland-session.target" ]; + }; + in + genAttrs units mkAfter; }; } diff --git a/modules/services/spotify_player.nix b/modules/services/spotify_player.nix index b494c3a..a8dcd24 100644 --- a/modules/services/spotify_player.nix +++ b/modules/services/spotify_player.nix @@ -30,6 +30,10 @@ in type = types.package; default = pkgs.spotify-player; }; + target = mkOption { + type = types.str; + default = "graphical-session.target"; + }; }; config = mkIf cfg.enable { @@ -44,9 +48,8 @@ in } ]; systemd.user.services.spotify-player = { - after = [ "graphical-session.target" "network.target" ]; - partOf = [ "graphical-session.target" ]; - wantedBy = [ "graphical-session.target" ]; + after = [ cfg.target "network.target" ]; + wantedBy = [ cfg.target ]; serviceConfig = { Type = "forking"; Restart = "always"; diff --git a/modules/services/wallpaper.nix b/modules/services/wallpaper.nix index a6367d3..8329205 100644 --- a/modules/services/wallpaper.nix +++ b/modules/services/wallpaper.nix @@ -10,12 +10,17 @@ in type = types.str; default = "30m"; }; + target = mkOption { + type = types.str; + default = "graphical-session.target"; + }; }; config = mkIf cfg.enable { systemd.user.services.wallpaper = { script = "${getExe config.my.programs.wallpaper.package} -r -v"; - wantedBy = [ "graphical-session.target" ]; + wantedBy = [ cfg.target ]; + after = [ cfg.target ]; serviceConfig = { Restart = "always"; RuntimeMaxSec = cfg.frequency;