diff --git a/flake.lock b/flake.lock index 7b7c9e5..abcc4cc 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ ] }, "locked": { - "lastModified": 1741352980, - "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", "type": "github" }, "original": { @@ -46,11 +46,11 @@ ] }, "locked": { - "lastModified": 1743360001, - "narHash": "sha256-HtpS/ZdgWXw0y+aFdORcX5RuBGTyz3WskThspNR70SM=", + "lastModified": 1745987135, + "narHash": "sha256-8Up4QPuMZEJBU0eefAY+nUe7DYKQQzvaHnMpNdwRgKA=", "owner": "nix-community", "repo": "home-manager", - "rev": "b6fd653ef8fbeccfd4958650757e91767a65506d", + "rev": "d2b3e6c83d457aa0e7f9344c61c3fed32bad0f7e", "type": "github" }, "original": { @@ -73,16 +73,16 @@ ] }, "locked": { - "lastModified": 1729958008, - "narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=", + "lastModified": 1737371634, + "narHash": "sha256-fTVAWzT1UMm1lT+YxHuVPtH+DATrhYfea3B0MxG/cGw=", "owner": "NuschtOS", "repo": "ixx", - "rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb", + "rev": "a1176e2a10ce745ff8f63e4af124ece8fe0b1648", "type": "github" }, "original": { "owner": "NuschtOS", - "ref": "v0.0.6", + "ref": "v0.0.7", "repo": "ixx", "type": "github" } @@ -127,11 +127,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743315132, - "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", + "lastModified": 1745930157, + "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", "owner": "nixos", "repo": "nixpkgs", - "rev": "52faf482a3889b7619003c0daec593a1912fddc1", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", "type": "github" }, "original": { @@ -150,11 +150,11 @@ "nuschtosSearch": "nuschtosSearch" }, "locked": { - "lastModified": 1743362786, - "narHash": "sha256-XbXIRDbb8/vLBX1M096l7lM5wfzBTp1ZXfUl9bUhVGU=", + "lastModified": 1745933874, + "narHash": "sha256-K/bEekSd3iibHoTUgytBYJZd0/e4xQ4IyKkS+NI1XyI=", "owner": "nix-community", "repo": "nixvim", - "rev": "d81f37256d0a8691b837b74979d27bf89be8ecdd", + "rev": "cd3cbb1e26f463543dc4710548ed35b0ac711370", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1742659553, - "narHash": "sha256-i/JCrr/jApVorI9GkSV5to+USrRCa0rWuQDH8JSlK2A=", + "lastModified": 1745046075, + "narHash": "sha256-8v4y6k16Ra/fiecb4DxhsoOGtzLKgKlS+9/XJ9z0T2I=", "owner": "NuschtOS", "repo": "search", - "rev": "508752835128a3977985a4d5225ff241f7756181", + "rev": "066afe8643274470f4a294442aadd988356a478f", "type": "github" }, "original": { diff --git a/hosts/MONSTER/default.nix b/hosts/MONSTER/default.nix index 5c8af3a..8d0990d 100644 --- a/hosts/MONSTER/default.nix +++ b/hosts/MONSTER/default.nix @@ -45,12 +45,14 @@ }; shell.components = { - dunst.enable = true; + #dunst.enable = true; firefox-pip.enable = true; flameshot.enable = true; gnome-keyring.enable = true; hyprpicker.enable = true; + kde-connect.enable = true; kitty.enable = true; + swaync.enable = true; walker.enable = true; waybar.enable = true; }; diff --git a/hosts/MONSTER/home.nix b/hosts/MONSTER/home.nix index d8bc99f..25e79b0 100644 --- a/hosts/MONSTER/home.nix +++ b/hosts/MONSTER/home.nix @@ -1,5 +1,12 @@ { ... }: { - theme.md3-evo.enable = true; + theme.md3-evo = { + enable = true; + auto-dark = { + enable = true; + lat = 52.52; + lon = 13.40; + }; + }; programs.zoxide.enable = true; } diff --git a/modules/home-manager/desktops/hyprland/default.nix b/modules/home-manager/desktops/hyprland/default.nix index f0494c6..3d57ac6 100644 --- a/modules/home-manager/desktops/hyprland/default.nix +++ b/modules/home-manager/desktops/hyprland/default.nix @@ -4,6 +4,16 @@ osConfig, ... }: +let + hypr-cycle = pkgs.writeShellApplication { + name = "hypr-cycle"; + text = '' + WORKSPACE=$(hyprctl activeworkspace -j | jq -r '.id') + WINDOW=$(hyprctl activewindow -j | jq -r '.address') + hyprctl clients -j | jq -r "map(select(.workspace.id == $WORKSPACE) | select(.class == \"$1\") | .address | select(. != $WINDOW)) | .[0]" + ''; + }; +in { config = lib.mkIf osConfig.desktops.hyprland.enable { wayland.windowManager.hyprland = { @@ -37,26 +47,6 @@ "SUPER_SHIFT,h,movetoworkspace,r+1" "SUPER,mouse_up,workspace,r+1" "SUPER,mouse_down,workspace,r-1" - - "SUPER,1,workspace,1" - "SUPER,2,workspace,2" - "SUPER,3,workspace,3" - "SUPER,4,workspace,4" - "SUPER,5,workspace,5" - "SUPER,6,workspace,6" - "SUPER,7,workspace,7" - "SUPER,8,workspace,8" - "SUPER,9,workspace,9" - - "SUPER_SHIFT,1,movetoworkspace,1" - "SUPER_SHIFT,2,movetoworkspace,2" - "SUPER_SHIFT,3,movetoworkspace,3" - "SUPER_SHIFT,4,movetoworkspace,4" - "SUPER_SHIFT,5,movetoworkspace,5" - "SUPER_SHIFT,6,movetoworkspace,6" - "SUPER_SHIFT,7,movetoworkspace,7" - "SUPER_SHIFT,8,movetoworkspace,8" - "SUPER_SHIFT,9,movetoworkspace,9" ]; bindm = [ "SUPER,mouse:272,movewindow" diff --git a/modules/home-manager/programs/default.nix b/modules/home-manager/programs/default.nix index 783e9d6..e785076 100644 --- a/modules/home-manager/programs/default.nix +++ b/modules/home-manager/programs/default.nix @@ -35,14 +35,15 @@ src = zsh-nix-shell; } ]; - initExtraFirst = # sh - '' - if [[ -r "''${XDG_CACHE_HOME:-''$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" ]]; then - source "''${XDG_CACHE_HOME:-''$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" - fi - [[ ! -f ${./.p10k.zsh} ]] || source ${./.p10k.zsh} - source ${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/powerlevel10k.zsh-theme - ''; + initContent = + pkgs.lib.mkBefore # sh + '' + if [[ -r "''${XDG_CACHE_HOME:-''$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" ]]; then + source "''${XDG_CACHE_HOME:-''$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" + fi + [[ ! -f ${./.p10k.zsh} ]] || source ${./.p10k.zsh} + source ${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/powerlevel10k.zsh-theme + ''; }; direnv = { enable = true; diff --git a/modules/home-manager/programs/neovide.nix b/modules/home-manager/programs/neovide.nix index db7e803..7b1efbe 100644 --- a/modules/home-manager/programs/neovide.nix +++ b/modules/home-manager/programs/neovide.nix @@ -21,6 +21,13 @@ "+ss10" ]; }; + box-drawing = { + mode = "native"; + sizes.default = [ + 1 + 3 + ]; + }; }; wayland.windowManager.hyprland.settings.windowrulev2 = [ # For some reason it really wants to be maximized @@ -35,6 +42,7 @@ neovide_hide_mouse_when_typing = true; experimental_layer_grouping = true; neovide_cursor_vfx_mode = "pixiedust"; + neovide_cursor_trail_size = 0.7; }; }; } diff --git a/modules/home-manager/programs/nixvim/default.nix b/modules/home-manager/programs/nixvim/default.nix index ae171bc..d724207 100644 --- a/modules/home-manager/programs/nixvim/default.nix +++ b/modules/home-manager/programs/nixvim/default.nix @@ -33,7 +33,7 @@ presets = { auto-save.enable = true; auto-format.enable = true; - harpoon.enable = true; + # harpoon.enable = true; lazygit.enable = true; mergetool.enable = true; trouble.enable = true; diff --git a/modules/home-manager/programs/nixvim/presets/base/diagnostics.nix b/modules/home-manager/programs/nixvim/presets/base/diagnostics.nix index f468237..2d91f69 100644 --- a/modules/home-manager/programs/nixvim/presets/base/diagnostics.nix +++ b/modules/home-manager/programs/nixvim/presets/base/diagnostics.nix @@ -69,7 +69,7 @@ in plugins = { lsp = { enable = true; - inlayHints = true; + inlayHints = false; }; telescope = { enable = true; diff --git a/modules/home-manager/programs/nixvim/presets/base/status-line.nix b/modules/home-manager/programs/nixvim/presets/base/status-line.nix index 321fb9d..88a46ee 100644 --- a/modules/home-manager/programs/nixvim/presets/base/status-line.nix +++ b/modules/home-manager/programs/nixvim/presets/base/status-line.nix @@ -31,10 +31,12 @@ in settings = { options = { globalstatus = true; - section_separators = { - left = ""; - right = ""; - }; + /* + section_separators = { + left = ""; + right = ""; + }; + */ component_separators = { left = "┊"; right = "┊"; @@ -44,10 +46,12 @@ in lualine_a = [ { __unkeyed-1 = "mode"; - separator = { - right = ""; - left = ""; - }; + /* + separator = { + right = ""; + left = ""; + }; + */ icon = ""; } ]; @@ -55,10 +59,12 @@ in lualine_z = [ { __unkeyed-1 = "location"; - separator = { - right = ""; - left = ""; - }; + /* + separator = { + right = ""; + left = ""; + }; + */ } ]; }; diff --git a/modules/home-manager/theme/md3-evo.nix b/modules/home-manager/theme/md3-evo.nix index f120e3a..94a8d78 100644 --- a/modules/home-manager/theme/md3-evo.nix +++ b/modules/home-manager/theme/md3-evo.nix @@ -11,6 +11,15 @@ in { options.theme.md3-evo = { enable = lib.mkEnableOption "the MD3-EVO theme"; + auto-dark = { + enable = lib.mkEnableOption "Automatically switch between light and dark mode"; + lon = lib.mkOption { + type = lib.types.float; + }; + lat = lib.mkOption { + type = lib.types.float; + }; + }; flavour = lib.mkOption { type = lib.types.enum [ "content" @@ -177,9 +186,11 @@ in pkgs.matugen pkgs.swww pkgs.zenity + pkgs.sunwait ]; text = '' WALLPAPER=${config.xdg.configHome}/matugen/wallpaper + STATE=${config.xdg.stateHome}/md3-evo SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme) if [ "$SCHEME" = "'prefer-light'" ]; then @@ -188,8 +199,15 @@ in MODE="dark" fi + if [ ! -d "$STATE" ]; then + mkdir -p "$STATE" + fi + if [ -f "$STATE/mode" ]; then + MODE=$(cat "$STATE/mode") + fi + if [ $# -eq 0 ]; then - echo -e "\033[1mUsage:\033[0m mode|light|dark|toggle|wallpaper" + echo -e "\033[1mUsage:\033[0m mode|light|dark|auto|toggle|wallpaper" exit 1 elif [ "$1" = "mode" ]; then echo -e "$MODE" @@ -207,8 +225,10 @@ in else MODE="light" fi - elif [ "$1" = "light" ] || [ "$1" = "dark" ]; then + echo "$MODE" > "$STATE/mode" + elif [ "$1" = "light" ] || [ "$1" = "dark" ] || [ "$1" == "auto" ]; then MODE="$1" + echo "$MODE" > "$STATE/mode" elif [ "$1" = "init" ]; then echo -e "\033[1mSetting up matugen\033[0m" else @@ -221,6 +241,35 @@ in exit 1 fi + + THEME_SERVICE_PATH="${config.xdg.configHome}/systemd/user/theme-init.timer" + if [ "$MODE" = "auto" ]; then + TIME=$(sunwait poll ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E || :) + if [ "$TIME" = "DAY" ]; then + MODE="light" + NEXT=6 + else + MODE="dark" + NEXT=4 + fi + NEXT=$(sunwait report ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E | awk "/Daylight:/ {print \$$NEXT}") + cat < /dev/null + [Unit] + Description=Next theme change timer + + [Timer] + OnCalendar=*-*-* $(date -d "$NEXT today + 5 minutes" +'%H:%M'):00 + AccuracySec=1min + + [Install] + WantedBy=timers.target + EOF + else + rm -f "$THEME_SERVICE_PATH" + fi + systemctl --user daemon-reload &> /dev/null || : + systemctl --user restart theme-init.timer &> /dev/null || : + if [ "$MODE" = "light" ]; then GTK_THEME="adw-gtk3" else @@ -237,6 +286,10 @@ in hyprctl reload fi + if which swaync-client; then + swaync-client --reload-css + fi + for i in $(pgrep -u "$USER" -x nvim); do kill -USR1 "$i" done @@ -247,6 +300,7 @@ in lib.mkIf cfg.enable { home.packages = [ pkgs.adw-gtk3 + pkgs.swww theme-script ]; @@ -263,19 +317,17 @@ in qt.platformTheme.name = "qtct"; systemd.user.services = { - /* - swww-daemon = { - Unit = { - Description = "Swww Daemon"; - After = [ "graphical-session.target" ]; - }; - Install.WantedBy = [ "graphical-session.target" ]; - Service = { - ExecStart = "${pkgs.swww}/bin/swww-daemon"; - Restart = "on-failure"; - }; + swww-daemon = { + Unit = { + Description = "Swww Daemon"; + After = [ "graphical-session.target" ]; }; - */ + Install.WantedBy = [ "graphical-session.target" ]; + Service = { + ExecStart = "${pkgs.swww}/bin/swww-daemon"; + Restart = "always"; + }; + }; theme-init = { Unit = { Description = "MD3 Evo Theme Init"; @@ -346,7 +398,7 @@ in reload_apps = true; reload_apps_list = { kitty = config.programs.kitty.enable; - waybar = false; + waybar = config.programs.waybar.enable; dunst = config.services.dunst.enable; }; @@ -433,6 +485,14 @@ in input_path = ./discord.css; output_path = "${config.xdg.configHome}/vesktop/themes/matugen.theme.css"; }; + waybar = { + input_path = ./waybar.css; + output_path = "${config.xdg.configHome}/waybar/style.css"; + }; + swaync = { + input_path = ./swaync.css; + output_path = "${config.xdg.configHome}/swaync/style.css"; + }; }; }; }; diff --git a/modules/home-manager/theme/nvim.vim b/modules/home-manager/theme/nvim.vim index 345e14d..6b0d6d9 100644 --- a/modules/home-manager/theme/nvim.vim +++ b/modules/home-manager/theme/nvim.vim @@ -4,7 +4,7 @@ if exists("syntax_on") endif let g:colors_name="md3-evo" -let g:neovide_transparency = 1.0 +let g:neovide_opacity = 1.0 let g:neovide_floating_corner_radius = 0.5 let g:neovide_normal_opacity = {{custom.transparency}} let g:neovide_padding_top = {{custom.padding}} diff --git a/modules/home-manager/theme/swaync.css b/modules/home-manager/theme/swaync.css new file mode 100644 index 0000000..cc87e8e --- /dev/null +++ b/modules/home-manager/theme/swaync.css @@ -0,0 +1,375 @@ +syntax error + +* { + font-size: 14px; + font-family: "Noto Sans"; + transition: 100ms; + box-shadow: unset; +} + +.control-center .notification-row { + background-color: unset; +} + +.control-center .notification-row .notification-background .notification, +.control-center + .notification-row + .notification-background + .notification + .notification-content, +.floating-notifications + .notification-row + .notification-background + .notification, +.floating-notifications.background + .notification-background + .notification + .notification-content { + margin-bottom: unset; +} + +.control-center .notification-row .notification-background .notification { + margin-top: 0.15rem; +} + +.control-center .notification-row .notification-background .notification box, +.control-center .notification-row .notification-background .notification widget, +.control-center + .notification-row + .notification-background + .notification + .notification-content, +.floating-notifications + .notification-row + .notification-background + .notification + box, +.floating-notifications + .notification-row + .notification-background + .notification + widget, +.floating-notifications.background + .notification-background + .notification + .notification-content { + border: unset; + border-radius: 1.159rem; + -gtk-outline-radius: 1.159rem; +} + +.floating-notifications.background + .notification-background + .notification + .notification-content, +.control-center .notification-background .notification .notification-content { + background-color: {{colors.background.default.hex}}; + padding: 0.818rem; + padding-right: unset; + margin-right: unset; +} + +.control-center + .notification-row + .notification-background + .notification.low + .notification-content + label, +.control-center + .notification-row + .notification-background + .notification.normal + .notification-content + label, +.floating-notifications.background + .notification-background + .notification.low + .notification-content + label, +.floating-notifications.background + .notification-background + .notification.normal + .notification-content + label { + color: {{colors.outline.default.hex}}; +} + +.control-center + .notification-row + .notification-background + .notification..notification-content + image, +.control-center + .notification-row + .notification-background + .notification.normal + .notification-content + image, +.floating-notifications.background + .notification-background + .notification.low + .notification-content + image, +.floating-notifications.background + .notification-background + .notification.normal + .notification-content + image { + background-color: {{colors.surface_container_high.default.hex}}; + color: {{colors.on_surface.default.hex}}; +} + +.control-center + .notification-row + .notification-background + .notification.critical + .notification-content, +.floating-notifications.background + .notification-background + .notification.critical + .notification-content { + background-color: {{colors.surface_container_high.default.hex}}; + color: {{colors.on_surface.default.hex}}; +} + +.control-center + .notification-row + .notification-background + .notification + .notification-content + .summary, +.floating-notifications.background + .notification-background + .notification + .notification-content + .summary { + font-family: "Noto Sans", sans-serif; + font-size: 0.9909rem; + font-weight: 500; +} + +.control-center + .notification-row + .notification-background + .notification + .notification-content + .time, +.floating-notifications.background + .notification-background + .notification + .notification-content + .time { + font-family: "Noto Sans", sans-serif; + font-size: 0.8291rem; + font-weight: 500; + margin-right: 1rem; + padding-right: unset; +} + +.control-center + .notification-row + .notification-background + .notification + .notification-content + .body, +.floating-notifications.background + .notification-background + .notification + .notification-content + .body { + font-family: "Noto Sans", sans-serif; + font-size: 0.8891rem; + font-weight: 400; + margin-top: 0.31rem; + padding-right: unset; + margin-right: unset; +} + +.control-center .notification-row .close-button, +.floating-notifications.background .close-button { + background-color: unset; + border-radius: 100%; + border: none; + box-shadow: none; + margin-right: 13px; + margin-top: 6px; + margin-bottom: unset; + padding-bottom: unset; + min-height: 20px; + min-width: 20px; + text-shadow: none; +} + +.control-center .notification-row .close-button:hover, +.floating-notifications.background .close-button:hover { + background-color: rgba({{colors.background.default.red}}, {{colors.background.default.green}}, {{colors.background.default.blue}}, 0.15); +} + +.control-center { + border-radius: 1.705rem; + -gtk-outline-radius: 1.705rem; + border-top: 1px solid rgba(164, 162, 167, 0.19); + border-left: 1px solid rgba(164, 162, 167, 0.19); + border-right: 1px solid rgba(128, 127, 132, 0.145); + border-bottom: 1px solid rgba(128, 127, 132, 0.145); + box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.45); + margin: 7px; + background-color: {{colors.background.default.hex}}; + padding: 1.023rem; +} + +.control-center trough { + border-radius: 9999px; + -gtk-outline-radius: 9999px; + min-width: 0.545rem; + background-color: transparent; +} + +.control-center slider { + border-radius: 9999px; + -gtk-outline-radius: 9999px; + min-width: 0.273rem; + min-height: 2.045rem; + background-color: rgba(199, 197, 208, 0.31); +} + +.control-center slider:hover { + background-color: rgba(199, 197, 208, 0.448); +} + +.control-center slider:active { + background-color: #77767e; +} + +/* title widget */ + +.widget-title { + padding: 0.341rem; + margin: unset; +} + +.widget-title label { + font-family: "Noto Sans", sans-serif; + font-size: 1.364rem; + color: {{colors.on_background.default.hex}}; + margin-left: 0.941rem; +} + +.widget-title button { + border: unset; + background-color: unset; + border-radius: 1.159rem; + -gtk-outline-radius: 1.159rem; + padding: 0.141rem 0.141rem; + margin-right: 0.841rem; +} + +.widget-title button label { + font-family: "Noto Sans", sans-serif; + font-size: 1.0409rem; + color: {{colors.on_background.default.hex}}; + margin-right: 0.841rem; +} + +.widget-title button:hover { + background-color: rgba(128, 128, 128, 0.3); +} + +.widget-title button:active { + background-color: rgba(128, 128, 128, 0.7); +} + +/* Buttons widget */ + +.widget-buttons-grid { + border-radius: 1.159rem; + -gtk-outline-radius: 1.159rem; + padding: 0.341rem; + background-color: rgba(28, 28, 34, 0.35); + padding: unset; +} + +.widget-buttons-grid > flowbox { + padding: unset; +} + +.widget-buttons-grid > flowbox > flowboxchild > button:first-child { + margin-left: unset; +} + +.widget-buttons-grid > flowbox > flowboxchild > button { + border: none; + background-color: unset; + border-radius: 9999px; + min-width: 5.522rem; + min-height: 2.927rem; + padding: unset; + margin: unset; +} + +.widget-buttons-grid > flowbox > flowboxchild > button label { + font-family: "Materials Symbol Rounded"; + font-size: 1.3027rem; + color: #e4e1e6; +} + +.widget-buttons-grid > flowbox > flowboxchild > button:hover { + background-color: rgba(128, 128, 128, 0.3); +} + +.widget-buttons-grid > flowbox > flowboxchild > button:checked { + /* OnePlus McClaren edition Orange accent */ + background-color: #ff9f34; +} + +.widget-buttons-grid > flowbox > flowboxchild > button:checked label { + color: #14141b; +} + +/* Volume widget */ + +.widget-volume { + background-color: rgba(28, 28, 34, 0.35); + padding: 8px; + margin: 8px; + -gtk-outline-radius: 1.159rem; + -gtk-outline-radius: 1.159rem; +} + +.widget-volume trough { + /* OnePlus McClaren edition Orange accent */ + border: unset; + background-color: rgba(128, 128, 128, 0.4); +} + +.widget-volume trough slider { + /* OnePlus McClaren edition Orange accent */ + color: unset; + background-color: #ff9f34; + border-radius: 100%; + min-height: 1.25rem; +} + +/* Mpris widget */ + +.widget-mpris { + background-color: rgba(28, 28, 34, 0.35); + padding: 8px; + margin: 8px; + border-radius: 1.159rem; + -gtk-outline-radius: 1.159rem; +} + +.widget-mpris-player { + padding: 8px; + margin: 8px; +} + +.widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; +} + +.widget-mpris-subtitle { + font-size: 1.1rem; +} diff --git a/modules/home-manager/theme/waybar.css b/modules/home-manager/theme/waybar.css new file mode 100644 index 0000000..e5c7b6c --- /dev/null +++ b/modules/home-manager/theme/waybar.css @@ -0,0 +1,70 @@ +window#waybar { + background: none; + border-bottom: none; +} + +window#waybar > box.horizontal { + margin: 12px 24px 0; +} + +.module { + color: white; + background: none; + margin: 0 8px; +} + +#clock { + font-weight: bold; + font-size: 16px; +} + +#privacy-item { + padding: 0 16px; + border-radius: 16px; +} + + +#pulseaudio-slider { + margin: 0 6px; + padding: 0; +} + +#pulseaudio-slider slider { + background: none; + min-height: 12px; + min-width: 12px; + border-radius: 100%; + margin: 0; + opacity: 0; + background-image: none; + border: none; + box-shadow: none; +} + +#pulseaudio-slider trough { + min-height: 12px; + min-width: 80px; + border-radius: 6px; + background-color: {{colors.on_primary.default.hex}}; +} + +#pulseaudio-slider highlight { + min-width: 12px; + border-radius: 6px; + background-color: {{colors.primary.default.hex}}; +} + +#privacy-item.audio-in { + background: {{colors.primary.default.hex}}; + color: {{colors.on_primary.default.hex}}; +} + +#privacy-item.audio-out { + background: {{colors.secondary.default.hex}}; + color: {{colors.on_secondary.default.hex}}; +} + +#privacy-item.screenshare { + background: {{colors.tertiary.default.hex}}; + color: {{colors.on_tertiary.default.hex}}; +} diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 0a37c42..ca25b68 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -34,7 +34,9 @@ ./shell/flameshot.nix ./shell/gnome-keyring.nix ./shell/hyprpicker.nix + ./shell/kde-connect.nix ./shell/kitty.nix + ./shell/swaync.nix ./shell/walker.nix ./shell/waybar.nix diff --git a/modules/nixos/hardware/fv43u.nix b/modules/nixos/hardware/fv43u.nix index 9a2fae8..3d9c993 100644 --- a/modules/nixos/hardware/fv43u.nix +++ b/modules/nixos/hardware/fv43u.nix @@ -49,12 +49,16 @@ in DXVK_HDR = "1"; }; wayland.windowManager.hyprland.settings = { - general.layout = "master"; + general = { + layout = "master"; + allow_tearing = true; + }; master = { orientation = "center"; slave_count_for_center_master = 0; mfact = 0.4; }; + render.direct_scanout = 1; monitor = [ "DP-3,3840x2160@144,0x0,1,bitdepth,10" "DP-3,addreserved,340,0,0,0" @@ -63,7 +67,7 @@ in misc.vrr = 2; # VA suffers from VRR flicker cursor = { min_refresh_rate = 48; - no_break_fs_vrr = true; + no_break_fs_vrr = 1; }; experimental = { xx_color_management_v4 = true; diff --git a/modules/nixos/shell/kde-connect.nix b/modules/nixos/shell/kde-connect.nix new file mode 100644 index 0000000..924627e --- /dev/null +++ b/modules/nixos/shell/kde-connect.nix @@ -0,0 +1,28 @@ +{ + config, + lib, + username, + ... +}: + +let + cfg = config.shell.components.kde-connect; +in +{ + options.shell.components.kde-connect = { + enable = lib.mkEnableOption (lib.mdDoc "Enable a pre-configured kde connect setup"); + }; + + config = lib.mkIf cfg.enable { + home-manager.users.${username}.services.kdeconnect.enable = true; + networking.firewall = rec { + allowedTCPPortRanges = [ + { + from = 1714; + to = 1764; + } + ]; + allowedUDPPortRanges = allowedTCPPortRanges; + }; + }; +} diff --git a/modules/nixos/shell/swaync.nix b/modules/nixos/shell/swaync.nix new file mode 100644 index 0000000..1fe02a4 --- /dev/null +++ b/modules/nixos/shell/swaync.nix @@ -0,0 +1,65 @@ +{ + config, + lib, + username, + ... +}: + +let + cfg = config.shell.components.swaync; +in +{ + options.shell.components.swaync = { + enable = lib.mkEnableOption (lib.mdDoc "Enable a pre-configured notification center"); + }; + + config = lib.mkIf cfg.enable { + home-manager.users.${username} = { + services.swaync = { + enable = true; + settings = { + positionX = "center"; + positionY = "top"; + fit-to-screen = false; + control-center-width = 600; + control-center-height = 800; + control-center-margin-top = 2; + control-center-margin-bottom = 2; + control-center-margin-right = 1; + control-center-margin-left = 0; + notification-window-width = 400; + notification-icon-size = 48; + notification-body-image-height = 160; + notification-body-image-width = 200; + image-visibility = "when-available"; + }; + }; + programs.waybar.settings.mainBar = { + modules-center = lib.mkAfter [ + "custom/notification" + ]; + + "custom/notification" = { + tooltip = false; + format = "{icon}"; + format-icons = { + notification = "󰂚"; + none = "󰂜"; + dnd-notification = "󰂠"; + dnd-none = "󰪓"; + inhibited-notification = "󰂛"; + inhibited-none = "󰪑"; + dnd-inhibited-notification = "󰂛"; + dnd-inhibited-none = "󰪑"; + }; + return-type = "json"; + exec-if = "which swaync-client"; + exec = "swaync-client -swb"; + on-click = "swaync-client -t -sw"; + on-click-right = "swaync-client -d -sw"; + escape = true; + }; + }; + }; + }; +} diff --git a/modules/nixos/shell/waybar.nix b/modules/nixos/shell/waybar.nix index e326cca..048d3ae 100644 --- a/modules/nixos/shell/waybar.nix +++ b/modules/nixos/shell/waybar.nix @@ -34,10 +34,24 @@ in "privacy" "gamemode" "tray" + "pulseaudio" "custom/brightness" "custom/theme" ]; + "pulseaudio" = { + format = "{icon} {volume}%"; + format-icons = { + "alsa_output.usb-Turtle_Beach_Turtle_Beach_Stealth_700_G2_MAX-01.iec958-stereo" = "󰋋"; + "alsa_output.pci-0000_0a_00.4.analog-stereo" = "󰓃"; + "alsa_output.pci-0000_08_00.1.hdmi-stereo-extra4" = "󰽟"; + "alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_797_2018_11_12_79383-00.analog-stereo" = + "󰍬"; + "default" = "󰕾"; + }; + on-click = "pavucontrol --tab=3"; + }; + "hyprland/workspaces" = { format = "{windows}"; window-rewrite = { @@ -58,6 +72,8 @@ in exec = pkgs.writeShellScript "waybar-theme" '' if [ $(theme mode) = "dark" ]; then echo '{"text": "", "tooltip": "Switch to light theme"}' + elif [ $(theme mode) = "auto" ]; then + echo '{"text": "󰖛", "tooltip": "Switch to dark theme"}' else echo '{"text": "", "tooltip": "Switch to dark theme"}' fi @@ -65,6 +81,8 @@ in exec-if = "sleep 1"; interval = "once"; on-click = "theme toggle"; + on-click-right = "theme auto"; + on-click-middle = "theme wallpaper"; }; }; };