This commit is contained in:
2026-03-09 03:00:29 +03:00
parent bb2818a6aa
commit 7f7859534a
11 changed files with 675 additions and 0 deletions

View File

@@ -0,0 +1 @@
launch_prefix = "runapp"

View File

@@ -0,0 +1,2 @@
Cache=true
submenu = "nsfw"

View File

@@ -0,0 +1,36 @@
Name = "nsfw"
NamePretty = "Wallpaper switcher"
Icon = "applications-other"
Cache = true
Action = "swww img %VALUE%"
HideFromProviderlist = false
Description = "Wallpaper change menu"
SearchName = true
Parent = "wallpaper"
refresh_on_change = "/home/arch/Pictures/Wallpapers/NSFW"
function GetEntries()
local entries = {}
local wallpaper_dir = "/home/arch/Pictures/Wallpapers/NSFW"
local handle = io.popen("find '" ..
wallpaper_dir ..
"' -maxdepth 1 -type f -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' -o -name '*.gif' -o -name '*.bmp' -o -name '*.webp' 2>/dev/null")
if handle then
for line in handle:lines() do
local filename = line:match("([^/]+)$")
if filename then
table.insert(entries, {
Text = filename,
Subtext = "wallpaper",
Value = line,
Preview = line,
PreviewType = "file",
Icon = line
})
end
end
handle:close()
end
return entries
end

View File

@@ -0,0 +1,109 @@
Name = "twallpaper"
NamePretty = "Wallpaper switcher"
Icon = "applications-other"
Cache = true
Action = "swww img %VALUE%"
HideFromProviderlist = false
Description = "Wallpaper change menu"
SearchName = true
-- Конфигурация
local config = {
wallpaper_dir = os.getenv("HOME") .. "/Pictures/Wallpapers",
supported_formats = {
jpg = true, jpeg = true, png = true,
gif = true, bmp = true, webp = true
}
}
function GetEntries()
local entries = {}
local lfs = require("lfs")
-- Проверяем существование основной директории
local test_handle = io.open(config.wallpaper_dir, "r")
if not test_handle then
return {{
Text = "Error: Wallpaper directory not found!",
Subtext = config.wallpaper_dir,
Value = "",
Preview = "",
PreviewType = "text",
Icon = "error"
}}
end
test_handle:close()
-- Получаем список поддиректорий
local subdirs = {}
for item in lfs.dir(config.wallpaper_dir) do
if item ~= "." and item ~= ".." then
local path = config.wallpaper_dir .. "/" .. item
local attr = lfs.attributes(path)
if attr and attr.mode == "directory" then
table.insert(subdirs, item)
end
end
end
-- Создаём запись для основной директории (все обои без группировки)
table.insert(entries, {
Text = "All wallpapers",
Subtext = "Show all available wallpapers",
Value = "all",
Preview = "",
PreviewType = "text",
Icon = "view-fullscreen"
})
-- Создаём записи для поддиректорий (подменю)
for _, dirname in ipairs(subdirs) do
table.insert(entries, {
Text = dirname,
Subtext = "Wallpapers from '" .. dirname .. "'",
Value = dirname,
Preview = "",
PreviewType = "text",
Icon = "folder"
})
end
return entries
end
-- Функция для получения обоев из конкретной директории
function GetWallpapersFromDir(dirname)
local wallpapers = {}
local lfs = require("lfs")
local target_dir
if dirname == "all" then
target_dir = config.wallpaper_dir
else
target_dir = config.wallpaper_dir .. "/" .. dirname
end
for filename in lfs.dir(target_dir) do
if filename ~= "." and filename ~= ".." then
local filepath = target_dir .. "/" .. filename
local attr = lfs.attributes(filepath)
if attr and attr.mode == "file" then
local ext = filename:match("%.([^%.]+)$")
if ext and config.supported_formats[ext:lower()] then
table.insert(wallpapers, {
Text = filename,
Subtext = "From '" .. (dirname == "all" and "All" or dirname) .. "'",
Value = filepath,
Preview = filepath,
PreviewType = "file",
Icon = filepath
})
end
end
end
end
table.sort(wallpapers, function(a, b) return a.Text < b.Text end)
return wallpapers
end

