mirror of
https://github.com/elenapan/dotfiles.git
synced 2025-12-26 15:14:58 +08:00
217 lines
8.5 KiB
Lua
217 lines
8.5 KiB
Lua
local gears = require("gears")
|
|
local awful = require("awful")
|
|
local wibox = require("wibox")
|
|
local naughty = require("naughty")
|
|
local beautiful = require("beautiful")
|
|
local helpers = require("helpers")
|
|
local icons = require("icons")
|
|
local notifications = require("notifications")
|
|
|
|
local apps = {}
|
|
|
|
apps.browser = function ()
|
|
awful.spawn(user.browser, { switchtotag = true })
|
|
end
|
|
apps.file_manager = function ()
|
|
awful.spawn(user.file_manager, { floating = true })
|
|
end
|
|
apps.telegram = function ()
|
|
helpers.run_or_raise({class = 'TelegramDesktop'}, false, "telegram", { switchtotag = true })
|
|
end
|
|
apps.discord = function ()
|
|
-- Run or raise Discord running in the browser, spawned with Chromium browser's app mode
|
|
-- >> Ubuntu / Debian
|
|
-- helpers.run_or_raise({instance = 'discordapp.com__channels_@me'}, false, "chromium-browser --app=\"https://discordapp.com/channels/@me\"")
|
|
-- >> Arch
|
|
helpers.run_or_raise({instance = 'discordapp.com__channels_@me'}, false, "chromium --app=\"https://discordapp.com/channels/@me\"")
|
|
|
|
-- Run or raise Discord app
|
|
-- helpers.run_or_raise({class = 'discord'}, false, "discord")
|
|
end
|
|
apps.weechat = function ()
|
|
helpers.run_or_raise({instance = 'weechat'}, true, user.terminal.." --class weechat -e weechat")
|
|
end
|
|
apps.mail = function ()
|
|
helpers.run_or_raise({instance = 'email'}, false, user.email_client, {switchtotag = true})
|
|
end
|
|
apps.gimp = function ()
|
|
helpers.run_or_raise({class = 'Gimp'}, false, "gimp")
|
|
end
|
|
apps.steam = function ()
|
|
helpers.run_or_raise({class = 'Steam'}, false, "steam")
|
|
end
|
|
apps.lutris = function ()
|
|
helpers.run_or_raise({class = 'Lutris'}, false, "lutris")
|
|
end
|
|
apps.youtube = function ()
|
|
awful.spawn.with_shell("rofi_mpvtube")
|
|
end
|
|
apps.networks = function ()
|
|
awful.spawn.with_shell("rofi_networks")
|
|
end
|
|
apps.passwords = function ()
|
|
helpers.run_or_raise({class = 'KeePassXC'}, true, "keepassxc")
|
|
end
|
|
apps.volume = function ()
|
|
helpers.run_or_raise({class = 'Pavucontrol'}, true, "pavucontrol")
|
|
end
|
|
apps.torrent = function ()
|
|
helpers.run_or_raise({instance = 'torrent'}, true, user.terminal.." --class torrent -e transmission-remote-cli")
|
|
end
|
|
|
|
apps.editor = function ()
|
|
helpers.run_or_raise({instance = 'editor'}, false, user.editor, { switchtotag = true })
|
|
end
|
|
|
|
-- Toggle compositor
|
|
apps.compositor = function ()
|
|
awful.spawn.with_shell("sh -c 'pgrep picom > /dev/null && pkill picom || picom --experimental-backends --config ~/.config/picom/picom.conf & disown'")
|
|
end
|
|
|
|
local night_mode_notif
|
|
apps.night_mode = function ()
|
|
local cmd = "pgrep redshift > /dev/null && (pkill redshift && echo 'OFF') || (echo 'ON' && redshift -l 0:0 -t 3700:3700 -r &>/dev/null &)"
|
|
awful.spawn.easy_async_with_shell(cmd, function(out)
|
|
local message = out:match('ON') and "Activated!" or "Deactivated!"
|
|
night_mode_notif = notifications.notify_dwim({ title = "Night mode", message = message, app_name = "night_mode", icon = icons.image.redshift }, night_mode_notif)
|
|
end)
|
|
end
|
|
|
|
local screenkey_notif
|
|
apps.screenkey = function ()
|
|
local cmd = "pgrep screenkey > /dev/null && (pkill screenkey && echo 'OFF') || (echo 'ON' && screenkey --ignore Caps_Lock --bg-color '#FFFFFF' --font-color '#000000' &>/dev/null &)"
|
|
awful.spawn.easy_async_with_shell(cmd, function(out)
|
|
local message = out:match('ON') and "Activated!" or "Deactivated!"
|
|
screenkey_notif = notifications.notify_dwim({ title = "Screenkey", message = message, app_name = "screenkey", icon = icons.image.keyboard }, screenkey_notif)
|
|
end)
|
|
end
|
|
|
|
apps.record = function ()
|
|
awful.spawn.with_shell("screenrec.sh")
|
|
end
|
|
|
|
-- I only use emacs for org mode :)
|
|
apps.org = function ()
|
|
helpers.run_or_raise({class = 'Emacs'}, false, "emacs")
|
|
end
|
|
|
|
apps.music = function ()
|
|
helpers.scratchpad({instance = "music"}, user.music_client)
|
|
end
|
|
|
|
apps.process_monitor = function ()
|
|
helpers.run_or_raise({instance = 'htop'}, false, user.terminal.." --class htop -e htop", { switchtotag = true })
|
|
end
|
|
|
|
apps.process_monitor_gui = function ()
|
|
helpers.run_or_raise({class = 'Lxtask'}, false, "lxtask")
|
|
end
|
|
|
|
apps.temperature_monitor = function ()
|
|
helpers.run_or_raise({class = 'sensors'}, false, user.terminal.." --class sensors -e watch sensors", { switchtotag = true, tag = mouse.screen.tags[5] })
|
|
end
|
|
|
|
apps.battery_monitor = function ()
|
|
helpers.run_or_raise({class = 'battop'}, false, user.terminal.." --class battop -e battop", { switchtotag = true, tag = mouse.screen.tags[5] })
|
|
end
|
|
|
|
apps.markdown_input = function ()
|
|
helpers.scratchpad(
|
|
{ instance = "markdown_input" },
|
|
user.terminal.." --class markdown_input -e nvim -c 'startinsert' /tmp/scratchpad.md",
|
|
nil)
|
|
end
|
|
|
|
-- Scratchpad terminal with tmux (see bin/scratchpad)
|
|
apps.scratchpad = function()
|
|
helpers.scratchpad({instance = "scratchpad"}, "scratchpad", nil)
|
|
end
|
|
|
|
-- Screenshots
|
|
local capture_notif = nil
|
|
local screenshot_notification_app_name = "screenshot"
|
|
function apps.screenshot(action, delay)
|
|
-- Read-only actions
|
|
if action == "browse" then
|
|
awful.spawn.with_shell("cd "..user.dirs.screenshots.." && sxiv $(ls -t)")
|
|
return
|
|
elseif action == "gimp" then
|
|
awful.spawn.with_shell("cd "..user.dirs.screenshots.." && gimp $(ls -t | head -n1)")
|
|
naughty.notification({ message = "Opening last screenshot with GIMP", icon = icon, app_name = screenshot_notification_app_name})
|
|
return
|
|
end
|
|
|
|
-- Screenshot capturing actions
|
|
local cmd
|
|
local timestamp = os.date("%Y.%m.%d-%H.%M.%S")
|
|
local filename = user.dirs.screenshots.."/"..timestamp..".screenshot.png"
|
|
local maim_args = "-u -b 3 -m 5"
|
|
local icon = icons.image.screenshot
|
|
|
|
local prefix
|
|
if delay then
|
|
prefix = "sleep "..tostring(delay).." && "
|
|
else
|
|
prefix = ""
|
|
end
|
|
|
|
-- Configure action buttons for the notification
|
|
local screenshot_open = naughty.action { name = "Open" }
|
|
local screenshot_copy = naughty.action { name = "Copy" }
|
|
local screenshot_edit = naughty.action { name = "Edit" }
|
|
local screenshot_delete = naughty.action { name = "Delete" }
|
|
screenshot_open:connect_signal('invoked', function()
|
|
awful.spawn.with_shell("cd "..user.dirs.screenshots.." && sxiv $(ls -t)")
|
|
end)
|
|
screenshot_copy:connect_signal('invoked', function()
|
|
awful.spawn.with_shell("xclip -selection clipboard -t image/png "..filename.." &>/dev/null")
|
|
end)
|
|
screenshot_edit:connect_signal('invoked', function()
|
|
awful.spawn.with_shell("gimp "..filename.." >/dev/null")
|
|
end)
|
|
screenshot_delete:connect_signal('invoked', function()
|
|
awful.spawn.with_shell("rm "..filename)
|
|
end)
|
|
|
|
if action == "full" then
|
|
cmd = prefix.."maim "..maim_args.." "..filename
|
|
awful.spawn.easy_async_with_shell(cmd, function()
|
|
naughty.notification({
|
|
title = "Screenshot",
|
|
message = "Screenshot taken",
|
|
icon = icon,
|
|
actions = { screenshot_open, screenshot_copy, screenshot_edit, screenshot_delete },
|
|
app_name = screenshot_notification_app_name,
|
|
})
|
|
end)
|
|
elseif action == "selection" then
|
|
cmd = "maim "..maim_args.." -s "..filename
|
|
capture_notif = naughty.notification({ title = "Screenshot", message = "Select area to capture.", icon = icon, timeout = 1, app_name = screenshot_notification_app_name })
|
|
awful.spawn.easy_async_with_shell(cmd, function(_, __, ___, exit_code)
|
|
naughty.destroy(capture_notif)
|
|
if exit_code == 0 then
|
|
naughty.notification({
|
|
title = "Screenshot",
|
|
message = "Selection captured",
|
|
icon = icon,
|
|
actions = { screenshot_open, screenshot_copy, screenshot_edit, screenshot_delete },
|
|
app_name = screenshot_notification_app_name,
|
|
})
|
|
end
|
|
end)
|
|
elseif action == "clipboard" then
|
|
capture_notif = naughty.notification({ title = "Screenshot", message = "Select area to copy to clipboard", icon = icon })
|
|
cmd = "maim "..maim_args.." -s /tmp/maim_clipboard && xclip -selection clipboard -t image/png /tmp/maim_clipboard &>/dev/null && rm /tmp/maim_clipboard"
|
|
awful.spawn.easy_async_with_shell(cmd, function(_, __, ___, exit_code)
|
|
if exit_code == 0 then
|
|
capture_notif = notifications.notify_dwim({ title = "Screenshot", message = "Copied selection to clipboard", icon = icon, app_name = screenshot_notification_app_name }, capture_notif)
|
|
else
|
|
naughty.destroy(capture_notif)
|
|
end
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
|
|
return apps
|