many many changes

[ AWESOMEWM ]
- set up better theme config somewhat
- start some work on new theme (currently nicknamed 'neo'. i don't even
  remember what i was doing here)
- add new global key combos for ames (and change existing ones to
  accomodate this)
- spawn ibus on load
- change tags

[ BETTERDISCORD ]
- include my settings.json for BetterDiscord
- start including my config for plugin CollapsibleUI
- include custom CSS (in the form of the .scss file only. i don't like
  committing the full CSS files if i don't need to)

[ THUNDERBIRD ]
- add filters for sorting aliexpress emails
- add filters for deleting spammy marketing emails from aliexpress
- add filters for sorting etsy emails
- add filters for deleting spammy marketing emails from etsy
- add filters for sorting myus emails
This commit is contained in:
ngoomie 2023-11-29 04:08:54 -07:00
parent 0eca73b1d3
commit 0a330f3379
81 changed files with 718 additions and 24 deletions

9
.gitignore vendored
View File

@ -24,12 +24,13 @@ fish/channel
rofi/theme.rasi rofi/theme.rasi
# ---> BetterDiscord # ---> BetterDiscord
# generalistic discord/data/betterdiscord.asar
discord/data/ discord/data/stable/*
!discord/data/stable/custom.scss
!discord/data/stable/settings.json
discord/plugins/* discord/plugins/*
!discord/plugins/CollapsibleUI.config.json
discord/themes/* discord/themes/*
# specific
### there's actually nothing here yet lol
# ---> status.cafe # ---> status.cafe
miscellany/websites/status cafe/*.css miscellany/websites/status cafe/*.css

View File

@ -212,7 +212,7 @@ function _M.get()
group = "awesome" }), group = "awesome" }),
--- open the run prompt [global::mod+r] --- open the run prompt [global::mod+r]
awful.key({ modkey }, "r", awful.key({ modkey, "Shift" }, "r",
function() function()
awful.screen.focused().mypromptbox:run() awful.screen.focused().mypromptbox:run()
end, end,
@ -256,7 +256,47 @@ function _M.get()
awful.util.spawn("rofi -show drun") awful.util.spawn("rofi -show drun")
end, end,
{ description = "open rofi launcher", { description = "open rofi launcher",
group = "launcher" }) group = "launcher" }),
--- ames: start/stop audio recording [global::mod+alt+r]
awful.key({ modkey, "Mod1" }, "r",
function()
awful.util.spawn("bash /home/nu/opt/ames/ames.sh -r")
end,
{ description = "start/stop audio recording",
group = "ames" }),
--- ames: screenshot selection [global::mod+alt+s]
awful.key({ modkey, "Mod1" }, "s",
function()
awful.util.spawn("bash /home/nu/opt/ames/ames.sh -s")
end,
{ description = "screenshot selection",
group = "ames" }),
--- ames: repeat previous screenshot selection [global::mod+alt+a]
awful.key({ modkey, "Mod1" }, "a",
function()
awful.util.spawn("bash /home/nu/opt/ames/ames.sh -a")
end,
{ description = "repeat previous screenshot selection",
group = "ames" }),
--- ames: screenshot active window [global::mod+alt+w]
awful.key({ modkey, "Mod1" }, "w",
function()
awful.util.spawn("bash /home/nu/opt/ames/ames.sh -w")
end,
{ description = "screenshot active window",
group = "ames" }),
--- ames: export copied text to card [global::mod+alt+c]
awful.key({ modkey, "Mod1" }, "c",
function()
awful.util.spawn("bash /home/nu/opt/ames/ames.sh -c")
end,
{ description = "export copied text to card",
group = "ames" })
) )
return global_keys return global_keys

View File

@ -52,7 +52,8 @@ function _M.get(clientkeys, clientbuttons)
"Picture-in-picture", "Picture-in-picture",
"review files to import", -- Hydrus import window "review files to import", -- Hydrus import window
"Spotify", "Spotify",
"Calculator" "Calculator",
"Steam Games List"
}, },
role = { role = {
"AlarmWindow", -- Thunderbird's calendar. "AlarmWindow", -- Thunderbird's calendar.

View File

@ -1,3 +1,7 @@
local awful = require("awful") local awful = require("awful")
awful.spawn.single_instance("picom --config /home/nu/.config/picom/picom.conf") awful.spawn.single_instance("picom --config /home/nu/.config/picom/picom.conf")
--- TODO: fix reloads spawning an additional instance of caffeine
--- adding `killall -9 caffeine-ng` before doesn't work for some reason?
--- awful.spawn.single_instance("caffeine")
awful.spawn.single_instance("ibus-daemon -drxR")

View File

@ -8,16 +8,13 @@ local _M = {}
function _M.get () function _M.get ()
local tags = {} local tags = {}
awful.tag.add("➊ home", awful.tag.add("1",
{ layout = awful.layout.suit.floating, }) { layout = awful.layout.suit.floating, })
awful.tag.add("➋ code", awful.tag.add("2",
{ layout = awful.layout.suit.tile, })
awful.tag.add("➌ art",
{ layout = awful.layout.suit.floating, }) { layout = awful.layout.suit.floating, })
awful.tag.add("➍ games", awful.tag.add("3",
{ layout = awful.layout.suit.floating, }) { layout = awful.layout.suit.floating, })
return tags return tags

View File

@ -3,8 +3,7 @@ local home = os.getenv("HOME")
local _M = { local _M = {
terminal = "alacritty", terminal = "alacritty",
file_manager = "Thunar", file_manager = "Thunar",
modkey = "Mod4", modkey = "Mod4"
wallpaper = "/usr/share/backgrounds/custom/space_station.jpg"
} }
return _M return _M

View File

@ -16,10 +16,12 @@ RC.vars = require("main.user_vars")
require("main.errors") require("main.errors")
------ theme stuff ------ theme stuff
--- TODO: implement a not-shitty way of handling multiple themes local themename = "spacestation"
--local theme = require("themes.spacestation") local style = {
beautiful.init("~/.config/awesome/themes/spacestation/theme.lua") vars = require("themes." .. themename .. ".vars")
beautiful.wallpaper = RC.vars.wallpaper }
beautiful.init("~/.config/awesome/themes/" .. themename .. "/theme.lua")
beautiful.wallpaper = style.vars.wallpaper
------- custom Local Library ------- custom Local Library
--- main --- main
@ -69,7 +71,7 @@ root.keys(RC.global_keys)
mykeyboardlayout = awful.widget.keyboardlayout() mykeyboardlayout = awful.widget.keyboardlayout()
------ statusbar ------ statusbar
require("deco.statusbar") require("themes."..themename..".statusbar")
------ rules ------ rules
--- rules to apply to new clients --- rules to apply to new clients

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

View File

@ -0,0 +1,84 @@
-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
-- Wibox handling library
local wibox = require("wibox")
-- Custom Local Library: Common Functional Decoration
local deco = {
wallpaper = require("deco.wallpaper"),
taglist = require("deco.taglist"),
tasklist = require("deco.tasklist"),
borders = require("deco.borders")
}
local taglist_buttons = deco.taglist()
local tasklist_buttons = deco.tasklist()
local _M = {}
-- Custom Local Library: widgets
local volume_widget = require('awesome-wm-widgets.pactl-widget.volume')
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Create a textclock widget
text_clock = wibox.widget.textclock('%l:%M %p :: %b. %e, %Y ')
awful.screen.connect_for_each_screen(function(s)
-- Wallpaper
set_wallpaper(s)
-- Create a promptbox for each screen
s.mypromptbox = awful.widget.prompt()
-- Create an imagebox widget which will contain an icon indicating which layout we're using.
-- We need one layoutbox per screen.
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),
awful.button({ }, 4, function () awful.layout.inc( 1) end),
awful.button({ }, 5, function () awful.layout.inc(-1) end)
))
-- Create a taglist widget
s.mytaglist = awful.widget.taglist {
screen = s,
filter = awful.widget.taglist.filter.all,
buttons = taglist_buttons
}
-- Create a tasklist widget
s.mytasklist = awful.widget.tasklist {
screen = s,
filter = awful.widget.tasklist.filter.currenttags,
buttons = tasklist_buttons
}
-- Create the wibox
s.mywibox = awful.wibar({ position = "top", screen = s, height = 25 })
-- Add widgets to the wibox
s.mywibox:setup {
layout = wibox.layout.align.horizontal,
{ -- Left widgets
layout = wibox.layout.fixed.horizontal,
-- RC.launcher,
s.mytaglist,
s.mypromptbox,
},
s.mytasklist, -- Middle widget
{ -- Right widgets
layout = wibox.layout.fixed.horizontal,
wibox.widget.systray(),
volume_widget{
widget_type = 'arc',
tooltip = 'true'
},
text_clock,
s.mylayoutbox
},
}
end)

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

View File

@ -0,0 +1,153 @@
------------------------------
--- spacestation - ngoomie ---
------------------------------
local theme_assets = require("beautiful.theme_assets")
local xresources = require("beautiful.xresources")
local dpi = xresources.apply_dpi
local gfs = require("gears.filesystem")
local themes_path = gfs.get_themes_dir()
local theme = {
color = {
transparent = "#00000000",
dark = "#3b3b3b",
white = "#fbfbfb",
black = "#191919",
},
fonts = {
main = "Noto Sans CJK JP "
}
}
theme.font = theme.fonts.main .. "Medium 9"
theme.bg_normal = theme.color.dark .. "70"
theme.bg_focus = theme.color.white
theme.bg_urgent = theme.color.dark
theme.bg_minimize = theme.color.transparent
theme.bg_systray = theme.color.transparent
theme.fg_normal = theme.color.white
theme.fg_focus = theme.color.black
theme.fg_urgent = theme.color.white
theme.fg_minimize = theme.color.white
theme.border_width = 0
theme.border_normal = theme.color.dark
theme.border_focus = theme.color.dark
theme.border_marked = theme.color.dark
theme.notification_font = theme.fonts.main .. "10"
theme.notification_bg = theme.bg_normal
theme.notification_fg = theme.fg_normal
theme.notification_border_color = theme.border_normal
theme.tooltip_fg_color = theme.color.white
theme.tooltip_bg_color = theme.color.dark .. 38
theme.tooltip_border_color = theme.color.dark
theme.prompt_bg = theme.bg_normal
theme.tasklist_bg_normal = theme.bg_minimize
-- There are other variable sets
-- overriding the default one when
-- defined, the sets are:
-- taglist_[bg|fg]_[focus|urgent|occupied|empty|volatile]
-- tasklist_[bg|fg]_[focus|urgent]
-- titlebar_[bg|fg]_[normal|focus]
-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
-- mouse_finder_[color|timeout|animate_timeout|radius|factor]
-- prompt_[fg|bg|fg_cursor|bg_cursor|font]
-- hotkeys_[bg|fg|border_width|border_color|shape|opacity|modifiers_fg|label_bg|label_fg|group_margin|font|description_font]
-- Example:
--theme.taglist_bg_focus = "#ff0000"
-- Generate taglist squares:
local taglist_square_size = dpi(4)
theme.taglist_squares_sel = theme_assets.taglist_squares_sel(
taglist_square_size, theme.fg_normal
)
theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel(
taglist_square_size, theme.fg_normal
)
-- Variables set for theming notifications:
-- notification_font
-- notification_[bg|fg]
-- notification_[width|height|margin]
-- notification_[border_color|border_width|shape|opacity]
-- Variables set for theming the menu:
-- menu_[bg|fg]_[normal|focus]
-- menu_[border_color|border_width]
theme.menu_submenu_icon = themes_path.."default/submenu.png"
theme.menu_height = dpi(17)
theme.menu_width = dpi(100)
theme.menu_bg_normal = theme.bg_normal
theme.menu_bg_focus = theme.bg_focus
theme.menu_border_color = theme.fg_normal
-- You can add as many variables as
-- you wish and access them by using
-- beautiful.variable in your rc.lua
--theme.bg_widget = "#cc0000"
-- Define the image to load
theme.titlebar_close_button_normal = themes_path.."default/titlebar/close_normal.png"
theme.titlebar_close_button_focus = themes_path.."default/titlebar/close_focus.png"
theme.titlebar_minimize_button_normal = themes_path.."default/titlebar/minimize_normal.png"
theme.titlebar_minimize_button_focus = themes_path.."default/titlebar/minimize_focus.png"
theme.titlebar_ontop_button_normal_inactive = themes_path.."default/titlebar/ontop_normal_inactive.png"
theme.titlebar_ontop_button_focus_inactive = themes_path.."default/titlebar/ontop_focus_inactive.png"
theme.titlebar_ontop_button_normal_active = themes_path.."default/titlebar/ontop_normal_active.png"
theme.titlebar_ontop_button_focus_active = themes_path.."default/titlebar/ontop_focus_active.png"
theme.titlebar_sticky_button_normal_inactive = themes_path.."default/titlebar/sticky_normal_inactive.png"
theme.titlebar_sticky_button_focus_inactive = themes_path.."default/titlebar/sticky_focus_inactive.png"
theme.titlebar_sticky_button_normal_active = themes_path.."default/titlebar/sticky_normal_active.png"
theme.titlebar_sticky_button_focus_active = themes_path.."default/titlebar/sticky_focus_active.png"
theme.titlebar_floating_button_normal_inactive = themes_path.."default/titlebar/floating_normal_inactive.png"
theme.titlebar_floating_button_focus_inactive = themes_path.."default/titlebar/floating_focus_inactive.png"
theme.titlebar_floating_button_normal_active = themes_path.."default/titlebar/floating_normal_active.png"
theme.titlebar_floating_button_focus_active = themes_path.."default/titlebar/floating_focus_active.png"
theme.titlebar_maximized_button_normal_inactive = themes_path.."default/titlebar/maximized_normal_inactive.png"
theme.titlebar_maximized_button_focus_inactive = themes_path.."default/titlebar/maximized_focus_inactive.png"
theme.titlebar_maximized_button_normal_active = themes_path.."default/titlebar/maximized_normal_active.png"
theme.titlebar_maximized_button_focus_active = themes_path.."default/titlebar/maximized_focus_active.png"
-- You can use your own layout icons like this:
theme.layout_fairh = themes_path.."default/layouts/fairhw.png"
theme.layout_fairv = themes_path.."default/layouts/fairvw.png"
theme.layout_floating = themes_path.."default/layouts/floatingw.png"
theme.layout_magnifier = themes_path.."default/layouts/magnifierw.png"
theme.layout_max = themes_path.."default/layouts/maxw.png"
theme.layout_fullscreen = themes_path.."default/layouts/fullscreenw.png"
theme.layout_tilebottom = themes_path.."default/layouts/tilebottomw.png"
theme.layout_tileleft = themes_path.."default/layouts/tileleftw.png"
theme.layout_tile = themes_path.."default/layouts/tilew.png"
theme.layout_tiletop = themes_path.."default/layouts/tiletopw.png"
theme.layout_spiral = themes_path.."default/layouts/spiralw.png"
theme.layout_dwindle = themes_path.."default/layouts/dwindlew.png"
theme.layout_cornernw = themes_path.."default/layouts/cornernww.png"
theme.layout_cornerne = themes_path.."default/layouts/cornernew.png"
theme.layout_cornersw = themes_path.."default/layouts/cornersww.png"
theme.layout_cornerse = themes_path.."default/layouts/cornersew.png"
-- Generate Awesome icon:
theme.awesome_icon = theme_assets.awesome_icon(
theme.menu_height, theme.bg_focus, theme.fg_focus
)
-- Define the icon theme for application icons. If not set then the icons
-- from /usr/share/icons and /usr/share/icons/hicolor will be used.
theme.icon_theme = nil
return theme

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

View File

@ -0,0 +1,5 @@
local _M = {
wallpaper = "/usr/share/backgrounds/custom/space_station.jpg"
}
return _M

View File

@ -0,0 +1,27 @@
// --- SQUARE ICONS
// -- border radius vars
$small: 4px;
$medium: $small;
$large: 6px;
// -- clear mask that makes icons round in various spots
foreignObject[mask*="url(#"] {
mask: none;
//! SIDENOTE: while this removes the rounding, it also removes any cutout for the status icon. i'm going to be frank and say i think this looks like shit. i will look into crafting my own SVG instead at some point if i can, as an alternative to just entirely clearing it (but i'll still be using border rads for custom icon rounding)
}
// -- now apply border rads
// - user list icons (DM list, server member list)
.wrapper_edb6e0 svg foreignObject {
border-radius: $small;
}
// - user icons in chat
.avatar__08316 {
border-radius: $medium;
}
// - profile modal icons
.clickable__35918 svg foreignObject {
border-radius: $large;
}

View File

@ -0,0 +1,37 @@
{
"general": {
"voiceDisconnect": false,
"showToasts": true,
"mediaKeys": true
},
"addons": {
"addonErrors": true,
"editAction": "detached"
},
"customcss": {
"customcss": true,
"liveUpdate": true,
"openAction": "system"
},
"editor": {
"lineNumbers": true,
"minimap": true,
"hover": true,
"quickSuggestions": true,
"fontSize": 14,
"renderWhitespace": "selection"
},
"window": {
"transparency": false,
"removeMinimumSize": true,
"frame": false
},
"developer": {
"debugLogs": false,
"devTools": true,
"debuggerHotkey": false,
"reactDevTools": false,
"inspectElement": true,
"devToolsWarning": true
}
}

View File

@ -0,0 +1,46 @@
{
"currentVersionInfo": {
"version": "7.4.2",
"hasShownChangelog": true
},
"cuiSettingsVersion": "10",
"disableTransitions": "false",
"transitionSpeed": "250",
"disableToolbarCollapse": "false",
"disableSettingsCollapse": "false",
"disableMsgBarBtnCollapse": "false",
"enableFullToolbarCollapse": "false",
"dynamicUncollapse": "true",
"dynamicUncollapseDistance": "30,30,30,30,30,30,30,30",
"dynamicUncollapseCloseDistance": "30,30,30,30,30,30,30,30",
"dynamicUncollapseDelay": "15",
"autoCollapse": "true",
"autoCollapseThreshold": "500,600,400,200,950,0,550,1000",
"conditionalAutoCollapse": "false",
"autoCollapseConditionals": ",,,,,,,",
"resizableChannelList": "true",
"resizableMembersList": "true",
"channelListWidth": "0",
"buttonsOrder": "1,2,4,6,7,3,5,8",
"dynamicUncollapseEnabled": "true,true,true,true,true,false,true,false",
"disabledButtonsStayCollapsed": "false",
"keyBindsEnabled": "true",
"keyStringList": "Alt+S,Alt+C,Alt+T,Alt+W,Alt+M,Alt+U,Alt+P,Alt+I",
"settingsButtonsMaxWidth": "100",
"messageBarButtonsMaxWidth": "200",
"messageBarButtonsMinWidth": "40",
"toolbarIconMaxWidth": "300",
"profilePanelMaxWidth": "340",
"toolbarMaxWidth": "800",
"userAreaMaxHeight": "300",
"msgBarMaxHeight": "400",
"windowBarHeight": "18",
"collapsedDistance": "0",
"buttonCollapseFudgeFactor": "10",
"serverListButtonActive": "true",
"channelListButtonActive": "true",
"msgBarButtonActive": "true",
"userAreaButtonActive": "true",
"profilePanelButtonActive": "false",
"membersListButtonActive": "true"
}

View File

@ -14,12 +14,21 @@ my %confDirs = (
"omf" => "fish", "omf" => "fish",
"picom" => "picom", "picom" => "picom",
"rofi" => "rofi", "rofi" => "rofi",
"BetterDiscord" => "discord",
"Thunar" => "thunar", "Thunar" => "thunar",
"polybar" => "polybar"
);
my %otherDirs = (
"/home/nu/.var/app/com.discordapp.Discord/config/BetterDiscord/"
=> "discord"
); );
# mount from %confDirs
while (my ($key, $value) = each %confDirs) { while (my ($key, $value) = each %confDirs) {
`mount --bind "/home/nu/.config\/$key" "/mnt/Storage/(500) Programming/598. Groups of smaller projects/dotfiles\/$value"` `mount --bind "/home/nu/.config\/$key" "/mnt/Storage/(500) Programming/598. Groups of smaller projects/dotfiles\/$value"`
} }
# mount from %otherDirs
while (my ($key, $value) = each %otherDirs) {
`mount --bind "$key" "/mnt/Storage/(500) Programming/598. Groups of smaller projects/dotfiles\/$value"`
}
print("Done!"); print("Done!");

53
miscellany/yt-dlp.pl Executable file
View File

@ -0,0 +1,53 @@
#! /usr/bin/env perl
use warnings;
use strict;
use utf8;
use YAML::Syck;
use File::Slurp;
# vars with static values during runtime
my $skip = " Skipping...\n";
my $conf = LoadFile('yt-dlp.yml');
# declare empty vars for use later
my $site;
my $type;
foreach my ($url) (@ARGV) {
if ($url =~ /^(https?:?\/\/)?((www|m)\.)?(youtube(-nocookie)?\.com|youtu\.be)/g ) {
$site = "yout";
print "[".$url."] YouTube URL";
if ( $url =~ /((watch\?v=)([0-9A-Za-z_-]{10}[048AEIMQUYcgkosw])|playlist|watch)(&|\?)(list=)(PL)([A-Z0-9]{16}|[0-9A-Za-z_-]{32})((&v=)([0-9A-Za-z_-]{10}[048AEIMQUYcgkosw]))?&?$/g ) {
$type = "lst";
print ": playlist\n";
} elsif ( $url =~ /((channel\/)(UC)?[0-9A-Za-z_-]{21}[AQgw]|(@|\/c\/|\/user\/).{1,})$/g ) {
$type = "usr";
print ": channel\n";
} elsif ( $url =~ /(watch\?v=)([0-9A-Za-z_-]{10}[048AEIMQUYcgkosw])(\?t=\d{3,5})?$/g ) {
$type = "vid";
print ": video\n";
} else {
print "\nCannot determine whether this is a video, playlist, or channel.".$skip;
}
} elsif ($url =~ /^(https?:\/\/)?((www)\.)?(bilibili\.com)/g ) {
$site = "bili";
print "[".$url."] Bilibili URL\n";
} elsif ($url =~ /^(https?:\/\/)?((www)\.)?(nicovideo\.jp)/g ) {
$site = "nico";
print "[".$url."] niconico URL\n";
} else {
print "Unknown or invalid URL: `".$url."`".$skip;
}
}

5
miscellany/yt-dlp.yml Normal file
View File

@ -0,0 +1,5 @@
default:
video: --write-thumbnail --write-link --write-info-json
youtube:
video: --write-thumbnail --write-link --sponsorblock-mark=all --write-info-json

172
polybar/config.ini Normal file
View File

@ -0,0 +1,172 @@
;==========================================================
;
;
; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
;
;
; To learn more about how to configure Polybar
; go to https://github.com/polybar/polybar
;
; The README contains a lot of information
;
;==========================================================
[colors]
background = #282A2E
background-alt = #373B41
foreground = #C5C8C6
primary = #F0C674
secondary = #8ABEB7
alert = #A54242
disabled = #707880
[bar/example]
width = 100%
height = 24pt
radius = 6
; dpi = 96
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 3pt
border-size = 4pt
border-color = #00000000
padding-left = 0
padding-right = 1
module-margin = 1
separator = |
separator-foreground = ${colors.disabled}
font-0 = monospace;2
modules-left = xworkspaces xwindow
modules-right = filesystem pulseaudio xkeyboard memory cpu wlan eth date
cursor-click = pointer
cursor-scroll = ns-resize
enable-ipc = true
; tray-position = right
; wm-restack = generic
; wm-restack = bspwm
; wm-restack = i3
; override-redirect = true
[module/xworkspaces]
type = internal/xworkspaces
label-active = %name%
label-active-background = ${colors.background-alt}
label-active-underline= ${colors.primary}
label-active-padding = 1
label-occupied = %name%
label-occupied-padding = 1
label-urgent = %name%
label-urgent-background = ${colors.alert}
label-urgent-padding = 1
label-empty = %name%
label-empty-foreground = ${colors.disabled}
label-empty-padding = 1
[module/xwindow]
type = internal/xwindow
label = %title:0:60:...%
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.disabled}
[module/pulseaudio]
type = internal/pulseaudio
format-volume-prefix = "VOL "
format-volume-prefix-foreground = ${colors.primary}
format-volume = <label-volume>
label-volume = %percentage%%
label-muted = muted
label-muted-foreground = ${colors.disabled}
[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock
label-layout = %layout%
label-layout-foreground = ${colors.primary}
label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-foreground = ${colors.background}
label-indicator-background = ${colors.secondary}
[module/memory]
type = internal/memory
interval = 2
format-prefix = "RAM "
format-prefix-foreground = ${colors.primary}
label = %percentage_used:2%%
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = "CPU "
format-prefix-foreground = ${colors.primary}
label = %percentage:2%%
[network-base]
type = internal/network
interval = 5
format-connected = <label-connected>
format-disconnected = <label-disconnected>
label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected
[module/wlan]
inherit = network-base
interface-type = wireless
label-connected = %{F#F0C674}%ifname%%{F-} %essid% %local_ip%
[module/eth]
inherit = network-base
interface-type = wired
label-connected = %{F#F0C674}%ifname%%{F-} %local_ip%
[module/date]
type = internal/date
interval = 1
date = %H:%M
date-alt = %Y-%m-%d %H:%M:%S
label = %date%
label-foreground = ${colors.primary}
[settings]
screenchange-reload = true
pseudo-transparency = true
; vim:ft=dosini

View File

@ -0,0 +1,13 @@
# Thunderbird filters for AliExpress emails
## `sort.dat`
Moves all AliExpress emails to a folder of your choice
## `[SPAM] ae-news.dat`
Deletes emails sent from domains like `ae-news.a*@mail.aliexpress.com` since these seem to all be promotional mumbo jumbo that fills your inbox
## `[SPAM] promotion.dat`
Deletes emails sent from domain `promotion@aliexpress.com` UNLESS their subject matches `Price drop on your Wish List`, as all of these other emails are promotional mumbo jumbo that fills your inbox (other people might want to edit this filter so it even deletes the wishlist price drop notifications, I'd imagine)

View File

@ -0,0 +1,5 @@
name="SPAM: AliExpress (ae-news)"
enabled="yes"
type="17"
action="Delete"
condition="AND (from,begins with,ae-news.a) AND (from,ends with,@mail.aliexpress.com)"

View File

@ -0,0 +1,5 @@
name="SPAM: AliExpress (promotion@aliexpress.com minus wishlist price reductions)"
enabled="yes"
type="17"
action="Delete"
condition="AND (from,is,promotion@aliexpress.com) AND (subject,isn't,Price drop on your Wish List)"

View File

@ -0,0 +1,6 @@
name="AliExpress"
enabled="yes"
type="17"
action="Move to folder"
actionValue="imap://{YOUREMAIL}@{YOURPROVIDER}/INBOX/Shopping/AliExpress"
condition="OR (from,ends with,.aliexpress.com) OR (from,ends with,@aliexpress.com)"

View File

@ -0,0 +1,5 @@
name="SPAM: Etsy"
enabled="yes"
type="17"
action="Delete"
condition="AND (from,is,email@email.etsy.com)"

View File

@ -0,0 +1,6 @@
name="Etsy"
enabled="yes"
type="17"
action="Move to folder"
actionValue="imap://{YOUREMAIL}@{YOURPROVIDER}/INBOX/Shopping/Etsy"
condition="OR (from,ends with,.etsy.com) OR (from,ends with,@etsy.com)"

View File

@ -0,0 +1,6 @@
name="MyUS"
enabled="yes"
type="48"
action="Move to folder"
actionValue="imap://{YOUREMAIL}@{YOURPROVIDER}/INBOX/Shopping/MyUS"
condition="OR (from,ends with,.myus.com) OR (from,ends with,@myus.com)"

View File

@ -0,0 +1,13 @@
# Thunderbird filters
Here are my Thunderbird email filters. These are individual filters for things like sorting inbox content or deleting stuff that amounts to spam from otherwise okay senders (i.e. promotional emails from shopping sites or whatever)
You're meant to paste them into your `msgFilterRules.dat` for a given email account (after the header, which I have excluded from any individual filters saved here because they're basically just fragments of one of those files anyways)
## subfolder README.md contents
If there's more than a `sort.dat` in a given folder, it will have its own `README.md` which provides information on what each individual filter does.
If a filter is for sorting emails into folders, you'll need to edit it to replace the `actionValue` in the file with the imap URL to the folder you want to move it to. by default all of mine here have my actual email replaced with `{YOUREMAIL}@{YOURPROVIDER}` (partially because a lot of these are for my irl personal email which I just don't want to share here lol).
For the filters marked `[SPAM]`, if you have any sorting filters for the same domain you'll want to make sure the spam-deleting filters are listed above the sorting filters inside Thunderbird.