From 3c45a0af5e933a7b432a4a1022bcb5bca9bfa4f2 Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 25 Oct 2026 13:43:10 -0500 Subject: full restructure based on machine --- desktop/init.lua | 105 +++++++++++++ desktop/swayconfig | 255 +++++++++++++++++++++++++++++++ desktop/waybar-wal-template.css | 329 ++++++++++++++++++++++++++++++++++++++++ desktop/waybar_config | 220 +++++++++++++++++++++++++++ 4 files changed, 909 insertions(+) create mode 100644 desktop/init.lua create mode 100644 desktop/swayconfig create mode 100644 desktop/waybar-wal-template.css create mode 100644 desktop/waybar_config (limited to 'desktop') diff --git a/desktop/init.lua b/desktop/init.lua new file mode 100644 index 0000000..d690307 --- /dev/null +++ b/desktop/init.lua @@ -0,0 +1,105 @@ +-- plugins -- +vim.pack.add({ + 'https://github.com/AlphaTechnolog/pywal.nvim', + 'https://github.com/stevearc/oil.nvim', + 'https://github.com/nvim-mini/mini.move', + 'https://github.com/nvim-mini/mini.icons', + 'https://github.com/nvim-mini/mini.surround', + 'https://github.com/ibhagwan/fzf-lua', + 'https://github.com/nvim-treesitter/nvim-treesitter', + { src = 'https://github.com/Saghen/blink.cmp', version = 'v1.10.2' }, +}) + +require("pywal").setup() +require("oil").setup() +require("mini.move").setup() +require("mini.icons").setup() +--[[ require("mini.surround").setup({ + -- Module mappings. Use `''` (empty string) to disable one. + mappings = { + add = '', -- Add surrounding in Normal and Visual modes + delete = '', -- Delete surrounding + find = '', -- Find surrounding (to the right) + find_left = '', -- Find surrounding (to the left) + highlight = '', -- Highlight surrounding + replace = '', -- Replace surrounding + + suffix_last = 'l', -- Suffix to search with "prev" method + suffix_next = 'n', -- Suffix to search with "next" method + }, +}) +--]] +require("fzf-lua").setup() +require("blink.cmp").setup() +require("nvim-treesitter").setup() + +vim.loader.enable() -- speed up launch! + + +-- treesitter - dynamically determine language +vim.api.nvim_create_autocmd("FileType", { + group = vim.api.nvim_create_augroup("tree-sitter-enable", { clear = true }), + callback = function(args) + local lang = vim.treesitter.language.get_lang(args.match) + if not lang then + return + end + if vim.treesitter.query.get(lang, "highlights") then + vim.treesitter.start(args.buf) + end + if vim.treesitter.query.get(lang, "indents") then + vim.opt_local.indentexpr = 'v:lua.require("nvim-treesitter").indentexpr()' + end + + -- from treesitter docs for folding + vim.opt.foldexpr = 'v:lua.vim.treesitter.foldexpr()' + vim.opt.foldmethod = 'expr' + end, +}) + +-- blink completion stuff + + + +-- normal mode +vim.api.nvim_set_keymap('i','jk','',{noremap=true,silent=true}) +vim.api.nvim_set_keymap('i','kj','',{noremap=true,silent=true}) + +-- ui +vim.opt.foldlevelstart = 99 +vim.o.scrolloff = 10 +vim.o.number = true +vim.o.relativenumber = true +vim.o.showmode = false +vim.o.signcolumn = "yes" +vim.o.pumheight = 15 +vim.o.shortmess = "CFOSWaco" + +-- completion +vim.o.autocomplete = true +vim.o.completeopt = "menuone,noinsert,popup,fuzzy,nearest" +vim.o.pumheight = 15 +vim.o.pummaxwidth = 40 + +-- indents +vim.o.tabstop = 2 +vim.o.shiftwidth = 2 + +-- search +vim.o.imsearch = 0 +vim.o.hlsearch = true +vim.o.incsearch = true +vim.o.ignorecase = true +vim.o.smartcase = true + +local map = vim.keymap.set + +-- KEYMAPS - for plugins +map("n", "-", "Oil", { desc = "Open parent directory" }) + + +-- KEYMAPS - movement +map("n", "", "zz") +map("n", "", "zz") +map("n", "", "zz") +map("n", "", "zz") diff --git a/desktop/swayconfig b/desktop/swayconfig new file mode 100644 index 0000000..525848b --- /dev/null +++ b/desktop/swayconfig @@ -0,0 +1,255 @@ +# me sway config file :) + +# setup colors + pape from wal +include "/home/slime/.cache/wal/colors-sway" + +# setup display +output HDMI-A-1 mode 1920x1080@180hz + +# set wallpaper +output HDMI-A-1 bg $wallpaper stretch + +# start statusbar +exec --no-startup-id waybar -c /home/slime/.config/waybar/config -s /home/slime/.config/waybar/style.css + +# run screenshare fix scrip +exec XDG_CURRENT_DESKTOP=sway +exec --no-startup-id /home/slime/Scripts/sway_screenshare_fix + +# run systray programs +# exec --no-startup-id nm-applet + + +# set supa key +set $mod Mod4 + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:Source Code Pro 16 + +# Use pactl to adjust volume in PulseAudio. +#set $refresh_i3status killall -SIGUSR1 i3status +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% && pkill -SIGRTMIN+10 i3blocks +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% && pkill -SIGRTMIN+10 i3blocks +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && pkill -SIGRTMIN+10 i3blocks +bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && pkill -SIGRTMIN+10 i3blocks + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# start a terminal +bindsym $mod+Return exec foot -f "IBM Plex Mono:size=12" + +# kill focused window +bindsym $mod+Shift+q kill + +# start Rofi +bindsym $mod+Space exec rofi -show run -theme '/home/slime/.config/rofi/theme.rasi' + +# change focus w/ vim keys +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right +# or, with the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window pos +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right +# or, with the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +# bindsym $mod+Shift+h split h + +# split in vertical orientation +# bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +# bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +bindsym $mod+t focus mode_toggle + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +#bindsym $mod+d focus child + +# Define names for default workspaces for which we configure key bindings later on. +# We use variables to avoid repeating the names in multiple places. +set $ws1 "1:  " +set $ws2 "2:  " +set $ws3 "3:  " +set $ws4 "4:  " +set $ws5 "5" +set $ws6 "6" +set $ws7 "7" +set $ws8 "8" +set $ws9 "9" +set $ws10 "0:  " + + +# workspace $ws10 output "Screen 0" + +# switch to workspace +bindsym $mod+1 workspace number $ws1 +bindsym $mod+2 workspace number $ws2 +bindsym $mod+3 workspace number $ws3 +bindsym $mod+4 workspace number $ws4 +bindsym $mod+5 workspace number $ws5 +bindsym $mod+6 workspace number $ws6 +bindsym $mod+7 workspace number $ws7 +bindsym $mod+8 workspace number $ws8 +bindsym $mod+9 workspace number $ws9 +bindsym $mod+0 workspace number $ws10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace number $ws1 +bindsym $mod+Shift+2 move container to workspace number $ws2 +bindsym $mod+Shift+3 move container to workspace number $ws3 +bindsym $mod+Shift+4 move container to workspace number $ws4 +bindsym $mod+Shift+5 move container to workspace number $ws5 +bindsym $mod+Shift+6 move container to workspace number $ws6 +bindsym $mod+Shift+7 move container to workspace number $ws7 +bindsym $mod+Shift+8 move container to workspace number $ws8 +bindsym $mod+Shift+9 move container to workspace number $ws9 +bindsym $mod+Shift+0 move container to workspace number $ws10 + +# reload the configuration file +bindsym $mod+Shift+c reload +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart + +# TODO: bindsym $mod+Shift+e exec --no-startup-id "rofi -show powermenu -modi powermenu:~/Scripts/rofi-power-menu -theme ~/.config/rofi/theme.rasi" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + # Pressing right will grow the window’s width. + # Pressing up will shrink the window’s height. + # Pressing down will grow the window’s height. + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize grow height 10 px or 10 ppt + bindsym k resize shrink height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape or $mod+r + bindsym Return mode "default" + bindsym Escape mode "default" + bindsym $mod+r mode "default" +} + +bindsym $mod+r mode "resize" + + +###################### +# START CUSTOM STUFF # +###################### + +# Screenshot taker bind +bindsym Print exec --no-startup-id flameshot gui + +# Color variables for default sway-bar (sourced from wal in first lines) + +# class border backgr. text indicator child_border +# client.focused $background $background $foreground $background $background +# client.focused_inactive $background $background $foreground $background $background +# client.unfocused $background $background $foreground $background $background +# client.urgent $background $background $foreground $background $background +# client.placeholder $background $background $foreground $background $background +# +# client.background $background +# +# bar { +# position top +# status_command i3blocks +# strip_workspace_numbers yes +# status_padding 5 +# status_edge_padding 15 +# tray_output * +# tray_padding 2 +# separator_symbol "~" +# +# colors { +# background $background +# separator $foreground +# # border bg txt +# focused_workspace $foreground $background $foreground +# inactive_workspace $background $background $foreground +# urgent_workspace #E53935 $background $foreground +# } +# } + +# Workspace assignment +assign [class="LibreWolf"] $ws1 +assign [class="Discord"] $ws3 +assign [class="Conky"] $ws10 +assign [class="steam"] $ws4 + +for_window [class="Conky"] floating enable + +# Borders +default_border pixel 0 +default_floating_border pixel 2 + +# Gap +gaps inner 30 +gaps outer 30 + +bindsym $mod+s gaps inner current plus 5 +bindsym $mod+Shift+s gaps inner current minus 5 +bindsym $mod+z gaps outer current plus 5 +bindsym $mod+Shift+z gaps outer current minus 5 + +# Media player controls +bindsym XF86AudioPlay exec --no-startup-id playerctl play +bindsym XF86AudioPause exec --no-startup-id playerctl pause +bindsym XF86AudioNext exec --no-startup-id playerctl next +bindsym XF86AudioPrev exec --no-startup-id playerctl previous + +# Vim Keybindings ;P +input "type:keyboard" { + xkb_layout us + xkb_options caps:escape +} + + # +# Scratchpad: +# + # Sway has a "scratchpad", which is a bag of holding for windows. + # You can send windows there and get them back later. + + # Move the currently focused window to the scratchpad + bindsym $mod+Shift+minus move scratchpad + + # Show the next scratchpad window or hide the focused scratchpad window. + # If there are multiple scratchpad windows, this command cycles through them. + bindsym $mod+minus scratchpad show +# diff --git a/desktop/waybar-wal-template.css b/desktop/waybar-wal-template.css new file mode 100644 index 0000000..5968316 --- /dev/null +++ b/desktop/waybar-wal-template.css @@ -0,0 +1,329 @@ +* { + /* `otf-font-awesome` is required to be installed for icons */ + font-family: smoothansi; + font-size: 14px; +} + +window#waybar { + background-color: {background}; + border-bottom: 3px solid {color1}; + color: {foreground}; + transition-property: background-color; + transition-duration: .5s; +} + +window#waybar.hidden { + opacity: 0.2; +} + +/* +window#waybar.empty { + background-color: transparent; +} +window#waybar.solo { + background-color: #FFFFFF; +} + +window#waybar.termite { + background-color: #3F3F3F; +} + +window#waybar.chromium { + background-color: #000000; + border: none; +} +*/ + +button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px {color1}; + /* Avoid rounded borders under each button name */ + border: none; + border-radius: 0; +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { + background: inherit; + box-shadow: inset 0 -3px {foreground}; +} + +/* you can set a style on hover for any module like this */ +#pulseaudio:hover { + background-color: {color2}; +} + +#workspaces button { + padding: 0 5px; + background-color: transparent; + color: {foreground}; +} + +#workspaces button:hover { + background: rgba(0, 0, 0, 0.2); +} + +#workspaces button.focused, #workspaces button.active { + background-color: {color1}; + box-shadow: inset 0 -3px {color1}; +} + +#workspaces button.urgent { + background-color: {color13}; +} + +#mode { + background-color: {background}; + box-shadow: inset 0 -3px {color1}; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#wireplumber, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#scratchpad, +#power-profiles-daemon, +#mpd { + padding: 0 10px; + color: {foreground}; + + box-shadow: inset 0 -3px {color1}; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#clock { + background-color: {background}; +} + +#battery { + background-color: {background}; + color: {foreground}; +} + +#battery.charging, #battery.plugged { + color: {foreground}; + background-color: {background}; +} + +@keyframes blink { + to { + background-color: {foreground}; + color: {background}; + } +} + +/* Using steps() instead of linear as a timing function to limit cpu usage */ +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#power-profiles-daemon { + padding-right: 15px; +} + +#power-profiles-daemon.performance { + background-color: #f53c3c; + color: #ffffff; +} + +#power-profiles-daemon.balanced { + background-color: #2980b9; + color: #ffffff; +} + +#power-profiles-daemon.power-saver { + background-color: #2ecc71; + color: #000000; +} + +label:focus { + background-color: {foreground}; +} + +#cpu { + background-color: {background}; + color: {foreground}; +} + +#memory { + background-color: {background}; +} + +#disk { + background-color: {background}; +} + +#backlight { + background-color: {background}; +} + +#network { + background-color: {background}; +} + +#network.disconnected { + background-color: #f53c3c; +} + +#pulseaudio { + background-color: {background}; + color: {foreground}; +} + +#pulseaudio.muted { + background-color: {color11}; + color: {foreground}; +} + +#wireplumber { + background-color: {background}; + color: {foreground}; +} + +#wireplumber.muted { + background-color: {color11}; +} + +#custom-media { + background-color: #66cc99; + color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + background-color: #f0932b; +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { + background-color: {background}; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: {color11}; +} + +#idle_inhibitor { + background-color: #2d3436; +} + +#idle_inhibitor.activated { + background-color: #ecf0f1; + color: #2d3436; +} + +#mpd { + background-color: #66cc99; + color: #2a5c45; +} + +#mpd.disconnected { + background-color: #f53c3c; +} + +#mpd.stopped { + background-color: #90b1b1; +} + +#mpd.paused { + background-color: #51a37a; +} + +#language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state { + background: #97e1ad; + color: #000000; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state > label { + padding: 0 5px; +} + +#keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad.empty { + background-color: transparent; +} + +#privacy { + padding: 0; +} + +#privacy-item { + padding: 0 5px; + color: white; +} + +#privacy-item.screenshare { + background-color: #cf5700; +} + +#privacy-item.audio-in { + background-color: #1ca000; +} + +#privacy-item.audio-out { + background-color: #0069d4; +} diff --git a/desktop/waybar_config b/desktop/waybar_config new file mode 100644 index 0000000..5e2f130 --- /dev/null +++ b/desktop/waybar_config @@ -0,0 +1,220 @@ +// -*- mode: jsonc -*- +{ + // "layer": "top", // Waybar at top layer + // "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 30, // Waybar height (to be removed for auto height) + "width": 1280, // Waybar width + "spacing": 4, // Gaps between modules (4px) + // Choose the order of the modules + "modules-left": [ + "sway/workspaces", + "sway/mode", + "sway/scratchpad" + // "custom/media" + ], + "modules-center": [ + "sway/window" + ], + "modules-right": [ + // "mpd", + // "idle_inhibitor", + "pulseaudio", + // "network", + // "power-profiles-daemon", + "cpu", + "memory", + // "temperature", + // "backlight", + // "keyboard-state", + // "sway/language", + // "battery", + // "battery#bat2", + "clock", + "tray"] + , + // Modules configuration + // "sway/workspaces": { + // "disable-scroll": true, + // "all-outputs": true, + // "warp-on-scroll": false, + // "format": "{name}: {icon}", + // "format-icons": { + // "1": "", + // "2": "", + // "3": "", + // "4": "", + // "5": "", + // "urgent": "", + // "focused": "", + // "default": "" + // } + // }, + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + "sway/mode": { + "format": "{}" + }, + "sway/scratchpad": { + "format": "{icon} {count}", + "show-empty": false, + "format-icons": ["", ""], + "tooltip": true, + "tooltip-format": "{app}: {title}" + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", + "format-disconnected": "Disconnected ", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", + "unknown-tag": "N/A", + "interval": 5, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": " ", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 8, + // "icons": { + // "blueman": "bluetooth", + // "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png" + // } + }, + "clock": { + // "timezone": "America/New_York", + "format": "{:%a, %H:%M}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "cpu: {usage}%", + "tooltip": false + }, + "memory": { + "format": "ram: {}%" + }, + "temperature": { + // "thermal-zone": 2, + // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + // "format-critical": "{temperatureC}°C {icon}", + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + // "device": "acpi_video1", + "format": "{percent}% {icon}", + "format-icons": ["", "", "", "", "", "", "", "", ""] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-full": "{capacity}% {icon}", + "format-charging": "{capacity}% ", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "power-profiles-daemon": { + "format": "{icon}", + "tooltip-format": "Power profile: {profile}\nDriver: {driver}", + "tooltip": true, + "format-icons": { + "default": "", + "performance": "", + "balanced": "", + "power-saver": "" + } + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": " {signalStrength}%", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + // "format": "{volume}% {icon} {format_source}", + "format": "vol: {volume}%", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/media": { + "format": "{icon} {text}", + "return-type": "json", + "max-length": 40, + "format-icons": { + "spotify": "", + "default": "🎜" + }, + "escape": true, + "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder + // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name + }, + "custom/power": { + "format" : "⏻ ", + "tooltip": false, + "menu": "on-click", + "menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder + "menu-actions": { + "shutdown": "shutdown", + "reboot": "reboot", + "suspend": "systemctl suspend", + "hibernate": "systemctl hibernate" + } + } +} -- cgit v1.3.1-4-g156e