Initial commit : dotfiles setup

This commit is contained in:
SeraphimeZelel
2025-09-05 21:07:00 +07:00
parent 1bf3d416ef
commit 5a689e8849
141 changed files with 5346 additions and 0 deletions

254
.config/btop/btop.conf Normal file
View File

@@ -0,0 +1,254 @@
#? Config file for btop v. 1.4.4
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "Default"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = False
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = True
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = False
#* Show processes as a tree.
proc_tree = False
#* Use the cpu graph colors in the process list.
proc_colors = True
#* Use a darkening gradient in the process list.
proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True
#* Show cpu graph for each process.
proc_cpu_graphs = True
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False
#* Show proc box on left side of screen instead of right.
proc_left = False
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = False
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = False
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False
#* Shows the system uptime in the CPU box.
show_uptime = True
#* Show cpu temperature.
check_temp = True
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False
#* Show CPU frequency.
show_cpu_freq = True
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = True
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = True
#* Show mem box below net box instead of above.
mem_below_net = False
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True
#* If swap memory should be shown in memory box.
show_swap = True
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = True
#* If mem box should be split to also show disks info.
show_disks = True
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False
#* Set to true to show available disk space for privileged users.
disk_free_priv = False
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = False
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = True
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = True
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = True
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = True
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""

76
.config/btop/btop.log Normal file
View File

@@ -0,0 +1,76 @@
2025/08/13 (16:57:54) | ===> btop++ v.1.4.0
2025/08/13 (16:57:54) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/13 (17:48:52) | ===> btop++ v.1.4.0
2025/08/13 (17:48:52) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/13 (19:00:22) | ===> btop++ v.1.4.0
2025/08/13 (19:00:22) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/13 (20:56:21) | ===> btop++ v.1.4.0
2025/08/13 (20:56:21) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/13 (21:24:05) | WARNING: Failed to join _runner thread on exit!
2025/08/13 (21:35:18) | ===> btop++ v.1.4.0
2025/08/13 (21:35:18) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/13 (23:52:54) | ===> btop++ v.1.4.0
2025/08/13 (23:52:54) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/13 (23:55:50) | ===> btop++ v.1.4.0
2025/08/13 (23:55:50) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/14 (11:03:26) | ===> btop++ v.1.4.0
2025/08/14 (11:03:26) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/15 (02:18:28) | ===> btop++ v.1.4.0
2025/08/15 (02:18:28) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/15 (02:29:21) | ===> btop++ v.1.4.0
2025/08/15 (02:29:21) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/15 (03:12:16) | ===> btop++ v.1.4.0
2025/08/15 (03:12:16) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/15 (04:05:13) | ===> btop++ v.1.4.0
2025/08/15 (04:05:13) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/16 (06:03:43) | ===> btop++ v.1.4.0
2025/08/16 (06:03:43) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/21 (13:58:33) | ===> btop++ v.1.4.0
2025/08/21 (13:58:33) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/21 (14:02:27) | ===> btop++ v.1.4.0
2025/08/21 (14:02:27) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (08:02:45) | ===> btop++ v.1.4.0
2025/08/24 (08:02:45) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (22:06:54) | ===> btop++ v.1.4.0
2025/08/24 (22:06:54) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (22:12:15) | ===> btop++ v.1.4.0
2025/08/24 (22:12:15) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (22:13:59) | ===> btop++ v.1.4.0
2025/08/24 (22:13:59) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (22:15:54) | ===> btop++ v.1.4.0
2025/08/24 (22:15:54) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (22:22:14) | ===> btop++ v.1.4.0
2025/08/24 (22:22:14) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (22:24:20) | ===> btop++ v.1.4.0
2025/08/24 (22:24:20) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/24 (23:46:41) | ===> btop++ v.1.4.0
2025/08/24 (23:46:41) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/25 (01:24:07) | ===> btop++ v.1.4.0
2025/08/25 (01:24:07) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported
2025/08/25 (22:42:52) | ===> btop++ v.1.4.0
2025/08/25 (22:42:52) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported

View File

@@ -0,0 +1,13 @@
[colors]
background=#0E1125
foreground=#e4e6ec
primary=#699AD3
secondary=#D1ACAF
tertiary=#9DAECF
highlight=#B0CBE7
accent=#CDD5EA
border=#929BB1
[options]
name=Pywal
author=Rion Zaphkiel

5
.config/cava/config Normal file
View File

@@ -0,0 +1,5 @@
[color]
gradient = 1
gradient_count = 2
gradient_color_1 = '#929ca3'
gradient_color_2 = '#717C82'

View File

