Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f8b0225123 | |||
| bde8785dcd | |||
| 03b64fec0a |
@@ -1,4 +1,5 @@
|
||||
[general]
|
||||
import = ["~/.config/alacritty/themes/noctalia.toml"]
|
||||
|
||||
[font]
|
||||
size = 12.4
|
||||
@@ -13,27 +14,3 @@ padding.y = 10
|
||||
[cursor]
|
||||
style.shape = "Beam"
|
||||
style.blinking = "Always"
|
||||
|
||||
[colors.primary]
|
||||
background = '#101010'
|
||||
foreground = '#ebdbb2'
|
||||
|
||||
[colors.normal]
|
||||
black = '#282828'
|
||||
red = '#cc241d'
|
||||
green = '#98971a'
|
||||
yellow = '#d79921'
|
||||
blue = '#458588'
|
||||
magenta = '#b16286'
|
||||
cyan = '#689d6a'
|
||||
white = '#a89984'
|
||||
|
||||
[colors.bright]
|
||||
black = '#928374'
|
||||
red = '#fb4934'
|
||||
green = '#b8bb26'
|
||||
yellow = '#fabd2f'
|
||||
blue = '#83a598'
|
||||
magenta = '#d3869b'
|
||||
cyan = '#8ec07c'
|
||||
white = '#ebdbb2'
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
[colors.primary]
|
||||
background = '#121212'
|
||||
foreground = '#e8e8e8'
|
||||
|
||||
[colors.cursor]
|
||||
text = '#121212'
|
||||
cursor = '#e8e8e8'
|
||||
|
||||
[colors.vi_mode_cursor]
|
||||
text = '#121212'
|
||||
cursor = '#a9afbd'
|
||||
|
||||
[colors.search.matches]
|
||||
foreground = '#161616'
|
||||
background = '#8b909c'
|
||||
|
||||
[colors.search.focused_match]
|
||||
foreground = '#161616'
|
||||
background = '#a9afbd'
|
||||
|
||||
[colors.footer_bar]
|
||||
foreground = '#161616'
|
||||
background = '#e8e3e3'
|
||||
|
||||
[colors.hints.start]
|
||||
foreground = '#161616'
|
||||
background = '#7d8390'
|
||||
|
||||
[colors.hints.end]
|
||||
foreground = '#161616'
|
||||
background = '#7d8390'
|
||||
|
||||
[colors.selection]
|
||||
text = '#e8e8e8'
|
||||
background = '#2a2a2a'
|
||||
|
||||
|
||||
[colors.normal]
|
||||
black = '#161616'
|
||||
red = '#c77b7b'
|
||||
green = '#9cb89c'
|
||||
yellow = '#c7b98b'
|
||||
blue = '#8b95a9'
|
||||
magenta = '#a99bb0'
|
||||
cyan = '#8fadb0'
|
||||
white = '#b0b0b0'
|
||||
|
||||
|
||||
[colors.bright]
|
||||
black = '#3a3a3a'
|
||||
red = '#d89a9a'
|
||||
green = '#b0ccaf'
|
||||
yellow = '#d8cba0'
|
||||
blue = '#a9afbd'
|
||||
magenta = '#beb0c4'
|
||||
cyan = '#a9c4c7'
|
||||
white = '#f0f0f0'
|
||||
|
||||
|
||||
[colors.dim]
|
||||
black = '#161616'
|
||||
red = '#c77b7b'
|
||||
green = '#9cb89c'
|
||||
yellow = '#c7b98b'
|
||||
blue = '#8b95a9'
|
||||
magenta = '#a99bb0'
|
||||
cyan = '#8fadb0'
|
||||
white = '#b0b0b0'
|
||||
@@ -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("<span foreground='%s'>%s</span> %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("<span foreground='%s00'> </span>", 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("<span foreground='%s'>%s</span>", 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("<span font_size='large'></span>", 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("<span foreground='%s'><span font_size='large'></span> n/a</span>", colors.disabled)
|
||||
return
|
||||
end
|
||||
muted = muted == "yes"
|
||||
pct = pct or "0"
|
||||
w.markup = muted and string.format("<span foreground='%s'>MUTE</span>", colors.yellow) or widgets.label("<span font_size='large'></span>", 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(
|
||||
"<span font_family='JetBrainsMono Nerd Font' foreground='%s' font_size='large'>%s</span> ",
|
||||
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)
|
||||
@@ -68,6 +68,13 @@ add_to_path "$HOME/.odin/"
|
||||
|
||||
export PATH
|
||||
|
||||
# ==============================================================================
|
||||
# AUTO COMPLETE
|
||||
# ==============================================================================
|
||||
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
fi
|
||||
|
||||
# ==============================================================================
|
||||
# ALIASES
|
||||
# ==============================================================================
|
||||
|
||||
+18
-11
@@ -2,21 +2,32 @@
|
||||
process-unmapped-keys yes
|
||||
)
|
||||
|
||||
;; HHKB Classic layout
|
||||
;; HHKB Professional Classic (Linux)
|
||||
;;
|
||||
;; Small key left of Space = Muhenkan
|
||||
;; Large key left of Space = Left Alt
|
||||
;;
|
||||
;; AwesomeWM:
|
||||
;; modkey = "Mod4"
|
||||
|
||||
(defsrc
|
||||
esc 1 2 3 4 5 6 7 8 9 0 - = \ grv
|
||||
tab q w e r t y u i o p [ ] bspc
|
||||
lctl a s d f g h j k l ; ' ret
|
||||
lsft z x c v b n m , . / rsft
|
||||
lmet lalt spc ralt rmet ;; swapped here
|
||||
muhenkan lalt spc ralt rmet
|
||||
)
|
||||
|
||||
(defalias
|
||||
nav (tap-hold 200 200 esc (layer-while-held navigation))
|
||||
)
|
||||
|
||||
(deflayer base
|
||||
@nav 1 2 3 4 5 6 7 8 9 0 - = \ grv
|
||||
tab q w e r t y u i o p [ ] bspc
|
||||
lctl a s d f g h j k l ; ' ret
|
||||
lsft z x c v b n m , . / rsft
|
||||
lmet lalt spc ralt rmet ;; swapped here
|
||||
tab q w e r t y u i o p [ ] bspc
|
||||
lctl a s d f g h j k l ; ' ret
|
||||
lsft z x c v b n m , . / rsft
|
||||
lmet lalt spc ralt rmet
|
||||
)
|
||||
|
||||
(deflayer navigation
|
||||
@@ -24,9 +35,5 @@
|
||||
tab _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
_ _ _ _ _ _ left down up rght _ _ _
|
||||
_ _ _ _ _ _ _ _ _ _ _ _
|
||||
_ lalt _ _ _
|
||||
)
|
||||
|
||||
(defalias
|
||||
nav (tap-hold 200 200 esc (layer-while-held navigation))
|
||||
_ lalt _ _ _
|
||||
)
|
||||
@@ -29,7 +29,6 @@ vim.o.completeopt = "menu,menuone,noselect,popup,fuzzy"
|
||||
vim.o.undofile = true
|
||||
vim.o.undodir = vim.fn.stdpath("state") .. "/undo"
|
||||
vim.o.errorformat = "%f(%l:%c) %m,%-G%.%#"
|
||||
vim.cmd.colorscheme('retrobox')
|
||||
-- -----------------------------
|
||||
-- @BINDS
|
||||
-- -----------------------------
|
||||
@@ -49,6 +48,13 @@ map("n", "<C-e>", ":Lex<CR>")
|
||||
map("n", "<C-backspace>", ":bd<CR>")
|
||||
map("i", "<C-h>", vim.lsp.buf.signature_help)
|
||||
-- -----------------------------
|
||||
-- @TRANSPARENCY
|
||||
-- -----------------------------
|
||||
vim.api.nvim_set_hl(0, 'Normal', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'NormalFloat', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'FloatBorder', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'Pmenu', { bg = 'none' })
|
||||
-- -----------------------------
|
||||
-- @AUTOCMDS
|
||||
-- -----------------------------
|
||||
-- Terminals should open with insert mode
|
||||
|
||||
@@ -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;
|
||||
},
|
||||
)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
### Sway Config
|
||||
include ~/.config/sway/noctalia
|
||||
|
||||
output HDMI-A-1 scale 1.21
|
||||
|
||||
set $mod Mod4
|
||||
|
||||
#
|
||||
# Applications
|
||||
#
|
||||
|
||||
set $term alacritty
|
||||
set $editor emacs
|
||||
set $filemanager thunar
|
||||
|
||||
#
|
||||
# Outputs
|
||||
#
|
||||
#output * bg #111111 solid_color
|
||||
|
||||
#
|
||||
# Appearance
|
||||
#
|
||||
|
||||
seat seat0 xcursor_theme oreo_white_cursors 28
|
||||
corner_radius 10
|
||||
|
||||
default_border pixel 4
|
||||
default_floating_border pixel 4
|
||||
|
||||
gaps inner 8
|
||||
gaps outer 0
|
||||
|
||||
focus_follows_mouse yes
|
||||
|
||||
#
|
||||
# Workspaces
|
||||
#
|
||||
|
||||
workspace 1
|
||||
workspace 2
|
||||
workspace 3
|
||||
workspace 4
|
||||
workspace 5
|
||||
|
||||
#
|
||||
# Window behaviour
|
||||
#
|
||||
|
||||
floating_modifier $mod
|
||||
|
||||
#
|
||||
# Movement
|
||||
#
|
||||
|
||||
bindsym $mod+h focus left
|
||||
bindsym $mod+j focus down
|
||||
bindsym $mod+k focus up
|
||||
bindsym $mod+l focus right
|
||||
|
||||
#
|
||||
# Move windows
|
||||
#
|
||||
|
||||
bindsym $mod+Ctrl+h move left
|
||||
bindsym $mod+Ctrl+j move down
|
||||
bindsym $mod+Ctrl+k move up
|
||||
bindsym $mod+Ctrl+l move right
|
||||
|
||||
#
|
||||
# Resize
|
||||
#
|
||||
|
||||
mode "resize" {
|
||||
bindsym h resize shrink width 20px
|
||||
bindsym j resize grow height 20px
|
||||
bindsym k resize shrink height 20px
|
||||
bindsym l resize grow width 20px
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
|
||||
bindsym $mod+Shift+r mode "resize"
|
||||
|
||||
#
|
||||
# Split orientation
|
||||
#
|
||||
|
||||
bindsym $mod+v splitv
|
||||
bindsym $mod+b splith
|
||||
|
||||
#
|
||||
# Fullscreen / floating
|
||||
#
|
||||
|
||||
bindsym $mod+f fullscreen toggle
|
||||
bindsym $mod+Ctrl+space floating toggle
|
||||
|
||||
#
|
||||
# Kill window
|
||||
#
|
||||
|
||||
bindsym $mod+q kill
|
||||
|
||||
#
|
||||
# Maximize
|
||||
#
|
||||
|
||||
bindsym $mod+m fullscreen disable, floating disable
|
||||
|
||||
# Launchers
|
||||
set $ipc noctalia msg
|
||||
|
||||
bindsym $mod+space exec $ipc panel-toggle launcher
|
||||
bindsym $mod+n exec $ipc panel-toggle control-center
|
||||
bindsym $mod+s exec $ipc settings-toggle
|
||||
|
||||
bindsym $mod+Return exec $editor
|
||||
bindsym $mod+t exec $term
|
||||
bindsym $mod+e exec $filemanager
|
||||
|
||||
# Screenshot
|
||||
bindsym $mod+Ctrl+p exec grimshot save area
|
||||
|
||||
#
|
||||
# Window cycling
|
||||
#
|
||||
|
||||
bindsym $mod+Tab focus next
|
||||
|
||||
#
|
||||
# Layouts
|
||||
#
|
||||
|
||||
bindsym $mod+w layout toggle split
|
||||
|
||||
#
|
||||
# Terminal layout reset
|
||||
#
|
||||
|
||||
bindsym $mod+Shift+space layout default
|
||||
|
||||
#
|
||||
# Audio Keys
|
||||
#
|
||||
|
||||
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +2%
|
||||
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -2%
|
||||
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
|
||||
#
|
||||
# Workspaces
|
||||
#
|
||||
|
||||
bindsym $mod+1 workspace number 1
|
||||
bindsym $mod+2 workspace number 2
|
||||
bindsym $mod+3 workspace number 3
|
||||
bindsym $mod+4 workspace number 4
|
||||
bindsym $mod+5 workspace number 5
|
||||
|
||||
#
|
||||
# Move windows to workspace
|
||||
#
|
||||
|
||||
bindsym $mod+Ctrl+1 move container to workspace number 1
|
||||
bindsym $mod+Ctrl+2 move container to workspace number 2
|
||||
bindsym $mod+Ctrl+3 move container to workspace number 3
|
||||
bindsym $mod+Ctrl+4 move container to workspace number 4
|
||||
bindsym $mod+Ctrl+5 move container to workspace number 5
|
||||
|
||||
#
|
||||
# Floating rules
|
||||
#
|
||||
|
||||
for_window [app_id="pavucontrol"] floating enable
|
||||
for_window [app_id="blueman-manager"] floating enable
|
||||
for_window [title="Event Tester"] floating enable
|
||||
|
||||
#
|
||||
# Reload
|
||||
#
|
||||
|
||||
bindsym $mod+Ctrl+r reload
|
||||
|
||||
#
|
||||
# Exit sway
|
||||
#
|
||||
|
||||
bindsym $mod+Shift+q exit
|
||||
|
||||
#
|
||||
# Mouse
|
||||
#
|
||||
bindsym --whole-window $mod+Button1 move
|
||||
bindsym --whole-window $mod+Button3 resize
|
||||
|
||||
# Startup
|
||||
exec pgrep -x noctalia >/dev/null || noctalia
|
||||
exec pipewire
|
||||
@@ -0,0 +1,18 @@
|
||||
set $primary #a9afbd
|
||||
set $on_primary #121212
|
||||
set $secondary #7d8390
|
||||
set $tertiary #8b909c
|
||||
set $error #c77b7b
|
||||
set $surface #121212
|
||||
set $on_surface #e8e8e8
|
||||
set $on_surface_variant #b0b0b0
|
||||
set $outline #616161
|
||||
|
||||
## Window Colours
|
||||
# class border backgr. text indicator child_border
|
||||
client.focused $primary $surface $on_surface $primary $primary
|
||||
client.focused_inactive $outline $surface $on_surface_variant $outline $outline
|
||||
client.unfocused $outline $surface $on_surface_variant $outline $outline
|
||||
client.urgent $error $surface $on_surface $error $error
|
||||
client.placeholder $surface $surface $on_surface_variant $surface $surface
|
||||
client.background $surface
|
||||
+3
-5
@@ -84,12 +84,10 @@ if [ "$DO_LINKS" = true ]; then
|
||||
SKIPPED=0
|
||||
|
||||
link_file "$DOTFILES_DIR/config/bash/bashrc" "$HOME/.bashrc"
|
||||
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
||||
link_file "$DOTFILES_DIR/config/alacritty" "$HOME/.config/alacritty"
|
||||
link_file "$DOTFILES_DIR/config/picom" "$HOME/.config/picom"
|
||||
link_file "$DOTFILES_DIR/config/awesome" "$HOME/.config/awesome"
|
||||
link_file "$DOTFILES_DIR/config/rofi" "$HOME/.config/rofi"
|
||||
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
||||
link_file "$DOTFILES_DIR/config/nvim" "$HOME/.config/nvim"
|
||||
link_file "$DOTFILES_DIR/config/sway" "$HOME/.config/sway"
|
||||
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
|
||||
|
||||
echo ""
|
||||
@@ -158,7 +156,7 @@ if [ "$DO_INSTALL" = true ]; then
|
||||
# build & dev tools
|
||||
base-devel valgrind tree-sitter-cli go
|
||||
# window manager & desktop
|
||||
picom xdotool wmctrl rofi kanata feh
|
||||
swayfx kanata
|
||||
# fonts
|
||||
noto-fonts-ttf noto-fonts-emoji
|
||||
)
|
||||
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
awesome-client 'show_dim()'
|
||||
rofi -show drun "$@"
|
||||
awesome-client 'hide_dim()'
|
||||
Reference in New Issue
Block a user