diff --git a/config/awesome/rc.lua b/config/awesome/rc.lua deleted file mode 100644 index 8d3b331..0000000 --- a/config/awesome/rc.lua +++ /dev/null @@ -1,425 +0,0 @@ -pcall(require, "luarocks.loader") -local gears = require("gears") -local awful = require("awful") -local naughty = require("naughty") -local wibox = require("wibox") -local beautiful = require("beautiful") -local hotkeys_popup = require("awful.hotkeys_popup") -local menubar = require("menubar") -require("awful.autofocus") - --- Pick a random image from the folder on start/reload -awful.spawn.with_shell("feh --bg-fill --randomize /home/jason/Pictures/Wallpapers/") - --- Global config --- Alt. Use "Mod4" for the Super/Windows key. -modkey = "Mod4" -terminal = "alacritty" -theChurch = "emacs" -editor = os.getenv("EDITOR") or "nano" - --- Layouts: suit.tile = master column LEFT, stack column RIGHT. -awful.layout.layouts = { awful.layout.suit.tile, awful.layout.suit.max } - --- Kill xfce4-notifyd on startup (with a short delay + retry, in case it --- hasn't started yet at this point in the session) -awful.spawn.easy_async_with_shell("pkill xfce4-notifyd", function() end) -gears.timer.start_new(3, function() - awful.spawn.easy_async_with_shell("pkill xfce4-notifyd", function() end) - return false -- don't repeat -end) - --- Error handling -if awesome.startup_errors then - naughty.notify({ preset = naughty.config.presets.critical, title = "Error during startup", text = awesome.startup_errors }) -end -do - local in_error = false - awesome.connect_signal("debug::error", function(err) - if in_error then return end - in_error = true - naughty.notify({ preset = naughty.config.presets.critical, title = "An error happened", text = tostring(err) }) - in_error = false - end) -end - --- ================================================ --- THEME --- ================================================ -local colors = { - background = "#111111", - background_alt = "#1a1a1a", - foreground = "#dcd7ba", -- kanagawa foreground - accent = "#6a9589", -- black (bright) - muted gray, same role as old #6e6e6e - accent_alt = "#7fb4ca", -- blue (normal) - crystalBlue - red = "#e82424", -- red (bright) - samuraiRed, vivid - green = "#98bb6c", -- green (bright) - springGreen - yellow = "#e6c384", -- yellow (bright) - carpYellow - disabled = "#6a9589", -- cyan (normal) - muted, low-contrast - white = "#ffffff", -- white (normal) - dimmer than foreground -} -beautiful.wallpaper = nil -beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua") -beautiful.useless_gap = 8 -beautiful.gap_single_client = true -beautiful.font = "JetBrainsMono Nerd Font 11" -beautiful.border_width = 4 -beautiful.border_normal = colors.background_alt -beautiful.border_focus = colors.accent -beautiful.taglist_bg_focus = colors.accent -beautiful.taglist_fg_focus = colors.background -beautiful.taglist_fg_occupied = colors.accent -beautiful.taglist_bg_occupied = colors.background -beautiful.taglist_fg_empty = colors.white -beautiful.taglist_bg_empty = colors.background -beautiful.taglist_bg_urgent = colors.red -beautiful.taglist_fg_urgent = colors.background -beautiful.bg_systray = colors.background -beautiful.systray_icon_spacing = 4 --- Notifications, styled to match the wibar/client theme -naughty.config.defaults.position = "top_right" -naughty.config.defaults.timeout = 5 -naughty.config.padding = 12 -naughty.config.defaults.margin = 12 -naughty.config.defaults.spacing = 8 -naughty.config.defaults.icon_size = 48 -naughty.config.defaults.border_width = 3 -naughty.config.defaults.font = "JetBrainsMono Nerd Font 12" -naughty.config.defaults.shape = function(cr, w, h) gears.shape.rounded_rect(cr, w, h, 13) end -naughty.config.presets.normal = { - bg = colors.background, fg = colors.foreground, border_color = colors.accent, - border_width = 3, font = "JetBrainsMono Nerd Font 12", timeout = 5, -} -naughty.config.presets.low = naughty.config.presets.normal -naughty.config.presets.critical = { - bg = colors.background, fg = colors.red, border_color = colors.red, - border_width = 3, font = "JetBrainsMono Nerd Font 12", timeout = 0, -- stays until dismissed -} - --- ================================================ --- WIDGETS --- ================================================ -local widgets = {} --- "ICON value" with ICON tinted accent, like polybar's *-prefix-foreground. -function widgets.label(icon, val) - return string.format("%s %s", colors.white, icon, val or "") -end --- A slim separator in the disabled color, like polybar's separator. -function widgets.sep() - local w = wibox.widget.textbox() - w.markup = string.format(" ", colors.disabled) - return w -end --- Wrap a widget in a small margin so bar modules aren't crammed together. -function widgets.padded(w, left, right) - return wibox.container.margin(w, left or 8, right or 8) -end --- Focused window title (polybar xwindow / %title%) -function widgets.make_title() - local t = wibox.widget.textbox() - t.align = "center" - local function update() - local c = client.focus - t.markup = c and string.format("%s", colors.white, gears.string.xml_escape(c.name or "")) or "" - end - client.connect_signal("focus", update) - client.connect_signal("unfocus", update) - client.connect_signal("property::name", update) - return t -end --- CPU usage % (two top samples so the reading is accurate) -function widgets.make_cpu() - return awful.widget.watch( - { "bash", "-c", [[LANG=C top -bn2 -d0.3 | grep -m2 '^%Cpu' | tail -1 | awk '{printf "%.0f", 100 - $8}']] }, - 3, function(w, out) w.markup = widgets.label("", out:gsub("%s+$", "") .. "%") end) -end --- Volume: click to mute, scroll to adjust, right-click for the mixer. --- Keeps its own refresh() so button presses update instantly instead of --- waiting on the polling timer. -function widgets.make_vol() - local w = wibox.widget.textbox() - local vol_script = [[ - sink=$(LANG=C pactl get-default-sink 2>/dev/null) - m=$(LANG=C pactl get-sink-mute "$sink" 2>/dev/null | grep -oE 'yes|no') - v=$(LANG=C pactl get-sink-volume "$sink" 2>/dev/null | grep -oE '[0-9]+%' | head -n1) - echo "$m $v" - ]] - local function shell_quote(s) return "'" .. s:gsub("'", "'\\''") .. "'" end - local vol_cmd = "sh -c " .. shell_quote(vol_script) - local function refresh() - awful.spawn.easy_async_with_shell(vol_cmd, function(out) - local muted, pct = out:match("(%a+)%s+(%d+)%%") - if muted == nil and pct == nil then - w.markup = string.format("󱄠 n/a", colors.disabled) - return - end - muted = muted == "yes" - pct = pct or "0" - w.markup = muted and string.format("MUTE", colors.yellow) or widgets.label("󱄠", pct .. "%") - end) - end - w:buttons(gears.table.join( - awful.button({ }, 1, function() awful.spawn("/home/jason/.local/bin/audioswitch") end), - awful.button({ }, 3, function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-mute "$(pactl get-default-sink)" toggle']], function() refresh() end) end), - awful.button({ }, 4, function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" +2%']], function() refresh() end) end), - awful.button({ }, 5, function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" -2%']], function() refresh() end) end) - )) - gears.timer { timeout = 2, call_now = true, autostart = true, callback = refresh } - return w -end --- Brightness: click to toggle between night (default gamma) and day (boosted). -function widgets.make_brightness() - local OUTPUT = "HDMI-A-0" - local DAY_CMD = "xrandr --output " .. OUTPUT .. " --set CTM \"1.1,0,0,0,1.1,0,0,0,1.1\" --gamma 1.08:1.08:1.08" - local NIGHT_CMD = "xrandr --output " .. OUTPUT .. " --set CTM \"1,0,0,0,1,0,0,0,1\" --gamma 1.0:1.0:1.0" - local w = wibox.widget.textbox() - local is_day = true - local function render() - local icon = is_day and "󱁞" or "󱠩" - w.markup = string.format( - "%s ", - colors.white, icon - ) - end - local function apply(day) - local cmd = day and DAY_CMD or NIGHT_CMD - awful.spawn.easy_async_with_shell(cmd, function() - is_day = day - render() - end) - end - w:buttons(gears.table.join( - awful.button({ }, 1, function() apply(not is_day) end) - )) - apply(true) - return w -end - --- ================================================ --- KEYBINDS --- ================================================ -local keys = {} -keys.globalkeys = gears.table.join( - awful.key({ modkey }, "s", hotkeys_popup.show_help, { description = "show help", group = "awesome" }), - -- Directional focus (vim keys) - awful.key({ modkey }, "h", function() awful.client.focus.bydirection("left") end, { description = "focus left", group = "client" }), - awful.key({ modkey }, "j", function() awful.client.focus.bydirection("down") end, { description = "focus down", group = "client" }), - awful.key({ modkey }, "k", function() awful.client.focus.bydirection("up") end, { description = "focus up", group = "client" }), - awful.key({ modkey }, "l", function() awful.client.focus.bydirection("right") end, { description = "focus right", group = "client" }), - -- Directional move (swap clients in the tiling layout) - awful.key({ modkey, "Control" }, "h", function() awful.client.swap.bydirection("left") end, { description = "move left", group = "client" }), - awful.key({ modkey, "Control" }, "j", function() awful.client.swap.bydirection("down") end, { description = "move down", group = "client" }), - awful.key({ modkey, "Control" }, "k", function() awful.client.swap.bydirection("up") end, { description = "move up", group = "client" }), - awful.key({ modkey, "Control" }, "l", function() awful.client.swap.bydirection("right") end, { description = "move right", group = "client" }), - -- Resize the master/other split - awful.key({ modkey, "Shift" }, "h", function() awful.tag.incmwfact(-0.05) end, { description = "shrink master", group = "layout" }), - awful.key({ modkey, "Shift" }, "l", function() awful.tag.incmwfact( 0.05) end, { description = "grow master", group = "layout" }), - -- Launching / layout - awful.key({ modkey }, "Return", function() awful.spawn(theChurch) end, { description = "open the church of emacs", group = "launcher" }), - awful.key({ modkey }, "t", function() awful.spawn(terminal) end, { description = "open alacritty", group = "launcher" }), - awful.key({ modkey }, "e", function() awful.spawn("thunar") end, { description = "Filemanager", group = "system" }), - awful.key({ modkey }, "w", function() awful.layout.inc(1) end, { description = "next layout", group = "layout" }), - -- screenshooter - awful.key({ modkey, "Control" }, "p", function() awful.spawn("xfce4-screenshooter") end, { description = "screenshot", group = "system" }), - -- Alt tab current workspace windows - awful.key({ modkey }, "Tab", function() awful.client.focus.byidx(1) end, { description = "cycle focus", group = "client" }), - -- Media keys - awful.key({ }, "XF86AudioRaiseVolume", function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" +2%']]) end, { description = "volume up", group = "media" }), - awful.key({ }, "XF86AudioLowerVolume", function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-volume "$(pactl get-default-sink)" -2%']]) end, { description = "volume down", group = "media" }), - awful.key({ }, "XF86AudioMute", function() awful.spawn.easy_async_with_shell([[sh -c 'pactl set-sink-mute "$(pactl get-default-sink)" toggle']]) end, { description = "toggle mute", group = "media" }), - -- rofi menus - awful.key({ modkey }, "space", function() awful.spawn("/home/jason/.local/bin/runrofi") end, { description = "application launcher", group = "launcher" }), - awful.key({ modkey }, "`", function() awful.spawn("/home/jason/.local/bin/powermenu") end, { description = "power menu", group = "system" }), - awful.key({ modkey }, "a", function() awful.spawn("/home/jason/.local/bin/audioswitch") end, { description = "audio output", group = "system" }), - awful.key({ modkey }, "b", function () awful.spawn("/home/jason/.local/bin/bookmarks") end, {description = "bookmarks", group = "internet"}), - -- Awesome control - awful.key({ modkey, "Control" }, "r", awesome.restart, { description = "reload awesome", group = "awesome" }) -) --- Workspace keys 1..5: Alt+N view, Alt+Shift+N move client to tag -for i = 1, 5 do - keys.globalkeys = gears.table.join(keys.globalkeys, - awful.key({ modkey }, "#" .. i + 9, function() - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then tag:view_only() end - end, { description = "view tag #" .. i, group = "tag" }), - awful.key({ modkey, "Control" }, "#" .. i + 9, function() - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then client.focus:move_to_tag(tag) end - end - end, { description = "move focused client to tag #" .. i, group = "tag" }) - ) -end -keys.clientkeys = gears.table.join( - awful.key({ modkey }, "q", function(c) c:kill() end, { description = "kill window", group = "client" }), - awful.key({ modkey }, "f", function(c) c.fullscreen = not c.fullscreen; c:raise() end, { description = "toggle fullscreen", group = "client" }), - -- awful.key({ modkey }, "m", function(c) c:swap(awful.client.getmaster()) end, { description = "make master", group = "client" }), - awful.key({ modkey }, "m", function (c) c.maximized = not c.maximized c:raise() end, {description = "(un)maximize", group = "client"}), - awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle, { description = "toggle floating", group = "client" }) -) -keys.clientbuttons = gears.table.join( - awful.button({ }, 1, function(c) c:emit_signal("request::activate", "mouse_click", { raise = true }) end), - awful.button({ modkey }, 1, function(c) c:emit_signal("request::activate", "mouse_click", { raise = true }); awful.mouse.client.move(c) end), - awful.button({ modkey }, 3, function(c) c:emit_signal("request::activate", "mouse_click", { raise = true }); awful.mouse.client.resize(c) end) -) -root.keys(keys.globalkeys) - --- ================================================ --- BAR --- ================================================ -local taglist_buttons = gears.table.join( - awful.button({ }, 1, function(t) t:view_only() end), - awful.button({ modkey }, 1, function(t) if client.focus then client.focus:move_to_tag(t) end end), - awful.button({ }, 3, awful.tag.viewtoggle) -) -local function bar_setup() - awful.screen.connect_for_each_screen(function(s) - awful.tag({ "1", "2", "3", "4", "5" }, s, awful.layout.layouts[1]) - s.mypromptbox = awful.widget.prompt() - s.mylayoutbox = awful.widget.layoutbox(s) - s.mylayoutbox:buttons(gears.table.join( - awful.button({ }, 1, function() awful.layout.inc(1) end), - awful.button({ }, 3, function() awful.layout.inc(-1) end) - )) - s.mytaglist = awful.widget.taglist { - screen = s, filter = awful.widget.taglist.filter.all, buttons = taglist_buttons, - style = { shape = function(cr, w, h) gears.shape.rounded_rect(cr, w, h, 4) end }, - layout = { spacing = 8, layout = wibox.layout.fixed.horizontal }, - widget_template = { - { { id = "text_role", widget = wibox.widget.textbox }, left = 10, right = 10, top = 4, bottom = 4, widget = wibox.container.margin }, - id = "background_role", widget = wibox.container.background, - }, - } - -- Per-screen monitor widgets (created here so multi-monitor stays valid) - local title = widgets.make_title() - local vol = widgets.make_vol() - local cpu = widgets.make_cpu() - local brightness = widgets.make_brightness() - local clock = wibox.widget.textclock("%Y-%m-%d %H:%M") - local right = wibox.layout.fixed.horizontal() - right.spacing = 16 -- one uniform gap between all right-hand modules - right:add(wibox.widget.systray()) - right:add(vol) - right:add(cpu) - right:add(clock) - right:add(brightness) - s.mywibox = awful.wibar { - position = "top", screen = s, height = 45, bg = colors.background, fg = colors.white, - shape = function(cr, w, h) gears.shape.rounded_rect(cr, w, h, 0) end, - } - s.mywibox:setup { - layout = wibox.container.margin, left = 8, right = 8, top = 10, bottom = 10, - { - layout = wibox.layout.align.horizontal, - expand = "none", -- center widget is centered on the whole bar - -- Left: layout indicator + workspaces - { - layout = wibox.layout.fixed.horizontal, - widgets.padded(s.mylayoutbox, 8, 8), - widgets.padded(s.mytaglist, 4, 4), s.mypromptbox, - }, - -- Center: focused window title - title, - -- Right - widgets.padded(right, 4, 12), - } - } - end) - -- Overlay for rofi launchers. - -- Real dim colour; the overlay is created fully transparent so the - -- startup prime (below) can run without ever showing on screen. - local DIM_BG = "#00000099" - local dim_overlay = wibox({ - visible = false, - ontop = true, - type = "splash", - bg = "#00000000", - }) - dim_overlay.name = "awesome_dim_overlay" - awful.screen.connect_for_each_screen(function(s) - dim_overlay.screen = s -- adjust if you want it per-screen vs spanning all - end) - -- span the primary screen's geometry (or loop over all screens if you use a multi-monitor dim) - local function update_dim_geometry() - local geo = screen.primary.geometry - dim_overlay:geometry(geo) - end - update_dim_geometry() - screen.connect_signal("property::geometry", update_dim_geometry) - -- expose functions over awesome-client - _G.show_dim = function() dim_overlay.visible = true end - _G.hide_dim = function() dim_overlay.visible = false end - -- Prime the overlay invisibly at startup. While it is fully - -- transparent we map it once, so picom plays and finishes its one-time - -- "open" animation now -- with alpha 00 there is nothing to see, so no - -- flash. We then hide it and swap in the real dim colour. Every later - -- show_dim() is a re-map ("show"), which picom doesn't animate, so the - -- overlay simply appears: no startup flash, no grow. - dim_overlay.visible = true - gears.timer.start_new(1.0, function() - dim_overlay.visible = false - dim_overlay.bg = DIM_BG - return false -- one-shot - end) -end -bar_setup() - --- ================================================ --- WINDOW RULES --- ================================================ -awful.rules.rules = { - { - rule = { }, - properties = { - border_width = beautiful.border_width, border_color = beautiful.border_normal, - focus = awful.client.focus.filter, raise = true, - keys = keys.clientkeys, buttons = keys.clientbuttons, - screen = awful.screen.preferred, - placement = awful.placement.no_overlap + awful.placement.no_offscreen, - } - }, - { - rule_any = { - instance = { "pinentry" }, - class = { "Arandr", "Blueman-manager", "Gpick", "Pavucontrol" }, - name = { "Event Tester" }, - role = { "AlarmWindow", "pop-up" }, - }, - properties = { floating = true } - }, - { - rule = { name = "Sublime Terminal", }, - properties = { floating = false, }, - callback = function(c) - awful.client.setslave(c) - local t = c.first_tag - if t then - t.master_width_factor = 0.67 - end - end, - }, -} - --- ================================================ --- SIGNALS --- ================================================ -client.connect_signal("manage", function(c) - if awesome.startup and not c.size_hints.user_position and not c.size_hints.program_position then - awful.placement.no_offscreen(c) - end - -- New windows open into the stack (to the right); first window becomes master. - if not awesome.startup then awful.client.setslave(c) end - -- 0 or ie 13 = corner radius - c.shape = function(cr, width, height) gears.shape.rounded_rect(cr, width, height, 0) end -end) -client.connect_signal("property::floating", function(c) - if c.floating and c.type ~= "notification" then awful.placement.centered(c, { honor_workarea = true }) end -end) -client.connect_signal("manage", function(c) - if c.floating and c.type ~= "notification" then awful.placement.centered(c, { honor_workarea = true }) end -end) --- Focus follows mouse (i3-like). Comment out for click-to-focus only. -client.connect_signal("mouse::enter", function(c) c:emit_signal("request::activate", "mouse_enter", { raise = false }) end) -client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) -client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) diff --git a/config/picom/picom.conf b/config/picom/picom.conf deleted file mode 100644 index 2217432..0000000 --- a/config/picom/picom.conf +++ /dev/null @@ -1,286 +0,0 @@ -################################# -# Fading # -################################# -fading = false; -fade-in-step = 0.04; -fade-out-step = 0.04; -################################# -# Corners # -################################# -corner-radius = 5; - -################################# -# FAST SNAPPY ANIMATIONS # -################################# -match = "window_type = 'normal'"; -animations = ( - - { - - triggers = ["close"]; - - opacity = { - - curve = "cubic-bezier(0,1,1,1)"; - - duration = 0.3; - - start = "window-raw-opacity-before"; - - end = 0; - - }; - - blur-opacity = "opacity"; - - shadow-opacity = "opacity"; - - - - scale-x = { - - curve = "cubic-bezier(0,1.3,1,1)"; - - duration = 0.3; - - start = 1; - - end = 0.6; - - }; - - scale-y = "scale-x"; - - - - offset-x = "(1 - scale-x) / 2 * window-width"; - - offset-y = "(1 - scale-y) / 2 * window-height"; - - - - shadow-scale-x = "scale-x"; - - shadow-scale-y = "scale-y"; - - shadow-offset-x = "offset-x"; - - shadow-offset-y = "offset-y"; - - }, - - - -{ - - triggers = ["open"]; - - opacity = { - - curve = "cubic-bezier(0,1,1,1)"; - - duration = 0.5; - - start = 0; - - end = "window-raw-opacity"; - - }; - - blur-opacity = "opacity"; - - shadow-opacity = "opacity"; - - - - scale-x = { - - curve = "cubic-bezier(0,1.3,1,1)"; - - duration = 0.5; - - start = 0.6; - - end = 1; - - }; - - scale-y = "scale-x"; - - - - offset-x = "(1 - scale-x) / 2 * window-width"; - - offset-y = "(1 - scale-y) / 2 * window-height"; - - - - shadow-scale-x = "scale-x"; - - shadow-scale-y = "scale-y"; - - shadow-offset-x = "offset-x"; - - shadow-offset-y = "offset-y"; - -}, - - - -{ - - triggers = ["geometry"]; - - scale-x = { - - curve = "cubic-bezier(0,0,0,1.28)"; - - duration = 0.5; - - start = "window-width-before / window-width"; - - end = 1; - - }; - - - - scale-x-reverse = { - - curve = "cubic-bezier(0,0,0,1.28)"; - - duration = 0.3; - - start = "window-width / window-width-before"; - - end = 1; - - }; - - scale-y = { - - curve = "cubic-bezier(0,0,0,1.28)"; - - duration = 0.5; - - start = "window-height-before / window-height"; - - end = 1; - - }; - - scale-y-reverse = { - - curve = "cubic-bezier(0,0,0,1.28)"; - - duration = 0.5; - - start = "window-height / window-height-before"; - - end = 1; - - }; - - offset-x = { - - curve = "cubic-bezier(0,0,0,1.28)"; - - duration = 0.5; - - start = "window-x-before - window-x"; - - end = 0; - - }; - - offset-y = { - - curve = "cubic-bezier(0,0,0,1.28)"; - - duration = 0.5; - - start = "window-y-before - window-y"; - - end = 0; - - }; - - shadow-scale-x = "scale-x"; - - shadow-scale-y = "scale-y"; - - shadow-offset-x = "offset-x"; - - shadow-offset-y = "offset-y"; - -}, - -) -################################# -# General Settings # -################################# -backend = "glx"; -dithered-present = false; -vsync = true; -detect-rounded-corners = true; -detect-client-opacity = true; -detect-transient = true; -use-damage = true; -log-level = "warn"; -################################# -# Window Rules # -################################# -rules: ( -# No rounded corners on dock and desktop - { - match = "window_type = 'dock' || window_type = 'desktop'"; - corner-radius = 0; - }, - { - match = "class_g = 'Rofi'"; - animations = ( - { - triggers = ["open", "show"]; - opacity = { - curve = "cubic-bezier(0, 1, 1, 1)"; - duration = 0.2; - start = 0; - end = "window-raw-opacity"; - }; - shadow-opacity = "opacity"; - scale-y = { - curve = "cubic-bezier(0.2, 0, 0, 1)"; - duration = 0.2; - start = 0.55; - end = 1; - }; - shadow-scale-y = "scale-y"; - }, - { - triggers = ["close", "hide"]; - opacity = { - curve = "cubic-bezier(0, 1, 1, 1)"; - duration = 0.15; - start = "window-raw-opacity-before"; - end = 0; - }; - shadow-opacity = "opacity"; - scale-y = { - curve = "cubic-bezier(0.2, 0, 0, 1)"; - duration = 0.15; - start = 1; - end = 0.55; - }; - shadow-scale-y = "scale-y"; - }, - ); - }, - { - match = "window_type = 'splash' && name = 'awesome_dim_overlay'"; - animations = (); - shadow = false; - corner-radius = 0; - fade = false; - }, -) - diff --git a/config/rofi/config.rasi b/config/rofi/config.rasi deleted file mode 100644 index 297f1bd..0000000 --- a/config/rofi/config.rasi +++ /dev/null @@ -1,125 +0,0 @@ -* { - /* -- Palette, matches colors{} in awesome rc.lua -- */ - bg0: #111111; /* colors.background */ - bg1: #1a1a1a; /* colors.background_alt */ - fg0: #dcd7ba; /* colors.foreground */ - fg-selected: #ffffff; /* colors.white */ - accent: #6a9589; /* colors.accent */ - accent-alt: #727169; /* colors.accent_alt */ - red: #e82424; /* colors.red */ - disabled: #6a9589; /* colors.disabled */ - font: "JetBrainsMono Nerd Font 14"; - background-color: transparent; - text-color: @fg0; -} -window { - transparency: "real"; - /* Anchor top-center, right below the wibar. */ - location: north; - anchor: north; - y-offset: 48px; - width: 32em; - height: 26em; /* fixed — box size no longer changes with result count */ - background-color: @bg0; - border: 3px; - border-color: @accent; - border-radius: -1px; /* matches gears.shape.rounded_rect radius in rc.lua */ - padding: 14px; -} -mainbox { - children: [ inputbar, message, listview, mode-switcher ]; - spacing: 10px; - background-color: transparent; -} -/* -- Search field -- */ -inputbar { - children: [ prompt, entry ]; - spacing: 10px; - background-color: @bg1; - border-radius: 10px; - padding: 10px 14px; -} -prompt { - text-color: @accent-alt; -} -entry { - placeholder: "Search"; - placeholder-color: @disabled; - text-color: @fg0; - cursor: text; -} -/* -- List/grid toggle icons, top-right (matches screenshot) -- */ -mode-switcher { - /* flip to true if you use rofis built-in mode tabs */ - enabled: false; -} -/* -- Results -- */ -listview { - lines: 8; - columns: 1; - spacing: 6px; - scrollbar: false; - background-color: transparent; - /* box height stays locked, doesnt shrink/grow with result count */ - fixed-height: true; - /* dont resize dynamically as you type either */ - dynamic: false; -} -/* - * Rofi tracks row state as a combination of position (normal/alternate, - * i.e. even/odd rows for banding) and status (normal/urgent/active/selected). - * Each combination needs its own selector or a competing @theme import - * (if you have one elsewhere in your rofi config) can still win on states - * this file doesnt explicitly cover. Pinning all of them here. - */ -element { - padding: 10px 12px; - border-radius: 10px; - orientation: horizontal; -} -element normal.normal, -element alternate.normal { - background-color: @bg1; - text-color: @fg0; -} -element normal.urgent, -element alternate.urgent { - background-color: @bg1; - text-color: @red; -} -element normal.active, -element alternate.active { - background-color: @bg1; - text-color: @accent-alt; -} -element selected.normal { - background-color: @accent-alt; - text-color: @fg-selected; -} -element selected.urgent { - background-color: @red; - text-color: @fg-selected; -} -element selected.active { - background-color: @accent-alt; - text-color: @bg0; -} -element-icon { - size: 24px; - padding: 0 12px 0 0; - vertical-align: 0.5; - background-color: transparent; -} -element-text { - vertical-align: 0.5; - text-color: inherit; - background-color: transparent; -} -message { - background-color: @bg1; - border-radius: 10px; - padding: 8px 12px; -} -textbox { - text-color: @fg0; -} diff --git a/scripts/bin/audioswitch b/scripts/bin/audioswitch deleted file mode 100755 index dc3614a..0000000 --- a/scripts/bin/audioswitch +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env bash -# rofi-audio-switch: pick a PulseAudio/PipeWire sink via rofi - -set -euo pipefail - -awesome-client 'show_dim()' >/dev/null 2>&1 -trap 'awesome-client "hide_dim()" >/dev/null 2>&1' EXIT - -# Get list of sinks: index, name, description -mapfile -t sinks < <(pactl list sinks | awk -F': ' ' - /^Sink #/ { idx=$2 } - /Name:/ { name=$2 } - /Description:/ { desc=$2; print idx"\t"name"\t"desc } -') - -if [ "${#sinks[@]}" -eq 0 ]; then - notify-send "Audio Switch" "No sinks found" - exit 1 -fi - -current_sink=$(pactl get-default-sink) - -# Build rofi menu: show description, mark current with a star -menu="" -for line in "${sinks[@]}"; do - name=$(echo "$line" | cut -f2) - desc=$(echo "$line" | cut -f3) - if [ "$name" = "$current_sink" ]; then - menu+="* $desc\n" - else - menu+=" $desc\n" - fi -done - -chosen=$(echo -e "$menu" | rofi -dmenu -i -p "Audio Output" -markup-rows \ - -theme-str 'listview { lines: 3; }' \ - -theme-str 'window { height: 220px; }') - -[ -z "$chosen" ] && exit 0 - -# Strip the leading marker to match description text -chosen_desc=$(echo "$chosen" | sed 's/^[* ] //') - -# Find matching sink name for that description -target_name="" -for line in "${sinks[@]}"; do - desc=$(echo "$line" | cut -f3) - if [ "$desc" = "$chosen_desc" ]; then - target_name=$(echo "$line" | cut -f2) - break - fi -done - -if [ -z "$target_name" ]; then - notify-send "Audio Switch" "Could not resolve selection" - exit 1 -fi - -# Set as default sink -pactl set-default-sink "$target_name" - -# Move all currently running streams to the new sink -mapfile -t inputs < <(pactl list short sink-inputs | cut -f1) -for input in "${inputs[@]}"; do - pactl move-sink-input "$input" "$target_name" -done - -notify-send "Audio Switch" "Switched to: $chosen_desc" diff --git a/scripts/bin/powermenu b/scripts/bin/powermenu deleted file mode 100755 index fb1fa44..0000000 --- a/scripts/bin/powermenu +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# rofi-power-menu: logout / restart / shutdown via rofi - -set -euo pipefail - -awesome-client 'show_dim()' >/dev/null 2>&1 -trap 'awesome-client "hide_dim()" >/dev/null 2>&1' EXIT - -options=" Logout\n Restart\n Shutdown" - -chosen=$(echo -e "$options" | rofi -dmenu -i -p "Power" -markup-rows \ - -theme-str 'listview { lines: 3; }' \ - -theme-str 'window { height: 240px; }') - -[ -z "$chosen" ] && exit 0 - -case "$chosen" in - *Logout*) - loginctl terminate-session ${XDG_SESSION_ID-} - ;; - *Restart*) - loginctl reboot - ;; - *Shutdown*) - loginctl poweroff - ;; -esac diff --git a/scripts/bin/runrofi b/scripts/bin/runrofi deleted file mode 100755 index 7038376..0000000 --- a/scripts/bin/runrofi +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -awesome-client 'show_dim()' -rofi -show drun "$@" -awesome-client 'hide_dim()'