@@ -0,0 +1,79 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform int bar_width; // bar width (configurable), not used here
uniform int bar_spacing; // space bewteen bars (configurable)
uniform vec3 u_resolution; // window resolution
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
uniform vec3 bg_color; // background color
uniform vec3 fg_color; // foreground color
uniform int gradient_count;
uniform vec3 gradient_colors[8]; // gradient colors
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
{
//create color based on fraction of this color and next color
float yr = (y - y_min) / (y_max - y_min);
return col_1 * (1.0 - yr) + col_2 * yr;
}
void main()
{
// find which bar to use based on where we are on the x axis
float x = u_resolution.x * fragCoord.x;
int bar = int(bars_count * fragCoord.x);
//calculate a bar size
float bar_size = u_resolution.x / bars_count;
//the y coordinate and bar values are the same
float y = bars[bar];
// make sure there is a thin line at bottom
if (y * u_resolution.y < 1.0)
{
y = 1.0 / u_resolution.y;
}
//draw the bar up to current height
if (y > fragCoord.y)
{
//make some space between bars basen on settings
if (x > (bar + 1) * (bar_size) - bar_spacing)
{
fragColor = vec4(bg_color,1.0);
}
else
{
if (gradient_count == 0)
{
fragColor = vec4(fg_color,1.0);
}
else
{
//find which color in the configured gradient we are at
int color = int((gradient_count - 1) * fragCoord.y);
//find where on y this and next color is supposed to be
float y_min = color / (gradient_count - 1.0);
float y_max = (color + 1.0) / (gradient_count - 1.0);
//make color
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
}
}
}
else
{
fragColor = vec4(bg_color,1.0);
}
}

View File

@@ -0,0 +1,34 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform vec3 u_resolution; // window resolution, not used here
//colors, configurable in cava config file
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
uniform vec3 fg_color; // foreground color, not used here
void main()
{
// find which bar to use based on where we are on the x axis
int bar = int(bars_count * fragCoord.x);
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
float y = (bars[bar]) * bar_y;
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
bar_r = bar_r * bar_r * 2;
// set color
fragColor.r = fg_color.x * y * bar_r;
fragColor.g = fg_color.y * y * bar_r;
fragColor.b = fg_color.z * y * bar_r;
}

View File

@@ -0,0 +1,14 @@
#version 330
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
// Output data ; will be interpolated for each fragment.
out vec2 fragCoord;
void main()
{
gl_Position = vec4(vertexPosition_modelspace,1);
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
}

View File

@@ -0,0 +1,79 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform int bar_width; // bar width (configurable), not used here
uniform int bar_spacing; // space bewteen bars (configurable)
uniform vec3 u_resolution; // window resolution
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
uniform vec3 bg_color; // background color
uniform vec3 fg_color; // foreground color
uniform int gradient_count;
uniform vec3 gradient_colors[8]; // gradient colors
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
{
//create color based on fraction of this color and next color
float yr = (y - y_min) / (y_max - y_min);
return col_1 * (1.0 - yr) + col_2 * yr;
}
void main()
{
// find which bar to use based on where we are on the x axis
float x = u_resolution.x * fragCoord.x;
int bar = int(bars_count * fragCoord.x);
//calculate a bar size
float bar_size = u_resolution.x / bars_count;
//the y coordinate and bar values are the same
float y = bars[bar];
// make sure there is a thin line at bottom
if (y * u_resolution.y < 1.0)
{
y = 1.0 / u_resolution.y;
}
//draw the bar up to current height
if (y > fragCoord.y)
{
//make some space between bars basen on settings
if (x > (bar + 1) * (bar_size) - bar_spacing)
{
fragColor = vec4(bg_color,1.0);
}
else
{
if (gradient_count == 0)
{
fragColor = vec4(fg_color,1.0);
}
else
{
//find which color in the configured gradient we are at
int color = int((gradient_count - 1) * fragCoord.y);
//find where on y this and next color is supposed to be
float y_min = color / (gradient_count - 1.0);
float y_max = (color + 1.0) / (gradient_count - 1.0);
//make color
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
}
}
}
else
{
fragColor = vec4(bg_color,1.0);
}
}

View File

@@ -0,0 +1,34 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform vec3 u_resolution; // window resolution, not used here
//colors, configurable in cava config file
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
uniform vec3 fg_color; // foreground color, not used here
void main()
{
// find which bar to use based on where we are on the x axis
int bar = int(bars_count * fragCoord.x);
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
float y = (bars[bar]) * bar_y;
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
bar_r = bar_r * bar_r * 2;
// set color
fragColor.r = fg_color.x * y * bar_r;
fragColor.g = fg_color.y * y * bar_r;
fragColor.b = fg_color.z * y * bar_r;
}

View File

@@ -0,0 +1,14 @@
#version 330
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
// Output data ; will be interpolated for each fragment.
out vec2 fragCoord;
void main()
{
gl_Position = vec4(vertexPosition_modelspace,1);
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
}

View File

View File

View File

