From bd77e8dca27693b42d4c4ce067116418a880899f Mon Sep 17 00:00:00 2001 From: odweta Date: Fri, 6 Nov 2026 04:45:37 +0100 Subject: [PATCH] lua rewrite --- Makefile | 24 ++++-- modules/age.lua | 10 +++ modules/config.lua | 64 +++++++++++++++ modules/cpu.lua | 16 ++++ modules/distro.lua | 7 ++ modules/hostname.lua | 5 ++ modules/kernel.lua | 7 ++ modules/pkgs.lua | 11 +++ modules/ram.lua | 29 +++++++ modules/shell.lua | 6 ++ modules/show.lua | 43 ++++++++++ modules/terminal.lua | 5 ++ modules/theme.lua | 12 +++ modules/uptime.lua | 7 ++ modules/user.lua | 1 + modules/util.lua | 95 ++++++++++++++++++++++ modules/wm.lua | 11 +++ ofetch.lua | 30 +++++++ ofetch.sh => old/ofetch.sh | 108 ++++++++++++++++++++----- ofetch_icons.sh => old/ofetch_icons.sh | 0 20 files changed, 462 insertions(+), 29 deletions(-) create mode 100644 modules/age.lua create mode 100644 modules/config.lua create mode 100644 modules/cpu.lua create mode 100644 modules/distro.lua create mode 100644 modules/hostname.lua create mode 100644 modules/kernel.lua create mode 100644 modules/pkgs.lua create mode 100644 modules/ram.lua create mode 100644 modules/shell.lua create mode 100644 modules/show.lua create mode 100644 modules/terminal.lua create mode 100644 modules/theme.lua create mode 100644 modules/uptime.lua create mode 100644 modules/user.lua create mode 100644 modules/util.lua create mode 100644 modules/wm.lua create mode 100755 ofetch.lua rename ofetch.sh => old/ofetch.sh (52%) rename ofetch_icons.sh => old/ofetch_icons.sh (100%) mode change 100755 => 100644 diff --git a/Makefile b/Makefile index 491dcc0..0796919 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,19 @@ -DIR := /usr/bin -OUTPUT_FILE_NAME := ofetch -USER := imp +PREFIX ?= /usr/local +BINDIR := $(PREFIX)/bin +LIBDIR := $(PREFIX)/lib/ofetch + +.PHONY: install uninstall install: - mkdir -p $(DIR) - cp $(OUTPUT_FILE_NAME).sh $(DIR)/$(OUTPUT_FILE_NAME) - chmod 744 $(DIR)/$(OUTPUT_FILE_NAME) - chown $(USER):$(USER) $(DIR)/$(OUTPUT_FILE_NAME) + install -d "$(DESTDIR)$(BINDIR)" "$(DESTDIR)$(LIBDIR)/modules" + install -m 644 ofetch.lua "$(DESTDIR)$(LIBDIR)/ofetch.lua" + install -m 644 modules/*.lua "$(DESTDIR)$(LIBDIR)/modules/" + printf '%s\n' '#!/bin/sh' \ + 'LUA_PATH="$(LIBDIR)/?.lua;;" exec lua "$(LIBDIR)/ofetch.lua" "$$@"' \ + > "$(DESTDIR)$(BINDIR)/ofetch" + chmod 755 "$(DESTDIR)$(BINDIR)/ofetch" + +uninstall: + rm -f "$(DESTDIR)$(BINDIR)/ofetch" + rm -rf "$(DESTDIR)$(LIBDIR)" + diff --git a/modules/age.lua b/modules/age.lua new file mode 100644 index 0000000..c624c30 --- /dev/null +++ b/modules/age.lua @@ -0,0 +1,10 @@ +local util = require("modules/util") + +local function get_system_age() + local install_time = 1793894400 -- Choose your own install time (unix timestamp) + local now = tonumber(util.process_get_one_line("date +%s")) + + return util.format_time(now - install_time) +end + +return { name = "age", cmd = get_system_age } diff --git a/modules/config.lua b/modules/config.lua new file mode 100644 index 0000000..790dd34 --- /dev/null +++ b/modules/config.lua @@ -0,0 +1,64 @@ +local M = { color = {}, separator = {} } + +-- Color definitions (ANSI escape sequences) + +M.color.reset = "\27[0m" +M.color.gray = "\27[38;2;102;92;84m" +M.color.cyan = "\27[38;2;125;174;163m" +M.color.white = "\27[38;2;235;219;178m" +M.color.byellow_bold = "\27[1;38;2;250;189;47m" +M.color.bwhite_bold = "\27[1;38;2;235;219;178m" +M.color.dimyellow_italic = "\27[3;38;2;215;153;33m" +M.color.aqua = "\27[38;2;142;192;124m" + +-- Info field colors + +M.color.info_name = M.color.cyan +M.color.info_value = M.color.dimyellow_italic + +-- Horizontal separator color (under username @ hostname) + +M.color.horizontal_separator = M.color.dimyellow_italic + + +-- User and hostname definitions for the header + +M.user = require("modules/user").user +M.hostname = require("modules/hostname").hostname + + +-- Separator of the logo and the info fields + +M.separator.logo_char = " | " +M.separator.logo = M.color.gray .. + M.separator.logo_char .. M.color.reset + +-- Separator of the info name and value + +M.separator.info_char = " : " +M.separator.info = M.color.dimyellow_italic .. + M.separator.info_char .. M.color.reset + +-- Horizontal separator under the heading + +M.separator.horizontal_char = "-" +M.separator.horizontal = M.color.dimyellow_italic .. + string.rep( + M.separator.horizontal_char, + (#M.user + #M.hostname + 3) + ) .. M.color.reset + +-- Logo definition + +M.logo = { + " ", + M.color.cyan .. " /\\ /\\ ", + M.color.cyan .. " // \\ \\ ", + M.color.cyan .. " // \\ \\ ", + M.color.cyan .. " /// \\ \\ ", + M.color.cyan .. " // \\ \\", + M.color.cyan .. " \\ ", + " " +} + +return M diff --git a/modules/cpu.lua b/modules/cpu.lua new file mode 100644 index 0000000..59fec66 --- /dev/null +++ b/modules/cpu.lua @@ -0,0 +1,16 @@ +local util = require("modules/util") + +-- CPU modelname +local function get_cpu_modelname() + local name = util.grep("/proc/cpuinfo", "^model name%s*:%s*(.+)") or + util.grep("/proc/cpuinfo", "^Hardware%s*:%s*(.+)") + + -- Shorter modelname for Intel i3/i5/i7/i9 CPUs + if name then + name = name:match("([iI][3579]%-[%d]+[A-Za-z]*)") or name + end + + return name +end + +return { name = "cpu", cmd = get_cpu_modelname } diff --git a/modules/distro.lua b/modules/distro.lua new file mode 100644 index 0000000..3174e97 --- /dev/null +++ b/modules/distro.lua @@ -0,0 +1,7 @@ +local util = require("modules/util") + +local function get_distro() + return util.grep("/etc/os-release", "%s*NAME%s*=%s*\"(.*)\"") +end + +return { name = "distro", cmd = get_distro } diff --git a/modules/hostname.lua b/modules/hostname.lua new file mode 100644 index 0000000..26af161 --- /dev/null +++ b/modules/hostname.lua @@ -0,0 +1,5 @@ +-- Reads /etc/hostname and returns the first line + +local util = require("modules/util") + +return { hostname = os.getenv("HOSTNAME") or util.cat_first_line("/etc/hostname") } diff --git a/modules/kernel.lua b/modules/kernel.lua new file mode 100644 index 0000000..9867a4e --- /dev/null +++ b/modules/kernel.lua @@ -0,0 +1,7 @@ +local util = require("modules/util") + +local function get_system_kernel() + return util.cat_first_line("/proc/sys/kernel/osrelease") +end + +return { name = "kernel", cmd = get_system_kernel } diff --git a/modules/pkgs.lua b/modules/pkgs.lua new file mode 100644 index 0000000..59f8d2a --- /dev/null +++ b/modules/pkgs.lua @@ -0,0 +1,11 @@ +local util = require("modules/util") + +local function get_num_installed_pkgs() + local distros = {} + distros.alpine = "apk list --installed | wc -l" + + -- Choose and/or add your own distro + return util.process_get_one_line(distros.alpine) +end + +return { name = "pkgs", cmd = get_num_installed_pkgs } diff --git a/modules/ram.lua b/modules/ram.lua new file mode 100644 index 0000000..9e35549 --- /dev/null +++ b/modules/ram.lua @@ -0,0 +1,29 @@ +local util = require("modules/util") + +-- RAM amount in GB +local function get_ram_gb() + local free, total, avail + + util.for_line_in_file("/proc/meminfo", function(line) + local total_match = line:match("^MemTotal%s*:%s*(.+)%s*[kK][bB]") + local avail_match = line:match("^MemAvailable%s*:%s*(.+)%s*[kK][bB]") + + if total_match then + total = tonumber(total_match) + end + + if avail_match then + avail = tonumber(avail_match) + end + + if total and avail then + free = string.format("%.1f GB", (total - avail) / 1000000) + end + + return free ~= nil + end) + + return free +end + +return { name = "ram", cmd = get_ram_gb } diff --git a/modules/shell.lua b/modules/shell.lua new file mode 100644 index 0000000..96c58f1 --- /dev/null +++ b/modules/shell.lua @@ -0,0 +1,6 @@ +local function get_current_shell() + local shell = os.getenv("SHELL") or "unknown" + return shell:match("([^/]*)$") +end + +return { name = "shell", cmd = get_current_shell } diff --git a/modules/show.lua b/modules/show.lua new file mode 100644 index 0000000..3e67307 --- /dev/null +++ b/modules/show.lua @@ -0,0 +1,43 @@ +local M = { } + +local util = require("modules/util") + +function M.modules(modules, config_) + local config = config_ or require("modules/config") + local info_name_padding_amount = util.longest_info_name_length(modules) + + M.header = + config.logo[1] .. config.separator.logo .. + config.color.cyan .. config.user .. + config.color.gray .. " @ " .. + config.color.white .. config.hostname + + -- Optional plus above the info separator + -- config.separator.horizontal = string.rep("-", info_name_padding_amount + 1) .. + -- "+" .. string.rep("-", ((#config.user + 1 + #config.hostname) - info_name_padding_amount)) + + M.horizontal_separator = + config.logo[2] .. config.separator.logo .. config.separator.horizontal + + print(M.header) + + print(M.horizontal_separator) + + for i, info in ipairs(modules) do + print( + (config.logo[i+2] or "[! OUT OF LOGO !]") .. + config.separator.logo .. + + config.color.cyan .. info.name .. + string.rep(" ", (info_name_padding_amount - #info.name)) .. + + config.color.dimyellow_italic .. + config.separator.info .. + config.color.dimyellow_italic .. + info.cmd() .. + config.color.reset + ) + end +end + +return M diff --git a/modules/terminal.lua b/modules/terminal.lua new file mode 100644 index 0000000..f3e55df --- /dev/null +++ b/modules/terminal.lua @@ -0,0 +1,5 @@ +local function get_current_terminal() + return os.getenv("TERM") or "unknown" +end + +return { name = "term", cmd = get_current_terminal } diff --git a/modules/theme.lua b/modules/theme.lua new file mode 100644 index 0000000..01bac99 --- /dev/null +++ b/modules/theme.lua @@ -0,0 +1,12 @@ +local util = require("modules/util") + +local function get_current_gtk_theme() + local theme = util.grep( + (os.getenv("HOME") or "~") .. "/.config/gtk-4.0/settings.ini", + "^gtk%-theme%-name%s*=%s*(.*)" + ) or "unknown" + + return theme:gsub("%-", " ") +end + +return { name = "theme", cmd = get_current_gtk_theme } diff --git a/modules/uptime.lua b/modules/uptime.lua new file mode 100644 index 0000000..df523bb --- /dev/null +++ b/modules/uptime.lua @@ -0,0 +1,7 @@ +local util = require("modules/util") + +local function get_system_uptime() + return util.format_time(tonumber(util.grep("/proc/uptime", "^(%S+)"))) +end + +return { name = "uptime", cmd = get_system_uptime } diff --git a/modules/user.lua b/modules/user.lua new file mode 100644 index 0000000..417fff7 --- /dev/null +++ b/modules/user.lua @@ -0,0 +1 @@ +return { user = os.getenv("USER") } diff --git a/modules/util.lua b/modules/util.lua new file mode 100644 index 0000000..cc1264e --- /dev/null +++ b/modules/util.lua @@ -0,0 +1,95 @@ +local M = {} + +-- Helper functions + +function M.format_time(time) + local seconds = time + local days = math.floor(seconds / 86400) + local hours = math.floor(seconds % 86400 / 3600) + local minutes = math.floor(seconds % 3600 / 60) + local result = "" + + if days > 0 then + result = result .. days .. "d " + end + + if hours > 0 then + result = result .. hours .. "h " + end + + if minutes > 0 then + result = result .. minutes .. "m" + end + + return result +end + +-- Capture the first line of an invoked system process +-- (discards of error messages of the last command (the +-- one after the last pipe ('|'))) +function M.process_get_one_line(proc) + local pipe = io.popen(proc .. " 2>/dev/null", "r") + if not pipe then return nil end + + local data = pipe:read("*l") + pipe:close() + return data +end + +-- Get the lenght of the longest info name (for padding) +function M.longest_info_name_length(modules) + local longest = 0 + + for _, mod in ipairs(modules) do + if type(mod.name) == "string" and #mod.name > longest then + longest = #mod.name + end + end + + return longest +end + +--[[ +-- Loop through a file and for each line perform +-- a callback function, if it returns true, the +-- loop can end prematurely (this is wanted) +--]] +function M.for_line_in_file(filename, callback) + local file = io.open(filename, "r") + if not file then return nil end + + for line in file:lines() do + if callback(line) then + file:close() + return true + end + end + + file:close() + return false +end + +-- filter a file line-by-line and return the given match +function M.grep(filename, regex) + local capture + + M.for_line_in_file(filename, function(line) + capture = line:match(regex) + + return capture ~= nil + end) + + return capture +end + +-- Returns the contents of the first line in a file +function M.cat_first_line(filename) + local file = io.open(filename, "r") + if not file then return nil end + + local line = file:read("*l") + file:close() + return line +end + +return M diff --git a/modules/wm.lua b/modules/wm.lua new file mode 100644 index 0000000..f1e801a --- /dev/null +++ b/modules/wm.lua @@ -0,0 +1,11 @@ +local function get_current_wm() + if os.getenv("SWAYSOCK") then + return "sway" + elseif os.getenv("HYPRLAND_INSTANCE_SIGNATURE") then + return "hyprland" + else + return "unknown" + end +end + +return { name = "wm", cmd = get_current_wm } diff --git a/ofetch.lua b/ofetch.lua new file mode 100755 index 0000000..3497c7b --- /dev/null +++ b/ofetch.lua @@ -0,0 +1,30 @@ +#!/usr/bin/lua + +local config = require("modules/config") +local show = require("modules/show") + +-- Optionally override config defaults like the logo and separator appearance +-- e.g.: to change the separator character from the default to ' / ' +-- config.separator.logo_char = " / " +-- config.separator.logo = config.color.gray .. +-- config.separator.logo_char .. config.color.reset + +-- Put your desired modules in the table below + +local modules = { + require("modules/distro"), + require("modules/theme"), + require("modules/age"), + require("modules/pkgs"), + require("modules/wm"), + require("modules/terminal"), + -- require("modules/cpu"), + -- require("modules/ram"), + -- require("modules/uptime"), + -- require("modules/kernel"), + -- require("modules/shell"), +} + +-- Show the logo and fields + +show.modules(modules, config) diff --git a/ofetch.sh b/old/ofetch.sh similarity index 52% rename from ofetch.sh rename to old/ofetch.sh index 0b0542d..0b3fa66 100755 --- a/ofetch.sh +++ b/old/ofetch.sh @@ -9,18 +9,37 @@ C_BYELLOW_BOLD=$'\e[1;93m' C_BWHITE_BOLD=$'\e[1;97m' C_DIMYELLOW_ITALIC=$'\e[3;93m' -# logo definition -LOGO=" $C_GRAY/$C_RESET -$C_CYAN _______ $C_GRAY/$C_RESET -$C_CYAN _ \______ \\ $C_GRAY/$C_RESET -$C_CYAN | \ ___ \ | $C_GRAY/$C_RESET -$C_CYAN | | / \ | | $C_GRAY/$C_RESET -$C_CYAN | | \___/ | | $C_GRAY/$C_RESET -$C_CYAN | \______ \_| $C_GRAY/$C_RESET -$C_CYAN \\_______\ $C_GRAY/$C_RESET - $C_GRAY/$C_RESET" +# Gruvbox Dark Hard palette +C_RESET=$'\e[0m' +C_GRAY=$'\e[38;2;102;92;84m' # gray +C_CYAN=$'\e[38;2;125;174;163m' # muted blue +C_WHITE=$'\e[38;2;235;219;178m' # light foreground +C_BYELLOW_BOLD=$'\e[1;38;2;250;189;47m' +C_BWHITE_BOLD=$'\e[1;38;2;235;219;178m' +C_DIMYELLOW_ITALIC=$'\e[3;38;2;215;153;33m' # yellow -LOGO_ARCH=" $C_GRAY/$C_RESET +C_AQUA=$'\e[38;2;142;192;124m' + +LOGO=" $C_GRAY|$C_RESET +$C_CYAN /\\ /\\ $C_GRAY|$C_RESET +$C_CYAN // \\ \\ $C_GRAY|$C_RESET +$C_CYAN // \\ \\ $C_GRAY|$C_RESET +$C_CYAN /// \\ \\ $C_GRAY|$C_RESET +$C_CYAN // \\ \\ $C_GRAY|$C_RESET +$C_CYAN \\ $C_GRAY|$C_RESET + $C_GRAY|$C_RESET" + +LOGO_ARCH=" $C_GRAY|$C_RESET +$C_CYAN /\\ $C_GRAY|$C_RESET +$C_CYAN / \\ $C_GRAY|$C_RESET +$C_CYAN / \\ $C_GRAY|$C_RESET +$C_CYAN / \\ $C_GRAY|$C_RESET +$C_CYAN / ,, \\ $C_GRAY|$C_RESET +$C_CYAN / | | \\ $C_GRAY|$C_RESET +$C_CYAN /_-'' ''-_\\ $C_GRAY|$C_RESET + $C_GRAY|$C_RESET" + +LOGO_slash=" $C_GRAY/$C_RESET $C_CYAN /\\ $C_GRAY/$C_RESET $C_CYAN / \\ $C_GRAY/$C_RESET $C_CYAN / \\ $C_GRAY/$C_RESET @@ -29,6 +48,15 @@ $C_CYAN / ,, \\ $C_GRAY/$C_RESET $C_CYAN / | | \\ $C_GRAY/$C_RESET $C_CYAN /_-'' ''-_\\ $C_GRAY/$C_RESET $C_GRAY/$C_RESET" +LOGO_VOID=" $C_GRAY/$C_RESET +$C_CYAN _______ $C_GRAY/$C_RESET +$C_CYAN _ \______ \\ $C_GRAY/$C_RESET +$C_CYAN | \ ___ \ | $C_GRAY/$C_RESET +$C_CYAN | | / \ | | $C_GRAY/$C_RESET +$C_CYAN | | \___/ | | $C_GRAY/$C_RESET +$C_CYAN | \______ \_| $C_GRAY/$C_RESET +$C_AQUA \\_______\ $C_GRAY/$C_RESET + $C_GRAY/$C_RESET" LOGO_DEVUAN=" $C_GRAY/$C_RESET $C_CYAN ..:::. $C_GRAY/$C_RESET $C_CYAN ..-==- $C_GRAY/$C_RESET @@ -59,24 +87,56 @@ RAM_TOTAL=$(awk '/MemTotal:/ { printf "%.1f\n", $2 / 1000000 }' /proc/meminfo) RAM_FREE=$(awk '/MemAvailable:/ { printf "%.1f\n", $2 / 1000000 }' /proc/meminfo) RAM="$(awk -v total="${RAM_TOTAL}" -v free="${RAM_FREE}" 'BEGIN { print (total - free) }') G / ${RAM_TOTAL} G" -installed="Tue Aug 18 17:45:01 2026" +DISTRO="$(source /etc/os-release && echo $NAME)" + +APK_INSTALLED_PACKAGES="apk list --installed" +INSTALLED_PACKAGES_COUNT=$($APK_INSTALLED_PACKAGES | wc -l) + +format_duration() { + local seconds=$1 + local days=$((seconds / 86400)) + local hours=$((seconds % 86400 / 3600)) + local minutes=$((seconds % 3600 / 60)) + local result="" + + (( days > 0 )) && result+="${days}d " + (( hours > 0 )) && result+="${hours}h " + (( minutes > 0 )) && result+="${minutes}m" + + printf '%s' "${result% }" +} + +installed="Thu Nov 5 05:00:00 PM CET 2026" # Alpine Linux install date installed_ts=$(date -d "$installed" +%s) now_ts=$(date +%s) -diff=$((now_ts - installed_ts)) -TIME_SINCE_LAST_REINSTALL=$(d=$(( $(date +%s) - $(date -d 'Tue Aug 18 17:45:01 2026' +%s) )); printf '%d days, %02d hours, %02d minutes, %02d seconds\n' $((d/86400)) $((d%86400/3600)) $((d%3600/60)) $((d%60)) -) +TIME_SINCE_LAST_REINSTALL=$(format_duration "$((now_ts - installed_ts))") + +uptime_seconds=$(awk '{ print int($1) }' /proc/uptime) +UPTIME=$(format_duration "$uptime_seconds") -UPTIME=$(awk '{ s=int($1); printf "%d days, %d hours, %d minutes, %d seconds\n", s/86400, (s%86400)/3600, (s%3600)/60, (s%60) }' /proc/uptime) KERNEL=$(uname -r) -WM="xfwm" + +if [ -n "$HYPRLAND_INSTANCE_SIGNATURE" ]; then + WM="hyprland" +elif [ -n "$SWAYSOCK" ]; then + WM="sway" +else + WM="unknown" +fi + TERM=$TERM -SHELL=$(echo -n $SHELL | awk -F "/" '{print $NF}') +SHELL="${SHELL##*/}" horizontal_n=$((${#USER} + ${#HOSTNAME} + 3)) horizontal_separator_char="-" HORIZONTAL_SEPARATOR=$(printf '%*s' "$horizontal_n" ' ' | tr ' ' "$horizontal_separator_char") +value=$(grep -E '^gtk-theme-name=' "$HOME/.config/gtk-4.0/settings.ini") +value=${value#*=} +value=${value//-/ } +THEME="$value" + # ----- # output login @@ -87,11 +147,14 @@ mapfile -t LOGO_LINES <<< "$LOGO" INFO_LINES=( "${C_CYAN}$USER${C_GRAY} @ ${C_WHITE}$HOSTNAME${C_RESET}" ${C_DIMYELLOW_ITALIC}$HORIZONTAL_SEPARATOR${C_RESET} -"${C_CYAN}cpu ${C_DIMYELLOW_ITALIC} : $CPU_MODELNAME ($CPU_THREADS_NUM threads)${C_RESET}" -"${C_CYAN}ram ${C_DIMYELLOW_ITALIC} : $RAM${C_RESET}" +# "${C_CYAN}cpu ${C_DIMYELLOW_ITALIC} : $CPU_MODELNAME ($CPU_THREADS_NUM threads)${C_RESET}" +"${C_CYAN}distro${C_DIMYELLOW_ITALIC} : $DISTRO${C_RESET}" +"${C_CYAN}theme ${C_DIMYELLOW_ITALIC} : $THEME${C_RESET}" +#"${C_CYAN}ram ${C_DIMYELLOW_ITALIC} : $RAM${C_RESET}" "${C_CYAN}age ${C_DIMYELLOW_ITALIC} : $TIME_SINCE_LAST_REINSTALL${C_RESET}" -"${C_CYAN}uptime${C_DIMYELLOW_ITALIC} : $UPTIME${C_RESET}" -"${C_CYAN}kernel${C_DIMYELLOW_ITALIC} : $KERNEL${C_RESET}" +"${C_CYAN}pkgs ${C_DIMYELLOW_ITALIC} : $INSTALLED_PACKAGES_COUNT${C_RESET}" +# "${C_CYAN}uptime${C_DIMYELLOW_ITALIC} : $UPTIME${C_RESET}" +#"${C_CYAN}kernel${C_DIMYELLOW_ITALIC} : $KERNEL${C_RESET}" "${C_CYAN}wm ${C_DIMYELLOW_ITALIC} : $WM${C_RESET}" "${C_CYAN}term ${C_DIMYELLOW_ITALIC} : $TERM${C_RESET}" "${C_CYAN}shell ${C_DIMYELLOW_ITALIC} : $SHELL${C_RESET}" @@ -105,3 +168,4 @@ for i in "${!LOGO_LINES[@]}"; do printf "\n" done printf "${C_RESET}" + diff --git a/ofetch_icons.sh b/old/ofetch_icons.sh old mode 100755 new mode 100644 similarity index 100% rename from ofetch_icons.sh rename to old/ofetch_icons.sh