From 271cbb359b25eb0efc5fa61dd4e5d2014d2f3454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 22 Sep 2023 10:14:12 +0200 Subject: [PATCH] feat: support new monitor --- hosts/nixos-desktop/default.nix | 9 +- modules/profiles/base.nix | 15 +-- modules/programs/hyprland/_config.nix | 15 ++- modules/programs/hyprland/default.nix | 121 +++++++++++++++--------- modules/programs/wallpaper/wallpaper.sh | 11 ++- modules/services/wallpaper.nix | 26 +++++ 6 files changed, 139 insertions(+), 58 deletions(-) create mode 100644 modules/services/wallpaper.nix diff --git a/hosts/nixos-desktop/default.nix b/hosts/nixos-desktop/default.nix index 30679e6..7fbb0ce 100644 --- a/hosts/nixos-desktop/default.nix +++ b/hosts/nixos-desktop/default.nix @@ -17,9 +17,14 @@ gaming.enable = true; personal.enable = true; }; - programs.hyprland.nvidiaSupport = true; - programs.hyprland.keyboardLayouts = [ "us" "de" ]; + programs.hyprland = { + nvidiaSupport = true; + monitors = [ "HDMI-A-1,3840x2160,auto,1.2" ",preferred,auto,1" ]; + extraConfig = "exec=hyprctl keyword monitor HDMI-A-1,3840x2160@120,auto,1.2"; + keyboardLayouts = [ "us" "de" ]; + }; services.mullvad.enable = true; + services.wallpaper.enable = true; programs.ledger.enable = true; }; diff --git a/modules/profiles/base.nix b/modules/profiles/base.nix index d79ad69..c23dcf9 100644 --- a/modules/profiles/base.nix +++ b/modules/profiles/base.nix @@ -46,7 +46,7 @@ let recurse (readlink $path) end end - + for arg in $argv recurse (which $arg) end @@ -188,11 +188,14 @@ in wget ]; - fonts.packages = with pkgs; [ - (nerdfonts.override { - fonts = [ "FiraCode" ]; - }) - ]; + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + (nerdfonts.override { + fonts = [ "FiraCode" ]; + }) + ]; + }; programs = { mtr.enable = true; diff --git a/modules/programs/hyprland/_config.nix b/modules/programs/hyprland/_config.nix index 281505d..8978830 100644 --- a/modules/programs/hyprland/_config.nix +++ b/modules/programs/hyprland/_config.nix @@ -17,7 +17,7 @@ in # # See https://wiki.hyprland.org/Configuring/Monitors/ - monitor=,preferred,auto,1 + ${concatLines (map (x: "monitor=${x}") cfg.monitors)} # See https://wiki.hyprland.org/Configuring/Keywords/ for more @@ -110,6 +110,13 @@ in workspace_swipe = on } + misc { + # disable_hypr_chan = true + vrr = 1 + mouse_move_enables_dpms = true + key_press_enables_dpms = true + } + # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # Firefox Sharing Indicator ${mkRules ["float" "move 49% 40" "noborder" "nofullscreenrequest"] ["title:^(.*Sharing Indicator.*)$"]} @@ -207,5 +214,9 @@ in bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow - exec-once=${getExe config.my.programs.wallpaper.package} -r + # Toggle waybar + bindr = $mainMod, SUPER_L, exec, pkill -USR1 waybar + + # Extra Config + ${cfg.extraConfig} '' diff --git a/modules/programs/hyprland/default.nix b/modules/programs/hyprland/default.nix index 7c1cefa..8b5a2d4 100644 --- a/modules/programs/hyprland/default.nix +++ b/modules/programs/hyprland/default.nix @@ -31,6 +31,15 @@ in description = "list of keyboard layouts"; default = [ "de" "us" ]; }; + monitors = mkOption { + type = types.listOf types.str; + description = "monitor settings"; + default = [ ",preferred,auto,1" ]; + }; + extraConfig = mkOption { + type = types.str; + default = ""; + }; }; config = mkIf cfg.enable { @@ -70,6 +79,7 @@ in settings = { mainBar = { + start_hidden = true; layer = "top"; position = "top"; height = 20; @@ -81,46 +91,50 @@ in }; # lock screen after timeout - home-manager.users.moritz = { - services.swayidle = { - enable = true; - events = [ - { - event = "before-sleep"; - command = "${getExe pkgs.swaylock} -fF"; - } - { - event = "lock"; - command = "${getExe pkgs.swaylock} -fF"; - } - ]; - timeouts = - let - lockTimeout = 10; - in - [ - { - timeout = lockTimeout * 60 - 10; - command = "${pkgs.libnotify}/bin/notify-send 'Locking screen!'"; - } - { - timeout = lockTimeout * 60; - command = "${hyprland}/bin/hyprctl dispatch dpms off"; - resumeCommand = "${hyprland}/bin/hyprctl dispatch dpms on"; - } - { - timeout = lockTimeout * 60 + 10; - command = "${pkgs.systemd}/bin/loginctl lock-session"; - } - ] ++ optional - (!cfg.nvidiaSupport) # TODO https://github.com/hyprwm/Hyprland/issues/1728 - { - timeout = 30 * 60; - command = "${pkgs.systemd}/bin/systemctl suspend-and-hibernate"; - }; - systemdTarget = "hyprland-session.target"; + home-manager.users.moritz.programs.swaylock = { + enable = true; + settings = { + color = "000000"; }; }; + home-manager.users.moritz.services.swayidle = { + enable = true; + events = [ + { + event = "before-sleep"; + command = "${getExe pkgs.swaylock} -fF"; + } + { + event = "lock"; + command = "${getExe pkgs.swaylock} -fF"; + } + ]; + timeouts = + let + lockTimeout = 10; + in + [ + { + timeout = lockTimeout * 60 - 10; + command = "${pkgs.libnotify}/bin/notify-send 'Locking screen!'"; + } + { + timeout = lockTimeout * 60; + command = "${hyprland}/bin/hyprctl dispatch dpms off"; + resumeCommand = "${hyprland}/bin/hyprctl dispatch dpms on"; + } + { + timeout = lockTimeout * 60 + 10; + command = "${pkgs.systemd}/bin/loginctl lock-session"; + } + ] ++ optional + (!cfg.nvidiaSupport) # TODO https://github.com/hyprwm/Hyprland/issues/1728 + { + timeout = 30 * 60; + command = "${pkgs.systemd}/bin/systemctl suspend-and-hibernate"; + }; + systemdTarget = "hyprland-session.target"; + }; # adds pam module for swaylock security.pam.services.swaylock = { }; @@ -184,17 +198,30 @@ in alsa.support32Bit = true; pulse.enable = true; }; - xserver = { + greetd = { enable = true; - displayManager = { - lightdm.enable = true; - autoLogin = { - enable = true; - user = "moritz"; + settings = + let + hyprlandCommand = getExe' hyprland "Hyprland"; + in + { + initial_session = { + command = hyprlandCommand; + user = "moritz"; + }; + default_session = { + command = '' + ${pkgs.greetd.tuigreet}/bin/tuigreet \ + --time \ + --asterisks \ + --user-menu \ + --remember \ + --power-shutdown 'systemctl poweroff' \ + --power-reboot 'systemctl reboot' \ + --cmd ${hyprlandCommand} + ''; + }; }; - defaultSession = "hyprland"; - sessionPackages = [ hyprland ]; # can't set the defaultSession otherwise - }; }; }; security.rtkit.enable = true; diff --git a/modules/programs/wallpaper/wallpaper.sh b/modules/programs/wallpaper/wallpaper.sh index 8e94670..649d663 100755 --- a/modules/programs/wallpaper/wallpaper.sh +++ b/modules/programs/wallpaper/wallpaper.sh @@ -2,6 +2,7 @@ WALLPAPERS_PATH="$HOME/.config/wallpapers" WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l) +DEBUG=0 function help() { echo "Usage:" @@ -22,7 +23,11 @@ function setWallpaperX { } function setWallpaperWayland { - swaybg --mode fill -i "$1" 2>/dev/null & + if [[ $DEBUG -eq 1 ]]; then + swaybg --mode fill -i "$1" & + else + swaybg --mode fill -i "$1" 2>/dev/null & + fi } function setWallpaper() { @@ -53,6 +58,10 @@ while [[ $# -gt 0 ]]; do shift # past argument shift # past value ;; + -v | --verbose) + DEBUG=1 + shift # past argument + ;; *) POSITIONAL+=("$1") # save it in an array for later shift # past argument diff --git a/modules/services/wallpaper.nix b/modules/services/wallpaper.nix new file mode 100644 index 0000000..a6367d3 --- /dev/null +++ b/modules/services/wallpaper.nix @@ -0,0 +1,26 @@ +{ lib, config, ... }: +with lib; +let + cfg = config.my.services.wallpaper; +in +{ + options.my.services.wallpaper = { + enable = mkEnableOption "wallpaper changer"; + frequency = mkOption { + type = types.str; + default = "30m"; + }; + }; + + config = mkIf cfg.enable { + systemd.user.services.wallpaper = { + script = "${getExe config.my.programs.wallpaper.package} -r -v"; + wantedBy = [ "graphical-session.target" ]; + serviceConfig = { + Restart = "always"; + RuntimeMaxSec = cfg.frequency; + ExitType = "cgroup"; + }; + }; + }; +}