@@ -0,0 +1,59 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"type": "kitty-direct",
"source": "/home/rionzaphkiel/.config/fastfetch/logo/john_wuthering.png",
"padding": {
"top": 1,
"left": 2
}
},
"display": {
"separator": " ",
"color": {
"title": "yellow"
}
},
"modules": [
"break",
"title",
{
"type": "os",
"key": "os ",
"keyColor": "white"
},
{
"type": "wm",
"key": "de ",
"keyColor": "white"
},
{
"type": "shell",
"key": "shell ",
"keyColor": "white"
},
{
"type": "uptime",
"format": "{2}h {3}m",
"key": "uptime",
"keyColor": "white"
},
{
"type": "command",
"key": "os age",
"text": "birth_install=$(stat -c %W /); current=$(date +%s); days_difference=$(( (current - birth_install) / 86400 )); echo $days_difference days",
"keyColor": "white"
},
{
"type": "memory",
"key": "memory",
"keyColor": "white"
},
{
"type": "command",
"key": "wife ",
"format": "Artoria Pendragon",
"keyColor": "white"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

25
.config/wal/colors.json Normal file
View File

@@ -0,0 +1,25 @@
{
"special": {
"background": "#1A1A1A",
"foreground": "#FFD700",
"cursor": "#FFE55C"
},
"colors": {
"color0": "#1A1A1A",
"color1": "#FFD700",
"color2": "#FFF27C",
"color3": "#FFE55C",
"color4": "#FFCC00",
"color5": "#FFFACD",
"color6": "#FFD54F",
"color7": "#FDFDFD",
"color8": "#444444",
"color9": "#FFD700",
"color10": "#FFF27C",
"color11": "#FFE55C",
"color12": "#FFCC00",
"color13": "#FFFACD",
"color14": "#FFD54F",
"color15": "#FFFFFF"
}
}

4
.config/wal/hooks/hooks.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
~/.dotfiles/.script/discord-pywalsync.sh
~/.dotfiles/.script/cava-pywalsync.sh
~/.dotfiles/.script/wlogout-pywalsync.sh

View File

@@ -0,0 +1,25 @@
{
"special": {
"background": "#10141a",
"foreground": "#e1e3e4",
"cursor": "#e1e3e4"
},
"colors": {
"color0": "#10141a",
"color1": "#387a93",
"color2": "#2b93a4",
"color3": "#6b5b53",
"color4": "#4e5a68",
"color5": "#7c8c9a",
"color6": "#47b8c7",
"color7": "#e1e3e4",
"color8": "#9ca0a1",
"color9": "#387a93",
"color10": "#2b93a4",
"color11": "#6b5b53",
"color12": "#4e5a68",
"color13": "#7c8c9a",
"color14": "#47b8c7",
"color15": "#e1e3e4"
}
}

View File

@@ -0,0 +1,25 @@
{
"special": {
"background": "#13130e",
"foreground": "#eaeadf",
"cursor": "#eaeadf"
},
"colors": {
"color0": "#13130e",
"color1": "#ACA635",
"color2": "#9B9965",
"color3": "#D2D067",
"color4": "#A5A697",
"color5": "#C2BCA4",
"color6": "#DDDCA4",
"color7": "#eaeadf",
"color8": "#a3a39c",
"color9": "#ACA635",
"color10": "#9B9965",
"color11": "#D2D067",
"color12": "#A5A697",
"color13": "#C2BCA4",
"color14": "#DDDCA4",
"color15": "#eaeadf"
}
}

View File

@@ -0,0 +1,25 @@
{
"special": {
"background": "#1e1f24",
"foreground": "#e3e4e6",
"cursor": "#e3e4e6"
},
"colors": {
"color0": "#1e1f24",
"color1": "#3d5a9d",
"color2": "#6c89c8",
"color3": "#5a5f6a",
"color4": "#5679c0",
"color5": "#878c93",
"color6": "#5f7cb6",
"color7": "#e3e4e6",
"color8": "#9ea1a3",
"color9": "#3d5a9d",
"color10": "#6c89c8",
"color11": "#5a5f6a",
"color12": "#5679c0",
"color13": "#878c93",
"color14": "#5f7cb6",
"color15": "#e3e4e6"
}
}

View File

@@ -0,0 +1,31 @@
local wezterm = require("wezterm")
local config = wezterm.config_builder()
--- Font Settings
config.font_size = 14
config.line_height = 1.2
config.font = wezterm.font("FiraMono Nerd Font")
--- Colors
config.colors = {
cursor_bg = "white",
cursor_border = "white",
}
-- Appearance
config.window_decorations = "NONE"
config.hide_tab_bar_if_only_one_tab = true
config.window_padding = {
left = 0,
top = 0,
bottom = 0,
right = 0,
}
config.window_background_opacity = 0.85
--- Misc
config.max_fps = 60
config.prefer_egl = true
return config

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

36
.config/wlogout/layout Normal file
View File

@@ -0,0 +1,36 @@
{
"label" : "lock",
"action" : "loginctl lock-session",
"text" : "Lock",
"keybind" : "l"
}
{
"label" : "reboot",
"action" : "gnome-session-quit --reboot",
"text" : "Reboot",
"keybind" : "r"
}
{
"label" : "shutdown",
"action" : "gnome-session-quit --power-off",
"text" : "Shutdown",
"keybind" : "s"
}
{
"label" : "logout",
"action" : "gnome-session-quit",
"text" : "Logout",
"keybind" : "e"
}
{
"label" : "suspend",
"action" : "systemctl suspend",
"text" : "Suspend",
"keybind" : "u"
}
{
"label" : "hibernate",
"action" : "systemctl hibernate",
"text" : "Hibernate",
"keybind" : "h"
}

View File

@@ -0,0 +1,67 @@
@import url("file:///home/rionzaphkiel/.cache/wal/colors-waybar.css");
* {
background-image: none;
font-size: 20px;
font-family: "JetBrains Mono";
}
window {
background-image: image(url("./images/wallpaper_blurred.png"));
}
button {
border-radius: 20px;
margin: 10px;
color: @inverse_surface;
border-color: @inverse_surface;
background-color: rgba(0, 0, 0, 0.5);
outline-style: none;
border-style: solid;
border-width: 0px;
background-repeat: no-repeat;
background-position: center;
background-size: 20%;
box-shadow: none;
text-shadow: none;
animation: gradient_f 20s ease-in infinite;
}
button:hover,button:focus {
background-color: @on_secondary_fixed_variant;
background-size: 30%;
color: @color1;
animation: gradient_f 20s ease-in infinite;
transition: all 0.3s cubic-bezier(.55,0.0,.28,1.682);
}
/* Adjust the size of the icon or content inside the button */
button span {
font-size: 1.2em; /* Increase the font size */
}
#lock {
background-image: image(url("./icons/lock.png"));
}
#logout {
background-image: image(url("./icons/logout.png"));
}
#suspend {
background-image: image(url("./icons/sleep.png"));
}
#shutdown {
background-image: image(url("./icons/power.png"));
}
#reboot {
background-image: image(url("./icons/restart.png"));
}
#hibernate {
background-image: image(url("./icons/hibernate.png"));
}

