From 12698af186ad6f693b1e3920dc69dcc56880a3d0 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 10:39:18 +0100 Subject: [PATCH 1/9] Add `math-preview` Emacs package --- packages/emacs/packages.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/emacs/packages.nix b/packages/emacs/packages.nix index fde9e30..33122dd 100644 --- a/packages/emacs/packages.nix +++ b/packages/emacs/packages.nix @@ -164,6 +164,7 @@ let terraform-mode diredfl org-modern + math-preview org-roam org-roam-ql org-roam-ui From ba9775666bd6c18b07e46f4a72611acefe9ff534 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 10:39:29 +0100 Subject: [PATCH 2/9] Re-enable Sway Notification Center --- hmModules/hyprland/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/hyprland/default.nix b/hmModules/hyprland/default.nix index 45852ee..2596638 100644 --- a/hmModules/hyprland/default.nix +++ b/hmModules/hyprland/default.nix @@ -27,7 +27,7 @@ in ../waybar ../swayidle ../gammastep - # ../swaync + ../swaync ../foot ]; From 8c18115208ab1f8afb834c13cffbfdb0271f254e Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 10:40:37 +0100 Subject: [PATCH 3/9] Add `math-preview` executable used by the `math-preview` Emacs package --- hmModules/emacs/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hmModules/emacs/default.nix b/hmModules/emacs/default.nix index ffeeb43..39717d3 100644 --- a/hmModules/emacs/default.nix +++ b/hmModules/emacs/default.nix @@ -47,6 +47,7 @@ in qadwaitadecorations kdePackages.qtwayland copilot-node-server + math-preview ] ++ (with hunspellDicts; [ en_US-large From 1411269c58f42280bd5b857601b43de029169b97 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 10:41:05 +0100 Subject: [PATCH 4/9] Move out the waybar config --- hmModules/waybar/config.json | 95 ++++++++++++++++++++++ hmModules/waybar/default.nix | 147 +++-------------------------------- 2 files changed, 106 insertions(+), 136 deletions(-) create mode 100644 hmModules/waybar/config.json diff --git a/hmModules/waybar/config.json b/hmModules/waybar/config.json new file mode 100644 index 0000000..05953f2 --- /dev/null +++ b/hmModules/waybar/config.json @@ -0,0 +1,95 @@ +[ + { + "backlight": { + "device": "ddcci2", + "format": "{percent}% {icon}", + "format-icons": [" ", " "] + }, + "battery": { + "format": "{capacity}% {icon}", + "format-alt": "{time} {icon}", + "format-charging": "{capacity}% ", + "format-icons": [" ", " ", " ", " ", " "], + "format-plugged": "{capacity}%  ", + "states": { + "critical": 15, + "warning": 30 + } + }, + "clock": { + "format-alt": "{:%Y-%m-%d}", + "tooltip-format": "{:%Y-%m-%d | %H:%M}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "height": 30, + "hyprland/workspaces": { + "all-outputs": true, + "disable-scroll-wraparound": true, + "on-click": "activate" + }, + "ipc": true, + "layer": "top", + "memory": { + "format": "{}% " + }, + "modules-center": ["hyprland/window", "niri/window"], + "modules-left": ["wlr/mode", "hyprland/workspaces", "niri/workspaces"], + "modules-right": [ + "network", + "tray", + "pulseaudio", + "cpu", + "memory", + "temperature", + "backlight", + "battery", + "clock" + ], + "network": { + "format-alt": "{ifname}: {ipaddr}/{cidr}", + "format-disconnected": "Disconnected ⚠", + "format-ethernet": "{ifname}: {ipaddr}/{cidr} 󰈀 up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}", + "format-linked": "{ifname} (No IP) ", + "format-wifi": "{essid} ({signalStrength}%)  {ipaddr}/{cidr} up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}", + "interval": 1 + }, + "position": "top", + "pulseaudio": { + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-icons": { + "car": "", + "default": [" ", " ", " "], + "handsfree": "", + "headphones": " ", + "headset": "", + "phone": "", + "portable": "" + }, + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "on-click": "/nix/store/rya5a9r0ryh9x8yf03m3s420r4ay6ysg-pavucontrol-6.1/bin/pavucontrol" + }, + "temperature": { + "critical-threshold": 80, + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""], + "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input" + }, + "tray": { + "spacing": 10 + }, + "wlr/mode": { + "format": "{}", + "tooltip": false + }, + "wlr/window": { + "max_length": 50 + } + } +] diff --git a/hmModules/waybar/default.nix b/hmModules/waybar/default.nix index 5bd7bb9..f8e5c85 100644 --- a/hmModules/waybar/default.nix +++ b/hmModules/waybar/default.nix @@ -7,144 +7,19 @@ programs.waybar = { enable = true; systemd.enable = true; - style = builtins.readFile ./style.css; - settings = { - mainBar = { - ipc = true; - layer = "top"; - position = "top"; - height = 30; - - modules-left = [ - "wlr/mode" - "hyprland/workspaces" - "niri/workspaces" - ]; - modules-center = [ - "hyprland/window" - "niri/window" - ]; - modules-right = [ - "network" - "tray" - "pulseaudio" - "cpu" - "memory" - "temperature" - "backlight" - "battery" - "clock" - ]; - - "hyprland/workspaces" = { - all-outputs = true; - disable-scroll-wraparound = true; - # format = "{icon}"; - on-click = "activate"; - # format-icons = { - # "1" = ""; - # "2" = ""; - # "3" = ""; - # "9" = "ﬧ"; - # urgent = ""; - # }; - # sort-by-number = true; - }; - - "wlr/mode" = { - tooltip = false; - }; - - "wlr/window" = { - max_length = 50; - }; - tray = { - spacing = 10; - }; - battery = { - format = "{capacity}% {icon}"; - format-alt = "{time} {icon}"; - format-charging = "{capacity}% "; - format-icons = [ - " " - " " - " " - " " - " " - ]; - format-plugged = "{capacity}%  "; - states = { - critical = 15; - warning = 30; - }; - }; - clock = { - format-alt = "{:%Y-%m-%d}"; - tooltip-format = "{:%Y-%m-%d | %H:%M}"; - }; - cpu = { - format = "{usage}% "; - tooltip = false; - }; - memory = { - format = "{}% "; - }; - network = { - interval = 1; - format-alt = "{ifname}: {ipaddr}/{cidr}"; - format-disconnected = "Disconnected ⚠"; - format-ethernet = "{ifname}: {ipaddr}/{cidr} 󰈀 up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}"; - format-linked = "{ifname} (No IP) "; - format-wifi = "{essid} ({signalStrength}%)  {ipaddr}/{cidr} up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}"; - }; - pulseaudio = { - format = "{volume}% {icon} {format_source}"; - format-bluetooth = "{volume}% {icon} {format_source}"; - format-bluetooth-muted = " {icon} {format_source}"; - format-icons = { - car = ""; - default = [ - " " - " " - " " - ]; - handsfree = ""; - headphones = " "; - headset = ""; - phone = ""; - portable = ""; - }; - format-muted = " {format_source}"; - format-source = "{volume}% "; - format-source-muted = ""; - on-click = "${pkgs.pavucontrol}/bin/pavucontrol"; - }; - "wlr/mode" = { - format = ''{}''; - }; - temperature = { - critical-threshold = 80; - format = "{temperatureC}°C {icon}"; - format-icons = [ - "" - "" - "" - ]; - hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; # picard FIXME - # hwmon-path = "/sys/class/thermal/thermal_zone4/temp"; # thinkpad - }; - backlight = { - device = "ddcci2"; - format = "{percent}% {icon}"; - format-icons = [ - " " - " " - ]; - }; - }; - }; }; + catppuccin.waybar.enable = lib.mkForce false; + + home.activation.linkWaybarConfig = lib.hm.dag.entryAnywhere '' + if [ ! -d "$HOME/.config/waybar" ]; then + $DRY_RUN_CMD mkdir -p "$HOME/.config/waybar" + $DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/waybar/config.json" "$HOME/.config/waybar/config" + $DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/waybar/style.css" "$HOME/.config/waybar/style.css" + fi + ''; + # waybar needs the hyprctl binary in PATH when started in hyprland + # TODO still needed? systemd.user.services.waybar.Service.Environment = "PATH=${lib.makeBinPath [ pkgs.hyprland ]}"; } From 0c4a52f6ec7d59611d3aab906b018c32c1202465 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 20:42:46 +0100 Subject: [PATCH 5/9] Emacs default frame title --- hmModules/emacs/init.el | 1 + 1 file changed, 1 insertion(+) diff --git a/hmModules/emacs/init.el b/hmModules/emacs/init.el index 25a8175..8778ca8 100644 --- a/hmModules/emacs/init.el +++ b/hmModules/emacs/init.el @@ -56,6 +56,7 @@ (mouse-autoselect-window t) (treesit-font-lock-level 4) (custom-file "~/.config/emacs/custom.el") + (frame-title-format "%b - Emacs") :config (set-face-background 'vertical-border (face-background 'default)) (set-display-table-slot standard-display-table 'vertical-border (make-glyph-code ?┃)) From 12f1800aed259273828d35f64c588cb77de06f7d Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 20:42:58 +0100 Subject: [PATCH 6/9] Emacs experiments --- hmModules/emacs/init.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/emacs/init.el b/hmModules/emacs/init.el index 8778ca8..047e4d3 100644 --- a/hmModules/emacs/init.el +++ b/hmModules/emacs/init.el @@ -1021,7 +1021,7 @@ This is meant to be an helper to be called from the window manager." "test" (interactive) (with-selected-frame - (make-frame '((name . "floating") + (make-frame '((name . "Emacs Selector") (minibuffer . only) (fullscreen . 0) ; no fullscreen (undecorated . t) ; remove title bar From 66fd1c306675d47be812e7203b93825fa0cf09e1 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 20:43:25 +0100 Subject: [PATCH 7/9] Format --- hmModules/niri/config.kdl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/hmModules/niri/config.kdl b/hmModules/niri/config.kdl index 65a4ae5..7634d04 100644 --- a/hmModules/niri/config.kdl +++ b/hmModules/niri/config.kdl @@ -280,24 +280,24 @@ window-rule { } window-rule { - geometry-corner-radius 4 - clip-to-geometry true + geometry-corner-radius 4 + clip-to-geometry true } window-rule { - match app-id=r#"^spotify$"# - open-maximized true - open-on-workspace "spotify" + match app-id=r#"^spotify$"# + open-maximized true + open-on-workspace "spotify" } window-rule { - match app-id=r#"^Slack$"# - open-maximized true + match app-id=r#"^Slack$"# + open-maximized true } window-rule { - match app-id=r#"^Element"# - open-maximized true + match app-id=r#"^Element"# + open-maximized true } From 37de97df461ad610c79bd71870c0f4747e843692 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 20:50:46 +0100 Subject: [PATCH 8/9] Use `rofi-power-menu` --- hmModules/niri/config.kdl | 4 ++++ hmModules/waybar/default.nix | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/hmModules/niri/config.kdl b/hmModules/niri/config.kdl index 7634d04..7d25a06 100644 --- a/hmModules/niri/config.kdl +++ b/hmModules/niri/config.kdl @@ -300,6 +300,9 @@ window-rule { open-maximized true } +window-rule { + match app-id=r#"^Emacs Selector$"# +} @@ -332,6 +335,7 @@ binds { Mod+G { spawn "emacsclient" "-c" "--eval" "(switch-to-buffer (gptel \"*ChatGPT*\"))"; } Mod+Shift+C { spawn "emacsclient" "-c" "--eval" "(org-roam-dailies-capture-today)"; } Super+Alt+L { spawn "swaylock"; } + Mod+Space { spawn "rofi" "-show" "menu" "-modi" "menu:rofi-power-menu"; } // Example volume keys mappings for PipeWire & WirePlumber. diff --git a/hmModules/waybar/default.nix b/hmModules/waybar/default.nix index f8e5c85..0e544d9 100644 --- a/hmModules/waybar/default.nix +++ b/hmModules/waybar/default.nix @@ -19,6 +19,10 @@ fi ''; + home.packages = with pkgs; [ + rofi-power-menu + ]; + # waybar needs the hyprctl binary in PATH when started in hyprland # TODO still needed? systemd.user.services.waybar.Service.Environment = "PATH=${lib.makeBinPath [ pkgs.hyprland ]}"; From e0d514438951884fb6b1beec26a23943854c9a51 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Fri, 10 Jan 2025 20:51:00 +0100 Subject: [PATCH 9/9] Re-style waybar --- hmModules/waybar/config.json | 169 ++++++++++++++++------------------- hmModules/waybar/style.css | 95 ++++++++++++-------- 2 files changed, 132 insertions(+), 132 deletions(-) diff --git a/hmModules/waybar/config.json b/hmModules/waybar/config.json index 05953f2..8d220da 100644 --- a/hmModules/waybar/config.json +++ b/hmModules/waybar/config.json @@ -1,95 +1,78 @@ -[ - { - "backlight": { - "device": "ddcci2", - "format": "{percent}% {icon}", - "format-icons": [" ", " "] - }, - "battery": { - "format": "{capacity}% {icon}", - "format-alt": "{time} {icon}", - "format-charging": "{capacity}% ", - "format-icons": [" ", " ", " ", " ", " "], - "format-plugged": "{capacity}%  ", - "states": { - "critical": 15, - "warning": 30 - } - }, - "clock": { - "format-alt": "{:%Y-%m-%d}", - "tooltip-format": "{:%Y-%m-%d | %H:%M}" - }, - "cpu": { - "format": "{usage}% ", - "tooltip": false - }, - "height": 30, - "hyprland/workspaces": { - "all-outputs": true, - "disable-scroll-wraparound": true, - "on-click": "activate" - }, - "ipc": true, - "layer": "top", - "memory": { - "format": "{}% " - }, - "modules-center": ["hyprland/window", "niri/window"], - "modules-left": ["wlr/mode", "hyprland/workspaces", "niri/workspaces"], - "modules-right": [ - "network", - "tray", - "pulseaudio", - "cpu", - "memory", - "temperature", - "backlight", - "battery", - "clock" - ], - "network": { - "format-alt": "{ifname}: {ipaddr}/{cidr}", - "format-disconnected": "Disconnected ⚠", - "format-ethernet": "{ifname}: {ipaddr}/{cidr} 󰈀 up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}", - "format-linked": "{ifname} (No IP) ", - "format-wifi": "{essid} ({signalStrength}%)  {ipaddr}/{cidr} up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}", - "interval": 1 - }, - "position": "top", - "pulseaudio": { - "format": "{volume}% {icon} {format_source}", - "format-bluetooth": "{volume}% {icon} {format_source}", - "format-bluetooth-muted": " {icon} {format_source}", - "format-icons": { - "car": "", - "default": [" ", " ", " "], - "handsfree": "", - "headphones": " ", - "headset": "", - "phone": "", - "portable": "" - }, - "format-muted": " {format_source}", - "format-source": "{volume}% ", - "format-source-muted": "", - "on-click": "/nix/store/rya5a9r0ryh9x8yf03m3s420r4ay6ysg-pavucontrol-6.1/bin/pavucontrol" - }, - "temperature": { - "critical-threshold": 80, - "format": "{temperatureC}°C {icon}", - "format-icons": ["", "", ""], - "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input" - }, - "tray": { - "spacing": 10 - }, - "wlr/mode": { - "format": "{}", - "tooltip": false - }, - "wlr/window": { - "max_length": 50 +{ + "layer": "top", + "position": "left", + "width": 36, + "margin": "12 0 12 0", + "spacing": 2, + "modules-left": ["clock", "custom/sep", "niri/window"], + "modules-center": ["niri/workspaces"], + "modules-right": [ + "tray", + "custom/sep", + "temperature", + "custom/sep", + "pulseaudio", + "custom/powermenu" + ], + "custom/sep": { + "format": "──" + // "format": "" + }, + "custom/powermenu": { + "on-click": "rofi -show menu -modi menu:rofi-power-menu", + "format": "", + "tooltip": false + }, + "niri/workspaces": { + "format": "{icon}", + "on-click": "activate", + "format-icons": { + "active": "", + "urgent": "", + "default": "" } + }, + "niri/window": { + "rotate": 90, + "rewrite": { + "(.*) — Mozilla Firefox": " $1", + "(.*) - Emacs": " $1", + "(.*) - Slack": " $1" + } + }, + "clock": { + "tooltip": true, + "format": "{:%H\n%M}", + "tooltip-format": "{:%Y-%m-%d}" + }, + "tray": { + "icon-size": 20, + "spacing": 5, + "show-passive-items": "false" + }, + "temperature": { + "rotate": 90, + "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + "format": "{icon} {temperatureC}°C", + "format-icons": ["", "", ""] + }, + "pulseaudio": { + "rotate": 90, + "format": "{icon} {volume}%", + "format-bluetooth": "{icon} {volume}%", + "format-muted": "MUTE ", + "format-icons": { + "headphones": "", + "handsfree": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", ""] + }, + "scroll-step": 3, + "on-click": "pavucontrol", + "on-click-right": "pactl set-source-mute @DEFAULT_SOURCE@ toggle" } -] +} diff --git a/hmModules/waybar/style.css b/hmModules/waybar/style.css index 1358583..dc40a39 100644 --- a/hmModules/waybar/style.css +++ b/hmModules/waybar/style.css @@ -1,54 +1,71 @@ * { border: none; - border-radius: 0; - min-height: 0; - font-family: Fira Code; + font-family: "Iosevka Comfy", "FontAwesome", "Nerd Font"; + font-size: 1.35rem; + font-weight: 600; + background: none; } window#waybar { - background: rgba(255, 255, 255, 0.05); - color: white; - font-size: 1.2rem; + color: #a5adcb; + background-color: #181926; + + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} +.modules-left, +.modules-right, +.modules-center { + padding: 12px 4px; } -#workspaces button { - padding: 0 10px; - background: transparent; - color: white; - font-size: 2rem; +tooltip { + color: #a5adcb; + background-color: #181926; + text-shadow: none; } -#workspaces button.active { - box-shadow: inset 0 -5px red; +tooltip * { + color: #a5adcb; + text-shadow: none; } -#workspaces button.focused, +#custom-sep { + color: #494d64; +} #workspaces button:hover { - box-shadow: inset 0 -5px white; + box-shadow: inherit; + text-shadow: inherit; +} +#workspaces button { + color: #5b6078; + background: none; + padding: 0; +} +#workspaces button:hover { + color: #a6da95; +} +#workspaces button.active { + color: #f5bde6; +} +#temperature { + color: #eed49f; +} +#clock { + font-weight: 600; + color: #8bd5ca; +} +#custom-bluetooth_devices { + color: #8aadf4; +} +#pulseaudio { + color: #a6da95; +} +#pulseaudio.muted { + color: #ed8796; } -#workspaces button.urgent { - /* background: @theme_fg_color; */ - /* color: @theme_selected_bg_color; */ -} - -#mode { - margin: 0 4px; - padding: 0 4px; - /* background: @theme_fg_color; */ - /* color: @unfocused_borders; */ -} - -#pulseaudio, -#network, -#cpu, -#memory, -#disk, -#temperature, -#battery, -#language, -#clock, -#tray { - margin: 0 4px; - padding: 0 2px; +#custom-powermenu { + margin: 12px 0 0 0; + color: #6e738d; }