From a393b84c92e6bab245169d8b427f672400fdad57 Mon Sep 17 00:00:00 2001 From: Hadi Date: Thu, 2 Jul 2026 15:24:33 +0200 Subject: [PATCH] yes Signed-off-by: Hadi --- home/programs/focus-mode/default.nix | 25 --- home/programs/helium/bookmarks/other.nix | 8 + home/programs/helium/system.nix | 2 +- home/programs/nightshift/default.nix | 19 -- home/system/hyprland/bindings.nix | 1 + home/system/hyprland/default.nix | 5 +- home/system/swaync/default.nix | 62 ++++++- home/system/swayosd/default.nix | 68 -------- home/system/tofi/default.nix | 2 + .../tofi/desktop-actions.nix} | 51 ++++-- home/system/waybar/default.nix | 108 ++---------- home/system/waybar/scripts.nix | 164 ++++++++++++++++++ home/system/waybar/settings.nix | 80 +++------ home/system/waybar/style.nix | 110 +++--------- hosts/laptop/home.nix | 2 - hosts/work/flake.nix | 4 +- hosts/work/home.nix | 8 +- hosts/work/secrets/secrets.yaml | 12 +- todo | 1 + 19 files changed, 353 insertions(+), 379 deletions(-) delete mode 100644 home/programs/focus-mode/default.nix delete mode 100644 home/programs/nightshift/default.nix delete mode 100644 home/system/swayosd/default.nix rename home/{programs/desktop-actions/default.nix => system/tofi/desktop-actions.nix} (64%) create mode 100644 home/system/waybar/scripts.nix diff --git a/home/programs/focus-mode/default.nix b/home/programs/focus-mode/default.nix deleted file mode 100644 index 3c8fad4..0000000 --- a/home/programs/focus-mode/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{pkgs, ...}: let - focus-toggle = - pkgs.writeShellScriptBin "focus-toggle" - # bash - '' - if test -f /tmp/hypr-focus-mode; then - rm /tmp/hypr-focus-mode - hyprctl reload - hyprctl dispatch exec waybar - swayosd-client --custom-message "Focus Mode Off" --custom-icon "do-not-disturb-symbolic" - else - touch /tmp/hypr-focus-mode - pkill waybar || true - hyprctl keyword animations:enabled false - hyprctl keyword general:gaps_in 0 - hyprctl keyword general:gaps_out 0 - hyprctl keyword decoration:active_opacity 1 - hyprctl keyword decoration:inactive_opacity 1 - hyprctl keyword decoration:rounding 0 - swayosd-client --custom-message "Focus Mode On" --custom-icon "do-not-disturb-symbolic" - fi - ''; -in { - home.packages = [focus-toggle]; -} diff --git a/home/programs/helium/bookmarks/other.nix b/home/programs/helium/bookmarks/other.nix index a43ea98..7e651a5 100644 --- a/home/programs/helium/bookmarks/other.nix +++ b/home/programs/helium/bookmarks/other.nix @@ -11,6 +11,14 @@ name = "Hyprland Wiki"; url = "https://wiki.hypr.land"; } + { + name = "Nerdfont Cheatsheet"; + url = "https://www.nerdfonts.com/cheat-sheet"; + } + { + name = "Helium Bangs"; + url = "https://helium.computer/bangs"; + } { name = "NVF Options"; url = "https://nvf.notashelf.dev/"; diff --git a/home/programs/helium/system.nix b/home/programs/helium/system.nix index 616605f..0760542 100644 --- a/home/programs/helium/system.nix +++ b/home/programs/helium/system.nix @@ -41,7 +41,7 @@ in { DefaultBrowserSettingEnabled = false; DeveloperToolsAvailability = 1; - DnsOverHttpsMode = "secure"; + DnsOverHttpsMode = "automatic"; DnsOverHttpsTemplates = "https://dns.quad9.net/dns-query"; DefaultSearchProviderEnabled = true; diff --git a/home/programs/nightshift/default.nix b/home/programs/nightshift/default.nix deleted file mode 100644 index 07101c3..0000000 --- a/home/programs/nightshift/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{pkgs, ...}: let - nightshift-toggle = - pkgs.writeShellScriptBin "nightshift-toggle" - # bash - '' - if pidof "hyprsunset" > /dev/null; then - pkill hyprsunset - swayosd-client --custom-message "Night Shift Off" --custom-icon "night-light-symbolic" - else - ${pkgs.hyprsunset}/bin/hyprsunset -t 4500 & - swayosd-client --custom-message "Night Shift On" --custom-icon "night-light-symbolic" - fi - ''; -in { - home.packages = with pkgs; [ - hyprsunset - nightshift-toggle - ]; -} diff --git a/home/system/hyprland/bindings.nix b/home/system/hyprland/bindings.nix index 81beb61..067c50d 100644 --- a/home/system/hyprland/bindings.nix +++ b/home/system/hyprland/bindings.nix @@ -133,6 +133,7 @@ in { "$mod,Q, killactive," # Close window "$mod,F, fullscreen" # Toggle Fullscreen "$shiftMod,F, togglefloating," # Toggle Floating + "$shiftMod, SPACE, exec, focus-toggle" # Toggle focus mode # Focus Windows "$mod,H, movefocus, l" # Move focus left diff --git a/home/system/hyprland/default.nix b/home/system/hyprland/default.nix index 4096667..357ccaf 100644 --- a/home/system/hyprland/default.nix +++ b/home/system/hyprland/default.nix @@ -79,7 +79,6 @@ in { cursor = { no_hardware_cursors = true; - default_monitor = "eDP-2"; }; general = { @@ -117,6 +116,10 @@ in { gesture = "3, horizontal, workspace"; + layerrule = [ + "match:namespace launcher, animation popin 70%" + ]; + windowrule = [ "match:class .*, suppress_event maximize" "match:class helium, suppress_event fullscreen" diff --git a/home/system/swaync/default.nix b/home/system/swaync/default.nix index 2c2969a..aa7321e 100644 --- a/home/system/swaync/default.nix +++ b/home/system/swaync/default.nix @@ -19,10 +19,12 @@ in { settings = { positionX = "right"; positionY = "top"; + layer = "overlay"; + "control-center-layer" = "overlay"; cssPriority = "user"; "control-center-width" = 450; - "control-center-margin-top" = 0; - "control-center-margin-bottom" = 0; + "control-center-margin-top" = config.theme.gaps-out * 2; + "control-center-margin-bottom" = config.theme.gaps-out * 2; "control-center-margin-right" = 0; "fit-to-screen" = true; "notification-window-width" = 400; @@ -40,9 +42,17 @@ in { "hide-on-clear" = false; "hide-on-action" = false; "script-fail-notify" = true; - widgets = ["mpris" "dnd" "buttons-grid" "notifications"]; + widgets = ["mpris" "volume" "backlight" "dnd" "buttons-grid" "notifications"]; "widget-config" = { dnd.text = "Do not disturb"; + volume = { + label = "󰕾"; + "show-per-app" = false; + }; + backlight = { + label = "󰃠"; + "min" = 0; + }; mpris = { "image-size" = 100; "image-radius" = 10; @@ -83,7 +93,7 @@ in { }; style = '' - @define-color center-bg #${c.base00}${alphaHex}; + @define-color center-bg #${c.base01}${alphaHex}; @define-color notification-bg #${c.base00}${alphaHex}; @define-color center-notification-bg #${c.base01}; @define-color background #${c.base00}${alphaHex}; @@ -192,7 +202,7 @@ in { .control-center { background: @center-bg; - border-radius: 0 0 0 var(--border-radius); + border-radius: var(--border-radius) 0 0 var(--border-radius); border-left: ${toString border-size}px solid @selected; margin: 0; padding: 5px 5px 0 5px; @@ -287,6 +297,48 @@ in { background: @hover; } + .widget-volume, + .widget-backlight { + border-radius: var(--border-radius); + padding: 10px 15px; + background: @background-alt; + box-shadow: var(--shadow); + color: @text; + } + + .widget-volume > box, + .widget-backlight > box { + color: @text; + } + + .widget-volume label, + .widget-backlight label { + font-size: 1rem; + font-weight: 700; + min-width: 1.2rem; + } + + .widget-volume slider, + .widget-backlight slider { + background: @text; + border-radius: var(--border-radius-s); + min-height: 12px; + min-width: 12px; + } + + .widget-volume trough, + .widget-backlight trough { + background: @hover; + border-radius: var(--border-radius-s); + min-height: 4px; + } + + .widget-volume highlight, + .widget-backlight highlight { + background: @text; + border-radius: var(--border-radius-s); + } + .widget-dnd { padding: 10px 15px; border-radius: var(--border-radius); diff --git a/home/system/swayosd/default.nix b/home/system/swayosd/default.nix deleted file mode 100644 index b4a4b17..0000000 --- a/home/system/swayosd/default.nix +++ /dev/null @@ -1,68 +0,0 @@ -{ - config, - pkgs, - ... -}: let - c = config.lib.stylix.colors; - rounding = config.theme.rounding; - border-size = config.theme.border-size; - gaps-in = config.theme.gaps-in; - opacityToHex = opacity: let - val = builtins.floor (opacity * 255); - high = val / 16; - low = val - high * 16; - digits = "0123456789abcdef"; - in "${builtins.substring high 1 digits}${builtins.substring low 1 digits}"; - alphaHex = opacityToHex config.theme.inactive-opacity; - - style = pkgs.writeText "swayosd-style.css" '' - window#osd { - background: #${c.base00}${alphaHex}; - border-radius: ${toString rounding}px; - border: ${toString border-size}px solid #${c.base03}66; - } - - window#osd #container { - margin: ${toString gaps-in}px; - padding: 4px; - } - - window#osd image, - window#osd label { - color: #${c.base05}; - } - - window#osd progressbar, - window#osd segmentedprogress { - min-height: 6px; - border-radius: 999px; - background: transparent; - border: none; - } - - window#osd trough, - window#osd segment { - min-height: inherit; - border-radius: inherit; - border: none; - background: #${c.base03}66; - } - - window#osd progress, - window#osd segment.active { - min-height: inherit; - border-radius: inherit; - border: none; - background: #${c.base0D}; - } - - window#osd segment { margin-left: 4px; } - window#osd segment:first-child { margin-left: 0; } - ''; -in { - services.swayosd = { - enable = false; - stylePath = style; - topMargin = 0.06; - }; -} diff --git a/home/system/tofi/default.nix b/home/system/tofi/default.nix index 9e239c8..c1684f9 100644 --- a/home/system/tofi/default.nix +++ b/home/system/tofi/default.nix @@ -12,6 +12,7 @@ then barHeight / 2 else config.theme.rounding; in { + imports = [./desktop-actions.nix]; programs.tofi = { enable = true; settings = { @@ -31,6 +32,7 @@ in { font = lib.mkForce font; prompt-color = lib.mkForce "#${c.base0D}ff"; + selection-color = lib.mkForce "#${c.base0D}ff"; outline-width = 0; border-width = 0; diff --git a/home/programs/desktop-actions/default.nix b/home/system/tofi/desktop-actions.nix similarity index 64% rename from home/programs/desktop-actions/default.nix rename to home/system/tofi/desktop-actions.nix index d7aaffb..e12c7f2 100644 --- a/home/programs/desktop-actions/default.nix +++ b/home/system/tofi/desktop-actions.nix @@ -1,14 +1,4 @@ -{pkgs, ...}: let - waybar-toggle = pkgs.writeShellScriptBin "waybar-toggle" '' - if pidof waybar > /dev/null; then - pkill waybar - else - hyprctl dispatch exec waybar - fi - ''; -in { - home.packages = [waybar-toggle]; - +{...}: { xdg.desktopEntries = { focus-toggle = { name = "Focus Mode"; @@ -30,7 +20,7 @@ in { mic-mute = { name = "Mute Microphone"; - exec = "swayosd-client --input-volume mute-toggle"; + exec = "mic-mute"; icon = "microphone-sensitivity-muted-symbolic"; comment = "Toggle microphone mute"; categories = ["System"]; @@ -81,5 +71,42 @@ in { categories = ["System"]; terminal = false; }; + + wifi-toggle = { + name = "Toggle Wi-Fi"; + exec = "wifi-toggle"; + icon = "network-wireless-symbolic"; + comment = "Enable or disable Wi-Fi"; + categories = ["System"]; + terminal = false; + }; + + bluetooth-toggle = { + name = "Toggle Bluetooth"; + exec = "bluetooth-toggle"; + icon = "bluetooth-symbolic"; + comment = "Enable or disable Bluetooth"; + categories = ["System"]; + terminal = false; + }; + + logout = { + name = "Logout"; + exec = "hyprctl dispatch exit"; + icon = "system-log-out-symbolic"; + comment = "End the current session"; + categories = ["System"]; + terminal = false; + }; + + spotatui = { + name = "Spotify"; + exec = "ghostty -e spotatui"; + icon = "spotify"; + comment = "Control Spotify from the terminal"; + categories = ["Audio" "Music"]; + terminal = false; + settings.Keywords = "spotify;spotatui;music;"; + }; }; } diff --git a/home/system/waybar/default.nix b/home/system/waybar/default.nix index 34e3e5d..357e4c8 100644 --- a/home/system/waybar/default.nix +++ b/home/system/waybar/default.nix @@ -1,110 +1,26 @@ {pkgs, ...}: let - networkScript = pkgs.writeShellScript "waybar-network" '' - for iface in $(${pkgs.iproute2}/bin/ip -br link show | awk '$2 == "UP" {print $1}' | grep -vE '^(lo|tun|proton|wg[0-9]|ppp|vpn|docker|br-|veth|virbr)'); do - ip=$(${pkgs.iproute2}/bin/ip addr show "$iface" 2>/dev/null | grep 'inet ' | awk '{print $2}' | cut -d/ -f1 | head -1) - if [ -n "$ip" ]; then - if [[ "$iface" == wl* ]]; then - ssid=$(${pkgs.iw}/bin/iw dev "$iface" link 2>/dev/null | grep SSID | sed 's/.*SSID: //') - signal=$(${pkgs.iw}/bin/iw dev "$iface" link 2>/dev/null | grep signal | awk '{print $2}') - printf '{"text": "󰤨", "class": "wifi", "tooltip": " %s\\n %s dBm"}\n' "$ssid" "$signal" - else - printf '{"text": "󰛳", "class": "ethernet", "tooltip": " %s\\n %s"}\n' "$iface" "$ip" - fi - exit 0 - fi - done - printf '{"text": "󰤭", "class": "disconnected", "tooltip": "Disconnected"}\n' - ''; - - updateOsd = '' - [ -f /tmp/waybar-osd-pid ] && kill "$(cat /tmp/waybar-osd-pid)" 2>/dev/null - printf '%s' "$OSD_TEXT" > /tmp/waybar-osd - pkill -RTMIN+8 waybar 2>/dev/null - ( sleep 2.5; rm -f /tmp/waybar-osd /tmp/waybar-osd-pid; pkill -RTMIN+8 waybar 2>/dev/null ) & - printf '%s' "$!" > /tmp/waybar-osd-pid - ''; - - volGetText = '' - VOL_RAW=$(${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SINK@) - VOL=$(printf '%s' "$VOL_RAW" | awk '{printf "%d", $2*100}') - if printf '%s' "$VOL_RAW" | grep -q MUTED; then - OSD_TEXT="󰝟 $VOL%" - elif [ "$VOL" -lt 33 ]; then - OSD_TEXT="󰕿 $VOL%" - elif [ "$VOL" -lt 66 ]; then - OSD_TEXT="󰖀 $VOL%" - else - OSD_TEXT="󰕾 $VOL%" - fi - ''; - - brightGetText = '' - BRIGHT=$(${pkgs.brightnessctl}/bin/brightnessctl -m | awk -F, '{print int($5)}') - if [ "$BRIGHT" -lt 33 ]; then - OSD_TEXT="󰃞 $BRIGHT%" - elif [ "$BRIGHT" -lt 66 ]; then - OSD_TEXT="󰃟 $BRIGHT%" - else - OSD_TEXT="󰃠 $BRIGHT%" - fi - ''; - - vol-up = pkgs.writeShellScriptBin "vol-up" '' - ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_SINK@ 5%+ --limit 1.0 - ${volGetText} - ${updateOsd} - ''; - - vol-down = pkgs.writeShellScriptBin "vol-down" '' - ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_SINK@ 5%- - ${volGetText} - ${updateOsd} - ''; - - vol-mute = pkgs.writeShellScriptBin "vol-mute" '' - ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SINK@ toggle - ${volGetText} - ${updateOsd} - ''; - - mic-mute = pkgs.writeShellScriptBin "mic-mute" '' - ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SOURCE@ toggle - if ${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SOURCE@ | grep -q MUTED; then - OSD_TEXT="󰍭 Muted" - else - OSD_TEXT="󰍬 Live" - fi - ${updateOsd} - ''; - - bright-up = pkgs.writeShellScriptBin "bright-up" '' - ${pkgs.brightnessctl}/bin/brightnessctl set 5%+ - ${brightGetText} - ${updateOsd} - ''; - - bright-down = pkgs.writeShellScriptBin "bright-down" '' - ${pkgs.brightnessctl}/bin/brightnessctl set 5%- - ${brightGetText} - ${updateOsd} - ''; + scripts = import ./scripts.nix {inherit pkgs;}; in { imports = [ ./settings.nix ./style.nix ]; - _module.args.networkScript = networkScript; + _module.args.networkScript = scripts.networkScript; + _module.args.bluetoothScript = scripts.bluetoothScript; programs.waybar.enable = true; stylix.targets.waybar.enable = false; - home.packages = with pkgs; [ - playerctl - pavucontrol - blueman - iw - ] ++ [vol-up vol-down vol-mute mic-mute bright-up bright-down]; + home.packages = with pkgs; + [ + playerctl + pavucontrol + blueman + iw + hyprsunset + ] + ++ (with scripts; [vol-up vol-down vol-mute mic-mute bright-up bright-down nightshift-toggle focus-toggle waybar-toggle wifi-toggle bluetooth-toggle]); wayland.windowManager.hyprland.settings.exec-once = [ "waybar" diff --git a/home/system/waybar/scripts.nix b/home/system/waybar/scripts.nix new file mode 100644 index 0000000..d239ba9 --- /dev/null +++ b/home/system/waybar/scripts.nix @@ -0,0 +1,164 @@ +{pkgs}: let + updateOsd = '' + [ -f /tmp/waybar-osd-pid ] && kill "$(cat /tmp/waybar-osd-pid)" 2>/dev/null + printf '%s' "$OSD_TEXT" > /tmp/waybar-osd + pkill -RTMIN+8 waybar 2>/dev/null + ( sleep 2.5; rm -f /tmp/waybar-osd /tmp/waybar-osd-pid; pkill -RTMIN+8 waybar 2>/dev/null ) & + printf '%s' "$!" > /tmp/waybar-osd-pid + ''; + + volGetText = '' + VOL_RAW=$(${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SINK@) + VOL=$(printf '%s' "$VOL_RAW" | awk '{printf "%d", $2*100}') + if printf '%s' "$VOL_RAW" | grep -q MUTED; then + OSD_TEXT="󰝟 $VOL%" + elif [ "$VOL" -lt 33 ]; then + OSD_TEXT="󰕿 $VOL%" + elif [ "$VOL" -lt 66 ]; then + OSD_TEXT="󰖀 $VOL%" + else + OSD_TEXT="󰕾 $VOL%" + fi + ''; + + brightGetText = '' + BRIGHT=$(${pkgs.brightnessctl}/bin/brightnessctl -m | awk -F, '{print int($5)}') + if [ "$BRIGHT" -lt 33 ]; then + OSD_TEXT="󰃞 $BRIGHT%" + elif [ "$BRIGHT" -lt 66 ]; then + OSD_TEXT="󰃟 $BRIGHT%" + else + OSD_TEXT="󰃠 $BRIGHT%" + fi + ''; +in { + bluetoothScript = pkgs.writeShellScript "waybar-bluetooth" '' + if bluetoothctl show 2>/dev/null | grep -q "Powered: yes"; then + device=$(bluetoothctl devices Connected 2>/dev/null | head -1 | cut -d' ' -f3-) + if [ -n "$device" ]; then + printf '{"text": "%s", "class": "connected", "tooltip": "Bluetooth\\n %s"}\n' "$device" "$device" + else + printf '{"text": "󰂰", "class": "on", "tooltip": "Bluetooth on"}\n' + fi + else + printf '{"text": "󰂲", "class": "off", "tooltip": "Bluetooth off"}\n' + fi + ''; + + networkScript = pkgs.writeShellScript "waybar-network" '' + for iface in $(${pkgs.iproute2}/bin/ip -br link show | awk '$2 == "UP" {print $1}' | grep -vE '^(lo|tun|proton|wg[0-9]|ppp|vpn|docker|br-|veth|virbr)'); do + ip=$(${pkgs.iproute2}/bin/ip addr show "$iface" 2>/dev/null | grep 'inet ' | awk '{print $2}' | cut -d/ -f1 | head -1) + if [ -n "$ip" ]; then + if [[ "$iface" == wl* ]]; then + ssid=$(${pkgs.iw}/bin/iw dev "$iface" link 2>/dev/null | grep SSID | sed 's/.*SSID: //') + signal=$(${pkgs.iw}/bin/iw dev "$iface" link 2>/dev/null | grep signal | awk '{print $2}') + printf '{"text": "󰤨", "class": "wifi", "tooltip": " %s\\n %s dBm"}\n' "$ssid" "$signal" + else + printf '{"text": "󰛳", "class": "ethernet", "tooltip": " %s\\n %s"}\n' "$iface" "$ip" + fi + exit 0 + fi + done + printf '{"text": "󰤭", "class": "disconnected", "tooltip": "Disconnected"}\n' + ''; + + vol-up = pkgs.writeShellScriptBin "vol-up" '' + ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_SINK@ 5%+ --limit 1.0 + ${volGetText} + ${updateOsd} + ''; + + vol-down = pkgs.writeShellScriptBin "vol-down" '' + ${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_SINK@ 5%- + ${volGetText} + ${updateOsd} + ''; + + vol-mute = pkgs.writeShellScriptBin "vol-mute" '' + ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SINK@ toggle + ${volGetText} + ${updateOsd} + ''; + + mic-mute = pkgs.writeShellScriptBin "mic-mute" '' + ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SOURCE@ toggle + if ${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SOURCE@ | grep -q MUTED; then + OSD_TEXT="󰍭 Muted" + else + OSD_TEXT="󰍬 Live" + fi + ${updateOsd} + ''; + + bright-up = pkgs.writeShellScriptBin "bright-up" '' + ${pkgs.brightnessctl}/bin/brightnessctl set 5%+ + ${brightGetText} + ${updateOsd} + ''; + + bright-down = pkgs.writeShellScriptBin "bright-down" '' + ${pkgs.brightnessctl}/bin/brightnessctl set 5%- + ${brightGetText} + ${updateOsd} + ''; + + wifi-toggle = pkgs.writeShellScriptBin "wifi-toggle" '' + if nmcli radio wifi | grep -q enabled; then + nmcli radio wifi off + else + nmcli radio wifi on + fi + ${updateOsd} + ''; + + bluetooth-toggle = pkgs.writeShellScriptBin "bluetooth-toggle" '' + if bluetoothctl show | grep -q "Powered: yes"; then + bluetoothctl power off + else + bluetoothctl power on + fi + ${updateOsd} + ''; + + waybar-toggle = pkgs.writeShellScriptBin "waybar-toggle" '' + if pidof waybar > /dev/null; then + pkill waybar + else + hyprctl dispatch exec waybar + fi + ''; + + nightshift-toggle = pkgs.writeShellScriptBin "nightshift-toggle" '' + if pidof "hyprsunset" > /dev/null; then + pkill hyprsunset + OSD_TEXT="󰖔 Night Shift Off" + else + ${pkgs.hyprsunset}/bin/hyprsunset -t 4500 & + OSD_TEXT="󰖔 Night Shift On" + fi + ${updateOsd} + ''; + + focus-toggle = pkgs.writeShellScriptBin "focus-toggle" '' + if test -f /tmp/hypr-focus-mode; then + rm /tmp/hypr-focus-mode + OSD_TEXT="󰈈 Focus Off" + ${updateOsd} + hyprctl reload + hyprctl dispatch exec waybar + else + touch /tmp/hypr-focus-mode + OSD_TEXT="󰈈 Focus On" + ${updateOsd} + pkill waybar || true + hyprctl keyword animations:enabled false + hyprctl keyword general:gaps_in 0 + hyprctl keyword general:gaps_out 0 + hyprctl keyword decoration:active_opacity 1 + hyprctl keyword decoration:inactive_opacity 1 + hyprctl keyword decoration:rounding 0 + fi + ''; + + # TODO: Run in background +} diff --git a/home/system/waybar/settings.nix b/home/system/waybar/settings.nix index a21238c..be284c8 100644 --- a/home/system/waybar/settings.nix +++ b/home/system/waybar/settings.nix @@ -1,4 +1,9 @@ -{config, networkScript, ...}: let +{ + config, + networkScript, + bluetoothScript, + ... +}: let gaps-out = config.theme.gaps-out; c = config.lib.stylix.colors; in { @@ -8,48 +13,21 @@ in { position = "top"; height = config.theme.bar-height; margin = "${toString gaps-out} ${toString gaps-out} 0"; - modules-center = ["custom/osd" "clock" "tray" "hyprland/workspaces" "custom/network" "bluetooth" "battery" "group/right-hidden"]; - - "group/right-hidden" = { - orientation = "horizontal"; - drawer = { - transition-duration = 500; - transition-left-to-right = false; - click-to-reveal = true; - }; - modules = ["custom/arrow-right" "power-profiles-daemon" "mpris" "group/group-volume"]; - }; - - "group/group-volume" = { - orientation = "horizontal"; - drawer = { - transition-duration = 600; - transition-left-to-right = true; - reveal-delay = 450; - }; - modules = ["pulseaudio" "pulseaudio/slider"]; - }; + modules-center = ["custom/osd" "custom/osd-sep" "clock" "tray" "hyprland/workspaces" "custom/network" "custom/bluetooth" "battery"]; # ── Modules ───────────────────────────────────────────────────────── "hyprland/workspaces" = { format = "{id}"; + all-outputs = true; + move-to-monitor = true; + ignore-workspaces = ["[5-9]" "[1-9][0-9]+"]; on-scroll-down = "hyprctl dispatch workspace e+1"; on-scroll-up = "hyprctl dispatch workspace e-1"; - persistent-workspaces."*" = 4; + persistent-workspaces."*" = [1 2 3 4]; cursor = true; }; - mpris = { - format = "󰐊"; - format-paused = "󰏤"; - tooltip-format = "{title}"; - tooltip-format-paused = "{title}"; - on-click = "playerctl play-pause"; - on-scroll-up = "playerctl previous"; - on-scroll-down = "playerctl next"; - }; - battery = { bat = "BAT1"; interval = 20; @@ -68,28 +46,13 @@ in { }; }; - "power-profiles-daemon" = { - format = "{icon}"; - tooltip-format = "Power profile: {profile}"; - format-icons = { - performance = ""; - balanced = ""; - power-saver = ""; - }; - }; - - bluetooth = { - format = "{}"; - format-on = "󰂰"; - format-off = "󰂲"; - format-disabled = ""; - format-connected = "{device_alias}"; - format-connected-battery = "{device_alias}"; - tooltip-format = "Bluetooth {status}"; - tooltip-format-connected = "Bluetooth {status}\n{device_enumerate}"; - tooltip-format-enumerate-connected = " {device_alias}"; - tooltip-format-enumerate-connected-battery = " {device_alias} {device_battery_percentage}%"; + "custom/bluetooth" = { + exec = "${bluetoothScript}"; + exec-if = "bluetoothctl show 2>/dev/null | grep -q Controller"; + return-type = "json"; + interval = 5; on-click-right = "blueman-manager &"; + on-click = "bluetooth-toggle"; }; "custom/osd" = { @@ -100,6 +63,15 @@ in { format = "{}"; }; + "custom/osd-sep" = { + exec = "echo '|'"; + exec-if = "test -f /tmp/waybar-osd"; + signal = 8; + interval = "once"; + format = "{}"; + tooltip = false; + }; + pulseaudio = { format = "{icon}"; format-bluetooth = "{icon}"; diff --git a/home/system/waybar/style.nix b/home/system/waybar/style.nix index 7d2e3c8..1096648 100644 --- a/home/system/waybar/style.nix +++ b/home/system/waybar/style.nix @@ -8,11 +8,11 @@ green = "#${c.base0B}"; blue = "#${c.base0D}"; cyan = "#${c.base0C}"; - mauve = "#${c.base0E}"; inactive = "#${c.base03}"; highlight = "#${c.base02}"; font-size = "${toString config.stylix.fonts.sizes.applications}px"; font-size-clock = "${toString (config.stylix.fonts.sizes.applications + 2)}px"; + module-padding = "14px"; in { programs.waybar.style = '' * { @@ -40,36 +40,30 @@ in { } #clock, - #tray, - #custom-network, - #bluetooth, #battery, - #mpris { - padding: 1px 14px; + #tray, + #workspaces, + #custom-osd, + #custom-network, + #custom-bluetooth { + padding: 1px ${module-padding}; + } + + #custom-osd-sep { + padding: 0; + color: ${inactive}; } #clock { font-size: ${font-size-clock}; } - #workspaces { - padding: 1px 8px; - } - - #pulseaudio { - padding: 1px 8px 1px 6px; - } - - #pulseaudio-slider { - padding: 0 8px 0 2px; - } - #workspaces button { color: ${fg}; font-size: ${font-size}; border-radius: 100px; - padding: 0 5px; - margin: 0 1px; + padding: 0 3px; + margin: 0; } #workspaces button.empty { @@ -85,28 +79,8 @@ in { color: ${module-bg}; background: ${blue}; border-radius: 60px; - padding: 0 12px; - margin: 0 1px; - } - - #right-hidden { - padding: 0 6px; - } - - #custom-arrow-right { - padding: 0 5px; - font-size: ${toString (config.stylix.fonts.sizes.applications + 2)}px; - } - - #power-profiles-daemon { - margin-right: 4px; - } - - #network.disabled, - #bluetooth.disabled { - padding: 0; + padding: 0 8px; margin: 0; - min-width: 0; } #battery { @@ -118,20 +92,8 @@ in { color: ${green}; } - #network.ethernet, - #network.wifi { - color: ${cyan}; - } - - #bluetooth.on, - #bluetooth.connected, - #bluetooth { - color: ${blue}; - } - #battery.critical, - #network.disconnected, - #power-profiles-daemon.performance { + #custom-network.disconnected { color: ${red}; } @@ -139,18 +101,24 @@ in { color: ${yellow}; } - #power-profiles-daemon.power-saver { - color: ${green}; + #custom-network.ethernet, + #custom-network.wifi { + color: ${cyan}; } - #mpris { - color: ${mauve}; + #custom-bluetooth { + color: ${blue}; } - #mpris.paused { + #custom-bluetooth.off { color: ${inactive}; } + #custom-osd { + font-weight: 700; + color: ${fg}; + } + tooltip { border-radius: 15px; background: ${tooltip-bg}; @@ -183,29 +151,5 @@ in { border-radius: 10px; background-color: ${highlight}; } - - slider { - opacity: 0; - box-shadow: none; - } - - trough { - min-width: 50px; - min-height: 5px; - border-radius: 8px; - background: ${inactive}; - } - - trough highlight { - border-radius: 8px; - background-color: ${fg}; - background-image: none; - } - - #custom-osd { - padding: 1px 14px; - font-weight: 700; - color: ${fg}; - } ''; } diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix index 64e319a..474e320 100644 --- a/hosts/laptop/home.nix +++ b/hosts/laptop/home.nix @@ -12,12 +12,10 @@ ../../home/programs/git/signing.nix # CHANGEME: Change the key or remove this file ../../home/programs/thunar ../../home/programs/nixy - ../../home/programs/nightshift ../../home/programs/nix-utils ../../home/programs/spotatui ../../home/programs/yazi ../../home/programs/desktop-actions # TODO: - ../../home/programs/focus-mode # TODO: Rename ../../home/programs/group/basic-apps.nix ../../home/programs/group/cybersecurity.nix diff --git a/hosts/work/flake.nix b/hosts/work/flake.nix index 963a5c2..aebd883 100644 --- a/hosts/work/flake.nix +++ b/hosts/work/flake.nix @@ -6,7 +6,9 @@ nixpkgs.lib.nixosSystem { modules = [ { - nixpkgs.overlays = []; + nixpkgs.overlays = [ + inputs.nur.overlays.default + ]; _module.args = {inherit inputs;}; } inputs.home-manager.nixosModules.home-manager diff --git a/hosts/work/home.nix b/hosts/work/home.nix index 5a86498..875904e 100644 --- a/hosts/work/home.nix +++ b/hosts/work/home.nix @@ -10,7 +10,6 @@ ../../home/programs/git/lazygit.nix ../../home/programs/thunar ../../home/programs/nixy - ../../home/programs/nightshift ../../home/programs/nix-utils ../../home/programs/spotatui ../../home/programs/yazi @@ -24,14 +23,11 @@ ../../home/system/hyprlock ../../home/system/hyprland ../../home/system/waybar - ../../home/system/hyprpaper + ../../home/system/swaync + ../../home/system/tofi ../../home/system/mime ../../home/system/udiskie - # Apps - ../../home/swaync - ../../home/rofi - ./variables.nix # Mostly user-specific configuration ./secrets # CHANGEME: You should probably remove this line, this is where I store my secrets ]; diff --git a/hosts/work/secrets/secrets.yaml b/hosts/work/secrets/secrets.yaml index ae328cb..cd0381d 100644 --- a/hosts/work/secrets/secrets.yaml +++ b/hosts/work/secrets/secrets.yaml @@ -1,11 +1,10 @@ ssh-config: ENC[AES256_GCM,data:npBcAOSwHpApUASlZmRo4stwMrOjdrdmhfYwumjbTpcq8aQ2ybV8le7cjNdVqIyxgwxUFV4/tGfmsq4nlrWIO/85spwfC5DyPGaZ848NI3UZJj8k2GKuw5qk/xGsTveNhq+vNZQcHeL4aeXF2TRmFLDHYGTku9anFL7FWkQ75MmGW78XfPUEyZJ52ylXq3gkYeVSrl6cXuwJw/QBlu+XTgFk4MM+E5BTXBFFNJOYkIt4GwWX7wdI+QqPEof8J0ENYdxUAMKMueL4pLNclWP0fu7QC7gwwRJWjauCNElJiDhpVFa6WukJV/Ut+I30FH9cJtj0rSodeu0hq2fWaiQ0wVbQudxi0JcnxJQs+B9nb6kpF+TN0MiD,iv:c7DMZSmlgMMnNlR0/kNRKPYjCzvNQJ46mZzojHppSg8=,tag:ausjsFk0H9nOiiMebHXSUg==,type:str] netrc: ENC[AES256_GCM,data:EOpuZhDVXe7Q4P/98C3gtEvkdawI26d4oX/wRNytyp/mAdkHytXiLpFdsuO/3DADOG8h1CCo1UTs9ex+bqoD/LdChdp7INfNDSQ+aDxTiG0rLBgjvy8TIj8=,iv:tc/RbN1Upbjv+3rU5zUR3P//a1Hj1xODInLMShg4i1Y=,tag:7E9G2g4g+eMeJrwI20R/1g==,type:str] github-key: ENC[AES256_GCM,data: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,iv:2Mvmz1CFO1112RxjIl6sxyNIDqa/cg00um6RcQaHNY8=,tag:+zygdwQdCBeBXVLvAj/jJQ==,type:str] -gitlab-key: ENC[AES256_GCM,data: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,iv:aG4nqGJ/TRiAtiWoPwqej6We+IWEWFibCqL7bGwXbkA=,tag:c5ckW2o4+2rm/5mrGF1tzg==,type:str] +gitlab-key: ENC[AES256_GCM,data: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,iv:pbe2MtYmFmY/kS+gM9xyI6cXViVmzPB3H7XL1ZH47h0=,tag:NmSKMlAIEOWE8Jw/iy3+Xw==,type:str] sops: age: - - recipient: age1c8pawdsxptfslgrz2c56s39mrtnjzc5mm3hfzgr2wdwu2v6vfsdsupjsq6 - enc: | + - enc: | -----BEGIN AGE ENCRYPTED FILE----- YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVby9Wa1NUUkpyeDMwU3dM R0EyeFVtT0tJU0pKaWtXQzRkTDBPY3JjcTFrClNIQnl2WVorS0FZZjhicTQ5V2kx @@ -13,7 +12,8 @@ sops: RkMrdTYwNkY1Tlc3M3dxTFdkRXJJZUEKUlYU45jXpS9hJO9Z/uAQ6XMj9QWgMMRI LbJxvt48+yC+Y0XKOtDE0lHAuGNzUG8R/7FB1tTD8NCamBe46KGCIg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-04-23T07:50:07Z" - mac: ENC[AES256_GCM,data:V3us1oxkQxIg5hn8TMiSHWa0RhNbio2mP8j59lSCKDLjnpTUHUAUZZOan+fkBwPxxtIdZFVZQl/kZuEHcnNwXk8J0DLeT8jrs8pvlDCHMAc+C9uzThNjQ9CrZ2C/dNtoI6uop3a6qo8UMhKhvAus08yR8rLsY7Gqt/In28HKqxU=,iv:g8wmq1thPfkSSfG+mtJS0431wbon/uylDTfH0P31dlw=,tag:5Z6CJMWeGN6frTLJQMxGGw==,type:str] + recipient: age1c8pawdsxptfslgrz2c56s39mrtnjzc5mm3hfzgr2wdwu2v6vfsdsupjsq6 + lastmodified: "2026-07-01T12:18:22Z" + mac: ENC[AES256_GCM,data:rX8MoqaMAbfuMdcQMw8eDGXos3VgbA3VfNJJcGGk2xQPuTC7FW5S0BVuh68ajzVv0oaYtT8pBRktv9Lo2VDY6Mm4neVuF/9IgV0cTKwvx5ACjN40Zt7OU+QtlQK44kDXsJQFyV+BYHVNiW8jej1h9d7vSAgG0hD3GOpvtK6ZY6E=,iv:3B3COjvazDVRkUsuIiLlOCFqlE9ooFR8dC5PTXe/q28=,tag:QEqcRTks4zSX02qc9KDsrA==,type:str] unencrypted_suffix: _unencrypted - version: 3.12.2 + version: 3.13.1 diff --git a/todo b/todo index 6dfd28c..057aaa9 100644 --- a/todo +++ b/todo @@ -8,4 +8,5 @@ - [ ] Ghostty service/deamon ? - [ ] Tofi service/deamon ? - [ ] Clean files +- [ ] NVF dans Nur - [ ] Check claude: Sécu, mots en français, faute, ...