67
.config/wlogout/style.css Normal file
View File

@@ -0,0 +1,67 @@
@import url("file:///home/rionzaphkiel/.cache/wal/colors-waybar.css");
* {
background-image: none;
font-size: 20px;
font-family: "JetBrains Mono";
}
window {
background-image: image(url("./images/wallpaper_blurred.png"));
}
button {
border-radius: 20px;
margin: 10px;
color: @inverse_surface;
border-color: @inverse_surface;
background-color: rgba(0, 0, 0, 0.5);
outline-style: none;
border-style: solid;
border-width: 0px;
background-repeat: no-repeat;
background-position: center;
background-size: 20%;
box-shadow: none;
text-shadow: none;
animation: gradient_f 20s ease-in infinite;
}
button:hover,button:focus {
background-color: @on_secondary_fixed_variant;
background-size: 30%;
color: @color1;
animation: gradient_f 20s ease-in infinite;
transition: all 0.3s cubic-bezier(.55,0.0,.28,1.682);
}
/* Adjust the size of the icon or content inside the button */
button span {
font-size: 1.2em; /* Increase the font size */
}
#lock {
background-image: image(url("./icons/lock.png"));
}
#logout {
background-image: image(url("./icons/logout.png"));
}
#suspend {
background-image: image(url("./icons/sleep.png"));
}
#shutdown {
background-image: image(url("./icons/power.png"));
}
#reboot {
background-image: image(url("./icons/restart.png"));
}
#hibernate {
background-image: image(url("./icons/hibernate.png"));
}

13
.config/wofi/config Normal file
View File

@@ -0,0 +1,13 @@
[config]
allow_images=true
show=drun
prompt=Search
term=wezterm
print_command=true
insensitive=true
columns=1
no_actions=true
hide_scroll=true
width=800
height=475
style = /home/rionzaphkiel/.config/wofi/style.css

83
.config/wofi/style.css Normal file
View File

@@ -0,0 +1,83 @@
@import url("file:///home/rionzaphkiel/.cache/wal/colors-waybar.css"); /* ambil palet Pywal */
/* === Global === */
* {
all: unset;
font-family: 'JetBrains Mono', monospace;
font-size: 18px;
text-shadow: none;
background-color: transparent;
}
/* === Window utama === */
window {
padding: 20px;
border-radius: 12px;
/* Campuran background + nuansa @color1 */
background:
radial-gradient(circle at top left, alpha(@color1,0.35), transparent 70%),
radial-gradient(circle at top right, alpha(@color1,0.35), transparent 70%),
radial-gradient(circle at bottom left, alpha(@color1,0.35), transparent 70%),
radial-gradient(circle at bottom right, alpha(@color1,0.35), transparent 70%),
alpha(@background,0.85);
}
/* === Layout === */
#outer-box {
border: none;
}
#inner-box {
margin: 2px;
padding: 5px;
border: none;
}
#scroll {
margin: 0px;
padding: 20px;
border: none;
}
/* === Input field === */
#input {
margin: 20px;
padding: 15px;
border-radius: 10px;
color: @foreground;
background-color: alpha(@background, 0.25);
box-shadow: 1px 1px 5px rgba(0,0,0,.5);
}
#input image {
color: @color1;
padding-right: 10px;
}
/* === Item list === */
#entry {
border: none;
margin: 5px;
padding: 10px;
border-radius: 12px;
transition: background-color 0.2s ease, color 0.2s ease;
}
/* Normal text */
#entry #text {
color: @foreground;
}
/* Item terpilih (highlight nuansa pywal) */
#entry:selected {
background-color: alpha(@color1, 0.2); /* warna highlight */
border: 1px solid @color1;
box-shadow: 0 0 8px alpha(@color1, 0.3);
}
#entry:selected #text {
color: @color1;
font-weight: bold;
}
/* Arrow icon */
#entry arrow {
color: @color3;
}

101
.config/wofi/styles.css Normal file
View File

@@ -0,0 +1,101 @@
@import url("file:///home/rionzaphkiel/.cache/wal/colors-waybar.css");
@keyframes fadeIn {
0% {
}
100% {
}
}
* {
all:unset;
font-family: 'JetBrains Mono', monospace;
font-size: 18px;
outline: none;
border: none;
text-shadow:none;
background-color:transparent;
}
window {
all:unset;
padding: 20px;
border-radius: 0px;
background-color: alpha(@background,.5);
}
#inner-box {
margin: 2px;
padding: 5px
border: none;
}
#outer-box {
border: none;
}
#scroll {
margin: 0px;
padding: 30px;
border: none;
}
#input {
all:unset;
margin-left:20px;
margin-right:20px;
margin-top:20px;
padding: 20px;
border: none;
outline: none;
color: @text;
box-shadow: 1px 1px 5px rgba(0,0,0, .5);
border-radius:10;
background-color: alpha(@background,.2);
}
#input image {
border: none;
color: @red;
padding-right:10px;
}
#input * {
border: none;
outline: none;
}
#input:focus {
outline: none;
border: none;
border-radius:10;
}
#text {
margin: 5px;
border: none;
color: @color1;
outline: none;
}
#text {
margin: 5px;
border: none;
color: @text;
outline: none;
}
#entry {
border: none;
margin: 5px;
padding: 10px;
}
#entry arrow {
border: none;
color: @lavender;
}
#entry:selected {
box-shadow: 1px 1px 5px rgba(255,255,255, .03);
border: none;
border-radius: 20px;
background-color:transparent;
}
#entry:selected #text {
color: @mauve;
}
#entry:drop(active) {
background-color: @lavender !important;
}

