From 9a5d27a7b17d3ab51ddb012da94f5ace5dcbfe1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20R=C3=B6ger?= Date: Sat, 3 May 2025 01:35:34 +0200 Subject: [PATCH] Home Gen505 @ 2025-05-03-01:35 by jonas@comfy-station --- flake.nix | 4 + home/jonas@comfy-station.nix | 11 +- home/jonas@harbor.nix | 9 +- home/jonas@monolith.nix | 10 +- home/jroeger.nix | 12 +- modules/default.nix | 40 +- modules/home/doom/doom.nix | 4 +- modules/home/dunst/config.nix | 29 -- modules/home/dunst/default.nix | 6 - modules/home/dunst/dunst.nix | 3 - modules/home/hyprland/config.nix | 621 +++++++++++++++-------------- modules/home/hyprland/default.nix | 6 +- modules/home/hyprland/hyprland.nix | 41 +- 13 files changed, 396 insertions(+), 400 deletions(-) delete mode 100644 modules/home/dunst/config.nix delete mode 100644 modules/home/dunst/default.nix delete mode 100644 modules/home/dunst/dunst.nix diff --git a/flake.nix b/flake.nix index bf8bb92..a2bc40c 100644 --- a/flake.nix +++ b/flake.nix @@ -123,6 +123,7 @@ ({...}: {nixpkgs.config.allowUnfree = true;}) inputs.plasma-manager.homeManagerModules.plasma-manager inputs.sops-nix.homeManagerModules.sops + ./modules (./home + "/jonas@comfy-station.nix") ]; @@ -141,6 +142,7 @@ modules = [ ({...}: {nixpkgs.overlays = [overlay-unstable];}) ({...}: {nixpkgs.config.allowUnfree = true;}) + ./modules (./home + "/jonas@harbor.nix") ]; @@ -159,6 +161,7 @@ modules = [ ({...}: {nixpkgs.overlays = [overlay-unstable];}) ({...}: {nixpkgs.config.allowUnfree = true;}) + ./modules (./home + "/jonas@monolith.nix") ]; @@ -177,6 +180,7 @@ modules = [ ({...}: {nixpkgs.overlays = [overlay-unstable];}) ({...}: {nixpkgs.config.allowUnfree = true;}) + ./modules ./home/jroeger.nix ]; diff --git a/home/jonas@comfy-station.nix b/home/jonas@comfy-station.nix index 183fef8..7d8e5a6 100644 --- a/home/jonas@comfy-station.nix +++ b/home/jonas@comfy-station.nix @@ -1,9 +1,7 @@ {config, ...}: rec { imports = [ ../modules/home/borg.nix - ../modules/home/doom ../modules/home/firefox.nix - ../modules/home/hyprland ../modules/home/kdeconnect.nix ../modules/home/kitty ../modules/home/nextcloud @@ -28,10 +26,11 @@ age.keyFile = "${home.homeDirectory}/.config/sops/age/keys.txt"; }; - doom.enable = true; - doom.enableCopilot = true; - doom.withNixPkgs = true; - doom.withShellPkgs = true; + # hive modules + hive.doom.enable = true; + hive.doom.enableCopilot = true; + hive.doom.withNixPkgs = true; + hive.doom.withShellPkgs = true; # Make session variables available in systemd units # SEE: https://github.com/nix-community/home-manager/pull/5543 diff --git a/home/jonas@harbor.nix b/home/jonas@harbor.nix index 2c730b7..35c057c 100644 --- a/home/jonas@harbor.nix +++ b/home/jonas@harbor.nix @@ -1,6 +1,5 @@ {...}: { imports = [ - ../modules/home/doom ../modules/home/ranger ../modules/home/zsh ]; @@ -10,9 +9,11 @@ home.username = "jonas"; home.homeDirectory = "/home/jonas"; - doom.enable = true; - doom.withNixPkgs = true; - doom.withShellPkgs = true; + # hive modules + hive.nix-scripts.enable = true; + hive.doom.enable = true; + hive.doom.withNixPkgs = true; + hive.doom.withShellPkgs = true; # This value determines the Home Manager release that your configuration is # compatible with. This helps avoid breakage when a new Home Manager release diff --git a/home/jonas@monolith.nix b/home/jonas@monolith.nix index 3a67547..59d02aa 100644 --- a/home/jonas@monolith.nix +++ b/home/jonas@monolith.nix @@ -1,7 +1,6 @@ {config, ...}: rec { imports = [ ../modules/home/borg.nix - ../modules/home/doom ../modules/home/firefox.nix ../modules/home/kdeconnect.nix ../modules/home/kitty @@ -21,10 +20,11 @@ age.keyFile = "${home.homeDirectory}/.config/sops/age/keys.txt"; }; - doom.enable = true; - doom.enableCopilot = true; - doom.withNixPkgs = true; - doom.withShellPkgs = true; + # hive moduless + hive.doom.enable = true; + hive.doom.enableCopilot = true; + hive.doom.withNixPkgs = true; + hive.doom.withShellPkgs = true; # Make session variables available in systemd units # SEE: https://github.com/nix-community/home-manager/pull/5543 diff --git a/home/jroeger.nix b/home/jroeger.nix index eb212ec..96eafe6 100644 --- a/home/jroeger.nix +++ b/home/jroeger.nix @@ -1,6 +1,5 @@ {...}: { imports = [ - ../modules/home/doom ../modules/home/kitty ../modules/home/ranger ../modules/home/yubikey.nix @@ -14,11 +13,12 @@ yubikey.pinentry = "gnome3"; - doom.enable = true; - doom.enableCopilot = true; - doom.withNixPkgs = true; - doom.withShellPkgs = true; - doom.withCXXPkgs = true; + # hive modules + hive.doom.enable = true; + hive.doom.enableCopilot = true; + hive.doom.withNixPkgs = true; + hive.doom.withShellPkgs = true; + hive.doom.withCXXPkgs = true; # This value determines the Home Manager release that your configuration is # compatible with. This helps avoid breakage when a new Home Manager release diff --git a/modules/default.nix b/modules/default.nix index ea14144..7563f9f 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,20 +1,34 @@ -{isHM ? null, ...}: { +{ + isHM ? null, + lib, + ... +}: { assertions = [ { assertion = isHM != null; message = "The \"home-manager\" flag isHM is required."; } ]; - imports = [ - ./bin/nix-scripts.nix - ./desktop/de - ./desktop/dm - ./hardware/bluetooth.nix - ./hardware/sound.nix - ./hardware/yubikey.nix - ./networking/wireguard - ./services/borg-server.nix - ./services/nextcloud-instance.nix - ./services/virt-manager.nix - ]; + imports = + [ + # modules containing both system and home-manager configs + ./bin/nix-scripts.nix + ] + ++ lib.optionals (! isHM) [ + # pure system modules + ./desktop/de + ./desktop/dm + ./hardware/bluetooth.nix + ./hardware/sound.nix + ./hardware/yubikey.nix + ./networking/wireguard + ./services/borg-server.nix + ./services/nextcloud-instance.nix + ./services/virt-manager.nix + ] + ++ lib.optionals isHM [ + # pure home-manager modules + ./home/doom + ./home/hyprland + ]; } diff --git a/modules/home/doom/doom.nix b/modules/home/doom/doom.nix index 7513590..5d3e8b7 100644 --- a/modules/home/doom/doom.nix +++ b/modules/home/doom/doom.nix @@ -4,7 +4,7 @@ lib, ... }: let - cfg = config.doom; + cfg = config.hive.doom; doom-pkgs = with pkgs; [ fira fira-code-nerdfont @@ -81,7 +81,7 @@ fi ''; in { - options.doom = { + options.hive.doom = { enable = lib.mkEnableOption "Enable Doom Emacs"; enableCopilot = lib.mkEnableOption "Enable Copilot in Doom Emacs"; withLatexPkgs = lib.mkEnableOption "Enable LaTeX packages in doom path"; diff --git a/modules/home/dunst/config.nix b/modules/home/dunst/config.nix deleted file mode 100644 index de5a0db..0000000 --- a/modules/home/dunst/config.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - config, - pkgs, - ... -}: { - services.dunst.settings = { - global = { - origin = "top-right"; - frame_color = "#33ccff"; - transparency = 20; - background = "#000000"; - timeout = 5; - offset = "20x50"; - force_xwayland = false; - corner_radius = 15; - follow = "keyboard"; - progress_bar = true; - dmenu = "${pkgs.wofi}/bin/wofi --dmenu"; - mouse_left_click = "do_action, close_current"; - mouse_middle_click = "close_current"; - mouse_right_click = "close_all"; - }; - - urgency_critical = { - timeout = 15; - background = "#500005"; - }; - }; -} diff --git a/modules/home/dunst/default.nix b/modules/home/dunst/default.nix deleted file mode 100644 index e7f9d0c..0000000 --- a/modules/home/dunst/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - imports = [ - ./config.nix - ./dunst.nix - ]; -} diff --git a/modules/home/dunst/dunst.nix b/modules/home/dunst/dunst.nix deleted file mode 100644 index 618252e..0000000 --- a/modules/home/dunst/dunst.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - services.dunst.enable = true; -} diff --git a/modules/home/hyprland/config.nix b/modules/home/hyprland/config.nix index 6ea2b69..12e6788 100644 --- a/modules/home/hyprland/config.nix +++ b/modules/home/hyprland/config.nix @@ -4,6 +4,7 @@ lib, ... }: let + cfg = config.hive.hyprland; screenshot = pkgs.writeShellScriptBin "screenshot" '' region=0 clip=0 @@ -31,330 +32,332 @@ fi ''; in { - services.hypridle.settings = { - general = { - # lock_cmd = notify-send "lock!" # dbus/sysd lock command (loginctl lock-session) - # unlock_cmd = notify-send "unlock!" # same as above, but unlock - ignore_dbus_inhibit = "false"; # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) - lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances. - before_sleep_cmd = "loginctl lock-session"; # lock before suspend. - after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display. - }; - - listener = [ - # Screenlock - { - timeout = 180; # in seconds - on-timeout = "hyprlock"; # command to run when timeout has passed - # on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired. - } - # Suspend - { - timeout = 360; # in seconds - on-timeout = "systemctl suspend"; # command to run when timeout has passed - # on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired. - } - ]; - }; - - programs.hyprlock = lib.mkIf config.wayland.windowManager.hyprland.enable { - enable = true; - settings = { - background = [ - { - path = "screenshot"; # only png supported for now - # color = $color1 - - # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations - blur_size = 4; - blur_passes = 3; # 0 disables blurring - noise = 0.0117; - contrast = 1.3000; # Vibrant!!! - brightness = 0.8000; - vibrancy = 0.2100; - vibrancy_darkness = 0.0; - } - ]; - - # Hours - label = [ - { - text = ''cmd[update:1000] echo " $(date +"%H") "''; - #color = $color6 - font_size = 112; - # font_family = Geist Mono 10 - shadow_passes = 3; - shadow_size = 4; - - position = "0, 220"; - halign = "center"; - valign = "center"; - } - { - text = ''cmd[update:1000] echo " $(date +"%M") "''; - # color = $color6 - font_size = 112; - # font_family = Geist Mono 10 - shadow_passes = 3; - shadow_size = 4; - - position = "0, 80"; - halign = "center"; - valign = "center"; - } - { - text = ''cmd[update:18000000] echo " "$(date +'%A')" "''; - # color = $color7 - font_size = 22; - # font_family = JetBrainsMono Nerd Font 10 - - position = "0, -10"; - halign = "center"; - valign = "center"; - } - { - text = ''cmd[update:18000000] echo " "$(${pkgs.coreutils-full}/bin/date +'%d %b')" "''; - # color = $color7 - font_size = 18; - #font_family = JetBrainsMono Nerd Font 10 - - position = "0, -40"; - halign = "center"; - valign = "center"; - } - { - text = ''cmd[update:18000000] echo "So ca. $(${pkgs.curl}/bin/curl -s 'wttr.in?format=%t' | ${pkgs.coreutils-full}/bin/tr -d '+') oder watt."''; - #color = $color7 - font_size = 18; - # font_family = Geist Mono 10 - - position = "0, 40"; - halign = "center"; - valign = "bottom"; - } - ]; - - input-field = [ - { - size = "250, 50"; - outline_thickness = 3; - - dots_size = 0.26; # Scale of input-field height, 0.2 - 0.8 - dots_spacing = 0.64; # Scale of dots' absolute size, 0.0 - 1.0 - dots_center = true; - dots_rouding = -1; - - rounding = 22; - # outer_color = $color0 - # inner_color = $color0 - # font_color = $color6 - fade_on_empty = true; - placeholder_text = ''Password...''; # Text rendered in the input box when it's empty. - - position = "0, 120"; - halign = "center"; - valign = "bottom"; - } - ]; - }; - }; - - wayland.windowManager.hyprland = lib.mkIf config.wayland.windowManager.hyprland.enable { - settings = { - exec-once = [ - "${pkgs.wpaperd}/bin/wpaperd &" - ]; - - "$mod" = "SUPER"; - bind = - [ - "$mod, RETURN, exec, ${pkgs.kitty}/bin/kitty" - "$mod, d, exec, ${pkgs.wofi}/bin/wofi --show drun" - "$mod, h, movefocus, l" - "$mod, j, movefocus, d" - "$mod, k, movefocus, u" - "$mod, l, movefocus, r" - "$mod, LEFT, movefocus, l" - "$mod, DOWN, movefocus, d" - "$mod, UP, movefocus, u" - "$mod, RIGHT, movefocus, r" - "$mod SHIFT, h, movewindow, l" - "$mod SHIFT, j, movewindow, d" - "$mod SHIFT, k, movewindow, u" - "$mod SHIFT, l, movewindow, r" - "$mod SHIFT, LEFT, movewindow, l" - "$mod SHIFT, DOWN, movewindow, d" - "$mod SHIFT, UP, movewindow, u" - - "$mod CTRL SHIFT, LEFT, moveactive, -10 0" - "$mod CTRL SHIFT, DOWN, moveactive, 0 10" - "$mod CTRL SHIFT, UP, moveactive, 0 -10" - "$mod CTRL SHIFT, RIGHT, moveactive, 10 0" - "$mod CTRL SHIFT, h, moveactive, -10 0" - "$mod CTRL SHIFT, j, moveactive, 0 10" - "$mod CTRL SHIFT, k, moveactive, 0 -10" - "$mod CTRL SHIFT, l, moveactive, 10 0" - "$mod SHIFT, q, killactive" - "$mod CTRL, h, resizeactive, -5% 0%" - "$mod CTRL, l, resizeactive, 5% 0%" - "$mod CTRL, j, resizeactive, 0% -5%" - "$mod CTRL, k, resizeactive, 0% 5%" - "$mod, SPACE, togglefloating, active" - "$mod SHIFT, SPACE, centerwindow" - "$mod, f, fullscreen, 1" - "$mod SHIFT, f, fullscreen, 0" - "$mod CTRL, f, fullscreenstate, -1 2" - "$mod SHIFT, s, pin" - "$mod SHIFT, x, exec, ${pkgs.hyprland}/bin/hyprctl kill" - ", XF86AudioRaiseVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume +5" - ", XF86AudioLowerVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume -5" - ", XF86AudioMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute" - ", XF86AudioMicMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute --id 1" - ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set +5%" - ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-" - "$mod, 9, exec, ${pkgs.hyprlock}/bin/hyprlock" - "$mod, 0, exec, ${pkgs.wlogout}/bin/wlogout -b 5" - "$mod, n, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t" - ", Print, exec, ${screenshot}/bin/screenshot" - "CTRL, Print, exec, ${screenshot}/bin/screenshot --region" - "SHIFT, Print, exec, ${screenshot}/bin/screenshot --clip" - "CTRL SHIFT, Print, exec, ${screenshot}/bin/screenshot --region --clip" - ] - ++ ( - # workspaces - # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} - builtins.concatLists (builtins.genList ( - x: let - ws = builtins.toString (x + 1); - in [ - "$mod, ${ws}, workspace, ${ws}" - "$mod SHIFT, ${ws}, movetoworkspace, ${ws}" - "$mod CTRL, ${ws}, movetoworkspacesilent, ${ws}" - ] - ) - 8) - ); - # See https://wiki.hyprland.org/Configuring/Monitors/ - monitor = ",preferred,auto,1"; - env = [ - "GDK_SCALE,1" - "XCURSOR_SIZE,12" - ]; - - xwayland = { - force_zero_scaling = true; - }; - - # See https://wiki.hyprland.org/Configuring/Keywords/ for more - - # Execute your favorite apps at launch - # exec-once = waybar & hyprpaper & firefox - - # Source a file (multi-file configs) - # source = ~/.config/hypr/myColors.conf - - # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ - input = { - kb_layout = "de"; - kb_variant = "deadacute"; - kb_model = ""; - kb_options = "caps:ctrl_modifier"; - kb_rules = ""; - repeat_delay = 250; - repeat_rate = 30; - follow_mouse = 1; - - touchpad = { - natural_scroll = "yes"; - }; - - sensitivity = 0; # -1.0 - 1.0, 0 means no modification. - }; - + config = lib.mkIf cfg.enable { + services.hypridle.settings = { general = { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - - gaps_in = 5; - gaps_out = 10; - border_size = 2; - "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; - "col.inactive_border" = "rgba(595959aa)"; - - layout = "dwindle"; - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = false; + # lock_cmd = notify-send "lock!" # dbus/sysd lock command (loginctl lock-session) + # unlock_cmd = notify-send "unlock!" # same as above, but unlock + ignore_dbus_inhibit = "false"; # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) + lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances. + before_sleep_cmd = "loginctl lock-session"; # lock before suspend. + after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display. }; - layerrule = [ - # blur for wlogout - "blur, logout_dialog" - - # blur for swaync - "blur, swaync-control-center" - "blur, swaync-notification-window" - "ignorezero, swaync-control-center" - "ignorezero, swaync-notification-window" - "ignorealpha 0.5, swaync-control-center" - "ignorealpha 0.5, swaync-notification-window" + listener = [ + # Screenlock + { + timeout = 180; # in seconds + on-timeout = "hyprlock"; # command to run when timeout has passed + # on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired. + } + # Suspend + { + timeout = 360; # in seconds + on-timeout = "systemctl suspend"; # command to run when timeout has passed + # on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired. + } ]; + }; - decoration = { - # See https://wiki.hyprland.org/Configuring/Variables/ for more + programs.hyprlock = { + enable = true; + settings = { + background = [ + { + path = "screenshot"; # only png supported for now + # color = $color1 - rounding = 10; + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_size = 4; + blur_passes = 3; # 0 disables blurring + noise = 0.0117; + contrast = 1.3000; # Vibrant!!! + brightness = 0.8000; + vibrancy = 0.2100; + vibrancy_darkness = 0.0; + } + ]; - blur = { - enabled = true; - size = 8; - passes = 1; - new_optimizations = true; - }; - }; + # Hours + label = [ + { + text = ''cmd[update:1000] echo " $(date +"%H") "''; + #color = $color6 + font_size = 112; + # font_family = Geist Mono 10 + shadow_passes = 3; + shadow_size = 4; - animations = { - enabled = "yes"; + position = "0, 220"; + halign = "center"; + valign = "center"; + } + { + text = ''cmd[update:1000] echo " $(date +"%M") "''; + # color = $color6 + font_size = 112; + # font_family = Geist Mono 10 + shadow_passes = 3; + shadow_size = 4; - # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + position = "0, 80"; + halign = "center"; + valign = "center"; + } + { + text = ''cmd[update:18000000] echo " "$(date +'%A')" "''; + # color = $color7 + font_size = 22; + # font_family = JetBrainsMono Nerd Font 10 - bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; + position = "0, -10"; + halign = "center"; + valign = "center"; + } + { + text = ''cmd[update:18000000] echo " "$(${pkgs.coreutils-full}/bin/date +'%d %b')" "''; + # color = $color7 + font_size = 18; + #font_family = JetBrainsMono Nerd Font 10 - animation = [ - "windows, 1, 7, myBezier" - "windowsOut, 1, 7, default, popin 80%" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 7, default" - "workspaces, 1, 6, default" + position = "0, -40"; + halign = "center"; + valign = "center"; + } + { + text = ''cmd[update:18000000] echo "So ca. $(${pkgs.curl}/bin/curl -s 'wttr.in?format=%t' | ${pkgs.coreutils-full}/bin/tr -d '+') oder watt."''; + #color = $color7 + font_size = 18; + # font_family = Geist Mono 10 + + position = "0, 40"; + halign = "center"; + valign = "bottom"; + } + ]; + + input-field = [ + { + size = "250, 50"; + outline_thickness = 3; + + dots_size = 0.26; # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.64; # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true; + dots_rouding = -1; + + rounding = 22; + # outer_color = $color0 + # inner_color = $color0 + # font_color = $color6 + fade_on_empty = true; + placeholder_text = ''Password...''; # Text rendered in the input box when it's empty. + + position = "0, 120"; + halign = "center"; + valign = "bottom"; + } ]; }; + }; - dwindle = { - # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more - pseudotile = "yes"; # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = "yes"; # you probably want this + wayland.windowManager.hyprland = { + settings = { + exec-once = [ + "${pkgs.wpaperd}/bin/wpaperd &" + ]; + + "$mod" = "SUPER"; + bind = + [ + "$mod, RETURN, exec, ${pkgs.kitty}/bin/kitty" + "$mod, d, exec, ${pkgs.wofi}/bin/wofi --show drun" + "$mod, h, movefocus, l" + "$mod, j, movefocus, d" + "$mod, k, movefocus, u" + "$mod, l, movefocus, r" + "$mod, LEFT, movefocus, l" + "$mod, DOWN, movefocus, d" + "$mod, UP, movefocus, u" + "$mod, RIGHT, movefocus, r" + "$mod SHIFT, h, movewindow, l" + "$mod SHIFT, j, movewindow, d" + "$mod SHIFT, k, movewindow, u" + "$mod SHIFT, l, movewindow, r" + "$mod SHIFT, LEFT, movewindow, l" + "$mod SHIFT, DOWN, movewindow, d" + "$mod SHIFT, UP, movewindow, u" + + "$mod CTRL SHIFT, LEFT, moveactive, -10 0" + "$mod CTRL SHIFT, DOWN, moveactive, 0 10" + "$mod CTRL SHIFT, UP, moveactive, 0 -10" + "$mod CTRL SHIFT, RIGHT, moveactive, 10 0" + "$mod CTRL SHIFT, h, moveactive, -10 0" + "$mod CTRL SHIFT, j, moveactive, 0 10" + "$mod CTRL SHIFT, k, moveactive, 0 -10" + "$mod CTRL SHIFT, l, moveactive, 10 0" + "$mod SHIFT, q, killactive" + "$mod CTRL, h, resizeactive, -5% 0%" + "$mod CTRL, l, resizeactive, 5% 0%" + "$mod CTRL, j, resizeactive, 0% -5%" + "$mod CTRL, k, resizeactive, 0% 5%" + "$mod, SPACE, togglefloating, active" + "$mod SHIFT, SPACE, centerwindow" + "$mod, f, fullscreen, 1" + "$mod SHIFT, f, fullscreen, 0" + "$mod CTRL, f, fullscreenstate, -1 2" + "$mod SHIFT, s, pin" + "$mod SHIFT, x, exec, ${pkgs.hyprland}/bin/hyprctl kill" + ", XF86AudioRaiseVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume +5" + ", XF86AudioLowerVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume -5" + ", XF86AudioMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute" + ", XF86AudioMicMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute --id 1" + ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set +5%" + ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-" + "$mod, 9, exec, ${pkgs.hyprlock}/bin/hyprlock" + "$mod, 0, exec, ${pkgs.wlogout}/bin/wlogout -b 5" + "$mod, n, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t" + ", Print, exec, ${screenshot}/bin/screenshot" + "CTRL, Print, exec, ${screenshot}/bin/screenshot --region" + "SHIFT, Print, exec, ${screenshot}/bin/screenshot --clip" + "CTRL SHIFT, Print, exec, ${screenshot}/bin/screenshot --region --clip" + ] + ++ ( + # workspaces + # binds $mod + [shift +] {1..10} to [move to] workspace {1..10} + builtins.concatLists (builtins.genList ( + x: let + ws = builtins.toString (x + 1); + in [ + "$mod, ${ws}, workspace, ${ws}" + "$mod SHIFT, ${ws}, movetoworkspace, ${ws}" + "$mod CTRL, ${ws}, movetoworkspacesilent, ${ws}" + ] + ) + 8) + ); + # See https://wiki.hyprland.org/Configuring/Monitors/ + monitor = ",preferred,auto,1"; + env = [ + "GDK_SCALE,1" + "XCURSOR_SIZE,12" + ]; + + xwayland = { + force_zero_scaling = true; + }; + + # See https://wiki.hyprland.org/Configuring/Keywords/ for more + + # Execute your favorite apps at launch + # exec-once = waybar & hyprpaper & firefox + + # Source a file (multi-file configs) + # source = ~/.config/hypr/myColors.conf + + # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ + input = { + kb_layout = "de"; + kb_variant = "deadacute"; + kb_model = ""; + kb_options = "caps:ctrl_modifier"; + kb_rules = ""; + repeat_delay = 250; + repeat_rate = 30; + follow_mouse = 1; + + touchpad = { + natural_scroll = "yes"; + }; + + sensitivity = 0; # -1.0 - 1.0, 0 means no modification. + }; + + general = { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5; + gaps_out = 10; + border_size = 2; + "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; + "col.inactive_border" = "rgba(595959aa)"; + + layout = "dwindle"; + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false; + }; + + layerrule = [ + # blur for wlogout + "blur, logout_dialog" + + # blur for swaync + "blur, swaync-control-center" + "blur, swaync-notification-window" + "ignorezero, swaync-control-center" + "ignorezero, swaync-notification-window" + "ignorealpha 0.5, swaync-control-center" + "ignorealpha 0.5, swaync-notification-window" + ]; + + decoration = { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10; + + blur = { + enabled = true; + size = 8; + passes = 1; + new_optimizations = true; + }; + }; + + animations = { + enabled = "yes"; + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; + + animation = [ + "windows, 1, 7, myBezier" + "windowsOut, 1, 7, default, popin 80%" + "border, 1, 10, default" + "borderangle, 1, 8, default" + "fade, 1, 7, default" + "workspaces, 1, 6, default" + ]; + }; + + dwindle = { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = "yes"; # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = "yes"; # you probably want this + }; + + master = { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + # new_is_master = true; + }; + + gestures = { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = "off"; + }; + + misc = { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 0; # Set to 0 to disable the anime mascot wallpapers + }; + + # Example per-device config + # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more + # "device:epic-mouse-v1" = { + # sensitivity = -0.5; + # }; }; - - master = { - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more - # new_is_master = true; - }; - - gestures = { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - workspace_swipe = "off"; - }; - - misc = { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - force_default_wallpaper = 0; # Set to 0 to disable the anime mascot wallpapers - }; - - # Example per-device config - # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more - # "device:epic-mouse-v1" = { - # sensitivity = -0.5; - # }; }; }; } diff --git a/modules/home/hyprland/default.nix b/modules/home/hyprland/default.nix index fbd3986..5b5db0a 100644 --- a/modules/home/hyprland/default.nix +++ b/modules/home/hyprland/default.nix @@ -1,4 +1,8 @@ -{...}: { +{lib, ...}: { + options.hive.hyprland = { + enable = lib.mkEnableOption "Enable Hyprland configuration"; + }; + imports = [ ./config.nix ./hyprland.nix diff --git a/modules/home/hyprland/hyprland.nix b/modules/home/hyprland/hyprland.nix index 4e61ad0..8107d7a 100644 --- a/modules/home/hyprland/hyprland.nix +++ b/modules/home/hyprland/hyprland.nix @@ -1,22 +1,31 @@ -{pkgs, ...}: { - wayland.windowManager.hyprland = { - enable = true; - systemd.enable = false; - systemd.variables = ["--all"]; - xwayland.enable = true; - }; +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.hive.hyprland; +in { + config = lib.mkIf cfg.enable { + wayland.windowManager.hyprland = { + enable = true; + systemd.enable = false; + systemd.variables = ["--all"]; + xwayland.enable = true; + }; - home.packages = with pkgs; [ - wl-clipboard - ]; + home.packages = with pkgs; [ + wl-clipboard + ]; - services.hypridle.enable = true; + services.hypridle.enable = true; - programs.wpaperd = { - enable = true; - settings = { - default = { - path = ../../../static/wallpaper/stones.jpg; + programs.wpaperd = { + enable = true; + settings = { + default = { + path = ../../../static/wallpaper/stones.jpg; + }; }; }; };