View File

@@ -0,0 +1,58 @@
name = "other"
name_pretty = "Other"
icon = "applications-other"
[[entries]]
text = "Color Picker"
keywords = ["color", "picker", "hypr"]
actions = { "cp_use" = "sleep 0.5 && wl-copy $(hyprpicker)" }
icon = "color-picker"
[[entries]]
icon = "zoom-in"
text = "Zoom Toggle"
actions = { "zoom_use" = "hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float) | if . > 1 then 1 else 1.5 end')" }
[[entries]]
text = "Volume"
async = "echo $(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
icon = "audio-volume-high"
[entries.actions]
"volume_raise" = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+"
"volume_lower" = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"
"volume_mute" = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0"
"volume_unmute" = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1"
"volume_set" = "wpctl set-volume @DEFAULT_AUDIO_SINK@ %VALUE%"
[[entries]]
keywords = ["disk", "drive", "space"]
text = "Disk"
actions = { "disk_copy" = "wl-copy '%VALUE%'" }
async = """echo $(df -h / | tail -1 | awk '{print "Used: " $3 " - Available: " $4 " - Total: " $2}')"""
icon = "drive-harddisk"
[[entries]]
text = "Mic"
async = "echo $(wpctl get-volume @DEFAULT_AUDIO_SOURCE@"
icon = "audio-input-microphone"
actions = { "mic_set" = "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ %VALUE%" }
[[entries]]
text = "System"
async = """echo $(echo "Memory: $(free -h | awk '/^Mem:/ {printf "%s/%s", $3, $2}') | CPU: $(top -bn1 | grep 'Cpu(s)' | awk '{printf "%.1f%%", 100 - $8}')")"""
icon = "computer"
[[entries]]
text = "Today"
keywords = ["date", "today", "calendar"]
async = """echo $(date "+%H:%M - %d.%m. %A - KW %V")"""
icon = "clock"
actions = { "open_cal" = "xdg-open https://calendar.google.com" }
[[entries]]
text = "uuctl"
keywords = ["uuctl"]
icon = "applications-system"
submenu = "nsfw"

View File

@@ -0,0 +1,38 @@
Name = "wallpaper"
NamePretty = "Wallpaper switcher"
Description = "Wallpaper change menu"
Icon = "applications-other"
HideFromProviderlist = true
SearchName = true
Cache = true
RefreshOnChange = {"/home/arch/Pictures/Wallpapers"}
FixedOrder = true
function GetEntries()
local wallpaper_dir = os.getenv('HOME').."/Pictures/Wallpapers"
local entries = {}
local handle = io.popen("find '"..wallpaper_dir.."' -maxdepth 1 -type f -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' -o -name '*.gif' -o -name '*.bmp' -o -name '*.webp' 2>/dev/null")
if handle then
for line in handle:lines() do
local filename = line:match("([^/]+)$"):gsub('%..*', '')
if filename then
table.insert(entries, {
Text = filename,
PreviewType = "file",
Preview = line,
Icon = line,
Value = line,
Actions = {set = "swww img %VALUE%"}
})
end
end
handle:close()
end
table.insert(entries, {
Text = "NSFW",
Icon = "applications-system",
SubMenu = "nsfw"
})
return entries
end

View File