13
.config/wofi/wallpaper Normal file
View File

@@ -0,0 +1,13 @@
[config]
allow_images=true
show=drun
width=900
height=600
always_parse_args=true
show_all=true
term=wezterm
hide_scroll=true
print_command=true
insensitive=true
columns=3
image_size=250

17
.script/cava-pywalsync.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
# Paths
CAVA_CONFIG="$HOME/.config/cava/config"
WAL_COLORS="$HOME/.cache/wal/colors.json"
# Take colors from pywal
COLOR1=$(jq -r '.colors.color8' "$WAL_COLORS")
COLOR2=$(jq -r '.colors.color1' "$WAL_COLORS")
# Update colors in CAVA
sed -i "s|^gradient_color_1 = '.*'|gradient_color_1 = '$COLOR1'|" "$CAVA_CONFIG"
sed -i "s|^gradient_color_2 = '.*'|gradient_color_2 = '$COLOR2'|" "$CAVA_CONFIG"
# Auto-Restart CAVA (if it's running)
killall -USR1 cava

14
.script/discord-pywalsync.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
# Path
WALCSS="$HOME/.cache/wal/colors.css"
BDCSS="$HOME/.config/BetterDiscord/data/stable/custom.css"
TEMPLATE="$HOME/.config/bd-template.css"
HEADER="$HOME/.config/bd-header.css"
# Overwrite Better Discord Custom CSS using pywal color palette
cat "$HEADER" > "$BDCSS"
echo "" >> "$BDCSS"
cat "$WALCSS" >> "$BDCSS"
echo "" >> "$BDCSS"
cat "$TEMPLATE" >> "$BDCSS"

2
.script/flameshot-gui.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
flameshot gui

32
.script/normalize-wall.sh Executable file
View File

@@ -0,0 +1,32 @@
#!/bin/bash
# normalize_wallpapers.sh
# Renames wallpapers to have _ before trailing numbers
WALLPAPERS="$HOME/Pictures/Wallpaper"
cd "$WALLPAPERS" || { echo "Directory not found: $WALLPAPERS"; exit 1; }
for f in *.png *.jpg *.jpeg *.webp *.bmp; do
[[ -f "$f" ]] || continue
# Remove surrounding quotes if any
clean="${f%\"}"
clean="${clean#\"}"
# Split name and extension
name="${clean%.*}"
ext="${clean##*.}"
# If name ends with number without _, add _
if [[ "$name" =~ ^(.*[^0-9])([0-9]+)$ ]]; then
new_name="${BASH_REMATCH[1]}_${BASH_REMATCH[2]}.$ext"
# Only rename if different
if [[ "$clean" != "$new_name" ]]; then
mv -i "$clean" "$new_name"
echo "Renamed: $clean -> $new_name"
fi
fi
done
echo "✅ All wallpapers normalized in $WALLPAPERS"

128
.script/rain.sh Executable file
View File

@@ -0,0 +1,128 @@
#!/bin/bash
# Let it Rain!
# Copyright (C) 2011, 2013 by Yu-Jie Lin
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# Blog: https://yjlv.blogstpo.com/2013/07/let-it-rain.html
# Gif : https://lh5.googleusercontent.com/-0WJ1vSZcFPs/UdadOwdPEXI/AAAAAAAAE-c/6kuH9hP3cUo/s800/rain.sh.gif
# Clip: https://youtu.be/EssRgAh2w_c
#
# Modified from falling-<3s.sh:
# https://yjlv.blogstpo.com/2011/02/time-to-have-falling-hearts-screensaver.html
RAINS=("|" "│" "┃" "┆" "┇" "┊" "┋" "╽" "╿")
COLORS=("\e[37m" "\e[37;1m")
# More from 256 color mode
for i in {244..255}; do
COLORS=("${COLORS[@]}" "\e[38;5;${i}m")
done
NRAINS=${#RAINS[@]}
NCOLORS=${#COLORS[@]}
NUM_RAIN_METADATA=5
sigwinch() {
TERM_WIDTH=$(tput cols)
TERM_HEIGHT=$(tput lines)
STEP_DURATION=0.025
((MAX_RAINS = TERM_WIDTH * TERM_HEIGHT / 4))
((MAX_RAIN_LENGTH = TERM_HEIGHT < 10 ? 1 : TERM_HEIGHT / 10))
# In percentage
((NEW_RAIN_ODD = TERM_HEIGHT > 50 ? 100 : TERM_HEIGHT * 2))
((NEW_RAIN_ODD = NEW_RAIN_ODD * 75 / 100))
((FALLING_ODD = TERM_HEIGHT > 25 ? 100 : TERM_HEIGHT * 4))
((FALLING_ODD = FALLING_ODD * 90 / 100))
}
do_exit() {
echo -ne "\e[${TERM_HEIGHT};1H\e[0K"
# Show cursor and echo stdin
echo -ne "\e[?25h"
stty echo
exit 0
}
do_render() {
# Clean screen first
for ((idx = 0; idx < num_rains * NUM_RAIN_METADATA; idx += NUM_RAIN_METADATA)); do
X=${rains[idx]}
Y=${rains[idx + 1]}
LENGTH=${rains[idx + 4]}
for ((y = Y; y < Y + LENGTH; y++)); do
(( y < 1 || y > TERM_HEIGHT )) && continue
echo -ne "\e[${y};${X}H "
done
done
for ((idx = 0; idx < num_rains * NUM_RAIN_METADATA; idx += NUM_RAIN_METADATA)); do
if ((100 * RANDOM / 32768 < FALLING_ODD)); then
# Falling
if ((++rains[idx + 1] > TERM_HEIGHT)); then
# Out of screen, bye sweet <3
rains=("${rains[@]:0:idx}"
"${rains[@]:idx+NUM_RAIN_METADATA:num_rains*NUM_RAIN_METADATA}")
((num_rains--))
continue
fi
fi
X=${rains[idx]}
Y=${rains[idx + 1]}
RAIN=${rains[idx + 2]}
COLOR=${rains[idx + 3]}
LENGTH=${rains[idx + 4]}
for ((y = Y; y < Y + LENGTH; y++)); do
(( y < 1 || y > TERM_HEIGHT )) && continue
echo -ne "\e[${y};${X}H${COLOR}${RAIN}"
done
done
}
trap do_exit TERM INT
trap sigwinch WINCH
# No echo stdin and hide the cursor
stty -echo
echo -ne "\e[?25l"
echo -ne "\e[2J"
rains=()
sigwinch
while :; do
read -n 1 -t $STEP_DURATION ch
case "$ch" in
q|Q)
do_exit
;;
esac
if ((num_rains < MAX_RAINS)) && ((100 * RANDOM / 32768 < NEW_RAIN_ODD)); then
# Need new |, 1-based
RAIN="${RAINS[NRAINS * RANDOM / 32768]}"
COLOR="${COLORS[NCOLORS * RANDOM / 32768]}"
LENGTH=$((MAX_RAIN_LENGTH * RANDOM / 32768 + 1))
X=$((TERM_WIDTH * RANDOM / 32768 + 1))
Y=$((1 - LENGTH))
rains=("${rains[@]}" "$X" "$Y" "$RAIN" "$COLOR" "$LENGTH")
((num_rains++))
fi
# Let rain fall!
do_render
done

66
.script/reales-scale.sh Executable file
View File

@@ -0,0 +1,66 @@
#!/bin/bash
# Path for output
OUTPUT_DIR="$HOME/Pictures/Realesrgan"
REALES="$HOME/.realesrgan/realesrgan-ncnn-vulkan"
# Create output directory if not exists
mkdir -p "$OUTPUT_DIR"
# Default to current directory
INPUT_DIR="$(pwd)"
# Count files (jpg/jpeg/png only)
FILE_COUNT=$(find "$INPUT_DIR" -maxdepth 1 -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | wc -l)
# Confirm
read -rp "Initiating RealESRGAN to process $FILE_COUNT files in $INPUT_DIR, are you sure? [y/N]: " confirm
case "$confirm" in
[yY][eE][sS]|[yY]) ;;
*) echo "Aborted."; exit 1 ;;
esac
# Model
MODEL="realesr-animevideov3"
# Force NVIDIA GPU (index 1)
GPU_INDEX=1
# Scale options
echo "Choose scale factor:"
echo "1) 2x"
echo "2) 3x"
echo "3) 4x"
read -rp "Select scale (1-3): " scale_choice
case $scale_choice in
1) SCALE=2 ;;
2) SCALE=3 ;;
3) SCALE=4 ;;
*) echo "Invalid choice, defaulting to 2x"; SCALE=2 ;;
esac
echo "Processing $FILE_COUNT images in $INPUT_DIR with model=$MODEL, scale=${SCALE}x, GPU=$GPU_INDEX..."
COUNT=0
# Process each file
for file in "$INPUT_DIR"/*.{jpg,jpeg,png}; do
[ -e "$file" ] || continue
COUNT=$((COUNT + 1))
filename=$(basename "$file")
base="${filename%.*}" # name without extension
output_file="$OUTPUT_DIR/${base}.png"
# Ensure no overwrite (add _1, _2, etc.)
i=1
while [ -f "$output_file" ]; do
output_file="$OUTPUT_DIR/${base}_$i.png"
i=$((i + 1))
done
echo "[$COUNT/$FILE_COUNT] Processing: $filename -> $(basename "$output_file")"
$REALES -i "$file" -o "$output_file" -n "$MODEL" -s "$SCALE" -g "$GPU_INDEX" >/dev/null 2>&1
done
echo "✅ All files processed. Output saved in $OUTPUT_DIR"

73
.script/scaler-wallpaper.sh Executable file
View File

@@ -0,0 +1,73 @@
#!/bin/bash
# PATH
WALLPAPERS="$HOME/Pictures/Wallpaper"
BACKUP="$HOME/Pictures/.backup"
# Make dirs if they don't exist
mkdir -p "$BACKUP"
cd "$WALLPAPERS" || exit 1
# Process all images
for img in *.{jpg,jpeg,png,webp,bmp}; do
[[ -f "$img" ]] || continue
# Check resolution
read width height <<< $(identify -format "%w %h" "$img")
if [[ "$width" -eq 1920 && "$height" -eq 1080 ]]; then
continue
fi
base="${img%.*}"
ext="png" # Converted wallpaper extension
orig_ext="${img##*.}" # Original extension for backup
# --- Determine next available name in wallpaper folder ---
max=0
for f in "$base"_*.${ext} "$base".${ext}; do
[[ -f "$f" ]] || continue
if [[ "$f" =~ ${base}_([0-9]+)\.${ext}$ ]]; then
(( ${BASH_REMATCH[1]} > max )) && max=${BASH_REMATCH[1]}
elif [[ "$f" == "$base.$ext" ]]; then
(( max < 1 )) && max=1
fi
done
# Choose new file name
if [[ $max -eq 0 ]]; then
new_name="$base.$ext"
else
new_name="${base}_$((max + 1)).$ext"
fi
# Convert image
if magick "$img" -resize 1920x1080^ -gravity center -extent 1920x1080 "$new_name"; then
echo "Converted: $img -> $new_name"
# --- Move original to backup with incremental name and original extension ---
backup_base="$BACKUP/$base"
backup_max=0
for f in "$backup_base"_*.$orig_ext "$backup_base".$orig_ext; do
[[ -f "$f" ]] || continue
if [[ "$f" =~ ${backup_base}_([0-9]+)\.${orig_ext}$ ]]; then
(( ${BASH_REMATCH[1]} > backup_max )) && backup_max=${BASH_REMATCH[1]}
elif [[ "$f" == "$backup_base.$orig_ext" ]]; then
(( backup_max < 1 )) && backup_max=1
fi
done
if [[ $backup_max -eq 0 ]]; then
backup_name="$BACKUP/$base.$orig_ext"
else
backup_name="$BACKUP/${base}_$((backup_max + 1)).$orig_ext"
fi
mv "$img" "$backup_name"
echo "Moved original to backup: $backup_name"
else
echo "❌ Failed to convert: $img"
fi
done
echo "✅ All Wallpapers has been processed $WALLPAPERS"

72
.script/sort-file.sh Executable file
View File

@@ -0,0 +1,72 @@
#!/bin/bash
# Directory you want to organize (default: current directory)
DIR="${1:-.}"
DIR="$(realpath "$DIR")"
# Ask for confirmation
read -p "Sort the files in $DIR ? [y/N]: " confirm
case "$confirm" in
[yY][eE][sS]|[yY])
echo "Sorting files in $DIR..."
;;
*)
echo "Aborted."
exit 0
;;
esac
# Define groups of extensions
photos=("jpg" "jpeg" "png" "gif" "bmp" "tiff" "webp")
videos=("mp4" "mkv" "avi" "mov" "flv" "wmv" "webm")
documents=("doc" "docx" "odt" "pdf" "txt" "rtf" "xlsx" "xls" "ppt" "pptx" "csv")
compressed=("zip" "tar" "gz" "rar" "7z" "bz2")
audio=("mp3" "wav" "flac" "aac" "ogg" "m4a")
# Create function to check if value in array
in_array() {
local e match="$1"; shift
for e; do [[ "$e" == "$match" ]] && return 0; done
return 1
}
# Loop through files
for file in "$DIR"/*; do
[ -f "$file" ] || continue
ext="${file##*.}"
ext=$(echo "$ext" | tr '[:upper:]' '[:lower:]') # normalize lowercase
target_dir="Others" # default group
if in_array "$ext" "${photos[@]}"; then
target_dir="Media/Photos"
elif in_array "$ext" "${videos[@]}"; then
target_dir="Media/Videos"
elif in_array "$ext" "${documents[@]}"; then
target_dir="Documents"
elif in_array "$ext" "${compressed[@]}"; then
target_dir="Compressed"
elif in_array "$ext" "${audio[@]}"; then
target_dir="Media/Audio"
fi
mkdir -p "$DIR/$target_dir"
# Generate new filename if already exists
base_name="$(basename "$file")"
dest="$DIR/$target_dir/$base_name"
if [ -e "$dest" ]; then
name="${base_name%.*}"
ext_only="${base_name##*.}"
n=1
while [ -e "$DIR/$target_dir/${name}_$n.$ext_only" ]; do
((n++))
done
dest="$DIR/$target_dir/${name}_$n.$ext_only"
fi
mv "$file" "$dest"
echo "Moved: $(basename "$file")$target_dir/$(basename "$dest")"
done

108
.script/wallpaper-picker.sh Executable file
View File

@@ -0,0 +1,108 @@
#!/bin/bash
# Config and Path
WALLPAPERS="$HOME/Pictures/Wallpaper"
CACHE_DIR="$HOME/.cache/wallpaper-picker"
THUMB_WIDTH="250"
THUMB_HEIGHT="141"
THEMES="$HOME/.config/wal/themes"
WAL_BIN="$HOME/.local/bin/wal"
HOOKS="$HOME/.config/wal/hooks/hooks.sh"
FASTFETCH_CFG="$HOME/.config/fastfetch/config.jsonc"
# Make the thumb dir if it's not exist
mkdir -p "$CACHE_DIR"
# Generate thumbnail
generate_thumbnail(){
local input="$1"
local output="$2"
magick "$input" -thumbnail "${THUMB_WIDTH}x${THUMB_HEIGHT}^" \
-gravity center -extent "${THUMB_WIDTH}x${THUMB_HEIGHT}" "$output"
}
# Generate menu with thumbnails
generate_menu(){
# Find all images and sort naturally
while IFS= read -r img; do
[[ -f "$img" ]] || continue
thumb="$CACHE_DIR/$(basename "${img%.*}").png"
# Generate thumbnail if missing or outdated
if [[ ! -f "$thumb" ]] || [[ "$img" -nt "$thumb" ]]; then
generate_thumbnail "$img" "$thumb"
fi
# Output for wofi
echo -en "img:$thumb\x00info:$(basename "$img")\x1f$img\n"
done < <(find "$WALLPAPERS" -maxdepth 1 -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | sort -V)
}
# Run wofi with thumbnails
CHOICE=$(generate_menu | wofi --show dmenu \
--cache-file /dev/null \
--define "image-size=${THUMB_WIDTH}x${THUMB_HEIGHT}" \
--columns 3 \
--allow-images \
--insensitive \
--sort-order=default \
--prompt "Select Wallpaper" \
--conf ~/.config/wofi/wallpaper
)
[ -z "$CHOICE" ] && exit 0
WAL_NAME=$(basename "$CHOICE")
SELECTED="$WALLPAPERS/$WAL_NAME"
# Extract THEME name
BASENAME=$(basename "$SELECTED")
THEME="${BASENAME%%_*}"
# Default
WIFENAME=$(echo "$BASENAME" | awk -F '[_.]' '{print $2}' | sed 's/[0-9]*$//')
LOGO_PATH="$HOME/.config/fastfetch/logo/${THEME,,}_small.png"
# Mapping manual
if [[ "$THEME" =~ "Endfield" ]]; then
LOGO_PATH="$HOME/.config/fastfetch/logo/john_endfield.png"
elif [[ "$THEME" =~ "Arknight" ]]; then
LOGO_PATH="$HOME/.config/fastfetch/logo/john_arknights.png"
elif [[ "$THEME" =~ "Wuthering" ]]; then
LOGO_PATH="$HOME/.config/fastfetch/logo/john_wuthering.png"
elif [[ "$THEME" =~ "Genshin" ]]; then
LOGO_PATH="$HOME/.config/fastfetch/logo/john_genshin.png"
elif [[ "$THEME" =~ "StarRail" ]]; then
LOGO_PATH="$HOME/.config/fastfetch/logo/john_starrail.png"
elif [[ "$THEME" =~ "Zenless" ]]; then
LOGO_PATH="$HOME/.config/fastfetch/logo/john_zenless.png"
else
LOGO_PATH="$HOME/.config/fastfetch/logo/john_wuthering.png"
fi
# Apply theme
THEME_FILE="$THEMES/$THEME.json"
if [ -f "$THEME_FILE" ]; then
"$WAL_BIN" --theme "$THEME_FILE"
else
"$WAL_BIN" -i "$SELECTED"
fi
# Update GNOME wallpaper
gsettings set org.gnome.desktop.background picture-uri-dark "file://$SELECTED"
gsettings set org.gnome.desktop.screensaver picture-uri "file://$SELECTED"
# Update fastfetch config
tmpfile=$(mktemp)
jq --arg logo "$LOGO_PATH" \
--arg wife "$WIFENAME" \
'
.logo.source = $logo
| (.modules[] | select(.key? == "wife ").format) = $wife
' "$FASTFETCH_CFG" > "$tmpfile" && mv "$tmpfile" "$FASTFETCH_CFG"
touch "$HOME/.config/fastfetch/.reload_flag"
# Run pywal hooks
$HOOKS
$HOME/.local/bin/pywalfox update

20
.script/wlogout-pywalsync.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
# Path
WALLPAPER=$(gsettings get org.gnome.desktop.background picture-uri-dark \
| sed -E "s/^'file:\/\///; s/^\"file:\/\///; s/'$//; s/\"$//")
WALL_DIR="$HOME/Pictures/Wallpaper"
WALL_NAME="$(basename "$WALLPAPER")"
BLUR_BG="$HOME/.config/wlogout/images/wallpaper_blurred.png"
WALCSS="$HOME/.cache/wal/colors-waybar.css"
WL_TEMPLATE="$HOME/.config/wlogout/style-template.css"
WLCSS="$HOME/.config/wlogout/style.css"
mkdir -p "$(dirname "$BLUR_BG")"
# Generate Blurred Wallpaper
magick "$WALL_DIR/$WALL_NAME" -resize 1920x1080^ -gravity center -extent 1920x1080 -blur 0x8 -fill black -colorize 65% "$BLUR_BG"
# === UPDATE STYLE.CSS ===
cat "$WL_TEMPLATE" > "$WLCSS"

View File

@@ -0,0 +1,7 @@
/**
* @name Rion Zaphkiel (Pywal Integrated)
* @version 1.2.1
* @description A custom theme for BetterDiscord that integrates with Pywal by pasting the color cache.
* @author Rion
*/

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

BIN
Wallpaper/Genshin_Ayaka.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

BIN
Wallpaper/Genshin_Ganyu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

BIN
Wallpaper/Genshin_Hutao.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
Wallpaper/Genshin_Navia.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Some files were not shown because too many files have changed in this diff Show More