@@ -0,0 +1,258 @@
force_keyboard_focus = false # forces keyboard forcus to stay in Walker
close_when_open = true # close walker when invoking while already opened
click_to_close = true # closes walker if clicking outside of the main content area
as_window = false # launch walker as a regular window instead of layer shell application
single_click_activation = true # activate items with a single click opposed to a double click
selection_wrap = true # wrap list if at bottom or top
global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config
exact_search_prefix = "'" # disable fuzzy searching
theme = "test" # theme to use
disable_mouse = false # disable mouse (on input and list only)
debug = false # enables debug printing for some stuff, f.e. keybinds
page_jump_items = 10 # number of items to skip with Page Up/Down
hide_quick_activation = false # globally hide the quick activation buttons
hide_action_hints = false # globally hide the action hints
hide_action_hints_dmenu = false # hide the actions hints for dmenu
hide_return_action = false # hide actions that are bound to Return
resume_last_query = false # open walker with the last query in place
actions_as_menu = false # display all possible actions in a submenu
autoplay_videos = false # auto-play video previews
[shell]
layer = "overlay"
anchor_top = true
anchor_bottom = true
anchor_left = true
anchor_right = true
[columns]
"symbols" = 3
[placeholders]
"default" = { input = "Search", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
[keybinds]
close = ["Escape"]
next = ["Down"]
previous = ["Up"]
left = ["Left"]
right = ["Right"]
down = ["Down"]
up = ["Up"]
toggle_exact = ["ctrl e"]
resume_last_query = ["ctrl r"]
quick_activate = ["F1", "F2", "F3", "F4"]
page_down = ["Page_Down"]
page_up = ["Page_Up"]
show_actions = ["alt j"]
[providers]
default = [
"desktopapplications",
"calc",
# "runner",
"websearch",
] # providers to be queried by default
empty = ["desktopapplications"] # providers to be queried when query is empty
ignore_preview = [] # providers that should not show previews
max_results = 50 # global max results
[providers.argument_delimiter] # define the argument delimiter per provider
# runner = " "
[providers.sets] # define your own defaults/empty sets of providers
[providers.max_results_provider] # define max results per provider in here
[[providers.prefixes]]
prefix = ";"
provider = "providerlist"
[[providers.prefixes]]
prefix = ">"
provider = "runner"
[[providers.prefixes]]
prefix = "/"
provider = "files"
[[providers.prefixes]]
prefix = "."
provider = "symbols"
[[providers.prefixes]]
prefix = "!"
provider = "todo"
[[providers.prefixes]]
prefix = "%"
provider = "bookmarks"
[[providers.prefixes]]
prefix = "="
provider = "calc"
[[providers.prefixes]]
prefix = "@"
provider = "websearch"
[[providers.prefixes]]
prefix = ":"
provider = "clipboard"
[[providers.prefixes]]
prefix = "$"
provider = "windows"
[providers.clipboard]
time_format = "relative" # format for the clipboard item date
[providers.actions] # This will be MERGED/OVERWRITTEN with what the user specifies
fallback = [
{ action = "menus:open", label = "open", after = "Nothing" },
{ action = "menus:default", label = "run", after = "Close" },
{ action = "menus:parent", label = "back", bind = "Escape", after = "Nothing" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" },
]
dmenu = [{ action = "select", default = true, bind = "Return" }]
providerlist = [
{ action = "activate", default = true, bind = "Return", after = "ClearReload" },
]
bluetooth = [
{ action = "find", bind = "ctrl f", after = "AsyncClearReload" },
{ action = "remove", bind = "ctrl d", after = "AsyncReload" },
{ action = "trust", bind = "ctrl t", after = "AsyncReload" },
{ action = "untrust", bind = "ctrl t", after = "AsyncReload" },
{ action = "pair", bind = "Return", after = "AsyncReload" },
{ action = "connect", default = true, bind = "Return", after = "AsyncReload" },
{ action = "disconnect", default = true, bind = "Return", after = "AsyncReload" },
{ action = "power_on", label = "Power On", bind = "ctrl e", after = "AsyncReload" },
{ action = "power_off", label = "Power Off", bind = "ctrl e", after = "AsyncReload" },
]
archlinuxpkgs = [
{ action = "install", bind = "Return", default = true },
{ action = "remove", bind = "Return" },
{ action = "show_all", label = "show all", bind = "ctrl i", after = "AsyncClearReload" },
{ action = "refresh", label = "refresh", bind = "ctrl r", after = "AsyncReload" },
{ action = "visit_url", label = "open URL", bind = "ctrl o" },
{ action = "show_installed", label = "show installed", bind = "ctrl i", after = "AsyncClearReload" },
]
calc = [
{ action = "copy", default = true, bind = "Return" },
{ action = "delete", bind = "ctrl d", after = "AsyncReload" },
{ action = "delete_all", bind = "ctrl shift d", after = "AsyncReload" },
{ action = "save", bind = "ctrl s", after = "AsyncClearReload" },
]
websearch = [
{ action = "search", default = true, bind = "Return" },
{ action = "open_url", label = "open url", default = true, bind = "Return" },
]
desktopapplications = [
{ action = "start", default = true, bind = "Return" },
{ action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" },
{ action = "new_instance", label = "new instance", bind = "ctrl Return" },
{ action = "new_instance:keep", label = "new+next", bind = "ctrl alt Return", after = "KeepOpen" },
{ action = "pin", bind = "ctrl p", after = "AsyncReload" },
{ action = "unpin", bind = "ctrl p", after = "AsyncReload" },
{ action = "pinup", bind = "ctrl n", after = "AsyncReload" },
{ action = "pindown", bind = "ctrl m", after = "AsyncReload" },
]
dnfpackages = [
{ action = "install", label = "Install Package", bind = "Return", default = true },
{ action = "remove", label = "Remove Package", bind = "Return", default = true },
{ action = "show_all", label = "Show All", bind = "ctrl i", after = "AsyncClearReload" },
{ action = "show_installed", label = "Show Installed", bind = "ctrl i", after = "AsyncClearReload" },
{ action = "refresh", label = "Refresh", bind = "ctrl r", after = "AsyncClearReload" },
{ action = "visit_url", label = "Open URL", bind = "ctrl o" },
]
files = [
{ action = "open", default = true, bind = "Return" },
{ action = "opendir", label = "open dir", bind = "ctrl Return" },
{ action = "copypath", label = "copy path", bind = "ctrl shift c" },
{ action = "copyfile", label = "copy file", bind = "ctrl c" },
{ action = "localsend", label = "localsend", bind = "ctrl l" },
{ action = "refresh_index", label = "reload", bind = "ctrl r", after = "AsyncReload" },
]
1password = [
{ action = "copy_password", label = "copy password", default = true, bind = "Return" },
{ action = "copy_username", label = "copy username", bind = "shift Return" },
{ action = "copy_2fa", label = "copy 2fa", bind = "ctrl Return" },
]
bitwarden = [
{ action = "copypassword", label = "copy password", default = true, bind = "Return" },
{ action = "typepassword", label = "type password", default = true, bind = "ctrl p" },
{ action = "copyusername", label = "copy username", bind = "shift Return" },
{ action = "typeusername", label = "type username", bind = "ctrl u" },
{ action = "copyotp", label = "copy 2fa", bind = "ctrl Return" },
{ action = "typeotp", label = "type 2fa", bind = "ctrl t" },
{ action = "syncvault", label = "sync", bind = "ctrl s" },
]
todo = [
{ action = "save", default = true, bind = "Return", after = "AsyncClearReload" },
{ action = "save_next", label = "save & new", bind = "shift Return", after = "AsyncClearReload" },
{ action = "delete", bind = "ctrl d", after = "AsyncClearReload" },
{ action = "active", default = true, bind = "Return", after = "Nothing" },
{ action = "inactive", default = true, bind = "Return", after = "Nothing" },
{ action = "done", bind = "ctrl f", after = "Nothing" },
{ action = "change_category", bind = "ctrl y", label = "change category", after = "Nothing" },
{ action = "clear", bind = "ctrl x", after = "AsyncClearReload" },
{ action = "create", bind = "ctrl a", after = "AsyncClearReload" },
{ action = "search", bind = "ctrl a", after = "AsyncClearReload" },
]
runner = [
{ action = "run", default = true, bind = "Return" },
{ action = "runterminal", label = "run in terminal", bind = "shift Return" },
]
symbols = [
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
]
unicode = [
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
]
nirisessions = [
{ action = "start", label = "start", default = true, bind = "Return" },
{ action = "start_new", label = "start blank", bind = "ctrl Return" },
]
clipboard = [
{ action = "copy", default = true, bind = "Return" },
{ action = "remove", bind = "ctrl d", after = "AsyncClearReload" },
{ action = "remove_all", label = "clear", bind = "ctrl shift d", after = "AsyncClearReload" },
{ action = "show_images_only", label = "only images", bind = "ctrl i", after = "AsyncClearReload" },
{ action = "show_text_only", label = "only text", bind = "ctrl i", after = "AsyncClearReload" },
{ action = "show_combined", label = "show all", bind = "ctrl i", after = "AsyncClearReload" },
{ action = "pause", bind = "ctrl shift p" },
{ action = "unpause", bind = "ctrl shift p" },
{ action = "unpin", bind = "ctrl p", after = "AsyncClearReload" },
{ action = "pin", bind = "ctrl p", after = "AsyncClearReload" },
{ action = "edit", bind = "ctrl o" },
{ action = "localsend", bind = "ctrl l" },
]
bookmarks = [
{ action = "save", bind = "Return", after = "AsyncClearReload" },
{ action = "open", default = true, bind = "Return" },
{ action = "delete", bind = "ctrl d", after = "AsyncClearReload" },
{ action = "change_category", label = "Change category", bind = "ctrl y", after = "Nothing" },
{ action = "change_browser", label = "Change browser", bind = "ctrl b", after = "Nothing" },
{ action = "import", label = "Import", bind = "ctrl i", after = "AsyncClearReload" },
{ action = "create", bind = "ctrl a", after = "AsyncClearReload" },
{ action = "search", bind = "ctrl a", after = "AsyncClearReload" },
]
niriactions = [{ action = "execute", bind = "Return" }]

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkBox" id="ItemBox">
<style>
<class name="item-box"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="ItemTextBox">
<style>
<class name="item-text-box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<property name="spacing">0</property>
<child>
<object class="GtkLabel" id="ItemText">
<style>
<class name="item-text"></class>
</style>
<property name="vexpand">true</property>
<property name="xalign">0</property>
<property name="lines">1</property>
<property name="ellipsize">3</property>
<property name="single-line-mode">true</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="QuickActivation">
<style>
<class name="item-quick-activation"></class>
</style>
<property name="wrap">false</property>
<property name="valign">center</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
</interface>

View File

@@ -0,0 +1,122 @@
/* Color definitions */
@define-color window_bg_color #24283b7f;
@define-color accent_bg_color #54546d;
@define-color theme_fg_color #c0caf5;
@define-color error_bg_color #C34043;
@define-color error_fg_color #DCD7BA;
/* Reset all styles */
* {
all: unset;
}
/* Window wrapper */
.box-wrapper {
box-shadow:
0 19px 38px rgba(0, 0, 0, 0.3),
0 15px 12px rgba(0, 0, 0, 0.22);
background: @window_bg_color;
padding: 10px;
border-radius: 8px;
border: 2px solid darker(@accent_bg_color);
}
/* Input field */
.input {
caret-color: @theme_fg_color;
background: lighter(@window_bg_color);
padding: 10px;
color: @theme_fg_color;
border-radius: 10px;
}
.input placeholder {
opacity: 0.5;
}
/* List items */
.list, .keybinds {
color: @theme_fg_color;
}
.item-box {
border-radius: 10px;
padding: 10px;
}
child:hover .item-box,
child:selected .item-box {
background: alpha(@accent_bg_color, 0.25);
}
.item-text {
font-size: 14px;
}
.item-subtext {
font-size: 12px;
opacity: 0.5;
}
.item-image,
.item-image-text {
margin-right: 10px;
}
/* Quick activation labels */
.item-quick-activation {
margin-left: 10px;
background: alpha(@accent_bg_color, 0.25);
border-radius: 5px;
padding: 10px;
}
/* Placeholders */
.placeholder,
.elephant-hint {
color: @theme_fg_color;
opacity: 0.5;
}
/* Keybinds display */
.keybinds-wrapper {
border-top: 1px solid lighter(@window_bg_color);
font-size: 12px;
opacity: 0.5;
color: @theme_fg_color;
}
.keybind-bind {
font-weight: bold;
text-transform: lowercase;
}
/* Error display */
.error {
padding: 10px;
background: @error_bg_color;
color: @error_fg_color;
border-radius: 5px;
}
/* Preview pane */
.preview {
border: 1px solid alpha(@accent_bg_color, 0.25);
padding: 10px;
border-radius: 10px;
color: @theme_fg_color;
}
/* Icon sizes */
.normal-icons {
-gtk-icon-size: 16px;
}
.large-icons {
-gtk-icon-size: 32px;
}
/* Hide scrollbar */
scrollbar {
opacity: 0;
}