From bb83945623fa6cef6c195c98a7776f45974c006c Mon Sep 17 00:00:00 2001 From: xyz Date: Sun, 17 Oct 2021 15:39:52 -0700 Subject: move work-tree to /, delete mods files, addd cfgL --- .Xresources | 6 - .bashrc | 56 --- .config/Mullvad VPN/gui_settings.json | 1 - .config/aria2/aria2.conf | 2 - .config/dunst/dunstrc | 468 ------------------- .config/fcitx5/conf/classicui.conf | 15 - .config/fontconfig/fonts.conf | 44 -- .config/htop/htoprc | 44 -- .config/mimeapps.list | 9 - .config/mpv/scripts/sponsorblock-minimal.lua | 1 - .config/myconf/cfgl_mods | 46 -- .config/myconf/gallery_urls | 5 - .config/newsboat/config | 27 -- .config/newsboat/urls | 26 -- .config/nsxiv/exec/key-handler | 64 --- .config/readline/inputrc | 34 -- .config/sxhkd/sxhkdrc | 57 --- .config/systemd/user/ssh-agent.service | 24 - .config/user-dirs.dirs | 15 - .config/zathura/zathurarc | 2 - .local/bin/cfg | 24 - .local/bin/chmodef | 5 - .local/bin/convwall | 34 -- .local/bin/curlkg | 42 -- .local/bin/curlncm | 86 ---- .local/bin/curlqb | 18 - .local/bin/gita | 18 - .local/bin/gitfork | 8 - .local/bin/gitpu | 19 - .local/bin/mmi | 27 -- .local/bin/mpva | 11 - .local/bin/mpvy | 41 -- .local/bin/mvtr | 14 - .local/bin/o | 15 - .local/bin/orgext | 24 - .local/bin/reco | 27 -- .local/bin/sbar | 90 ---- .local/bin/shufwall | 9 - .local/bin/time.uuid | 6 - .local/bin/topa | 6 - .local/bin/upd | 120 ----- .profile | 66 --- .xinitrc | 52 --- etc/locale.gen | 511 +++++++++++++++++++++ etc/pacman.conf | 100 ++++ etc/wildmidi/wildmidi.cfg | 142 ++++++ home/xyz/.Xresources | 6 + home/xyz/.bashrc | 56 +++ home/xyz/.config/Mullvad VPN/gui_settings.json | 1 + home/xyz/.config/aria2/aria2.conf | 2 + home/xyz/.config/dunst/dunstrc | 468 +++++++++++++++++++ home/xyz/.config/fcitx5/conf/classicui.conf | 15 + home/xyz/.config/fontconfig/fonts.conf | 44 ++ home/xyz/.config/htop/htoprc | 44 ++ home/xyz/.config/mimeapps.list | 9 + .../.config/mpv/scripts/sponsorblock-minimal.lua | 1 + home/xyz/.config/myconf/gallery_urls | 5 + home/xyz/.config/newsboat/config | 27 ++ home/xyz/.config/newsboat/urls | 26 ++ home/xyz/.config/nsxiv/exec/key-handler | 64 +++ home/xyz/.config/readline/inputrc | 34 ++ home/xyz/.config/sxhkd/sxhkdrc | 57 +++ home/xyz/.config/systemd/user/ssh-agent.service | 24 + home/xyz/.config/user-dirs.dirs | 15 + home/xyz/.config/zathura/zathurarc | 2 + home/xyz/.local/bin/cfg | 24 + home/xyz/.local/bin/chmodef | 5 + home/xyz/.local/bin/convwall | 34 ++ home/xyz/.local/bin/curlkg | 42 ++ home/xyz/.local/bin/curlncm | 86 ++++ home/xyz/.local/bin/curlqb | 18 + home/xyz/.local/bin/gita | 18 + home/xyz/.local/bin/gitfork | 8 + home/xyz/.local/bin/gitpu | 19 + home/xyz/.local/bin/mmi | 27 ++ home/xyz/.local/bin/mpva | 11 + home/xyz/.local/bin/mpvy | 41 ++ home/xyz/.local/bin/mvtr | 14 + home/xyz/.local/bin/o | 15 + home/xyz/.local/bin/orgext | 24 + home/xyz/.local/bin/reco | 27 ++ home/xyz/.local/bin/sbar | 90 ++++ home/xyz/.local/bin/shufwall | 9 + home/xyz/.local/bin/time.uuid | 6 + home/xyz/.local/bin/topa | 6 + home/xyz/.local/bin/upd | 120 +++++ home/xyz/.profile | 66 +++ home/xyz/.xinitrc | 52 +++ 88 files changed, 2415 insertions(+), 1708 deletions(-) delete mode 100644 .Xresources delete mode 100644 .bashrc delete mode 100644 .config/Mullvad VPN/gui_settings.json delete mode 100644 .config/aria2/aria2.conf delete mode 100644 .config/dunst/dunstrc delete mode 100644 .config/fcitx5/conf/classicui.conf delete mode 100644 .config/fontconfig/fonts.conf delete mode 100644 .config/htop/htoprc delete mode 100644 .config/mimeapps.list delete mode 120000 .config/mpv/scripts/sponsorblock-minimal.lua delete mode 100644 .config/myconf/cfgl_mods delete mode 100644 .config/myconf/gallery_urls delete mode 100644 .config/newsboat/config delete mode 100644 .config/newsboat/urls delete mode 100755 .config/nsxiv/exec/key-handler delete mode 100644 .config/readline/inputrc delete mode 100644 .config/sxhkd/sxhkdrc delete mode 100644 .config/systemd/user/ssh-agent.service delete mode 100644 .config/user-dirs.dirs delete mode 100644 .config/zathura/zathurarc delete mode 100755 .local/bin/cfg delete mode 100755 .local/bin/chmodef delete mode 100755 .local/bin/convwall delete mode 100755 .local/bin/curlkg delete mode 100755 .local/bin/curlncm delete mode 100755 .local/bin/curlqb delete mode 100755 .local/bin/gita delete mode 100755 .local/bin/gitfork delete mode 100755 .local/bin/gitpu delete mode 100755 .local/bin/mmi delete mode 100755 .local/bin/mpva delete mode 100755 .local/bin/mpvy delete mode 100755 .local/bin/mvtr delete mode 100755 .local/bin/o delete mode 100755 .local/bin/orgext delete mode 100755 .local/bin/reco delete mode 100755 .local/bin/sbar delete mode 100755 .local/bin/shufwall delete mode 100755 .local/bin/time.uuid delete mode 100755 .local/bin/topa delete mode 100755 .local/bin/upd delete mode 100644 .profile delete mode 100644 .xinitrc create mode 100644 etc/locale.gen create mode 100644 etc/pacman.conf create mode 100644 etc/wildmidi/wildmidi.cfg create mode 100644 home/xyz/.Xresources create mode 100644 home/xyz/.bashrc create mode 100644 home/xyz/.config/Mullvad VPN/gui_settings.json create mode 100644 home/xyz/.config/aria2/aria2.conf create mode 100644 home/xyz/.config/dunst/dunstrc create mode 100644 home/xyz/.config/fcitx5/conf/classicui.conf create mode 100644 home/xyz/.config/fontconfig/fonts.conf create mode 100644 home/xyz/.config/htop/htoprc create mode 100644 home/xyz/.config/mimeapps.list create mode 120000 home/xyz/.config/mpv/scripts/sponsorblock-minimal.lua create mode 100644 home/xyz/.config/myconf/gallery_urls create mode 100644 home/xyz/.config/newsboat/config create mode 100644 home/xyz/.config/newsboat/urls create mode 100755 home/xyz/.config/nsxiv/exec/key-handler create mode 100644 home/xyz/.config/readline/inputrc create mode 100644 home/xyz/.config/sxhkd/sxhkdrc create mode 100644 home/xyz/.config/systemd/user/ssh-agent.service create mode 100644 home/xyz/.config/user-dirs.dirs create mode 100644 home/xyz/.config/zathura/zathurarc create mode 100755 home/xyz/.local/bin/cfg create mode 100755 home/xyz/.local/bin/chmodef create mode 100755 home/xyz/.local/bin/convwall create mode 100755 home/xyz/.local/bin/curlkg create mode 100755 home/xyz/.local/bin/curlncm create mode 100755 home/xyz/.local/bin/curlqb create mode 100755 home/xyz/.local/bin/gita create mode 100755 home/xyz/.local/bin/gitfork create mode 100755 home/xyz/.local/bin/gitpu create mode 100755 home/xyz/.local/bin/mmi create mode 100755 home/xyz/.local/bin/mpva create mode 100755 home/xyz/.local/bin/mpvy create mode 100755 home/xyz/.local/bin/mvtr create mode 100755 home/xyz/.local/bin/o create mode 100755 home/xyz/.local/bin/orgext create mode 100755 home/xyz/.local/bin/reco create mode 100755 home/xyz/.local/bin/sbar create mode 100755 home/xyz/.local/bin/shufwall create mode 100755 home/xyz/.local/bin/time.uuid create mode 100755 home/xyz/.local/bin/topa create mode 100755 home/xyz/.local/bin/upd create mode 100644 home/xyz/.profile create mode 100644 home/xyz/.xinitrc diff --git a/.Xresources b/.Xresources deleted file mode 100644 index 8953b89e..00000000 --- a/.Xresources +++ /dev/null @@ -1,6 +0,0 @@ -! nsxiv, fnune/base16-vim base16-tomorrow-night colorscheme -Nsxiv.bar.font:monospace:size=11 -Nsxiv.window.foreground:#c5c8c6 -Nsxiv.window.background:#1d1f21 -Nsxiv.bar.foreground:#b4b7b4 -Nsxiv.bar.background:#282a2e diff --git a/.bashrc b/.bashrc deleted file mode 100644 index 78401eb3..00000000 --- a/.bashrc +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh - -# $- meaning see https://stackoverflow.com/questions/42757236/what-does-mean-in-bash -# If not running interactively, don't do anything -#[[ $- != *i* ]] && return -# https://github.com/westscz/.dotfiles/blob/master/system/bashrc -case $- in - *i*) ;; - *) return;; -esac - -. /usr/share/fzf/completion.bash -. /usr/share/fzf/key-bindings.bash - -# default PS1 -#PS1='[\u@\h \W]\$ ' - -# 0: not bold, 91: bright red -# \e[m act like \e[0m, means reset so commands after it will not be colored -# https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit -# need \[ and \] around color codes so bash ignore color codes when calculating line wraps -PS1='\[\e[0;91m\][\u@\h \W]\$ \[\e[0m\]' - -# https://github.com/LukeSmithxyz/voidrice/blob/master/.config/shell/aliasrc -for cmd in iotop nethogs hardcode-fixer ventoy; do - alias $cmd="sudo $cmd" -done -unset cmd - -alias absolutely-proprietary='absolutely-proprietary -f' -alias alsamixer='alsamixer -V all' -alias diff='diff --color=auto' -alias grep='grep --color=auto' -alias ls='ls --color=auto' -alias radeontop='radeontop -c' -alias rm='rm -I' -alias sdcv='sdcv --color' - -# /dev/ttyACM0 can be in config file, or as environmantal variable, see /usr/share/doc/adafruit-ampy/README.md -alias ap='sudo ampy -p /dev/ttyACM0' -alias cfgc='cfg -c' -alias cfgl='cfg -l' -alias cfgs='cfg -s' -alias g=git -alias ll='ls -lAh --color=auto --group-directories-first' -alias s='sudo ' # https://askubuntu.com/a/22043 -alias se='sudo -E ' -alias spd='speedtest --no-upload; librespeed-cli --no-upload' -alias sv='sudoedit' -alias tp='sudo tio /dev/ttyACM0' -alias v='$EDITOR' -alias vc='$EDITOR "$XDG_DOCUMENTS_DIR/notes/computer/command-line_notes.md"' -alias vq='$EDITOR "$XDG_DOCUMENTS_DIR/notes/others/questions_ideas_tips.md"' -alias wtr='curl v2.wttr.in' - -eval "$(zoxide init bash)" diff --git a/.config/Mullvad VPN/gui_settings.json b/.config/Mullvad VPN/gui_settings.json deleted file mode 100644 index 8867e15e..00000000 --- a/.config/Mullvad VPN/gui_settings.json +++ /dev/null @@ -1 +0,0 @@ -{"preferredLocale":"system","autoConnect":true,"enableSystemNotifications":true,"monochromaticIcon":false,"startMinimized":false,"unpinnedWindow":true,"browsedForSplitTunnelingApplications":[]} \ No newline at end of file diff --git a/.config/aria2/aria2.conf b/.config/aria2/aria2.conf deleted file mode 100644 index 44bd9c97..00000000 --- a/.config/aria2/aria2.conf +++ /dev/null @@ -1,2 +0,0 @@ -# max hardcoded to 16, see https://github.com/aria2/aria2/issues/1039 -max-connection-per-server=16 diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc deleted file mode 100644 index 987c65cb..00000000 --- a/.config/dunst/dunstrc +++ /dev/null @@ -1,468 +0,0 @@ -[global] - ### Display ### - - # Which monitor should the notifications be displayed on. - monitor = 0 - - # Display notification on focused monitor. Possible modes are: - # mouse: follow mouse pointer - # keyboard: follow window with keyboard focus - # none: don't follow anything - # - # "keyboard" needs a window manager that exports the - # _NET_ACTIVE_WINDOW property. - # This should be the case for almost all modern window managers. - # - # If this option is set to mouse or keyboard, the monitor option - # will be ignored. - follow = mouse - - # The geometry of the window: - # [{width}]x{height}[+/-{x}+/-{y}] - # The geometry of the message window. - # The height is measured in number of notifications everything else - # in pixels. If the width is omitted but the height is given - # ("-geometry x2"), the message window expands over the whole screen - # (dmenu-like). If width is 0, the window expands to the longest - # message displayed. A positive x is measured from the left, a - # negative from the right side of the screen. Y is measured from - # the top and down respectively. - # The width can be negative. In this case the actual width is the - # screen width minus the width defined in within the geometry option. - geometry = "300x5-30+20" - - # Turn on the progess bar - progress_bar = true - - # Set the progress bar height. This includes the frame, so make sure - # it's at least twice as big as the frame width. - progress_bar_height = 10 - - # Set the frame width of the progress bar - progress_bar_frame_width = 1 - - # Set the minimum width for the progress bar - progress_bar_min_width = 150 - - # Set the maximum width for the progress bar - progress_bar_max_width = 300 - - - # Show how many messages are currently hidden (because of geometry). - indicate_hidden = yes - - # Shrink window if it's smaller than the width. Will be ignored if - # width is 0. - shrink = yes - - # The transparency of the window. Range: [0; 100]. - # This option will only work if a compositing window manager is - # present (e.g. xcompmgr, compiz, etc.). - transparency = 0 - - # The height of the entire notification. If the height is smaller - # than the font height and padding combined, it will be raised - # to the font height and padding. - notification_height = 0 - - # Draw a line of "separator_height" pixel height between two - # notifications. - # Set to 0 to disable. - separator_height = 1 - - # Padding between text and separator. - padding = 8 - - # Horizontal padding. - horizontal_padding = 8 - - # Padding between text and icon. - text_icon_padding = 0 - - # Defines width in pixels of frame around the notification window. - # Set to 0 to disable. - frame_width = 1 - - # Defines color of the frame around the notification window. - frame_color = "#c5c8c6" - - # Define a color for the separator. - # possible values are: - # * auto: dunst tries to find a color fitting to the background; - # * foreground: use the same color as the foreground; - # * frame: use the same color as the frame; - # * anything else will be interpreted as a X color. - separator_color = frame - - # Sort messages by urgency. - sort = yes - - # Don't remove messages, if the user is idle (no mouse or keyboard input) - # for longer than idle_threshold seconds. - # Set to 0 to disable. - # A client can set the 'transient' hint to bypass this. See the rules - # section for how to disable this if necessary - idle_threshold = 120 - - ### Text ### - - font = Monospace 10 - - # The spacing between lines. If the height is smaller than the - # font height, it will get raised to the font height. - line_height = 0 - - # Possible values are: - # full: Allow a small subset of html markup in notifications: - # bold - # italic - # strikethrough - # underline - # - # For a complete reference see - # . - # - # strip: This setting is provided for compatibility with some broken - # clients that send markup even though it's not enabled on the - # server. Dunst will try to strip the markup but the parsing is - # simplistic so using this option outside of matching rules for - # specific applications *IS GREATLY DISCOURAGED*. - # - # no: Disable markup parsing, incoming notifications will be treated as - # plain text. Dunst will not advertise that it has the body-markup - # capability if this is set as a global setting. - # - # It's important to note that markup inside the format option will be parsed - # regardless of what this is set to. - markup = full - - # The format of the message. Possible variables are: - # %a appname - # %s summary - # %b body - # %i iconname (including its path) - # %I iconname (without its path) - # %p progress value if set ([ 0%] to [100%]) or nothing - # %n progress value if set without any extra characters - # %% Literal % - # Markup is allowed - format = "%s\n%b" - - # Alignment of message text. - # Possible values are "left", "center" and "right". - alignment = left - - # Vertical alignment of message text and icon. - # Possible values are "top", "center" and "bottom". - vertical_alignment = center - - # Show age of message if message is older than show_age_threshold - # seconds. - # Set to -1 to disable. - show_age_threshold = 60 - - # Split notifications into multiple lines if they don't fit into - # geometry. - word_wrap = yes - - # When word_wrap is set to no, specify where to make an ellipsis in long lines. - # Possible values are "start", "middle" and "end". - ellipsize = middle - - # Ignore newlines '\n' in notifications. - ignore_newline = no - - # Stack together notifications with the same content - stack_duplicates = true - - # Hide the count of stacked notifications with the same content - hide_duplicate_count = false - - # Display indicators for URLs (U) and actions (A). - show_indicators = yes - - ### Icons ### - - # Align icons left/right/off - icon_position = left - - # Scale small icons up to this size, set to 0 to disable. Helpful - # for e.g. small files or high-dpi screens. In case of conflict, - # max_icon_size takes precedence over this. - min_icon_size = 0 - - # Scale larger icons down to this size, set to 0 to disable - max_icon_size = 32 - - # Paths to default icons. - icon_path = /usr/share/icons/Papirus-Dark/16x16/actions:/usr/share/icons/Papirus-Dark/16x16/categories:/usr/share/icons/Papirus-Dark/16x16/emblems:/usr/share/icons/Papirus-Dark/16x16/mimetypes:/usr/share/icons/Papirus-Dark/16x16/places:/usr/share/icons/Papirus-Dark/16x16/apps:/usr/share/icons/Papirus-Dark/16x16/devices:/usr/share/icons/Papirus-Dark/16x16/emotes:/usr/share/icons/Papirus-Dark/16x16/panel:/usr/share/icons/Papirus-Dark/16x16/status - - ### History ### - - # Should a notification popped up from history be sticky or timeout - # as if it would normally do. - sticky_history = yes - - # Maximum amount of notifications kept in history - history_length = 20 - - ### Misc/Advanced ### - - # dmenu path. - dmenu = /usr/bin/dmenu -p dunst: - - # Browser for opening urls in context menu. - browser = /usr/bin/firefox -new-tab - - # Always run rule-defined scripts, even if the notification is suppressed - always_run_script = true - - # Define the title of the windows spawned by dunst - title = Dunst - - # Define the class of the windows spawned by dunst - class = Dunst - - # Print a notification on startup. - # This is mainly for error detection, since dbus (re-)starts dunst - # automatically after a crash. - startup_notification = false - - # Manage dunst's desire for talking - # Can be one of the following values: - # crit: Critical features. Dunst aborts - # warn: Only non-fatal warnings - # mesg: Important Messages - # info: all unimportant stuff - # debug: all less than unimportant stuff - verbosity = mesg - - # Define the corner radius of the notification window - # in pixel size. If the radius is 0, you have no rounded - # corners. - # The radius will be automatically lowered if it exceeds half of the - # notification height to avoid clipping text and/or icons. - corner_radius = 0 - - # Ignore the dbus closeNotification message. - # Useful to enforce the timeout set by dunst configuration. Without this - # parameter, an application may close the notification sent before the - # user defined timeout. - ignore_dbusclose = false - - ### Wayland ### - # These settings are Wayland-specific. They have no effect when using X11 - - # Uncomment this if you want to let notications appear under fullscreen - # applications (default: overlay) - # layer = top - - # Set this to true to use X11 output on Wayland. - force_xwayland = false - - ### Legacy - - # Use the Xinerama extension instead of RandR for multi-monitor support. - # This setting is provided for compatibility with older nVidia drivers that - # do not support RandR and using it on systems that support RandR is highly - # discouraged. - # - # By enabling this setting dunst will not be able to detect when a monitor - # is connected or disconnected which might break follow mode if the screen - # layout changes. - force_xinerama = false - - ### mouse - - # Defines list of actions for each mouse event - # Possible values are: - # * none: Don't do anything. - # * do_action: If the notification has exactly one action, or one is marked as default, - # invoke it. If there are multiple and no default, open the context menu. - # * close_current: Close current notification. - # * close_all: Close all notifications. - # These values can be strung together for each mouse event, and - # will be executed in sequence. - mouse_left_click = close_current - mouse_middle_click = do_action, close_current - mouse_right_click = close_all - -# Experimental features that may or may not work correctly. Do not expect them -# to have a consistent behaviour across releases. -[experimental] - # Calculate the dpi to use on a per-monitor basis. - # If this setting is enabled the Xft.dpi value will be ignored and instead - # dunst will attempt to calculate an appropriate dpi value for each monitor - # using the resolution and physical size. This might be useful in setups - # where there are multiple screens with very different dpi values. - per_monitor_dpi = false - -# The internal keyboard shortcut support in dunst is now considered deprecated -# and should be replaced by dunstctl calls. You can use the configuration of your -# WM or DE to bind these to shortcuts of your choice. -# Check the dunstctl manual page for more info. -[shortcuts] - - # Shortcuts are specified as [modifier+][modifier+]...key - # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", - # "mod3" and "mod4" (windows-key). - # Xev might be helpful to find names for keys. - - # Close notification. Equivalent dunstctl command: - # dunstctl close - # close = ctrl+space - - # Close all notifications. Equivalent dunstctl command: - # dunstctl close-all - # close_all = ctrl+shift+space - - # Redisplay last message(s). Equivalent dunstctl command: - # dunstctl history-pop - # history = ctrl+grave - - # Context menu. Equivalent dunstctl command: - # dunstctl context - # context = ctrl+shift+period - -[urgency_low] - # IMPORTANT: colors have to be defined in quotation marks. - # Otherwise the "#" and following would be interpreted as a comment. - background = "#1d1f21" - foreground = "#81a2be" - frame_color = "#81a2be" - timeout = 10 - # Icon for notifications with low urgency, uncomment to enable - #icon = /path/to/icon - -[urgency_normal] - background = "#1d1f21" - foreground = "#b5bd68" - frame_color = "#b5bd68" - timeout = 10 - # Icon for notifications with normal urgency, uncomment to enable - #icon = /path/to/icon - -[urgency_critical] - background = "#1d1f21" - foreground = "#cc6666" - frame_color = "#cc6666" - timeout = 0 - # Icon for notifications with critical urgency, uncomment to enable - #icon = /path/to/icon - -# Every section that isn't one of the above is interpreted as a rules to -# override settings for certain messages. -# -# Messages can be matched by -# appname (discouraged, see desktop_entry) -# body -# category -# desktop_entry -# icon -# match_transient -# msg_urgency -# stack_tag -# summary -# -# and you can override the -# background -# foreground -# format -# frame_color -# fullscreen -# new_icon -# set_stack_tag -# set_transient -# timeout -# urgency -# -# Shell-like globbing will get expanded. -# -# Instead of the appname filter, it's recommended to use the desktop_entry filter. -# GLib based applications export their desktop-entry name. In comparison to the appname, -# the desktop-entry won't get localized. -# -# SCRIPTING -# You can specify a script that gets run when the rule matches by -# setting the "script" option. -# The script will be called as follows: -# script appname summary body icon urgency -# where urgency can be "LOW", "NORMAL" or "CRITICAL". -# -# NOTE: if you don't want a notification to be displayed, set the format -# to "". -# NOTE: It might be helpful to run dunst -print in a terminal in order -# to find fitting options for rules. - -# Disable the transient hint so that idle_threshold cannot be bypassed from the -# client -#[transient_disable] -# match_transient = yes -# set_transient = no -# -# Make the handling of transient notifications more strict by making them not -# be placed in history. -#[transient_history_ignore] -# match_transient = yes -# history_ignore = yes - -# fullscreen values -# show: show the notifications, regardless if there is a fullscreen window opened -# delay: displays the new notification, if there is no fullscreen window active -# If the notification is already drawn, it won't get undrawn. -# pushback: same as delay, but when switching into fullscreen, the notification will get -# withdrawn from screen again and will get delayed like a new notification -#[fullscreen_delay_everything] -# fullscreen = delay -#[fullscreen_show_critical] -# msg_urgency = critical -# fullscreen = show - -#[espeak] -# summary = "*" -# script = dunst_espeak.sh - -#[script-test] -# summary = "*script*" -# script = dunst_test.sh - -#[ignore] -# # This notification will not be displayed -# summary = "foobar" -# format = "" - -#[history-ignore] -# # This notification will not be saved in history -# summary = "foobar" -# history_ignore = yes - -#[skip-display] -# # This notification will not be displayed, but will be included in the history -# summary = "foobar" -# skip_display = yes - -#[signed_on] -# appname = Pidgin -# summary = "*signed on*" -# urgency = low -# -#[signed_off] -# appname = Pidgin -# summary = *signed off* -# urgency = low -# -#[says] -# appname = Pidgin -# summary = *says* -# urgency = critical -# -#[twitter] -# appname = Pidgin -# summary = *twitter.com* -# urgency = normal -# -#[stack-volumes] -# appname = "some_volume_notifiers" -# set_stack_tag = "volume" -# -# vim: ft=cfg diff --git a/.config/fcitx5/conf/classicui.conf b/.config/fcitx5/conf/classicui.conf deleted file mode 100644 index 6986df92..00000000 --- a/.config/fcitx5/conf/classicui.conf +++ /dev/null @@ -1,15 +0,0 @@ -# Vertical Candidate List -Vertical Candidate List=False -# Use Per Screen DPI -PerScreenDPI=True -# Use mouse wheel to go to prev or next page -WheelForPaging=True -# Font -Font="Adobe Kaiti Std 12" -# Menu Font -MenuFont="Sans 10" -# Use input method langauge to display text -UseInputMethodLangaugeToDisplayText=True -# Theme -Theme=default - diff --git a/.config/fontconfig/fonts.conf b/.config/fontconfig/fonts.conf deleted file mode 100644 index c8b6287f..00000000 --- a/.config/fontconfig/fonts.conf +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - serif - - Noto Serif - Noto Serif CJK SC - Noto Color Emoji - - - - sans-serif - - Noto Sans - Noto Sans CJK SC - Noto Color Emoji - - - - monospace - - Noto Sans Mono - Noto Sans Mono CJK SC - Noto Color Emoji - - - - - - - diff --git a/.config/htop/htoprc b/.config/htop/htoprc deleted file mode 100644 index 48d07e69..00000000 --- a/.config/htop/htoprc +++ /dev/null @@ -1,44 +0,0 @@ -# Beware! This file is rewritten by htop when settings are changed in the interface. -# The parser is also very primitive, and not human-friendly. -htop_version=3.1.0 -config_reader_min_version=2 -fields=0 48 17 18 38 39 40 2 46 47 49 1 -sort_key=46 -sort_direction=-1 -tree_sort_key=0 -tree_sort_direction=1 -hide_kernel_threads=1 -hide_userland_threads=1 -shadow_other_users=0 -show_thread_names=0 -show_program_path=1 -highlight_base_name=0 -highlight_deleted_exe=1 -highlight_megabytes=1 -highlight_threads=1 -highlight_changes=0 -highlight_changes_delay_secs=5 -find_comm_in_cmdline=1 -strip_exe_from_cmdline=1 -show_merged_command=0 -tree_view=0 -tree_view_always_by_pid=0 -all_branches_collapsed=0 -header_margin=1 -detailed_cpu_time=0 -cpu_count_from_one=0 -show_cpu_usage=1 -show_cpu_frequency=1 -show_cpu_temperature=1 -degree_fahrenheit=0 -update_process_names=0 -account_guest_in_cpu_meter=0 -color_scheme=0 -enable_mouse=1 -delay=15 -hide_function_bar=0 -header_layout=two_50_50 -column_meters_0=AllCPUs Memory Swap -column_meter_modes_0=1 1 1 -column_meters_1=Tasks LoadAverage DiskIO NetworkIO -column_meter_modes_1=2 2 2 2 diff --git a/.config/mimeapps.list b/.config/mimeapps.list deleted file mode 100644 index 9a21f46e..00000000 --- a/.config/mimeapps.list +++ /dev/null @@ -1,9 +0,0 @@ -# it seems there's no need to put sxiv.desktop into ~/.local/share/applications/ if there exist sxiv.desktop in /usr/share/applications -# no need to use xdg-mime to install it if already exist? -# but if you what to create new .desktop desktop entries with new name, you need to put it in ~/.local/share/applications/ - -[Default Applications] -image/gif=nsxiv.desktop; -image/png=nsxiv.desktop; -image/jpeg=nsxiv.desktop; -application/pdf=org.pwmt.zathura.desktop; diff --git a/.config/mpv/scripts/sponsorblock-minimal.lua b/.config/mpv/scripts/sponsorblock-minimal.lua deleted file mode 120000 index cb3390f8..00000000 --- a/.config/mpv/scripts/sponsorblock-minimal.lua +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/mpv/sponsorblock-minimal.lua \ No newline at end of file diff --git a/.config/myconf/cfgl_mods b/.config/myconf/cfgl_mods deleted file mode 100644 index e306ca48..00000000 --- a/.config/myconf/cfgl_mods +++ /dev/null @@ -1,46 +0,0 @@ -644 /home/xyz/.bashrc -600 /home/xyz/.config/aria2/aria2.conf -644 /home/xyz/.config/dunst/dunstrc -600 /home/xyz/.config/fcitx5/conf/classicui.conf -644 /home/xyz/.config/fontconfig/fonts.conf -444 /home/xyz/.config/htop/htoprc -644 /home/xyz/.config/mimeapps.list -644 /home/xyz/.config/Mullvad VPN/gui_settings.json -644 /home/xyz/.config/myconf/cfgl_mods -644 /home/xyz/.config/myconf/gallery_urls -644 /home/xyz/.config/myconf/locale.gen -644 /home/xyz/.config/myconf/pacman.conf -644 /home/xyz/.config/myconf/wildmidi.cfg -644 /home/xyz/.config/newsboat/config -600 /home/xyz/.config/newsboat/urls -755 /home/xyz/.config/nsxiv/exec/key-handler -644 /home/xyz/.config/readline/inputrc -644 /home/xyz/.config/sxhkd/sxhkdrc -644 /home/xyz/.config/systemd/user/ssh-agent.service -644 /home/xyz/.config/user-dirs.dirs -644 /home/xyz/.config/zathura/zathurarc -755 /home/xyz/.local/bin/cfg -755 /home/xyz/.local/bin/chmodef -755 /home/xyz/.local/bin/convwall -755 /home/xyz/.local/bin/cpcfg -755 /home/xyz/.local/bin/curlkg -755 /home/xyz/.local/bin/curlncm -755 /home/xyz/.local/bin/curlqb -755 /home/xyz/.local/bin/gita -755 /home/xyz/.local/bin/gitfork -755 /home/xyz/.local/bin/gitpu -755 /home/xyz/.local/bin/mmi -755 /home/xyz/.local/bin/mpva -755 /home/xyz/.local/bin/mpvy -755 /home/xyz/.local/bin/mvtr -755 /home/xyz/.local/bin/o -755 /home/xyz/.local/bin/orgext -755 /home/xyz/.local/bin/reco -755 /home/xyz/.local/bin/sbar -755 /home/xyz/.local/bin/shufwall -755 /home/xyz/.local/bin/time.uuid -755 /home/xyz/.local/bin/topa -755 /home/xyz/.local/bin/upd -644 /home/xyz/.profile -644 /home/xyz/.xinitrc -644 /home/xyz/.Xresources diff --git a/.config/myconf/gallery_urls b/.config/myconf/gallery_urls deleted file mode 100644 index c0ffd026..00000000 --- a/.config/myconf/gallery_urls +++ /dev/null @@ -1,5 +0,0 @@ -# input file format see https://github.com/mikf/gallery-dl/blob/13d4045a8a5a6fd45cb20df399f44055b25f5cca/gallery_dl/__init__.py#L33-L58 -https://www.pixiv.net/users/13379747/artworks -https://www.deviantart.com/wlop/gallery -https://www.deviantart.com/minimalistic-animoo/gallery/ -https://www.deviantart.com/theminimalists/gallery/ diff --git a/.config/newsboat/config b/.config/newsboat/config deleted file mode 100644 index 8b31ecb8..00000000 --- a/.config/newsboat/config +++ /dev/null @@ -1,27 +0,0 @@ -auto-reload yes - -bind-key h quit -bind-key j down -bind-key k up -bind-key l open -bind-key g home -bind-key G end -bind-key ^F pagedown -bind-key ^B pageup - -# open-in-browser-noninteractively may be useful -macro y set browser "echo %u | xsel -ib"; open-in-browser; set browser "$BROWSER %u &" - -# https://newsboat.org/releases/2.24/docs/newsboat.html#_killfiles -# https://newsboat.org/releases/2.24/docs/newsboat.html#_filter_language - -# not sure if all following arch linux rss feed ignore-article will work as expected -# maybe aur rss feed is broken; maybe arch linux feeds are updated very fast so I can't get the wanted news? -# not fully understand the rss feed -ignore-article "https://aur.archlinux.org/rss/" "title !~\"youtube-dlp|yt-dlp\"" -# arch linux development feeds: all project -ignore-article "https://bugs.archlinux.org/feed.php?feed_type=rss2&project=0" "title !~ \"wildmidi|aur.*(rss|feed)|(rss|feed).*aur\"" -ignore-article "https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=edit&project=0" "title !~ \"FS#(47508|71501|71453|70113|69492)|wildmidi|aur.*(rss|feed)|(rss|feed).*aur\"" -ignore-article "https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=clo&project=0" "title !~ \"FS#(47508|71501|71453|70113|69492)|wildmidi|aur.*(rss|feed)|(rss|feed).*aur\"" - -# vim: ft=sh diff --git a/.config/newsboat/urls b/.config/newsboat/urls deleted file mode 100644 index 100fcb00..00000000 --- a/.config/newsboat/urls +++ /dev/null @@ -1,26 +0,0 @@ -# https://newsboat.org/releases/2.24/docs/newsboat.html#_tagging - -# temp -https://github.community/t/why-forked-repos-are-not-automatically-watched/205774.rss - -# recreation -https://www.youtube.com/feeds/videos.xml?channel_id=UCD6VugMZKRhSyzWEWA9W2fg recreation -http://keygenmusic.net/rss.php recreation - -# computer misc -https://suckless.org/atom.xml -https://ryf.fsf.org/news/rss.xml -https://ryf.fsf.org/products/rss.xml - -# arch linux -https://archlinux.org/feeds/news/ -https://bbs.archlinux.org/extern.php?action=feed&tid=260286&type=atom -https://aur.archlinux.org/rss/ -# arch linux development feeds: all projects -https://bugs.archlinux.org/feed.php?feed_type=rss2&project=0 -https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=edit&project=0 -https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=clo&project=0 - -# qmmp -https://sourceforge.net/p/qmmp-dev/tickets/590/feed.atom -https://sourceforge.net/p/qmmp-dev/tickets/714/feed.atom diff --git a/.config/nsxiv/exec/key-handler b/.config/nsxiv/exec/key-handler deleted file mode 100755 index 80dd82f0..00000000 --- a/.config/nsxiv/exec/key-handler +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh - -# Example for $XDG_CONFIG_HOME/sxiv/exec/key-handler -# Called by sxiv(1) after the external prefix key (C-x by default) is pressed. -# The next key combo is passed as its first argument. Passed via stdin are the -# images to act upon, one path per line: all marked images, if in thumbnail -# mode and at least one image has been marked, otherwise the current image. -# sxiv(1) blocks until this script terminates. It then checks which images -# have been modified and reloads them. - -# The key combo argument has the following form: "[C-][M-][S-]KEY", -# where C/M/S indicate Ctrl/Meta(Alt)/Shift modifier states and KEY is the X -# keysym as listed in /usr/include/X11/keysymdef.h without the "XK_" prefix. - -# my dependency notes -# jpegtran is owned by libjpeg-turbo -# mogrify is owned by imagemagick -# exiv2 is owned by exiv2 -# rawtherapee is owned by rawtherapee - -rotate() { - tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read -r file; do - case "$(file -b -i "$file")" in - image/jpeg*) jpegtran -rotate 90 -copy all -outfile "$file" "$file" ;; - *) mogrify -rotate 90 "$file" ;; - esac - done -} - -flip() { - tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read -r file; do - case "$(file -b -i "$file")" in - image/jpeg*) jpegtran -flip vertical -copy all -outfile "$file" "$file" ;; - *) mogrify -flip "$file" ;; - esac - done -} - -linkwall() { - tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read -r file; do - walldir="$XDG_PICTURES_DIR/wallpapers/" - name=$(basename "$file") - if [ ! -e "$walldir$name" ]; then - convwall "$file" "$walldir$name" || ln -s "$file" "$walldir" - else - notify-send 'error' "$name exist" - fi - done -} - -# I choose not to put case nested in while read file loop -# because it can pipe multiple files to one command? -case "$1" in - "d") [ "$(printf 'No\nYes' | dmenu -i -p 'delete?')" = "Yes" ] && tr '\n' '\0' | xargs -0 rm ;; - "e") while read -r file; do alacritty -e sh -c "exiv2 pr -q -pa '$file' | less" & done ;; - "f") flip ;; - "g") tr '\n' '\0' | xargs -0 setsid -f gimp ;; - "l") linkwall ;; - "p") tr '\n' '\0' | xargs -0 sh -c 'convert "$@" $(time.uuid).pdf' shell ;; - "r") rotate ;; - "w") tr '\n' '\0' | xargs -0 shufwall ;; - "y") tr '\n' '\0' | xargs -0 realpath | xsel -b ;; -esac - diff --git a/.config/readline/inputrc b/.config/readline/inputrc deleted file mode 100644 index a666b091..00000000 --- a/.config/readline/inputrc +++ /dev/null @@ -1,34 +0,0 @@ -$include /etc/inputrc - -# from archwiki realine -# Color files by types -# Note that this may cause completion text blink in some terminals (e.g. xterm). -set colored-stats On -# Append char to indicate type -set visible-stats On -# Mark symlinked directories -set mark-symlinked-directories On -# Color the common prefix -set colored-completion-prefix On -# Color the common prefix in menu-complete -set menu-complete-display-prefix On - -# https://github.com/LukeSmithxyz/voidrice/blob/2440ad83e9e9cf2f927efbaef618513e0df3cbda/.config/shell/inputrc -set editing-mode vi -$if mode=vi - - set show-mode-in-prompt on - set vi-ins-mode-string \1\e[6 q\2 - set vi-cmd-mode-string \1\e[2 q\2 - - #set keymap vi-command - # these are for vi-command mode - #Control-l: clear-screen - #Control-a: beginning-of-line - - set keymap vi-insert - # these are for vi-insert mode - Control-l: clear-screen - #Control-a: beginning-of-line - -$endif diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc deleted file mode 100644 index f84cf529..00000000 --- a/.config/sxhkd/sxhkdrc +++ /dev/null @@ -1,57 +0,0 @@ -Print - ffmpeg -f x11grab -i "$DISPLAY" -vframes 1 "$XDG_PICTURES_DIR/screenshots/$(time.uuid).png" - -alt + Print - xrectsel '%w %h %x %y' | xargs sh -c 'ffmpeg -f x11grab -s "$1"x"$2" -i "$DISPLAY+$3,$4" -vframes 1 "$XDG_PICTURES_DIR/screenshots/$(time.uuid).png"' shell - -alt + shift + Print - reco - -XF86Audio{RaiseVolume,LowerVolume,Mute} - amixer set Master {5%+,5%-,toggle};\ - kill -RTMIN+1 "$(cat "$XDG_CACHE_HOME/pidofbar")" - -# for pulseaudio, master volume affects capture volume too? -# my laptop built-in microphone capture volume is really low -# so I want to keep capture volume always 100% -alt + XF86AudioMute - amixer set Capture toggle;\ - kill -RTMIN "$(cat "$XDG_CACHE_HOME/pidofbar")" - -XF86Audio{Prev,Play,Next} - playerctl {previous,play-pause,next} - -@Caps_Lock - kill -RTMIN+3 "$(cat "$XDG_CACHE_HOME/pidofbar")" - -alt + y - mpvy -s - -alt + shift + y - mpvy -a - -alt + ctrl + y - tsp mpvy -A -u "$(xsel -ob)" - -alt + w - "$BROWSER" - -# not ideal -alt + shift + w - mullvad-exclude "$BROWSER" - -alt + s - shufwall - -# not ideal -alt + v - if mullvad status | grep -q 'Disconnect'; then mullvad connect -w; else killall qbittorrent; mullvad disconnect -w; fi;\ - kill -RTMIN+4 "$(cat "$XDG_CACHE_HOME/pidofbar")" - -# not ideal -alt + q - mullvad connect -w;\ - kill -RTMIN+4 "$(cat "$XDG_CACHE_HOME/pidofbar")";\ - qbittorrent - -# vim: ft=sh diff --git a/.config/systemd/user/ssh-agent.service b/.config/systemd/user/ssh-agent.service deleted file mode 100644 index 66fa63ef..00000000 --- a/.config/systemd/user/ssh-agent.service +++ /dev/null @@ -1,24 +0,0 @@ -# how to use: -# systemctl --user enable --now ssh-agent - -[Unit] -Description=SSH key agent - -# archwiki approach -# https://wiki.archlinux.org/title/SSH_keys#Start_ssh-agent_with_systemd_user -[Service] -Type=simple -Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket -# DISPLAY required for ssh-askpass to work -Environment=DISPLAY=:0 -ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK - -# github White-Oak approach -# https://github.com/White-Oak/arch-setup-for-dummies/blob/master/setting-up-ssh-agent.md -#[Service] -#Type=forking -#Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket -#ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK - -[Install] -WantedBy=default.target diff --git a/.config/user-dirs.dirs b/.config/user-dirs.dirs deleted file mode 100644 index 85cab233..00000000 --- a/.config/user-dirs.dirs +++ /dev/null @@ -1,15 +0,0 @@ -# This file is written by xdg-user-dirs-update -# If you want to change or add directories, just edit the line you're -# interested in. All local changes will be retained on the next run. -# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped -# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an -# absolute path. No other format is supported. - -XDG_DESKTOP_DIR="$HOME/desktop/" -XDG_DOWNLOAD_DIR="$HOME/downloads/" -XDG_TEMPLATES_DIR="$HOME/" -XDG_PUBLICSHARE_DIR="$HOME/" -XDG_DOCUMENTS_DIR="$HOME/documents/" -XDG_MUSIC_DIR="$HOME/music/" -XDG_PICTURES_DIR="$HOME/pictures/" -XDG_VIDEOS_DIR="$HOME/videos/" diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc deleted file mode 100644 index 2c49960e..00000000 --- a/.config/zathura/zathurarc +++ /dev/null @@ -1,2 +0,0 @@ -# mouse selection copy to clipboard instead of primary -set selection-clipboard clipboard diff --git a/.local/bin/cfg b/.local/bin/cfg deleted file mode 100755 index de40874a..00000000 --- a/.local/bin/cfg +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -# didn't consider $HOME contain space? need improve? -while getopts clLsSmM opt; do - case $opt in - c|l|s) dir="$HOME" - cmd="git --git-dir=$dir/.cfg$opt/ --work-tree=$dir" - mods="$XDG_CONFIG_HOME/myconf/cfg${opt}_mods";; - L|S) dir=/etc/ - cmd="sudo git --git-dir=$dir/.cfg$opt/ --work-tree=$dir" - mods="/etc/myconf/cfg${opt}_mods";; - # -rw-r--r-- == binary 110100100 == octal 644 - # https://stackoverflow.com/a/1796009 - m) $cmd ls-tree -r --name-only --full-tree HEAD | nawk -v a="$dir/" '{printf("%s%s\n",a,$0)}' | tr '\n' '\0' | xargs -0 ls -ldA -- | grep -v '^l\|^d' | nawk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k){for(i=10;$i;i++)$9=$9" "$i;printf("%0o %s\n",k,$9)}}' > "$mods" - exit;; - M) while read -r mod path; do - sudo chmod -c "$mod" -- "$path" - done < "$mods" - exit;; - \?) exit 1;; - esac -done -shift $((OPTIND-1)) -$cmd "$@" diff --git a/.local/bin/chmodef b/.local/bin/chmodef deleted file mode 100755 index be9b2934..00000000 --- a/.local/bin/chmodef +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -# https://wiki.archlinux.org/title/File_permissions_and_attributes#Numeric_method -find "$@" -type d -execdir chmod 755 -- '{}' \+ -find "$@" -type f -execdir chmod 644 -- '{}' \+ diff --git a/.local/bin/convwall b/.local/bin/convwall deleted file mode 100755 index dff9c43b..00000000 --- a/.local/bin/convwall +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -# target image aspect ratio -wratio=$SCR_WIDTH -hratio=$SCR_HEIGHT -# chop how much from center -chopnum=99% - -# my benchmark shows -ping is much faster than default -# https://github.com/ImageMagick/ImageMagick/issues/3183#issuecomment-800955241 -width=$(identify -ping -format '%w' "$1") -height=$(identify -ping -format '%h' "$1") - -ratio=$((wratio*100/hratio)) -dim=$((width*100/height)) - -if [ "$dim" -ne "$ratio" ]; then - if [ "$dim" -lt "$ratio" ]; then - chopgeom="${chopnum}x0" - width=$((height*wratio/hratio)) - else - chopgeom="0x$chopnum" - height=$((width*hratio/wratio)) - fi - # may throw error "sort: write failed: 'standard output': Broken pipe \n sort: write error" - # caused by head exit (or close stdin) before sort output complete, can ignore - # https://stackoverflow.com/questions/46202653/bash-error-in-sort-sort-write-failed-standard-output-broken-pipe - bgcolor=$(convert "$1" -gravity center -chop "$chopgeom" -define histogram:unique-colors=true -format %c histogram:info:- | sort -rn | head -n1 | awk \{print\ \$3\} | cut -c1-7) - # another approach is to use "$width" or "x$height" for geometry, current approach is more readable - convert "$1" -gravity center -background "$bgcolor" -extent "${width}x$height" "$2" -else - echo 'same aspect ratio, no need to convert' >&2 - exit 1 -fi diff --git a/.local/bin/curlkg b/.local/bin/curlkg deleted file mode 100755 index 9389e680..00000000 --- a/.local/bin/curlkg +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -# references: -# https://blog.csdn.net/qq_41730930/article/details/79327757 -# https://blog.csdn.net/u011112876/article/details/89634505 -# https://github.com/pystardust/ytfzf - -homepage_url='https://node.kg.qq.com/cgi/fcgi-bin/kg_ugc_get_homepage' -music_url='https://node.kg.qq.com/cgi/fcgi-bin/fcg_get_play_url' -# num seems only 8 and 15 works -num=15 -tmp_json_file="$(mktemp --suffix=.json)" - -while getopts u: opt; do - case $opt in - u) uid="$OPTARG";; - \?) exit 1;; - esac -done -# for lan lan, uid=649b9e82272a348b -# for cheng ruan, uid=64949d822c25328c -[ -z "$uid" ] && echo 'error: must provide share_uid -ex: curlkg -u 649b9e82272a348b ./' >&2 && exit 1 -shift $((OPTIND-1)) -download_dir="${1:-"$PWD"}" -[ -d "$download_dir" ] || mkdir -p "$download_dir" - -get_json () -{ - curl -s -G --data-urlencode type=get_uinfo -d outCharset=utf-8 -d start="$1" -d num=$num -d share_uid="$uid" "$homepage_url" | sed 's/.*({\(.*\)}).*/{\1}/' >> "$tmp_json_file" -} - -get_json 1 -ugc_total_count=$(jq '.data.ugc_total_count' "$tmp_json_file") -# can also use while loop with i=$((i+1)) -# the calculation considers both ugc_total_count%num==0 and ugc_total_count%num>0 -for i in $(seq 2 $(((ugc_total_count+num-1)/num))); do - get_json "$i" -done - -jq -r '.data.ugclist[]|"'"$music_url"'?shareid=\(.shareid)\n out=\(.title)_\(.time).m4a"' "$tmp_json_file" | aria2c -d "$download_dir" --auto-file-renaming=false --console-log-level=warn -i- -rm "$tmp_json_file" diff --git a/.local/bin/curlncm b/.local/bin/curlncm deleted file mode 100755 index 582214ac..00000000 --- a/.local/bin/curlncm +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/sh -# rewrite TianyiShi2001's python script which rewrite NeteaseCloudMusicApi node.js api - -# references: -# https://github.com/ytdl-org/youtube-dl/issues/18051#issuecomment-859964832 -# https://github.com/Binaryify/NeteaseCloudMusicApi -# info about encrytion and api: -# https://github.com/metowolf/NeteaseCloudMusicApi/wiki -# https://github.com/darknessomi/musicbox/wiki - -# lan lan, aid=48860966, rid=793052426, example id=1397315179,1817498734 -# cheng ruan, aid=46703185, rid=792968433 - -# trial and error to get dj_max, don't know why, maybe because it is 2^31 and it is the size limit of whatever type of the variable -dj_max=2147483647 -dl_urls_tmp="$(mktemp)" -# printf 'e82ckenh8dichen8' | hexdump -ve '/1 "%02x"' -key='653832636b656e683864696368656e38' -url='/api/song/enhance/player/url' -request_id=$(date +'%s%3N')_$(seq -w 1 1000 | shuf -n1) -user_agent='Mozilla/5.0 (Linux; U; Android 9; zh-cn; Redmi Note 8 Build/PKQ1.190616.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.5.22' -cookie="$(printf '"appver":"8.0.0","versioncode":"140","buildver":"1623455100","resolution":"1920x1080","__csrf":"","os":"pc","requestId":"%s"' "$request_id")" - -die () -{ - echo "error: $*" >&2 - exit 1 -} - -# let a i r mutually exclusive -# artist, song, djradio id -flag=0 -while getopts a:i:r: opt; do - case $opt in - a) [ "$flag" -eq 1 ] && die "options a,i,r are mutually exclusive" - aid="$OPTARG" - flag=1;; - i) [ "$flag" -eq 1 ] && die "options a,i,r are mutually exclusive" - ids="$OPTARG" - flag=1;; - r) [ "$flag" -eq 1 ] && die "options a,i,r are mutually exclusive" - rid="$OPTARG" - flag=1;; - \?) exit 1;; - esac -done -[ $flag -eq 0 ] && die "please specify at least one option" -shift $((OPTIND-1)) -[ $# -gt 1 ] && die "directory name should be at the end" -download_dir="${1:-"$PWD"}" -[ -d "$download_dir" ] || mkdir -p "$download_dir" - -if [ -n "$ids" ]; then - # temporary solution, can improve by auto curl names - data="$(echo "$ids" | tr ',' '\n' | awk '{printf("%s\t%s\n",$0,"songname")}')" -else - if [ -n "$rid" ]; then - data="$(curl -s -G --data-urlencode id="$rid" -d limit="$dj_max" 'https://music.163.com/djradio' | grep 'songlist\|tt f-thide' | sed -e 's/.*songlist-\(.*\)" class.*/\1/g' -e 's/.*title="\(.*\)".*/\1/g' | paste -sd '\t\n' | sort | tr '/' '_')" - # can only curl featured 50 songs for the artist, can improve - elif [ -n "$aid" ]; then - data="$(curl -s -G --data-urlencode id="$aid" 'https://music.163.com/artist' | grep '\[{.*}\]' | sed -e 's/.*>\[{/\[{/' -e 's/}\]<.*/}\]/' | jq -r '.[]|[.id,.name]|@tsv' | sort | tr '/' '_')" - fi - # awk code not print separator at beginning and end steal from: - # https://unix.stackexchange.com/a/581785/459013 - # not sure awk one-liner or paste way which is better, need benchmark - ids="$(echo "$data" | awk -F'\t' '{printf "%s%s",sep,$1;sep=","}')" - #ids="$(echo "$data" | awk -F'\t' '{print $1}' | paste -sd ',')" -fi - -# I don't fully understand following several lines of code -# I rewrite TianyiShi2001's python script, he rewrites NeteaseCloudMusicApi -text="$(printf '{"ids":"[%s]","br":999000,"header":{%s}}' "$ids" "$cookie")" -message="nobody${url}use${text}md5forencrypt" -digest="$(printf '%s' "$message" | openssl dgst -md5 -hex | awk '{print $2}')" -params="$(printf '%s-36cd479b6b5-%s-36cd479b6b5-%s' "$url" "$text" "$digest")" -encrypted_params="$(printf '%s' "$params" | openssl enc -aes-128-ecb -K "$key" | hexdump -ve '/1 "%02X"')" -# curl default user agent header seems not working -curl -s -A "$user_agent" -d params="$encrypted_params" 'https://interface3.music.163.com/eapi/song/enhance/player/url' | jq -r '.data|sort_by(.id)|.[].url' > "$dl_urls_tmp" -[ "$(echo "$data" | wc -l)" -ne "$(wc -l < "$dl_urls_tmp")" ] && die "number of download uls doesn't match request" - -# can't download some music if live abroad, may need proxy or vpn -# using user_agent, content-type header, cookie header, referer are not necessary? but feels faster -# not sure about cookie header format for aria2c, this link shows that it's kinda messy, so I didn't use it -# https://github.com/aria2/aria2/issues/545#issuecomment-650070869 -echo "$data" | awk -F'\t' '{printf(" out=%s_%s.mp3\n",$2,$1)}' | paste "$dl_urls_tmp" - -d '\n' | aria2c -U "$user_agent" --header='Content-Type: application/x-www-form-urlencoded' --referer='https://music.163.com' -d "$download_dir" --auto-file-renaming=false --console-log-level=warn -i- -rm "$dl_urls_tmp" diff --git a/.local/bin/curlqb b/.local/bin/curlqb deleted file mode 100755 index f98a41c8..00000000 --- a/.local/bin/curlqb +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -curl -s 'https://github.com/qbittorrent/search-plugins/wiki/Unofficial-search-plugins' | awk -F'"' '/Plugins for Private sites/{exit} /\.py/{url=$2;getline;getline;getline;if($0 !~ /❗|✖/)print url}' | xargs curl -s -Z -L --remote-name-all --create-dirs --output-dir "$1" -- - -#curl -s 'https://github.com/qbittorrent/search-plugins/wiki/Unofficial-search-plugins' | awk -F'"' '{ -# if($0 ~ /Plugins for Private sites/) -# exit -# if($0 ~ /\.py/) -# { -# url=$2 -# getline -# getline -# getline -# if($0 !~ /❗|✖/) -# print url -# } -#}' | xargs curl -s -Z -L --remote-name-all --create-dirs --output-dir "$1" -- - diff --git a/.local/bin/gita b/.local/bin/gita deleted file mode 100755 index a3d0dbc9..00000000 --- a/.local/bin/gita +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -# note message string must come after options - -cmd='git' - -while getopts clLsS f; do - case $f in - c|l|L|s|S) cmd="cfg -$f";; - \?) exit 1;; - esac -done -shift $((OPTIND-1)) - -mes="${1:-refactor}" - -$cmd add -u -$cmd commit -m "$mes" -$cmd push diff --git a/.local/bin/gitfork b/.local/bin/gitfork deleted file mode 100755 index cefc4f68..00000000 --- a/.local/bin/gitfork +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -git clone "$1" -cd "$(basename "$1" .git)" || exit -git remote add upstream "$2" -git branch fly -git checkout fly -git push --set-upstream origin fly diff --git a/.local/bin/gitpu b/.local/bin/gitpu deleted file mode 100755 index fcc32be9..00000000 --- a/.local/bin/gitpu +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -if [ -z "$1" ]; then - git checkout master - git pull upstream master - git push - git checkout fly - git merge --no-edit master - git push -else - for dir ; do - git -C "$dir" checkout master - git -C "$dir" pull upstream master - git -C "$dir" push - git -C "$dir" checkout fly - git -C "$dir" merge --no-edit master - git -C "$dir" push - done -fi diff --git a/.local/bin/mmi b/.local/bin/mmi deleted file mode 100755 index b3b5868f..00000000 --- a/.local/bin/mmi +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -mi () -{ - sudo make -B install -} - -origin="$PWD" -cmd='mi' - -while getopts q opt; do - case $opt in - q) cmd='qmake6;mi';; - \?) exit 1;; - esac -done -shift $((OPTIND-1)) - -if [ -z "$1" ]; then - eval "$cmd" -else - for dir ; do - cd "$dir" || exit - eval "$cmd" - cd "$origin" || exit - done -fi diff --git a/.local/bin/mpva b/.local/bin/mpva deleted file mode 100755 index 7224cf46..00000000 --- a/.local/bin/mpva +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -if [ $# -eq 0 ]; then - # fzf has --read0, maybe useful - find "$XDG_MUSIC_DIR" | fzf -m --print0 | xargs -0 mpv --af= --shuffle --loop-playlist=inf --video=no -elif [ $# -eq 1 ]; then - # use --loop-file for single file, better performance maybe - mpv --af= --loop-file=inf --video=no "$1" -else - mpv --af= --shuffle --loop-playlist=inf --video=no "$@" -fi diff --git a/.local/bin/mpvy b/.local/bin/mpvy deleted file mode 100755 index 4471b668..00000000 --- a/.local/bin/mpvy +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# references: -# https://www.rockyourcode.com/til-how-to-watch-youtube-videos-with-mpv-and-keyboard-shortcuts/ - -fps=30 -height=$SCR_HEIGHT -url="$(xsel -ob)" -flag=s - -# option f and h may do nothing if redownload? since same filename exist. yt-dlp won't download same file even without --auto-file-renameing=false. how improve? pass argument to aria2c? -while getopts Aabd:f:h:su: opt; do - case $opt in - # s: streaming, a: aria2c then mpv, A: aria2c - A|a|s) flag=$opt;; - b) format='bestvideo+bestaudio/best';; - d) download_dir="$OPTARG";; - f) fps="$OPTARG";; - h) height="$OPTARG";; - u) url="$OPTARG";; - \?) exit 1;; - esac -done -if [ -z "$format" ]; then - vformat="[height<=?$height][fps<=?$fps][vcodec!^=?vp9][vcodec!^=?av01]" - # usually get .mp4 video + .webm audio on youtube, yt-dlp needs to merge them to .mkv - # it used to cause problem, but I forget - format="bestvideo$vformat+bestaudio/best$vformat" -fi - -case $flag in - # here if use --write-sub, mpv doesn't recognize subtitles? - # --embed-subs is a little bit better, but still worse then direct streaming - A) yt-dlp -f "$format" --embed-subs -P "${download_dir:-"$XDG_DOWNLOAD_DIR/mpvy/"}" --sponsorblock-remove all "$url";; - a) yt-dlp -f "$format" --embed-subs -P "${download_dir:-/tmp/mpvy/}" --sponsorblock-remove all "$url" --exec 'mpv --fs --speed=2';; - s) mpv --ytdl-format="$format" --ytdl-raw-options='write-sub=' --fs --speed=2 "$url";; -esac -# not sure if this is the best practice, but it seems working ;) -status=$? -[ $status -ne 0 ] && notify-send 'mpvsel failed' -exit $status diff --git a/.local/bin/mvtr b/.local/bin/mvtr deleted file mode 100755 index 850f8dba..00000000 --- a/.local/bin/mvtr +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -# can use ls pipe to sed pipe to bash, similar to eval? see comment at link: -# link also show perl-rename approach -# https://linuxconfig.org/rename-all-files-from-uppercase-to-lowercase-characters -# if only change ' ' to '_' `rename` might be sufficient, for upper to lower case might need perl-rename if want concise - -# ./_filename will be renamed ./filename, not what I want, need improve -# -exec can't replace -execdir here, can write a -exec version - -find "$@" -depth -execdir sh -c 'dest="$(echo "$1" | tr -d "\047" | sed -E -e "s/([[:lower:]])([[:upper:]])/\1_\2/g" | tr "[:upper:] " "[:lower:]_" | tr -s "[:punct:]" | sed -E -e "s#/-#/#g" -e "s/_([[:punct:]])/\1/g" -e "s/([[:punct:]])_/\1/g" | tr -s "[:punct:]")"; [ -e "$dest" ] || mv -v -- "$1" "$dest"' shell '{}' \; - -# for test -#mkdir -p ~/test/A\ A/; rm -rf ~/test/A\ A/1t/; cp -r ~/test/0t/ ~/test/A\ A/1t/; time mvtr ~/test/A\ A/1t/; tree ~/test/A\ A/1t/ diff --git a/.local/bin/o b/.local/bin/o deleted file mode 100755 index 21464974..00000000 --- a/.local/bin/o +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -# useful links -# https://stackoverflow.com/questions/3430330/best-way-to-make-a-shell-script-daemon -# https://serverfault.com/questions/117152/do-background-processes-get-a-sighup-when-logging-off -# https://wiki.archlinux.org/title/default_applications - -# I don't care about errors, I don't want to handle errors, just shut up please. -# nohup seems not necessary if don't care about daemon SIGHUP requirement - -if [ $# -eq 1 ] && [ -e "$1" ] && ! [ -x "$1" ]; then - nohup xdg-open "$1" 0<&- >&- 2>&- & -else - nohup "$@" 0<&- >&- 2>&- & -fi diff --git a/.local/bin/orgext b/.local/bin/orgext deleted file mode 100755 index f1654d2c..00000000 --- a/.local/bin/orgext +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -# references: -# https://stackoverflow.com/questions/1842254/how-can-i-find-all-of-the-distinct-file-extensions-in-a-folder-hierarchy - -# not sure if find here need -depth, not sure if mv here need -n and -T - -outdir () -{ - find . -type f -execdir mv -nt "$PWD" -- '{}' \+ - find . -mindepth 1 -maxdepth 1 -type d -delete -} - -indir () -{ - find . -maxdepth 1 -type f | awk -F. '!a[$NF]++{print $NF}' | xargs mkdir -- - find . -mindepth 1 -maxdepth 1 -type d -execdir basename -az -- '{}' \+ | xargs -0 -I _ find . -maxdepth 1 -type f -name '*._' -execdir mv -t '_' -- '{}' \+ -} - -case "$1" in - '-o') outdir;; - '-i') indir;; - *) outdir; indir;; -esac diff --git a/.local/bin/reco b/.local/bin/reco deleted file mode 100755 index d56e61c2..00000000 --- a/.local/bin/reco +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -# useful urls: -# https://github.com/LukeSmithxyz/voidrice/blob/master/.local/bin/dmenurecord -# https://wiki.archlinux.org/title/FFmpeg#Screen_capture -# https://trac.ffmpeg.org/wiki/Capture/Desktop - -infofile="/tmp/recoinfo" -recodir="$XDG_VIDEOS_DIR/recordings/" -mkdir -p "$recodir" - -if [ -e "$infofile" ]; then - read -r pid tmpfile < "$infofile" - kill "$pid" - notify-send 'finish recording, start converting' - ffmpeg -i "$tmpfile" "$recodir/$(time.uuid).mkv" - notify-send 'finish converting' - rm "$tmpfile" "$infofile" -else - tmpfile="$(mktemp --suffix '.mkv')" - notify-send 'start recording' - # arch wiki way, no audio, less cpu use during capturing (fast?), large file size, need convert afterward - xrectsel '%w %h %x %y' | xargs sh -c 'ffmpeg -y -loglevel quiet -f x11grab -framerate 25 -s "$2"x"$3" -i "$DISPLAY+$4,$5" -c:v ffvhuff "$1" & echo $!' shell "$tmpfile" | xargs -I {} printf '%s\t%s' '{}' "$tmpfile" > "$infofile" - # another way to get subshell ffmpeg child pid - #xrectsel '%w %h %x %y' | xargs sh -c 'ffmpeg -y -f x11grab -framerate 25 -s "$2"x"$3" -i "$DISPLAY+$4,$5" -c:v ffvhuff "$1"' shell "$tmpfile" & - #printf '%s\t%s' "$(ps -o pid= --ppid $!)" "$tmpfile" > "$infofile" -fi diff --git a/.local/bin/sbar b/.local/bin/sbar deleted file mode 100755 index bd471f4a..00000000 --- a/.local/bin/sbar +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -# steal from pystardust, GPL3 license: https://github.com/pystardust/sbar -# modified to fit my own need - -# INIT -printf '%s' "$$" > "$XDG_CACHE_HOME/pidofbar" -sec=0 - -bool () { - read str - if [ "$str" = "on" ] || [ "$str" = "up" ] || [ "$str" = "Connected" ]; then - echo 1 - else - echo 0 - fi -} - -# MODULES -update_time () { - time="$(date '+%a %m/%d %H:%M') $(TZ=Asia/Shanghai date '+/%d %H:')" -} - -update_cap () { - cap="$(if xset q | grep -q "Caps Lock: *on"; then echo A; else echo a; fi)" -} - -update_net () { - net="$(bool < /sys/class/net/wlp6s0/operstate)" -} - -update_vpn () { - vpn="$(mullvad status | awk '{print $3}' | bool)" -} - -update_vol () { - vol="$(amixer get Master | awk -F'[][]' 'END{printf"%d %s",($4=="on")?1:0,$2}')" -} - -update_mic () { - mic="$(amixer get Capture | awk -F'[][]' 'END{print $4}' | bool)" -} - -update_bat () { - bat="$(cat /sys/class/power_supply/BAT1/capacity)%" -} - -# For calcurse users, refer https://github.com/pystardust/automeet -#update_event () { -# event="$(calcurse -n | sed 1d | \ -# sed -E "s_^ *\[(.*):(.*)\] ([^\t]*)\t?.*_[\1h \2m->\3]_")" -# [ "[]" = "$event" ] && event="" -#} - -# modules that don't update on their own need to be run at the start for getting their initial value -update_vol -update_mic -update_cap - -display () { - xsetroot -name "$(echo "$time | N $net V $vpn | M $vol C $mic | $cap | $bat")" -} - -# SIGNALLING -# trap ";display" "RTMIN+n" -trap "update_mic;display" "RTMIN" -trap "update_vol;display" "RTMIN+1" -# xev can't read my toggle internet keyboard key, don't know what key to use in sxhkd to send signal -#trap "update_net;display" "RTMIN+2" -trap "update_cap;display" "RTMIN+3" -trap "update_vpn;display" "RTMIN+4" -# to update it from external commands -## kill -m "$(cat "$XDG_CACHE_HOME/pidofbar")" -# where m = 34 + n - -while true; do - # next line of code seems make hotkeys that send kill signals more responsive? not fully understood - sleep 1 & wait && { - # to update item ever n seconds with a offset of m - ## [ $((sec % n)) -eq m ] && udpate_item - [ $((sec % 5 )) -eq 0 ] && update_time # update time every 5 seconds - [ $((sec % 5 )) -eq 0 ] && update_net - [ $((sec % 5 )) -eq 0 ] && update_vpn - [ $((sec % 60)) -eq 0 ] && update_bat - #[ $((sec % 300)) -eq 1 ] && update_event - - # how often the display updates ( 5 seconds ) - [ $((sec % 5 )) -eq 0 ] && display - sec=$((sec + 1)) - } -done diff --git a/.local/bin/shufwall b/.local/bin/shufwall deleted file mode 100755 index 5b249e12..00000000 --- a/.local/bin/shufwall +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -if [ -z "$1" ]; then - file=$(find -L "$XDG_PICTURES_DIR/wallpapers" -type f | shuf -n 1) -else - file=$(find -L "$@" -maxdepth 1 -type f | shuf -n 1) -fi - -display -resize "${SCR_WIDTH}x$SCR_HEIGHT" -backdrop -window root "$file" diff --git a/.local/bin/time.uuid b/.local/bin/time.uuid deleted file mode 100755 index 11cc67ad..00000000 --- a/.local/bin/time.uuid +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -# echo current nanosecond since epoch and alpha-numerically ordered UUID -# https://stackoverflow.com/questions/28681650/generate-alpha-numerically-ordered-uuids-over-time?noredirect=1&lq=1 -# https://askubuntu.com/questions/342842/what-does-this-command-mean-awk-f-print-4 -echo "$(date '+%s.%N').$(uuidgen -t | awk -F- '{OFS="-"; print $3,$2,$1,$4,$5}')" diff --git a/.local/bin/topa b/.local/bin/topa deleted file mode 100755 index e921bc31..00000000 --- a/.local/bin/topa +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -o alacritty -e htop -o alacritty -e radeontop -c -o alacritty -e sudo iotop -o alacritty -e sudo nethogs diff --git a/.local/bin/upd b/.local/bin/upd deleted file mode 100755 index 65452b37..00000000 --- a/.local/bin/upd +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/sh - -all () -{ - fast - usb - qb - ncm - kg - refl - gall -} - -# not in all -clean () -{ - nsxiv -c - # my ways - # -exec can't replace -execdir here - find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -empty -execdir rmdir -- '{}' \+ - # -exec can replace -execdir here - #find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -execdir rmdir --ignore-fail-on-non-empty -- '{}' \+ - # nsxiv man page way - #find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -empty ! -name '.' -exec rmdir -- '{}' \; - rm "$HOME/.mozilla/firefox/xxxxxxxx.fly/prefs.js.backup."* -} - -fast () -{ - pac - misc -} - -gall () -{ - gallery-dl --download-archive "$XDG_DOCUMENTS_DIR/database/gallery-dl.sqlite3" -d "$XDG_PICTURES_DIR/anime/gallery-dl/" -i "$XDG_CONFIG_HOME/myconf/gallery_urls" -} - -userjs () -{ - kill $(pidof "$BROWSER") - "$HOME/.mozilla/firefox/xxxxxxxx.fly/prefsCleaner.sh" -s - "$HOME/.mozilla/firefox/xxxxxxxx.fly/updater.sh" -us -} - -g () -{ - curlkg -u649b9e82272a348b -- "$XDG_MUSIC_DIR/not_pure/lan_lan/kg/" - curlkg -u64949d822c25328c -- "$XDG_MUSIC_DIR/not_pure/cheng_ruan/kg/" -} - -misc () -{ - cfg -c submodule foreach git pull - nvim +PlugUpgrade +PlugClean! +PlugUpdate +qa - tldr --update - sudo hardcode-fixer - userjs -} - -ncm () -{ - curlncm -a48860966 -- "$XDG_MUSIC_DIR/not_pure/lan_lan/ncm/artist/" - curlncm -a46703185 -- "$XDG_MUSIC_DIR/not_pure/cheng_ruan/ncm/artist/" - curlncm -r793052426 -- "$XDG_MUSIC_DIR/not_pure/lan_lan/ncm/djradio/" - curlncm -r792968433 -- "$XDG_MUSIC_DIR/not_pure/cheng_ruan/ncm/djradio/" -} - -pac () -{ - sudo pacman --noconfirm -Syu - paru --noconfirm -aSyu - # part steal from aur comment - # sometimes "ERROR: Failure while downloading": https://github.com/neovim/neovim/issues/15709 - rm -rf ~/.cache/paru/clone/neovim-nightly-bin/ && yes 1 | PARU_PAGER=cat paru --rebuild --redownload neovim-nightly-bin - sudo pacman -Fy -} - -qb () -{ - rm -r -- "$HOME/programs/qbittorrent_search_plugins/" - curlqb "$HOME/programs/qbittorrent_search_plugins/" -} - -refl () -{ - sudo reflector --save /etc/pacman.d/mirrorlist --latest 200 --sort rate -} - -usb () -{ - cfg -c push usb - cfg -l push usb - cfg -s push - git --git-dir="$XDG_DOCUMENTS_DIR/notes/.git" --work-tree="$XDG_DOCUMENTS_DIR/notes/" push usb -} - - -if [ $# -eq 0 ]; then - fast -else - while getopts acfgjkmnpqru opt; do - case $opt in - a)all;; - # not in all - c)clean;; - f)fast;; - g)gall;; - j)userjs;; - k)kg;; - m)misc;; - n)ncm;; - p)pac;; - q)qb;; - r)refl;; - u)usb;; - \?)exit 1;; - esac - done -fi diff --git a/.profile b/.profile deleted file mode 100644 index fc2f2066..00000000 --- a/.profile +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh - -# here `. ~/.bashrc` same as `source ~/.bashrc`, see `source filename` in `man bash`, and `. file` in `man dash` -# `. file` is POSIX compliant, while `source file` is not -# https://github.com/koalaman/shellcheck/wiki/SC3046 -#[[ -f ~/.bashrc ]] && . ~/.bashrc -[ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc" - -export XDG_CONFIG_HOME="$HOME/.config/" -export XDG_CACHE_HOME="$HOME/.cache/" -export XDG_DATA_HOME="$HOME/.local/share/" - -. "$XDG_CONFIG_HOME/user-dirs.dirs" -export XDG_DESKTOP_DIR="$XDG_DESKTOP_DIR" -export XDG_DOWNLOAD_DIR="$XDG_DOWNLOAD_DIR" -export XDG_TEMPLATES_DIR="$XDG_TEMPLATES_DIR" -export XDG_PUBLICSHARE_DIR="$XDG_PUBLICSHARE_DIR" -export XDG_DOCUMENTS_DIR="$XDG_DOCUMENTS_DIR" -export XDG_MUSIC_DIR="$XDG_MUSIC_DIR" -export XDG_PICTURES_DIR="$XDG_PICTURES_DIR" -export XDG_VIDEOS_DIR="$XDG_VIDEOS_DIR" - -export PATH="$(find "$HOME/.local/bin" -type d -printf %p:)$PATH" -export HISTSIZE=7000 -export HISTFILESIZE=7000 - -export MANPAGER='nvim +Man!' -export EDITOR=nvim -export BROWSER=firefox - -export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket" -export INPUTRC="$XDG_CONFIG_HOME/readline/inputrc" -#export QT_QPA_PLATFORMTHEME=qt5ct -export QT_QPA_PLATFORMTHEME=gtk2 -#export QT_STYLE_OVERRIDE=kvantum -export SDCV_PAGER='less --quit-if-one-screen -RX' -export SXHKD_SHELL=sh -export _ZO_ECHO=1 - -# use sudo find for some files or dirs that has no permission ex: ~/.cache/paru/clone/ -#export FZF_DEFAULT_COMMAND="fd --no-ignore --hidden --exclude .git" -#export FZF_CTRL_T_COMMAND="fd --absolute-path --no-ignore --hidden --exclude .git" -#export FZF_ALT_C_COMMAND="fd --no-ignore --hidden --type d --exclude .git" -export FZF_DEFAULT_COMMAND="sudo find . -mindepth 1 -path '*/\.git' -prune -o -print" -# https://askubuntu.com/questions/444551/get-absolute-path-of-files-using-find-command -# following two lines if use "" on the outermost, will not perfom expected, not sure why -export FZF_CTRL_T_COMMAND='sudo find "$PWD" -mindepth 1 -path "*/\.git" -prune -o -print' -#export FZF_CTRL_T_COMMAND='sudo find "$(pwd)" -path "*/\.git" -prune -o -print' -# ~+ is bashism -#export FZF_CTRL_T_COMMAND="sudo find ~+ -path '*/\.git' -prune -o -print" -export FZF_ALT_C_COMMAND="sudo find . -mindepth 1 -path '*/\.git' -prune -o -type d -print" - -# for clipmenu -# set clipmenud to store clipboard only, don't store selection (primary) -#export CM_SELECTIONS="clipboard" -# X11, copy / close program / paste to another program, if 0 will paste nothing -#export CM_OWN_CLIPBOARD=1 -#export CM_MAX_CLIPS=8 - -export SCR_WIDTH=1600 -export SCR_HEIGHT=900 - -# startx when login, should be put after environmental variables for .xinitrc to use -if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then - exec startx -fi diff --git a/.xinitrc b/.xinitrc deleted file mode 100644 index 65d91797..00000000 --- a/.xinitrc +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh - -userresources="$HOME/.Xresources" -usermodmap="$HOME/.Xmodmap" -sysresources=/etc/X11/xinit/.Xresources -sysmodmap=/etc/X11/xinit/.Xmodmap - -# merge in defaults and keymaps - -if [ -f $sysresources ]; then - xrdb -merge $sysresources -fi - -if [ -f $sysmodmap ]; then - xmodmap $sysmodmap -fi - -if [ -f "$userresources" ]; then - xrdb -merge "$userresources" -fi - -if [ -f "$usermodmap" ]; then - xmodmap "$usermodmap" -fi - -# start some nice programs - -if [ -d /etc/X11/xinit/xinitrc.d ] ; then - for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do - [ -x "$f" ] && . "$f" - done - unset f -fi - -export GTK_IM_MODULE=fcitx -export QT_IM_MODULE=fcitx -export XMODIFIERS='@im=fcitx' - -#shufwall & -display -window root "$XDG_PICTURES_DIR/wallpapers/wallpaper" & -#clipmenud & -dunst & -fcitx5 -d & -redshift & -sbar & -sxhkd & -udiskie & -# default fastest windows 10 keyboard repeat delay and rate -# without editing registry, using filter key, or other third party program -# see http://stereopsis.com/keyrepeat/ -xset r rate 250 30 & -exec dwm diff --git a/etc/locale.gen b/etc/locale.gen new file mode 100644 index 00000000..b9faed0f --- /dev/null +++ b/etc/locale.gen @@ -0,0 +1,511 @@ +# Configuration file for locale-gen +# +# lists of locales that are to be generated by the locale-gen command. +# +# Each line is of the form: +# +# +# +# where is one of the locales given in /usr/share/i18n/locales +# and is one of the character sets listed in /usr/share/i18n/charmaps +# +# Examples: +# en_US ISO-8859-1 +# en_US.UTF-8 UTF-8 +# de_DE ISO-8859-1 +# de_DE@euro ISO-8859-15 +# +# The locale-gen command will generate all the locales, +# placing them in /usr/lib/locale. +# +# A list of supported locales is included in this file. +# Uncomment the ones you need. +# +#aa_DJ.UTF-8 UTF-8 +#aa_DJ ISO-8859-1 +#aa_ER UTF-8 +#aa_ER@saaho UTF-8 +#aa_ET UTF-8 +#af_ZA.UTF-8 UTF-8 +#af_ZA ISO-8859-1 +#agr_PE UTF-8 +#ak_GH UTF-8 +#am_ET UTF-8 +#an_ES.UTF-8 UTF-8 +#an_ES ISO-8859-15 +#anp_IN UTF-8 +#ar_AE.UTF-8 UTF-8 +#ar_AE ISO-8859-6 +#ar_BH.UTF-8 UTF-8 +#ar_BH ISO-8859-6 +#ar_DZ.UTF-8 UTF-8 +#ar_DZ ISO-8859-6 +#ar_EG.UTF-8 UTF-8 +#ar_EG ISO-8859-6 +#ar_IN UTF-8 +#ar_IQ.UTF-8 UTF-8 +#ar_IQ ISO-8859-6 +#ar_JO.UTF-8 UTF-8 +#ar_JO ISO-8859-6 +#ar_KW.UTF-8 UTF-8 +#ar_KW ISO-8859-6 +#ar_LB.UTF-8 UTF-8 +#ar_LB ISO-8859-6 +#ar_LY.UTF-8 UTF-8 +#ar_LY ISO-8859-6 +#ar_MA.UTF-8 UTF-8 +#ar_MA ISO-8859-6 +#ar_OM.UTF-8 UTF-8 +#ar_OM ISO-8859-6 +#ar_QA.UTF-8 UTF-8 +#ar_QA ISO-8859-6 +#ar_SA.UTF-8 UTF-8 +#ar_SA ISO-8859-6 +#ar_SD.UTF-8 UTF-8 +#ar_SD ISO-8859-6 +#ar_SS UTF-8 +#ar_SY.UTF-8 UTF-8 +#ar_SY ISO-8859-6 +#ar_TN.UTF-8 UTF-8 +#ar_TN ISO-8859-6 +#ar_YE.UTF-8 UTF-8 +#ar_YE ISO-8859-6 +#ayc_PE UTF-8 +#az_AZ UTF-8 +#az_IR UTF-8 +#as_IN UTF-8 +#ast_ES.UTF-8 UTF-8 +#ast_ES ISO-8859-15 +#be_BY.UTF-8 UTF-8 +#be_BY CP1251 +#be_BY@latin UTF-8 +#bem_ZM UTF-8 +#ber_DZ UTF-8 +#ber_MA UTF-8 +#bg_BG.UTF-8 UTF-8 +#bg_BG CP1251 +#bhb_IN.UTF-8 UTF-8 +#bho_IN UTF-8 +#bho_NP UTF-8 +#bi_VU UTF-8 +#bn_BD UTF-8 +#bn_IN UTF-8 +#bo_CN UTF-8 +#bo_IN UTF-8 +#br_FR.UTF-8 UTF-8 +#br_FR ISO-8859-1 +#br_FR@euro ISO-8859-15 +#brx_IN UTF-8 +#bs_BA.UTF-8 UTF-8 +#bs_BA ISO-8859-2 +#byn_ER UTF-8 +#ca_AD.UTF-8 UTF-8 +#ca_AD ISO-8859-15 +#ca_ES.UTF-8 UTF-8 +#ca_ES ISO-8859-1 +#ca_ES@euro ISO-8859-15 +#ca_ES@valencia UTF-8 +#ca_FR.UTF-8 UTF-8 +#ca_FR ISO-8859-15 +#ca_IT.UTF-8 UTF-8 +#ca_IT ISO-8859-15 +#ce_RU UTF-8 +#chr_US UTF-8 +#ckb_IQ UTF-8 +#cmn_TW UTF-8 +#crh_UA UTF-8 +#cs_CZ.UTF-8 UTF-8 +#cs_CZ ISO-8859-2 +#csb_PL UTF-8 +#cv_RU UTF-8 +#cy_GB.UTF-8 UTF-8 +#cy_GB ISO-8859-14 +#da_DK.UTF-8 UTF-8 +#da_DK ISO-8859-1 +#de_AT.UTF-8 UTF-8 +#de_AT ISO-8859-1 +#de_AT@euro ISO-8859-15 +#de_BE.UTF-8 UTF-8 +#de_BE ISO-8859-1 +#de_BE@euro ISO-8859-15 +#de_CH.UTF-8 UTF-8 +#de_CH ISO-8859-1 +#de_DE.UTF-8 UTF-8 +#de_DE ISO-8859-1 +#de_DE@euro ISO-8859-15 +#de_IT.UTF-8 UTF-8 +#de_IT ISO-8859-1 +#de_LI.UTF-8 UTF-8 +#de_LU.UTF-8 UTF-8 +#de_LU ISO-8859-1 +#de_LU@euro ISO-8859-15 +#doi_IN UTF-8 +#dsb_DE UTF-8 +#dv_MV UTF-8 +#dz_BT UTF-8 +#el_GR.UTF-8 UTF-8 +#el_GR ISO-8859-7 +#el_GR@euro ISO-8859-7 +#el_CY.UTF-8 UTF-8 +#el_CY ISO-8859-7 +#en_AG UTF-8 +#en_AU.UTF-8 UTF-8 +#en_AU ISO-8859-1 +#en_BW.UTF-8 UTF-8 +#en_BW ISO-8859-1 +#en_CA.UTF-8 UTF-8 +#en_CA ISO-8859-1 +#en_DK.UTF-8 UTF-8 +#en_DK ISO-8859-1 +#en_GB.UTF-8 UTF-8 +#en_GB ISO-8859-1 +#en_HK.UTF-8 UTF-8 +#en_HK ISO-8859-1 +#en_IE.UTF-8 UTF-8 +#en_IE ISO-8859-1 +#en_IE@euro ISO-8859-15 +#en_IL UTF-8 +#en_IN UTF-8 +#en_NG UTF-8 +#en_NZ.UTF-8 UTF-8 +#en_NZ ISO-8859-1 +#en_PH.UTF-8 UTF-8 +#en_PH ISO-8859-1 +#en_SC.UTF-8 UTF-8 +#en_SG.UTF-8 UTF-8 +#en_SG ISO-8859-1 +en_US.UTF-8 UTF-8 +en_US ISO-8859-1 +#en_ZA.UTF-8 UTF-8 +#en_ZA ISO-8859-1 +#en_ZM UTF-8 +#en_ZW.UTF-8 UTF-8 +#en_ZW ISO-8859-1 +#eo UTF-8 +#es_AR.UTF-8 UTF-8 +#es_AR ISO-8859-1 +#es_BO.UTF-8 UTF-8 +#es_BO ISO-8859-1 +#es_CL.UTF-8 UTF-8 +#es_CL ISO-8859-1 +#es_CO.UTF-8 UTF-8 +#es_CO ISO-8859-1 +#es_CR.UTF-8 UTF-8 +#es_CR ISO-8859-1 +#es_CU UTF-8 +#es_DO.UTF-8 UTF-8 +#es_DO ISO-8859-1 +#es_EC.UTF-8 UTF-8 +#es_EC ISO-8859-1 +#es_ES.UTF-8 UTF-8 +#es_ES ISO-8859-1 +#es_ES@euro ISO-8859-15 +#es_GT.UTF-8 UTF-8 +#es_GT ISO-8859-1 +#es_HN.UTF-8 UTF-8 +#es_HN ISO-8859-1 +#es_MX.UTF-8 UTF-8 +#es_MX ISO-8859-1 +#es_NI.UTF-8 UTF-8 +#es_NI ISO-8859-1 +#es_PA.UTF-8 UTF-8 +#es_PA ISO-8859-1 +#es_PE.UTF-8 UTF-8 +#es_PE ISO-8859-1 +#es_PR.UTF-8 UTF-8 +#es_PR ISO-8859-1 +#es_PY.UTF-8 UTF-8 +#es_PY ISO-8859-1 +#es_SV.UTF-8 UTF-8 +#es_SV ISO-8859-1 +#es_US.UTF-8 UTF-8 +#es_US ISO-8859-1 +#es_UY.UTF-8 UTF-8 +#es_UY ISO-8859-1 +#es_VE.UTF-8 UTF-8 +#es_VE ISO-8859-1 +#et_EE.UTF-8 UTF-8 +#et_EE ISO-8859-1 +#et_EE.ISO-8859-15 ISO-8859-15 +#eu_ES.UTF-8 UTF-8 +#eu_ES ISO-8859-1 +#eu_ES@euro ISO-8859-15 +#fa_IR UTF-8 +#ff_SN UTF-8 +#fi_FI.UTF-8 UTF-8 +#fi_FI ISO-8859-1 +#fi_FI@euro ISO-8859-15 +#fil_PH UTF-8 +#fo_FO.UTF-8 UTF-8 +#fo_FO ISO-8859-1 +#fr_BE.UTF-8 UTF-8 +#fr_BE ISO-8859-1 +#fr_BE@euro ISO-8859-15 +#fr_CA.UTF-8 UTF-8 +#fr_CA ISO-8859-1 +#fr_CH.UTF-8 UTF-8 +#fr_CH ISO-8859-1 +#fr_FR.UTF-8 UTF-8 +#fr_FR ISO-8859-1 +#fr_FR@euro ISO-8859-15 +#fr_LU.UTF-8 UTF-8 +#fr_LU ISO-8859-1 +#fr_LU@euro ISO-8859-15 +#fur_IT UTF-8 +#fy_NL UTF-8 +#fy_DE UTF-8 +#ga_IE.UTF-8 UTF-8 +#ga_IE ISO-8859-1 +#ga_IE@euro ISO-8859-15 +#gd_GB.UTF-8 UTF-8 +#gd_GB ISO-8859-15 +#gez_ER UTF-8 +#gez_ER@abegede UTF-8 +#gez_ET UTF-8 +#gez_ET@abegede UTF-8 +#gl_ES.UTF-8 UTF-8 +#gl_ES ISO-8859-1 +#gl_ES@euro ISO-8859-15 +#gu_IN UTF-8 +#gv_GB.UTF-8 UTF-8 +#gv_GB ISO-8859-1 +#ha_NG UTF-8 +#hak_TW UTF-8 +#he_IL.UTF-8 UTF-8 +#he_IL ISO-8859-8 +#hi_IN UTF-8 +#hif_FJ UTF-8 +#hne_IN UTF-8 +#hr_HR.UTF-8 UTF-8 +#hr_HR ISO-8859-2 +#hsb_DE ISO-8859-2 +#hsb_DE.UTF-8 UTF-8 +#ht_HT UTF-8 +#hu_HU.UTF-8 UTF-8 +#hu_HU ISO-8859-2 +#hy_AM UTF-8 +#hy_AM.ARMSCII-8 ARMSCII-8 +#ia_FR UTF-8 +#id_ID.UTF-8 UTF-8 +#id_ID ISO-8859-1 +#ig_NG UTF-8 +#ik_CA UTF-8 +#is_IS.UTF-8 UTF-8 +#is_IS ISO-8859-1 +#it_CH.UTF-8 UTF-8 +#it_CH ISO-8859-1 +#it_IT.UTF-8 UTF-8 +#it_IT ISO-8859-1 +#it_IT@euro ISO-8859-15 +#iu_CA UTF-8 +#ja_JP.EUC-JP EUC-JP +#ja_JP.UTF-8 UTF-8 +#ka_GE.UTF-8 UTF-8 +#ka_GE GEORGIAN-PS +#kab_DZ UTF-8 +#kk_KZ.UTF-8 UTF-8 +#kk_KZ PT154 +#kl_GL.UTF-8 UTF-8 +#kl_GL ISO-8859-1 +#km_KH UTF-8 +#kn_IN UTF-8 +#ko_KR.EUC-KR EUC-KR +#ko_KR.UTF-8 UTF-8 +#kok_IN UTF-8 +#ks_IN UTF-8 +#ks_IN@devanagari UTF-8 +#ku_TR.UTF-8 UTF-8 +#ku_TR ISO-8859-9 +#kw_GB.UTF-8 UTF-8 +#kw_GB ISO-8859-1 +#ky_KG UTF-8 +#lb_LU UTF-8 +#lg_UG.UTF-8 UTF-8 +#lg_UG ISO-8859-10 +#li_BE UTF-8 +#li_NL UTF-8 +#lij_IT UTF-8 +#ln_CD UTF-8 +#lo_LA UTF-8 +#lt_LT.UTF-8 UTF-8 +#lt_LT ISO-8859-13 +#lv_LV.UTF-8 UTF-8 +#lv_LV ISO-8859-13 +#lzh_TW UTF-8 +#mag_IN UTF-8 +#mai_IN UTF-8 +#mai_NP UTF-8 +#mfe_MU UTF-8 +#mg_MG.UTF-8 UTF-8 +#mg_MG ISO-8859-15 +#mhr_RU UTF-8 +#mi_NZ.UTF-8 UTF-8 +#mi_NZ ISO-8859-13 +#miq_NI UTF-8 +#mjw_IN UTF-8 +#mk_MK.UTF-8 UTF-8 +#mk_MK ISO-8859-5 +#ml_IN UTF-8 +#mn_MN UTF-8 +#mni_IN UTF-8 +#mnw_MM UTF-8 +#mr_IN UTF-8 +#ms_MY.UTF-8 UTF-8 +#ms_MY ISO-8859-1 +#mt_MT.UTF-8 UTF-8 +#mt_MT ISO-8859-3 +#my_MM UTF-8 +#nan_TW UTF-8 +#nan_TW@latin UTF-8 +#nb_NO.UTF-8 UTF-8 +#nb_NO ISO-8859-1 +#nds_DE UTF-8 +#nds_NL UTF-8 +#ne_NP UTF-8 +#nhn_MX UTF-8 +#niu_NU UTF-8 +#niu_NZ UTF-8 +#nl_AW UTF-8 +#nl_BE.UTF-8 UTF-8 +#nl_BE ISO-8859-1 +#nl_BE@euro ISO-8859-15 +#nl_NL.UTF-8 UTF-8 +#nl_NL ISO-8859-1 +#nl_NL@euro ISO-8859-15 +#nn_NO.UTF-8 UTF-8 +#nn_NO ISO-8859-1 +#nr_ZA UTF-8 +#nso_ZA UTF-8 +#oc_FR.UTF-8 UTF-8 +#oc_FR ISO-8859-1 +#om_ET UTF-8 +#om_KE.UTF-8 UTF-8 +#om_KE ISO-8859-1 +#or_IN UTF-8 +#os_RU UTF-8 +#pa_IN UTF-8 +#pa_PK UTF-8 +#pap_AW UTF-8 +#pap_CW UTF-8 +#pl_PL.UTF-8 UTF-8 +#pl_PL ISO-8859-2 +#ps_AF UTF-8 +#pt_BR.UTF-8 UTF-8 +#pt_BR ISO-8859-1 +#pt_PT.UTF-8 UTF-8 +#pt_PT ISO-8859-1 +#pt_PT@euro ISO-8859-15 +#quz_PE UTF-8 +#raj_IN UTF-8 +#ro_RO.UTF-8 UTF-8 +#ro_RO ISO-8859-2 +#ru_RU.KOI8-R KOI8-R +#ru_RU.UTF-8 UTF-8 +#ru_RU ISO-8859-5 +#ru_UA.UTF-8 UTF-8 +#ru_UA KOI8-U +#rw_RW UTF-8 +#sa_IN UTF-8 +#sah_RU UTF-8 +#sat_IN UTF-8 +#sc_IT UTF-8 +#sd_IN UTF-8 +#sd_IN@devanagari UTF-8 +#se_NO UTF-8 +#sgs_LT UTF-8 +#shn_MM UTF-8 +#shs_CA UTF-8 +#si_LK UTF-8 +#sid_ET UTF-8 +#sk_SK.UTF-8 UTF-8 +#sk_SK ISO-8859-2 +#sl_SI.UTF-8 UTF-8 +#sl_SI ISO-8859-2 +#sm_WS UTF-8 +#so_DJ.UTF-8 UTF-8 +#so_DJ ISO-8859-1 +#so_ET UTF-8 +#so_KE.UTF-8 UTF-8 +#so_KE ISO-8859-1 +#so_SO.UTF-8 UTF-8 +#so_SO ISO-8859-1 +#sq_AL.UTF-8 UTF-8 +#sq_AL ISO-8859-1 +#sq_MK UTF-8 +#sr_ME UTF-8 +#sr_RS UTF-8 +#sr_RS@latin UTF-8 +#ss_ZA UTF-8 +#st_ZA.UTF-8 UTF-8 +#st_ZA ISO-8859-1 +#sv_FI.UTF-8 UTF-8 +#sv_FI ISO-8859-1 +#sv_FI@euro ISO-8859-15 +#sv_SE.UTF-8 UTF-8 +#sv_SE ISO-8859-1 +#sw_KE UTF-8 +#sw_TZ UTF-8 +#szl_PL UTF-8 +#ta_IN UTF-8 +#ta_LK UTF-8 +#tcy_IN.UTF-8 UTF-8 +#te_IN UTF-8 +#tg_TJ.UTF-8 UTF-8 +#tg_TJ KOI8-T +#th_TH.UTF-8 UTF-8 +#th_TH TIS-620 +#the_NP UTF-8 +#ti_ER UTF-8 +#ti_ET UTF-8 +#tig_ER UTF-8 +#tk_TM UTF-8 +#tl_PH.UTF-8 UTF-8 +#tl_PH ISO-8859-1 +#tn_ZA UTF-8 +#to_TO UTF-8 +#tpi_PG UTF-8 +#tr_CY.UTF-8 UTF-8 +#tr_CY ISO-8859-9 +#tr_TR.UTF-8 UTF-8 +#tr_TR ISO-8859-9 +#ts_ZA UTF-8 +#tt_RU UTF-8 +#tt_RU@iqtelif UTF-8 +#ug_CN UTF-8 +#uk_UA.UTF-8 UTF-8 +#uk_UA KOI8-U +#unm_US UTF-8 +#ur_IN UTF-8 +#ur_PK UTF-8 +#uz_UZ.UTF-8 UTF-8 +#uz_UZ ISO-8859-1 +#uz_UZ@cyrillic UTF-8 +#ve_ZA UTF-8 +#vi_VN UTF-8 +#wa_BE ISO-8859-1 +#wa_BE@euro ISO-8859-15 +#wa_BE.UTF-8 UTF-8 +#wae_CH UTF-8 +#wal_ET UTF-8 +#wo_SN UTF-8 +#xh_ZA.UTF-8 UTF-8 +#xh_ZA ISO-8859-1 +#yi_US.UTF-8 UTF-8 +#yi_US CP1255 +#yo_NG UTF-8 +#yue_HK UTF-8 +#yuw_PG UTF-8 +zh_CN.GB18030 GB18030 +zh_CN.GBK GBK +zh_CN.UTF-8 UTF-8 +zh_CN GB2312 +#zh_HK.UTF-8 UTF-8 +#zh_HK BIG5-HKSCS +#zh_SG.UTF-8 UTF-8 +#zh_SG.GBK GBK +#zh_SG GB2312 +#zh_TW.EUC-TW EUC-TW +#zh_TW.UTF-8 UTF-8 +#zh_TW BIG5 +#zu_ZA.UTF-8 UTF-8 +#zu_ZA ISO-8859-1 diff --git a/etc/pacman.conf b/etc/pacman.conf new file mode 100644 index 00000000..c25d9d6b --- /dev/null +++ b/etc/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 2 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +#[multilib] +#Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/etc/wildmidi/wildmidi.cfg b/etc/wildmidi/wildmidi.cfg new file mode 100644 index 00000000..d0ee73b6 --- /dev/null +++ b/etc/wildmidi/wildmidi.cfg @@ -0,0 +1,142 @@ +# https://github.com/Mindwerks/wildmidi/blob/master/cfg/wildmidi.cfg +# https://freepats.zenvoid.org/SoundSets/general-midi.html +#dir /usr/share/midi/freepats +dir ~/documents/codecs/freepats/ + +# Automatically generated on Sun Feb 19 19:22:39 EST 2006 +# by http://freepats.opensrc.org/mkcfg.sh.txt + +drumset 0 + + 25 Drum_000/025_Snare_Roll.pat + 26 Drum_000/026_Snap.pat + 27 Drum_000/027_High_Q.pat + 31 Drum_000/031_Sticks.pat + 32 Drum_000/032_Square_Click.pat + 33 Drum_000/033_Metronome_Click.pat + 34 Drum_000/034_Metronome_Bell.pat + 35 Drum_000/035_Kick_1.pat amp=100 + 36 Drum_000/036_Kick_2.pat amp=100 + 37 Drum_000/037_Stick_Rim.pat + 38 Drum_000/038_Snare_1.pat + 39 Drum_000/039_Clap_Hand.pat amp=100 + 40 Drum_000/040_Snare_2.pat + 41 Drum_000/041_Tom_Low_2.pat amp=100 + 42 Drum_000/042_Hi-Hat_Closed.pat + 43 Drum_000/043_Tom_Low_1.pat amp=100 + 44 Drum_000/044_Hi-Hat_Pedal.pat + 45 Drum_000/045_Tom_Mid_2.pat amp=100 + 46 Drum_000/046_Hi-Hat_Open.pat + 47 Drum_000/047_Tom_Mid_1.pat amp=100 + 48 Drum_000/048_Tom_High_2.pat amp=100 + 49 Drum_000/049_Cymbal_Crash_1.pat + 50 Drum_000/050_Tom_High_1.pat amp=100 + 51 Drum_000/051_Cymbal_Ride_1.pat + 52 Drum_000/052_Cymbal_Chinese.pat + 53 Drum_000/053_Cymbal_Ride_Bell.pat amp=100 + 54 Drum_000/054_Tombourine.pat + 55 Drum_000/055_Cymbal_Splash.pat + 56 Drum_000/056_Cow_Bell.pat + 57 Drum_000/057_Cymbal_Crash_2.pat + 58 Drum_000/058_Vibra-Slap.pat + 59 Drum_000/059_Cymbal_Ride_2.pat + 60 Drum_000/060_Bongo_High.pat + 61 Drum_000/061_Bongo_Low.pat + 62 Drum_000/062_Conga_High_1_Mute.pat + 63 Drum_000/063_Conga_High_2_Open.pat + 64 Drum_000/064_Conga_Low.pat + 65 Drum_000/065_Timbale_High.pat + 66 Drum_000/066_Timbale_Low.pat + 67 Drum_000/067_Agogo_High.pat + 68 Drum_000/068_Agogo_Low.pat + 69 Drum_000/069_Cabasa.pat amp=100 + 70 Drum_000/070_Maracas.pat + 71 Drum_000/071_Whistle_1_High_Short.pat + 72 Drum_000/072_Whistle_2_Low_Long.pat + 73 Drum_000/073_Guiro_1_Short.pat + 74 Drum_000/074_Guiro_2_Long.pat + 75 Drum_000/075_Claves.pat amp=100 + 76 Drum_000/076_Wood_Block_1_High.pat + 77 Drum_000/077_Wood_Block_2_Low.pat + 78 Drum_000/078_Cuica_1_Mute.pat amp=100 + 79 Drum_000/079_Cuica_2_Open.pat amp=100 + 80 Drum_000/080_Triangle_1_Mute.pat + 81 Drum_000/081_Triangle_2_Open.pat + 82 Drum_000/082_Shaker.pat + 84 Drum_000/084_Belltree.pat + +bank 0 + + 0 Tone_000/000_Acoustic_Grand_Piano.pat amp=120 pan=center + 1 Tone_000/001_Acoustic_Brite_Piano.pat + 2 Tone_000/002_Electric_Grand_Piano.pat + 4 Tone_000/004_Electric_Piano_1_Rhodes.pat + 5 Tone_000/005_Electric_Piano_2_Chorused_Yamaha_DX.pat + 6 Tone_000/006_Harpsichord.pat + 7 Tone_000/007_Clavinet.pat + 8 Tone_000/008_Celesta.pat + 9 Tone_000/009_Glockenspiel.pat + 13 Tone_000/013_Xylophone.pat + 14 Tone_000/014_Tubular_Bells.pat + 15 Tone_000/015_Dulcimer.pat + 16 Tone_000/016_Hammond_Organ.pat + 19 Tone_000/019_Church_Organ.pat + 21 Tone_000/021_Accordion.pat + 23 Tone_000/023_Tango_Accordion.pat + 24 Tone_000/024_Nylon_Guitar.pat + 25 Tone_000/025_Steel_Guitar.pat + 26 Tone_000/026_Jazz_Guitar.pat + 27 Tone_000/027_Clean_Electric_Guitar.pat + 28 Tone_000/028_Muted_Electric_Guitar.pat + 29 Tone_000/029_Overdriven_Guitar.pat + 30 Tone_000/030_Distortion_Guitar.pat + 32 Tone_000/032_Acoustic_Bass.pat + 33 Tone_000/033_Finger_Bass.pat + 34 Tone_000/034_Pick_Bass.pat + 35 Tone_000/035_Fretless_Bass.pat + 36 Tone_000/036_Slap_Bass_1.pat + 37 Tone_000/037_Slap_Bass_2.pat + 38 Tone_000/038_Synth_Bass_1.pat + 40 Tone_000/040_Violin.pat + 42 Tone_000/042_Cello.pat + 44 Tone_000/044_Tremolo_Strings.pat + 45 Tone_000/045_Pizzicato_Strings.pat + 46 Tone_000/046_Harp.pat + 47 Tone_000/047_Timpani.pat + 48 Tone_000/048_String_Ensemble_1_Marcato.pat + 53 Tone_000/053_Voice_Oohs.pat + 56 Tone_000/056_Trumpet.pat + 57 Tone_000/057_Trombone.pat + 58 Tone_000/058_Tuba.pat + 59 Tone_000/059_Muted_Trumpet.pat + 60 Tone_000/060_French_Horn.pat + 61 Tone_000/061_Brass_Section.pat + 64 Tone_000/064_Soprano_Sax.pat + 65 Tone_000/065_Alto_Sax.pat + 66 Tone_000/066_Tenor_Sax.pat + 67 Tone_000/067_Baritone_Sax.pat + 68 Tone_000/068_Oboe.pat + 69 Tone_000/069_English_Horn.pat + 70 Tone_000/070_Bassoon.pat + 71 Tone_000/071_Clarinet.pat + 72 Tone_000/072_Piccolo.pat + 73 Tone_000/073_Flute.pat + 74 Tone_000/074_Recorder.pat + 75 Tone_000/075_Pan_Flute.pat + 76 Tone_000/076_Bottle_Blow.pat + 79 Tone_000/079_Ocarina.pat + 80 Tone_000/080_Square_Wave.pat + 84 Tone_000/084_Charang.pat + 88 Tone_000/088_New_Age.pat + 94 Tone_000/094_Halo_Pad.pat + 95 Tone_000/095_Sweep_Pad.pat + 98 Tone_000/098_Crystal.pat + 101 Tone_000/101_Goblins--Unicorn.pat + 102 Tone_000/102_Echo_Voice.pat + 104 Tone_000/104_Sitar.pat + 114 Tone_000/114_Steel_Drums.pat + 115 Tone_000/115_Wood_Block.pat + 120 Tone_000/120_Guitar_Fret_Noise.pat + 122 Tone_000/122_Seashore.pat + 125 Tone_000/125_Helicopter.pat + diff --git a/home/xyz/.Xresources b/home/xyz/.Xresources new file mode 100644 index 00000000..8953b89e --- /dev/null +++ b/home/xyz/.Xresources @@ -0,0 +1,6 @@ +! nsxiv, fnune/base16-vim base16-tomorrow-night colorscheme +Nsxiv.bar.font:monospace:size=11 +Nsxiv.window.foreground:#c5c8c6 +Nsxiv.window.background:#1d1f21 +Nsxiv.bar.foreground:#b4b7b4 +Nsxiv.bar.background:#282a2e diff --git a/home/xyz/.bashrc b/home/xyz/.bashrc new file mode 100644 index 00000000..78401eb3 --- /dev/null +++ b/home/xyz/.bashrc @@ -0,0 +1,56 @@ +#!/bin/sh + +# $- meaning see https://stackoverflow.com/questions/42757236/what-does-mean-in-bash +# If not running interactively, don't do anything +#[[ $- != *i* ]] && return +# https://github.com/westscz/.dotfiles/blob/master/system/bashrc +case $- in + *i*) ;; + *) return;; +esac + +. /usr/share/fzf/completion.bash +. /usr/share/fzf/key-bindings.bash + +# default PS1 +#PS1='[\u@\h \W]\$ ' + +# 0: not bold, 91: bright red +# \e[m act like \e[0m, means reset so commands after it will not be colored +# https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit +# need \[ and \] around color codes so bash ignore color codes when calculating line wraps +PS1='\[\e[0;91m\][\u@\h \W]\$ \[\e[0m\]' + +# https://github.com/LukeSmithxyz/voidrice/blob/master/.config/shell/aliasrc +for cmd in iotop nethogs hardcode-fixer ventoy; do + alias $cmd="sudo $cmd" +done +unset cmd + +alias absolutely-proprietary='absolutely-proprietary -f' +alias alsamixer='alsamixer -V all' +alias diff='diff --color=auto' +alias grep='grep --color=auto' +alias ls='ls --color=auto' +alias radeontop='radeontop -c' +alias rm='rm -I' +alias sdcv='sdcv --color' + +# /dev/ttyACM0 can be in config file, or as environmantal variable, see /usr/share/doc/adafruit-ampy/README.md +alias ap='sudo ampy -p /dev/ttyACM0' +alias cfgc='cfg -c' +alias cfgl='cfg -l' +alias cfgs='cfg -s' +alias g=git +alias ll='ls -lAh --color=auto --group-directories-first' +alias s='sudo ' # https://askubuntu.com/a/22043 +alias se='sudo -E ' +alias spd='speedtest --no-upload; librespeed-cli --no-upload' +alias sv='sudoedit' +alias tp='sudo tio /dev/ttyACM0' +alias v='$EDITOR' +alias vc='$EDITOR "$XDG_DOCUMENTS_DIR/notes/computer/command-line_notes.md"' +alias vq='$EDITOR "$XDG_DOCUMENTS_DIR/notes/others/questions_ideas_tips.md"' +alias wtr='curl v2.wttr.in' + +eval "$(zoxide init bash)" diff --git a/home/xyz/.config/Mullvad VPN/gui_settings.json b/home/xyz/.config/Mullvad VPN/gui_settings.json new file mode 100644 index 00000000..8867e15e --- /dev/null +++ b/home/xyz/.config/Mullvad VPN/gui_settings.json @@ -0,0 +1 @@ +{"preferredLocale":"system","autoConnect":true,"enableSystemNotifications":true,"monochromaticIcon":false,"startMinimized":false,"unpinnedWindow":true,"browsedForSplitTunnelingApplications":[]} \ No newline at end of file diff --git a/home/xyz/.config/aria2/aria2.conf b/home/xyz/.config/aria2/aria2.conf new file mode 100644 index 00000000..44bd9c97 --- /dev/null +++ b/home/xyz/.config/aria2/aria2.conf @@ -0,0 +1,2 @@ +# max hardcoded to 16, see https://github.com/aria2/aria2/issues/1039 +max-connection-per-server=16 diff --git a/home/xyz/.config/dunst/dunstrc b/home/xyz/.config/dunst/dunstrc new file mode 100644 index 00000000..987c65cb --- /dev/null +++ b/home/xyz/.config/dunst/dunstrc @@ -0,0 +1,468 @@ +[global] + ### Display ### + + # Which monitor should the notifications be displayed on. + monitor = 0 + + # Display notification on focused monitor. Possible modes are: + # mouse: follow mouse pointer + # keyboard: follow window with keyboard focus + # none: don't follow anything + # + # "keyboard" needs a window manager that exports the + # _NET_ACTIVE_WINDOW property. + # This should be the case for almost all modern window managers. + # + # If this option is set to mouse or keyboard, the monitor option + # will be ignored. + follow = mouse + + # The geometry of the window: + # [{width}]x{height}[+/-{x}+/-{y}] + # The geometry of the message window. + # The height is measured in number of notifications everything else + # in pixels. If the width is omitted but the height is given + # ("-geometry x2"), the message window expands over the whole screen + # (dmenu-like). If width is 0, the window expands to the longest + # message displayed. A positive x is measured from the left, a + # negative from the right side of the screen. Y is measured from + # the top and down respectively. + # The width can be negative. In this case the actual width is the + # screen width minus the width defined in within the geometry option. + geometry = "300x5-30+20" + + # Turn on the progess bar + progress_bar = true + + # Set the progress bar height. This includes the frame, so make sure + # it's at least twice as big as the frame width. + progress_bar_height = 10 + + # Set the frame width of the progress bar + progress_bar_frame_width = 1 + + # Set the minimum width for the progress bar + progress_bar_min_width = 150 + + # Set the maximum width for the progress bar + progress_bar_max_width = 300 + + + # Show how many messages are currently hidden (because of geometry). + indicate_hidden = yes + + # Shrink window if it's smaller than the width. Will be ignored if + # width is 0. + shrink = yes + + # The transparency of the window. Range: [0; 100]. + # This option will only work if a compositing window manager is + # present (e.g. xcompmgr, compiz, etc.). + transparency = 0 + + # The height of the entire notification. If the height is smaller + # than the font height and padding combined, it will be raised + # to the font height and padding. + notification_height = 0 + + # Draw a line of "separator_height" pixel height between two + # notifications. + # Set to 0 to disable. + separator_height = 1 + + # Padding between text and separator. + padding = 8 + + # Horizontal padding. + horizontal_padding = 8 + + # Padding between text and icon. + text_icon_padding = 0 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 1 + + # Defines color of the frame around the notification window. + frame_color = "#c5c8c6" + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = frame + + # Sort messages by urgency. + sort = yes + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + # A client can set the 'transient' hint to bypass this. See the rules + # section for how to disable this if necessary + idle_threshold = 120 + + ### Text ### + + font = Monospace 10 + + # The spacing between lines. If the height is smaller than the + # font height, it will get raised to the font height. + line_height = 0 + + # Possible values are: + # full: Allow a small subset of html markup in notifications: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # + # strip: This setting is provided for compatibility with some broken + # clients that send markup even though it's not enabled on the + # server. Dunst will try to strip the markup but the parsing is + # simplistic so using this option outside of matching rules for + # specific applications *IS GREATLY DISCOURAGED*. + # + # no: Disable markup parsing, incoming notifications will be treated as + # plain text. Dunst will not advertise that it has the body-markup + # capability if this is set as a global setting. + # + # It's important to note that markup inside the format option will be parsed + # regardless of what this is set to. + markup = full + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # %n progress value if set without any extra characters + # %% Literal % + # Markup is allowed + format = "%s\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = left + + # Vertical alignment of message text and icon. + # Possible values are "top", "center" and "bottom". + vertical_alignment = center + + # Show age of message if message is older than show_age_threshold + # seconds. + # Set to -1 to disable. + show_age_threshold = 60 + + # Split notifications into multiple lines if they don't fit into + # geometry. + word_wrap = yes + + # When word_wrap is set to no, specify where to make an ellipsis in long lines. + # Possible values are "start", "middle" and "end". + ellipsize = middle + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Stack together notifications with the same content + stack_duplicates = true + + # Hide the count of stacked notifications with the same content + hide_duplicate_count = false + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Align icons left/right/off + icon_position = left + + # Scale small icons up to this size, set to 0 to disable. Helpful + # for e.g. small files or high-dpi screens. In case of conflict, + # max_icon_size takes precedence over this. + min_icon_size = 0 + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 32 + + # Paths to default icons. + icon_path = /usr/share/icons/Papirus-Dark/16x16/actions:/usr/share/icons/Papirus-Dark/16x16/categories:/usr/share/icons/Papirus-Dark/16x16/emblems:/usr/share/icons/Papirus-Dark/16x16/mimetypes:/usr/share/icons/Papirus-Dark/16x16/places:/usr/share/icons/Papirus-Dark/16x16/apps:/usr/share/icons/Papirus-Dark/16x16/devices:/usr/share/icons/Papirus-Dark/16x16/emotes:/usr/share/icons/Papirus-Dark/16x16/panel:/usr/share/icons/Papirus-Dark/16x16/status + + ### History ### + + # Should a notification popped up from history be sticky or timeout + # as if it would normally do. + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 20 + + ### Misc/Advanced ### + + # dmenu path. + dmenu = /usr/bin/dmenu -p dunst: + + # Browser for opening urls in context menu. + browser = /usr/bin/firefox -new-tab + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = true + + # Define the title of the windows spawned by dunst + title = Dunst + + # Define the class of the windows spawned by dunst + class = Dunst + + # Print a notification on startup. + # This is mainly for error detection, since dbus (re-)starts dunst + # automatically after a crash. + startup_notification = false + + # Manage dunst's desire for talking + # Can be one of the following values: + # crit: Critical features. Dunst aborts + # warn: Only non-fatal warnings + # mesg: Important Messages + # info: all unimportant stuff + # debug: all less than unimportant stuff + verbosity = mesg + + # Define the corner radius of the notification window + # in pixel size. If the radius is 0, you have no rounded + # corners. + # The radius will be automatically lowered if it exceeds half of the + # notification height to avoid clipping text and/or icons. + corner_radius = 0 + + # Ignore the dbus closeNotification message. + # Useful to enforce the timeout set by dunst configuration. Without this + # parameter, an application may close the notification sent before the + # user defined timeout. + ignore_dbusclose = false + + ### Wayland ### + # These settings are Wayland-specific. They have no effect when using X11 + + # Uncomment this if you want to let notications appear under fullscreen + # applications (default: overlay) + # layer = top + + # Set this to true to use X11 output on Wayland. + force_xwayland = false + + ### Legacy + + # Use the Xinerama extension instead of RandR for multi-monitor support. + # This setting is provided for compatibility with older nVidia drivers that + # do not support RandR and using it on systems that support RandR is highly + # discouraged. + # + # By enabling this setting dunst will not be able to detect when a monitor + # is connected or disconnected which might break follow mode if the screen + # layout changes. + force_xinerama = false + + ### mouse + + # Defines list of actions for each mouse event + # Possible values are: + # * none: Don't do anything. + # * do_action: If the notification has exactly one action, or one is marked as default, + # invoke it. If there are multiple and no default, open the context menu. + # * close_current: Close current notification. + # * close_all: Close all notifications. + # These values can be strung together for each mouse event, and + # will be executed in sequence. + mouse_left_click = close_current + mouse_middle_click = do_action, close_current + mouse_right_click = close_all + +# Experimental features that may or may not work correctly. Do not expect them +# to have a consistent behaviour across releases. +[experimental] + # Calculate the dpi to use on a per-monitor basis. + # If this setting is enabled the Xft.dpi value will be ignored and instead + # dunst will attempt to calculate an appropriate dpi value for each monitor + # using the resolution and physical size. This might be useful in setups + # where there are multiple screens with very different dpi values. + per_monitor_dpi = false + +# The internal keyboard shortcut support in dunst is now considered deprecated +# and should be replaced by dunstctl calls. You can use the configuration of your +# WM or DE to bind these to shortcuts of your choice. +# Check the dunstctl manual page for more info. +[shortcuts] + + # Shortcuts are specified as [modifier+][modifier+]...key + # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", + # "mod3" and "mod4" (windows-key). + # Xev might be helpful to find names for keys. + + # Close notification. Equivalent dunstctl command: + # dunstctl close + # close = ctrl+space + + # Close all notifications. Equivalent dunstctl command: + # dunstctl close-all + # close_all = ctrl+shift+space + + # Redisplay last message(s). Equivalent dunstctl command: + # dunstctl history-pop + # history = ctrl+grave + + # Context menu. Equivalent dunstctl command: + # dunstctl context + # context = ctrl+shift+period + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#1d1f21" + foreground = "#81a2be" + frame_color = "#81a2be" + timeout = 10 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#1d1f21" + foreground = "#b5bd68" + frame_color = "#b5bd68" + timeout = 10 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + background = "#1d1f21" + foreground = "#cc6666" + frame_color = "#cc6666" + timeout = 0 + # Icon for notifications with critical urgency, uncomment to enable + #icon = /path/to/icon + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# +# Messages can be matched by +# appname (discouraged, see desktop_entry) +# body +# category +# desktop_entry +# icon +# match_transient +# msg_urgency +# stack_tag +# summary +# +# and you can override the +# background +# foreground +# format +# frame_color +# fullscreen +# new_icon +# set_stack_tag +# set_transient +# timeout +# urgency +# +# Shell-like globbing will get expanded. +# +# Instead of the appname filter, it's recommended to use the desktop_entry filter. +# GLib based applications export their desktop-entry name. In comparison to the appname, +# the desktop-entry won't get localized. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format +# to "". +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +# Disable the transient hint so that idle_threshold cannot be bypassed from the +# client +#[transient_disable] +# match_transient = yes +# set_transient = no +# +# Make the handling of transient notifications more strict by making them not +# be placed in history. +#[transient_history_ignore] +# match_transient = yes +# history_ignore = yes + +# fullscreen values +# show: show the notifications, regardless if there is a fullscreen window opened +# delay: displays the new notification, if there is no fullscreen window active +# If the notification is already drawn, it won't get undrawn. +# pushback: same as delay, but when switching into fullscreen, the notification will get +# withdrawn from screen again and will get delayed like a new notification +#[fullscreen_delay_everything] +# fullscreen = delay +#[fullscreen_show_critical] +# msg_urgency = critical +# fullscreen = show + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# format = "" + +#[history-ignore] +# # This notification will not be saved in history +# summary = "foobar" +# history_ignore = yes + +#[skip-display] +# # This notification will not be displayed, but will be included in the history +# summary = "foobar" +# skip_display = yes + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +#[stack-volumes] +# appname = "some_volume_notifiers" +# set_stack_tag = "volume" +# +# vim: ft=cfg diff --git a/home/xyz/.config/fcitx5/conf/classicui.conf b/home/xyz/.config/fcitx5/conf/classicui.conf new file mode 100644 index 00000000..6986df92 --- /dev/null +++ b/home/xyz/.config/fcitx5/conf/classicui.conf @@ -0,0 +1,15 @@ +# Vertical Candidate List +Vertical Candidate List=False +# Use Per Screen DPI +PerScreenDPI=True +# Use mouse wheel to go to prev or next page +WheelForPaging=True +# Font +Font="Adobe Kaiti Std 12" +# Menu Font +MenuFont="Sans 10" +# Use input method langauge to display text +UseInputMethodLangaugeToDisplayText=True +# Theme +Theme=default + diff --git a/home/xyz/.config/fontconfig/fonts.conf b/home/xyz/.config/fontconfig/fonts.conf new file mode 100644 index 00000000..c8b6287f --- /dev/null +++ b/home/xyz/.config/fontconfig/fonts.conf @@ -0,0 +1,44 @@ + + + + + + + + serif + + Noto Serif + Noto Serif CJK SC + Noto Color Emoji + + + + sans-serif + + Noto Sans + Noto Sans CJK SC + Noto Color Emoji + + + + monospace + + Noto Sans Mono + Noto Sans Mono CJK SC + Noto Color Emoji + + + + + + + diff --git a/home/xyz/.config/htop/htoprc b/home/xyz/.config/htop/htoprc new file mode 100644 index 00000000..48d07e69 --- /dev/null +++ b/home/xyz/.config/htop/htoprc @@ -0,0 +1,44 @@ +# Beware! This file is rewritten by htop when settings are changed in the interface. +# The parser is also very primitive, and not human-friendly. +htop_version=3.1.0 +config_reader_min_version=2 +fields=0 48 17 18 38 39 40 2 46 47 49 1 +sort_key=46 +sort_direction=-1 +tree_sort_key=0 +tree_sort_direction=1 +hide_kernel_threads=1 +hide_userland_threads=1 +shadow_other_users=0 +show_thread_names=0 +show_program_path=1 +highlight_base_name=0 +highlight_deleted_exe=1 +highlight_megabytes=1 +highlight_threads=1 +highlight_changes=0 +highlight_changes_delay_secs=5 +find_comm_in_cmdline=1 +strip_exe_from_cmdline=1 +show_merged_command=0 +tree_view=0 +tree_view_always_by_pid=0 +all_branches_collapsed=0 +header_margin=1 +detailed_cpu_time=0 +cpu_count_from_one=0 +show_cpu_usage=1 +show_cpu_frequency=1 +show_cpu_temperature=1 +degree_fahrenheit=0 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +enable_mouse=1 +delay=15 +hide_function_bar=0 +header_layout=two_50_50 +column_meters_0=AllCPUs Memory Swap +column_meter_modes_0=1 1 1 +column_meters_1=Tasks LoadAverage DiskIO NetworkIO +column_meter_modes_1=2 2 2 2 diff --git a/home/xyz/.config/mimeapps.list b/home/xyz/.config/mimeapps.list new file mode 100644 index 00000000..9a21f46e --- /dev/null +++ b/home/xyz/.config/mimeapps.list @@ -0,0 +1,9 @@ +# it seems there's no need to put sxiv.desktop into ~/.local/share/applications/ if there exist sxiv.desktop in /usr/share/applications +# no need to use xdg-mime to install it if already exist? +# but if you what to create new .desktop desktop entries with new name, you need to put it in ~/.local/share/applications/ + +[Default Applications] +image/gif=nsxiv.desktop; +image/png=nsxiv.desktop; +image/jpeg=nsxiv.desktop; +application/pdf=org.pwmt.zathura.desktop; diff --git a/home/xyz/.config/mpv/scripts/sponsorblock-minimal.lua b/home/xyz/.config/mpv/scripts/sponsorblock-minimal.lua new file mode 120000 index 00000000..cb3390f8 --- /dev/null +++ b/home/xyz/.config/mpv/scripts/sponsorblock-minimal.lua @@ -0,0 +1 @@ +/usr/lib/mpv/sponsorblock-minimal.lua \ No newline at end of file diff --git a/home/xyz/.config/myconf/gallery_urls b/home/xyz/.config/myconf/gallery_urls new file mode 100644 index 00000000..c0ffd026 --- /dev/null +++ b/home/xyz/.config/myconf/gallery_urls @@ -0,0 +1,5 @@ +# input file format see https://github.com/mikf/gallery-dl/blob/13d4045a8a5a6fd45cb20df399f44055b25f5cca/gallery_dl/__init__.py#L33-L58 +https://www.pixiv.net/users/13379747/artworks +https://www.deviantart.com/wlop/gallery +https://www.deviantart.com/minimalistic-animoo/gallery/ +https://www.deviantart.com/theminimalists/gallery/ diff --git a/home/xyz/.config/newsboat/config b/home/xyz/.config/newsboat/config new file mode 100644 index 00000000..8b31ecb8 --- /dev/null +++ b/home/xyz/.config/newsboat/config @@ -0,0 +1,27 @@ +auto-reload yes + +bind-key h quit +bind-key j down +bind-key k up +bind-key l open +bind-key g home +bind-key G end +bind-key ^F pagedown +bind-key ^B pageup + +# open-in-browser-noninteractively may be useful +macro y set browser "echo %u | xsel -ib"; open-in-browser; set browser "$BROWSER %u &" + +# https://newsboat.org/releases/2.24/docs/newsboat.html#_killfiles +# https://newsboat.org/releases/2.24/docs/newsboat.html#_filter_language + +# not sure if all following arch linux rss feed ignore-article will work as expected +# maybe aur rss feed is broken; maybe arch linux feeds are updated very fast so I can't get the wanted news? +# not fully understand the rss feed +ignore-article "https://aur.archlinux.org/rss/" "title !~\"youtube-dlp|yt-dlp\"" +# arch linux development feeds: all project +ignore-article "https://bugs.archlinux.org/feed.php?feed_type=rss2&project=0" "title !~ \"wildmidi|aur.*(rss|feed)|(rss|feed).*aur\"" +ignore-article "https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=edit&project=0" "title !~ \"FS#(47508|71501|71453|70113|69492)|wildmidi|aur.*(rss|feed)|(rss|feed).*aur\"" +ignore-article "https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=clo&project=0" "title !~ \"FS#(47508|71501|71453|70113|69492)|wildmidi|aur.*(rss|feed)|(rss|feed).*aur\"" + +# vim: ft=sh diff --git a/home/xyz/.config/newsboat/urls b/home/xyz/.config/newsboat/urls new file mode 100644 index 00000000..100fcb00 --- /dev/null +++ b/home/xyz/.config/newsboat/urls @@ -0,0 +1,26 @@ +# https://newsboat.org/releases/2.24/docs/newsboat.html#_tagging + +# temp +https://github.community/t/why-forked-repos-are-not-automatically-watched/205774.rss + +# recreation +https://www.youtube.com/feeds/videos.xml?channel_id=UCD6VugMZKRhSyzWEWA9W2fg recreation +http://keygenmusic.net/rss.php recreation + +# computer misc +https://suckless.org/atom.xml +https://ryf.fsf.org/news/rss.xml +https://ryf.fsf.org/products/rss.xml + +# arch linux +https://archlinux.org/feeds/news/ +https://bbs.archlinux.org/extern.php?action=feed&tid=260286&type=atom +https://aur.archlinux.org/rss/ +# arch linux development feeds: all projects +https://bugs.archlinux.org/feed.php?feed_type=rss2&project=0 +https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=edit&project=0 +https://bugs.archlinux.org/feed.php?feed_type=rss2&topic=clo&project=0 + +# qmmp +https://sourceforge.net/p/qmmp-dev/tickets/590/feed.atom +https://sourceforge.net/p/qmmp-dev/tickets/714/feed.atom diff --git a/home/xyz/.config/nsxiv/exec/key-handler b/home/xyz/.config/nsxiv/exec/key-handler new file mode 100755 index 00000000..80dd82f0 --- /dev/null +++ b/home/xyz/.config/nsxiv/exec/key-handler @@ -0,0 +1,64 @@ +#!/bin/sh + +# Example for $XDG_CONFIG_HOME/sxiv/exec/key-handler +# Called by sxiv(1) after the external prefix key (C-x by default) is pressed. +# The next key combo is passed as its first argument. Passed via stdin are the +# images to act upon, one path per line: all marked images, if in thumbnail +# mode and at least one image has been marked, otherwise the current image. +# sxiv(1) blocks until this script terminates. It then checks which images +# have been modified and reloads them. + +# The key combo argument has the following form: "[C-][M-][S-]KEY", +# where C/M/S indicate Ctrl/Meta(Alt)/Shift modifier states and KEY is the X +# keysym as listed in /usr/include/X11/keysymdef.h without the "XK_" prefix. + +# my dependency notes +# jpegtran is owned by libjpeg-turbo +# mogrify is owned by imagemagick +# exiv2 is owned by exiv2 +# rawtherapee is owned by rawtherapee + +rotate() { + tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read -r file; do + case "$(file -b -i "$file")" in + image/jpeg*) jpegtran -rotate 90 -copy all -outfile "$file" "$file" ;; + *) mogrify -rotate 90 "$file" ;; + esac + done +} + +flip() { + tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read -r file; do + case "$(file -b -i "$file")" in + image/jpeg*) jpegtran -flip vertical -copy all -outfile "$file" "$file" ;; + *) mogrify -flip "$file" ;; + esac + done +} + +linkwall() { + tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read -r file; do + walldir="$XDG_PICTURES_DIR/wallpapers/" + name=$(basename "$file") + if [ ! -e "$walldir$name" ]; then + convwall "$file" "$walldir$name" || ln -s "$file" "$walldir" + else + notify-send 'error' "$name exist" + fi + done +} + +# I choose not to put case nested in while read file loop +# because it can pipe multiple files to one command? +case "$1" in + "d") [ "$(printf 'No\nYes' | dmenu -i -p 'delete?')" = "Yes" ] && tr '\n' '\0' | xargs -0 rm ;; + "e") while read -r file; do alacritty -e sh -c "exiv2 pr -q -pa '$file' | less" & done ;; + "f") flip ;; + "g") tr '\n' '\0' | xargs -0 setsid -f gimp ;; + "l") linkwall ;; + "p") tr '\n' '\0' | xargs -0 sh -c 'convert "$@" $(time.uuid).pdf' shell ;; + "r") rotate ;; + "w") tr '\n' '\0' | xargs -0 shufwall ;; + "y") tr '\n' '\0' | xargs -0 realpath | xsel -b ;; +esac + diff --git a/home/xyz/.config/readline/inputrc b/home/xyz/.config/readline/inputrc new file mode 100644 index 00000000..a666b091 --- /dev/null +++ b/home/xyz/.config/readline/inputrc @@ -0,0 +1,34 @@ +$include /etc/inputrc + +# from archwiki realine +# Color files by types +# Note that this may cause completion text blink in some terminals (e.g. xterm). +set colored-stats On +# Append char to indicate type +set visible-stats On +# Mark symlinked directories +set mark-symlinked-directories On +# Color the common prefix +set colored-completion-prefix On +# Color the common prefix in menu-complete +set menu-complete-display-prefix On + +# https://github.com/LukeSmithxyz/voidrice/blob/2440ad83e9e9cf2f927efbaef618513e0df3cbda/.config/shell/inputrc +set editing-mode vi +$if mode=vi + + set show-mode-in-prompt on + set vi-ins-mode-string \1\e[6 q\2 + set vi-cmd-mode-string \1\e[2 q\2 + + #set keymap vi-command + # these are for vi-command mode + #Control-l: clear-screen + #Control-a: beginning-of-line + + set keymap vi-insert + # these are for vi-insert mode + Control-l: clear-screen + #Control-a: beginning-of-line + +$endif diff --git a/home/xyz/.config/sxhkd/sxhkdrc b/home/xyz/.config/sxhkd/sxhkdrc new file mode 100644 index 00000000..f84cf529 --- /dev/null +++ b/home/xyz/.config/sxhkd/sxhkdrc @@ -0,0 +1,57 @@ +Print + ffmpeg -f x11grab -i "$DISPLAY" -vframes 1 "$XDG_PICTURES_DIR/screenshots/$(time.uuid).png" + +alt + Print + xrectsel '%w %h %x %y' | xargs sh -c 'ffmpeg -f x11grab -s "$1"x"$2" -i "$DISPLAY+$3,$4" -vframes 1 "$XDG_PICTURES_DIR/screenshots/$(time.uuid).png"' shell + +alt + shift + Print + reco + +XF86Audio{RaiseVolume,LowerVolume,Mute} + amixer set Master {5%+,5%-,toggle};\ + kill -RTMIN+1 "$(cat "$XDG_CACHE_HOME/pidofbar")" + +# for pulseaudio, master volume affects capture volume too? +# my laptop built-in microphone capture volume is really low +# so I want to keep capture volume always 100% +alt + XF86AudioMute + amixer set Capture toggle;\ + kill -RTMIN "$(cat "$XDG_CACHE_HOME/pidofbar")" + +XF86Audio{Prev,Play,Next} + playerctl {previous,play-pause,next} + +@Caps_Lock + kill -RTMIN+3 "$(cat "$XDG_CACHE_HOME/pidofbar")" + +alt + y + mpvy -s + +alt + shift + y + mpvy -a + +alt + ctrl + y + tsp mpvy -A -u "$(xsel -ob)" + +alt + w + "$BROWSER" + +# not ideal +alt + shift + w + mullvad-exclude "$BROWSER" + +alt + s + shufwall + +# not ideal +alt + v + if mullvad status | grep -q 'Disconnect'; then mullvad connect -w; else killall qbittorrent; mullvad disconnect -w; fi;\ + kill -RTMIN+4 "$(cat "$XDG_CACHE_HOME/pidofbar")" + +# not ideal +alt + q + mullvad connect -w;\ + kill -RTMIN+4 "$(cat "$XDG_CACHE_HOME/pidofbar")";\ + qbittorrent + +# vim: ft=sh diff --git a/home/xyz/.config/systemd/user/ssh-agent.service b/home/xyz/.config/systemd/user/ssh-agent.service new file mode 100644 index 00000000..66fa63ef --- /dev/null +++ b/home/xyz/.config/systemd/user/ssh-agent.service @@ -0,0 +1,24 @@ +# how to use: +# systemctl --user enable --now ssh-agent + +[Unit] +Description=SSH key agent + +# archwiki approach +# https://wiki.archlinux.org/title/SSH_keys#Start_ssh-agent_with_systemd_user +[Service] +Type=simple +Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket +# DISPLAY required for ssh-askpass to work +Environment=DISPLAY=:0 +ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK + +# github White-Oak approach +# https://github.com/White-Oak/arch-setup-for-dummies/blob/master/setting-up-ssh-agent.md +#[Service] +#Type=forking +#Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket +#ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK + +[Install] +WantedBy=default.target diff --git a/home/xyz/.config/user-dirs.dirs b/home/xyz/.config/user-dirs.dirs new file mode 100644 index 00000000..85cab233 --- /dev/null +++ b/home/xyz/.config/user-dirs.dirs @@ -0,0 +1,15 @@ +# This file is written by xdg-user-dirs-update +# If you want to change or add directories, just edit the line you're +# interested in. All local changes will be retained on the next run. +# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped +# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an +# absolute path. No other format is supported. + +XDG_DESKTOP_DIR="$HOME/desktop/" +XDG_DOWNLOAD_DIR="$HOME/downloads/" +XDG_TEMPLATES_DIR="$HOME/" +XDG_PUBLICSHARE_DIR="$HOME/" +XDG_DOCUMENTS_DIR="$HOME/documents/" +XDG_MUSIC_DIR="$HOME/music/" +XDG_PICTURES_DIR="$HOME/pictures/" +XDG_VIDEOS_DIR="$HOME/videos/" diff --git a/home/xyz/.config/zathura/zathurarc b/home/xyz/.config/zathura/zathurarc new file mode 100644 index 00000000..2c49960e --- /dev/null +++ b/home/xyz/.config/zathura/zathurarc @@ -0,0 +1,2 @@ +# mouse selection copy to clipboard instead of primary +set selection-clipboard clipboard diff --git a/home/xyz/.local/bin/cfg b/home/xyz/.local/bin/cfg new file mode 100755 index 00000000..de40874a --- /dev/null +++ b/home/xyz/.local/bin/cfg @@ -0,0 +1,24 @@ +#!/bin/sh + +# didn't consider $HOME contain space? need improve? +while getopts clLsSmM opt; do + case $opt in + c|l|s) dir="$HOME" + cmd="git --git-dir=$dir/.cfg$opt/ --work-tree=$dir" + mods="$XDG_CONFIG_HOME/myconf/cfg${opt}_mods";; + L|S) dir=/etc/ + cmd="sudo git --git-dir=$dir/.cfg$opt/ --work-tree=$dir" + mods="/etc/myconf/cfg${opt}_mods";; + # -rw-r--r-- == binary 110100100 == octal 644 + # https://stackoverflow.com/a/1796009 + m) $cmd ls-tree -r --name-only --full-tree HEAD | nawk -v a="$dir/" '{printf("%s%s\n",a,$0)}' | tr '\n' '\0' | xargs -0 ls -ldA -- | grep -v '^l\|^d' | nawk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k){for(i=10;$i;i++)$9=$9" "$i;printf("%0o %s\n",k,$9)}}' > "$mods" + exit;; + M) while read -r mod path; do + sudo chmod -c "$mod" -- "$path" + done < "$mods" + exit;; + \?) exit 1;; + esac +done +shift $((OPTIND-1)) +$cmd "$@" diff --git a/home/xyz/.local/bin/chmodef b/home/xyz/.local/bin/chmodef new file mode 100755 index 00000000..be9b2934 --- /dev/null +++ b/home/xyz/.local/bin/chmodef @@ -0,0 +1,5 @@ +#!/bin/sh + +# https://wiki.archlinux.org/title/File_permissions_and_attributes#Numeric_method +find "$@" -type d -execdir chmod 755 -- '{}' \+ +find "$@" -type f -execdir chmod 644 -- '{}' \+ diff --git a/home/xyz/.local/bin/convwall b/home/xyz/.local/bin/convwall new file mode 100755 index 00000000..dff9c43b --- /dev/null +++ b/home/xyz/.local/bin/convwall @@ -0,0 +1,34 @@ +#!/bin/sh + +# target image aspect ratio +wratio=$SCR_WIDTH +hratio=$SCR_HEIGHT +# chop how much from center +chopnum=99% + +# my benchmark shows -ping is much faster than default +# https://github.com/ImageMagick/ImageMagick/issues/3183#issuecomment-800955241 +width=$(identify -ping -format '%w' "$1") +height=$(identify -ping -format '%h' "$1") + +ratio=$((wratio*100/hratio)) +dim=$((width*100/height)) + +if [ "$dim" -ne "$ratio" ]; then + if [ "$dim" -lt "$ratio" ]; then + chopgeom="${chopnum}x0" + width=$((height*wratio/hratio)) + else + chopgeom="0x$chopnum" + height=$((width*hratio/wratio)) + fi + # may throw error "sort: write failed: 'standard output': Broken pipe \n sort: write error" + # caused by head exit (or close stdin) before sort output complete, can ignore + # https://stackoverflow.com/questions/46202653/bash-error-in-sort-sort-write-failed-standard-output-broken-pipe + bgcolor=$(convert "$1" -gravity center -chop "$chopgeom" -define histogram:unique-colors=true -format %c histogram:info:- | sort -rn | head -n1 | awk \{print\ \$3\} | cut -c1-7) + # another approach is to use "$width" or "x$height" for geometry, current approach is more readable + convert "$1" -gravity center -background "$bgcolor" -extent "${width}x$height" "$2" +else + echo 'same aspect ratio, no need to convert' >&2 + exit 1 +fi diff --git a/home/xyz/.local/bin/curlkg b/home/xyz/.local/bin/curlkg new file mode 100755 index 00000000..9389e680 --- /dev/null +++ b/home/xyz/.local/bin/curlkg @@ -0,0 +1,42 @@ +#!/bin/sh + +# references: +# https://blog.csdn.net/qq_41730930/article/details/79327757 +# https://blog.csdn.net/u011112876/article/details/89634505 +# https://github.com/pystardust/ytfzf + +homepage_url='https://node.kg.qq.com/cgi/fcgi-bin/kg_ugc_get_homepage' +music_url='https://node.kg.qq.com/cgi/fcgi-bin/fcg_get_play_url' +# num seems only 8 and 15 works +num=15 +tmp_json_file="$(mktemp --suffix=.json)" + +while getopts u: opt; do + case $opt in + u) uid="$OPTARG";; + \?) exit 1;; + esac +done +# for lan lan, uid=649b9e82272a348b +# for cheng ruan, uid=64949d822c25328c +[ -z "$uid" ] && echo 'error: must provide share_uid +ex: curlkg -u 649b9e82272a348b ./' >&2 && exit 1 +shift $((OPTIND-1)) +download_dir="${1:-"$PWD"}" +[ -d "$download_dir" ] || mkdir -p "$download_dir" + +get_json () +{ + curl -s -G --data-urlencode type=get_uinfo -d outCharset=utf-8 -d start="$1" -d num=$num -d share_uid="$uid" "$homepage_url" | sed 's/.*({\(.*\)}).*/{\1}/' >> "$tmp_json_file" +} + +get_json 1 +ugc_total_count=$(jq '.data.ugc_total_count' "$tmp_json_file") +# can also use while loop with i=$((i+1)) +# the calculation considers both ugc_total_count%num==0 and ugc_total_count%num>0 +for i in $(seq 2 $(((ugc_total_count+num-1)/num))); do + get_json "$i" +done + +jq -r '.data.ugclist[]|"'"$music_url"'?shareid=\(.shareid)\n out=\(.title)_\(.time).m4a"' "$tmp_json_file" | aria2c -d "$download_dir" --auto-file-renaming=false --console-log-level=warn -i- +rm "$tmp_json_file" diff --git a/home/xyz/.local/bin/curlncm b/home/xyz/.local/bin/curlncm new file mode 100755 index 00000000..582214ac --- /dev/null +++ b/home/xyz/.local/bin/curlncm @@ -0,0 +1,86 @@ +#!/bin/sh +# rewrite TianyiShi2001's python script which rewrite NeteaseCloudMusicApi node.js api + +# references: +# https://github.com/ytdl-org/youtube-dl/issues/18051#issuecomment-859964832 +# https://github.com/Binaryify/NeteaseCloudMusicApi +# info about encrytion and api: +# https://github.com/metowolf/NeteaseCloudMusicApi/wiki +# https://github.com/darknessomi/musicbox/wiki + +# lan lan, aid=48860966, rid=793052426, example id=1397315179,1817498734 +# cheng ruan, aid=46703185, rid=792968433 + +# trial and error to get dj_max, don't know why, maybe because it is 2^31 and it is the size limit of whatever type of the variable +dj_max=2147483647 +dl_urls_tmp="$(mktemp)" +# printf 'e82ckenh8dichen8' | hexdump -ve '/1 "%02x"' +key='653832636b656e683864696368656e38' +url='/api/song/enhance/player/url' +request_id=$(date +'%s%3N')_$(seq -w 1 1000 | shuf -n1) +user_agent='Mozilla/5.0 (Linux; U; Android 9; zh-cn; Redmi Note 8 Build/PKQ1.190616.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.5.22' +cookie="$(printf '"appver":"8.0.0","versioncode":"140","buildver":"1623455100","resolution":"1920x1080","__csrf":"","os":"pc","requestId":"%s"' "$request_id")" + +die () +{ + echo "error: $*" >&2 + exit 1 +} + +# let a i r mutually exclusive +# artist, song, djradio id +flag=0 +while getopts a:i:r: opt; do + case $opt in + a) [ "$flag" -eq 1 ] && die "options a,i,r are mutually exclusive" + aid="$OPTARG" + flag=1;; + i) [ "$flag" -eq 1 ] && die "options a,i,r are mutually exclusive" + ids="$OPTARG" + flag=1;; + r) [ "$flag" -eq 1 ] && die "options a,i,r are mutually exclusive" + rid="$OPTARG" + flag=1;; + \?) exit 1;; + esac +done +[ $flag -eq 0 ] && die "please specify at least one option" +shift $((OPTIND-1)) +[ $# -gt 1 ] && die "directory name should be at the end" +download_dir="${1:-"$PWD"}" +[ -d "$download_dir" ] || mkdir -p "$download_dir" + +if [ -n "$ids" ]; then + # temporary solution, can improve by auto curl names + data="$(echo "$ids" | tr ',' '\n' | awk '{printf("%s\t%s\n",$0,"songname")}')" +else + if [ -n "$rid" ]; then + data="$(curl -s -G --data-urlencode id="$rid" -d limit="$dj_max" 'https://music.163.com/djradio' | grep 'songlist\|tt f-thide' | sed -e 's/.*songlist-\(.*\)" class.*/\1/g' -e 's/.*title="\(.*\)".*/\1/g' | paste -sd '\t\n' | sort | tr '/' '_')" + # can only curl featured 50 songs for the artist, can improve + elif [ -n "$aid" ]; then + data="$(curl -s -G --data-urlencode id="$aid" 'https://music.163.com/artist' | grep '\[{.*}\]' | sed -e 's/.*>\[{/\[{/' -e 's/}\]<.*/}\]/' | jq -r '.[]|[.id,.name]|@tsv' | sort | tr '/' '_')" + fi + # awk code not print separator at beginning and end steal from: + # https://unix.stackexchange.com/a/581785/459013 + # not sure awk one-liner or paste way which is better, need benchmark + ids="$(echo "$data" | awk -F'\t' '{printf "%s%s",sep,$1;sep=","}')" + #ids="$(echo "$data" | awk -F'\t' '{print $1}' | paste -sd ',')" +fi + +# I don't fully understand following several lines of code +# I rewrite TianyiShi2001's python script, he rewrites NeteaseCloudMusicApi +text="$(printf '{"ids":"[%s]","br":999000,"header":{%s}}' "$ids" "$cookie")" +message="nobody${url}use${text}md5forencrypt" +digest="$(printf '%s' "$message" | openssl dgst -md5 -hex | awk '{print $2}')" +params="$(printf '%s-36cd479b6b5-%s-36cd479b6b5-%s' "$url" "$text" "$digest")" +encrypted_params="$(printf '%s' "$params" | openssl enc -aes-128-ecb -K "$key" | hexdump -ve '/1 "%02X"')" +# curl default user agent header seems not working +curl -s -A "$user_agent" -d params="$encrypted_params" 'https://interface3.music.163.com/eapi/song/enhance/player/url' | jq -r '.data|sort_by(.id)|.[].url' > "$dl_urls_tmp" +[ "$(echo "$data" | wc -l)" -ne "$(wc -l < "$dl_urls_tmp")" ] && die "number of download uls doesn't match request" + +# can't download some music if live abroad, may need proxy or vpn +# using user_agent, content-type header, cookie header, referer are not necessary? but feels faster +# not sure about cookie header format for aria2c, this link shows that it's kinda messy, so I didn't use it +# https://github.com/aria2/aria2/issues/545#issuecomment-650070869 +echo "$data" | awk -F'\t' '{printf(" out=%s_%s.mp3\n",$2,$1)}' | paste "$dl_urls_tmp" - -d '\n' | aria2c -U "$user_agent" --header='Content-Type: application/x-www-form-urlencoded' --referer='https://music.163.com' -d "$download_dir" --auto-file-renaming=false --console-log-level=warn -i- +rm "$dl_urls_tmp" diff --git a/home/xyz/.local/bin/curlqb b/home/xyz/.local/bin/curlqb new file mode 100755 index 00000000..f98a41c8 --- /dev/null +++ b/home/xyz/.local/bin/curlqb @@ -0,0 +1,18 @@ +#!/bin/sh + +curl -s 'https://github.com/qbittorrent/search-plugins/wiki/Unofficial-search-plugins' | awk -F'"' '/Plugins for Private sites/{exit} /\.py/{url=$2;getline;getline;getline;if($0 !~ /❗|✖/)print url}' | xargs curl -s -Z -L --remote-name-all --create-dirs --output-dir "$1" -- + +#curl -s 'https://github.com/qbittorrent/search-plugins/wiki/Unofficial-search-plugins' | awk -F'"' '{ +# if($0 ~ /Plugins for Private sites/) +# exit +# if($0 ~ /\.py/) +# { +# url=$2 +# getline +# getline +# getline +# if($0 !~ /❗|✖/) +# print url +# } +#}' | xargs curl -s -Z -L --remote-name-all --create-dirs --output-dir "$1" -- + diff --git a/home/xyz/.local/bin/gita b/home/xyz/.local/bin/gita new file mode 100755 index 00000000..a3d0dbc9 --- /dev/null +++ b/home/xyz/.local/bin/gita @@ -0,0 +1,18 @@ +#!/bin/sh +# note message string must come after options + +cmd='git' + +while getopts clLsS f; do + case $f in + c|l|L|s|S) cmd="cfg -$f";; + \?) exit 1;; + esac +done +shift $((OPTIND-1)) + +mes="${1:-refactor}" + +$cmd add -u +$cmd commit -m "$mes" +$cmd push diff --git a/home/xyz/.local/bin/gitfork b/home/xyz/.local/bin/gitfork new file mode 100755 index 00000000..cefc4f68 --- /dev/null +++ b/home/xyz/.local/bin/gitfork @@ -0,0 +1,8 @@ +#!/bin/sh + +git clone "$1" +cd "$(basename "$1" .git)" || exit +git remote add upstream "$2" +git branch fly +git checkout fly +git push --set-upstream origin fly diff --git a/home/xyz/.local/bin/gitpu b/home/xyz/.local/bin/gitpu new file mode 100755 index 00000000..fcc32be9 --- /dev/null +++ b/home/xyz/.local/bin/gitpu @@ -0,0 +1,19 @@ +#!/bin/sh + +if [ -z "$1" ]; then + git checkout master + git pull upstream master + git push + git checkout fly + git merge --no-edit master + git push +else + for dir ; do + git -C "$dir" checkout master + git -C "$dir" pull upstream master + git -C "$dir" push + git -C "$dir" checkout fly + git -C "$dir" merge --no-edit master + git -C "$dir" push + done +fi diff --git a/home/xyz/.local/bin/mmi b/home/xyz/.local/bin/mmi new file mode 100755 index 00000000..b3b5868f --- /dev/null +++ b/home/xyz/.local/bin/mmi @@ -0,0 +1,27 @@ +#!/bin/sh + +mi () +{ + sudo make -B install +} + +origin="$PWD" +cmd='mi' + +while getopts q opt; do + case $opt in + q) cmd='qmake6;mi';; + \?) exit 1;; + esac +done +shift $((OPTIND-1)) + +if [ -z "$1" ]; then + eval "$cmd" +else + for dir ; do + cd "$dir" || exit + eval "$cmd" + cd "$origin" || exit + done +fi diff --git a/home/xyz/.local/bin/mpva b/home/xyz/.local/bin/mpva new file mode 100755 index 00000000..7224cf46 --- /dev/null +++ b/home/xyz/.local/bin/mpva @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ $# -eq 0 ]; then + # fzf has --read0, maybe useful + find "$XDG_MUSIC_DIR" | fzf -m --print0 | xargs -0 mpv --af= --shuffle --loop-playlist=inf --video=no +elif [ $# -eq 1 ]; then + # use --loop-file for single file, better performance maybe + mpv --af= --loop-file=inf --video=no "$1" +else + mpv --af= --shuffle --loop-playlist=inf --video=no "$@" +fi diff --git a/home/xyz/.local/bin/mpvy b/home/xyz/.local/bin/mpvy new file mode 100755 index 00000000..4471b668 --- /dev/null +++ b/home/xyz/.local/bin/mpvy @@ -0,0 +1,41 @@ +#!/bin/sh + +# references: +# https://www.rockyourcode.com/til-how-to-watch-youtube-videos-with-mpv-and-keyboard-shortcuts/ + +fps=30 +height=$SCR_HEIGHT +url="$(xsel -ob)" +flag=s + +# option f and h may do nothing if redownload? since same filename exist. yt-dlp won't download same file even without --auto-file-renameing=false. how improve? pass argument to aria2c? +while getopts Aabd:f:h:su: opt; do + case $opt in + # s: streaming, a: aria2c then mpv, A: aria2c + A|a|s) flag=$opt;; + b) format='bestvideo+bestaudio/best';; + d) download_dir="$OPTARG";; + f) fps="$OPTARG";; + h) height="$OPTARG";; + u) url="$OPTARG";; + \?) exit 1;; + esac +done +if [ -z "$format" ]; then + vformat="[height<=?$height][fps<=?$fps][vcodec!^=?vp9][vcodec!^=?av01]" + # usually get .mp4 video + .webm audio on youtube, yt-dlp needs to merge them to .mkv + # it used to cause problem, but I forget + format="bestvideo$vformat+bestaudio/best$vformat" +fi + +case $flag in + # here if use --write-sub, mpv doesn't recognize subtitles? + # --embed-subs is a little bit better, but still worse then direct streaming + A) yt-dlp -f "$format" --embed-subs -P "${download_dir:-"$XDG_DOWNLOAD_DIR/mpvy/"}" --sponsorblock-remove all "$url";; + a) yt-dlp -f "$format" --embed-subs -P "${download_dir:-/tmp/mpvy/}" --sponsorblock-remove all "$url" --exec 'mpv --fs --speed=2';; + s) mpv --ytdl-format="$format" --ytdl-raw-options='write-sub=' --fs --speed=2 "$url";; +esac +# not sure if this is the best practice, but it seems working ;) +status=$? +[ $status -ne 0 ] && notify-send 'mpvsel failed' +exit $status diff --git a/home/xyz/.local/bin/mvtr b/home/xyz/.local/bin/mvtr new file mode 100755 index 00000000..850f8dba --- /dev/null +++ b/home/xyz/.local/bin/mvtr @@ -0,0 +1,14 @@ +#!/bin/sh + +# can use ls pipe to sed pipe to bash, similar to eval? see comment at link: +# link also show perl-rename approach +# https://linuxconfig.org/rename-all-files-from-uppercase-to-lowercase-characters +# if only change ' ' to '_' `rename` might be sufficient, for upper to lower case might need perl-rename if want concise + +# ./_filename will be renamed ./filename, not what I want, need improve +# -exec can't replace -execdir here, can write a -exec version + +find "$@" -depth -execdir sh -c 'dest="$(echo "$1" | tr -d "\047" | sed -E -e "s/([[:lower:]])([[:upper:]])/\1_\2/g" | tr "[:upper:] " "[:lower:]_" | tr -s "[:punct:]" | sed -E -e "s#/-#/#g" -e "s/_([[:punct:]])/\1/g" -e "s/([[:punct:]])_/\1/g" | tr -s "[:punct:]")"; [ -e "$dest" ] || mv -v -- "$1" "$dest"' shell '{}' \; + +# for test +#mkdir -p ~/test/A\ A/; rm -rf ~/test/A\ A/1t/; cp -r ~/test/0t/ ~/test/A\ A/1t/; time mvtr ~/test/A\ A/1t/; tree ~/test/A\ A/1t/ diff --git a/home/xyz/.local/bin/o b/home/xyz/.local/bin/o new file mode 100755 index 00000000..21464974 --- /dev/null +++ b/home/xyz/.local/bin/o @@ -0,0 +1,15 @@ +#!/bin/sh + +# useful links +# https://stackoverflow.com/questions/3430330/best-way-to-make-a-shell-script-daemon +# https://serverfault.com/questions/117152/do-background-processes-get-a-sighup-when-logging-off +# https://wiki.archlinux.org/title/default_applications + +# I don't care about errors, I don't want to handle errors, just shut up please. +# nohup seems not necessary if don't care about daemon SIGHUP requirement + +if [ $# -eq 1 ] && [ -e "$1" ] && ! [ -x "$1" ]; then + nohup xdg-open "$1" 0<&- >&- 2>&- & +else + nohup "$@" 0<&- >&- 2>&- & +fi diff --git a/home/xyz/.local/bin/orgext b/home/xyz/.local/bin/orgext new file mode 100755 index 00000000..f1654d2c --- /dev/null +++ b/home/xyz/.local/bin/orgext @@ -0,0 +1,24 @@ +#!/bin/sh + +# references: +# https://stackoverflow.com/questions/1842254/how-can-i-find-all-of-the-distinct-file-extensions-in-a-folder-hierarchy + +# not sure if find here need -depth, not sure if mv here need -n and -T + +outdir () +{ + find . -type f -execdir mv -nt "$PWD" -- '{}' \+ + find . -mindepth 1 -maxdepth 1 -type d -delete +} + +indir () +{ + find . -maxdepth 1 -type f | awk -F. '!a[$NF]++{print $NF}' | xargs mkdir -- + find . -mindepth 1 -maxdepth 1 -type d -execdir basename -az -- '{}' \+ | xargs -0 -I _ find . -maxdepth 1 -type f -name '*._' -execdir mv -t '_' -- '{}' \+ +} + +case "$1" in + '-o') outdir;; + '-i') indir;; + *) outdir; indir;; +esac diff --git a/home/xyz/.local/bin/reco b/home/xyz/.local/bin/reco new file mode 100755 index 00000000..d56e61c2 --- /dev/null +++ b/home/xyz/.local/bin/reco @@ -0,0 +1,27 @@ +#!/bin/sh + +# useful urls: +# https://github.com/LukeSmithxyz/voidrice/blob/master/.local/bin/dmenurecord +# https://wiki.archlinux.org/title/FFmpeg#Screen_capture +# https://trac.ffmpeg.org/wiki/Capture/Desktop + +infofile="/tmp/recoinfo" +recodir="$XDG_VIDEOS_DIR/recordings/" +mkdir -p "$recodir" + +if [ -e "$infofile" ]; then + read -r pid tmpfile < "$infofile" + kill "$pid" + notify-send 'finish recording, start converting' + ffmpeg -i "$tmpfile" "$recodir/$(time.uuid).mkv" + notify-send 'finish converting' + rm "$tmpfile" "$infofile" +else + tmpfile="$(mktemp --suffix '.mkv')" + notify-send 'start recording' + # arch wiki way, no audio, less cpu use during capturing (fast?), large file size, need convert afterward + xrectsel '%w %h %x %y' | xargs sh -c 'ffmpeg -y -loglevel quiet -f x11grab -framerate 25 -s "$2"x"$3" -i "$DISPLAY+$4,$5" -c:v ffvhuff "$1" & echo $!' shell "$tmpfile" | xargs -I {} printf '%s\t%s' '{}' "$tmpfile" > "$infofile" + # another way to get subshell ffmpeg child pid + #xrectsel '%w %h %x %y' | xargs sh -c 'ffmpeg -y -f x11grab -framerate 25 -s "$2"x"$3" -i "$DISPLAY+$4,$5" -c:v ffvhuff "$1"' shell "$tmpfile" & + #printf '%s\t%s' "$(ps -o pid= --ppid $!)" "$tmpfile" > "$infofile" +fi diff --git a/home/xyz/.local/bin/sbar b/home/xyz/.local/bin/sbar new file mode 100755 index 00000000..bd471f4a --- /dev/null +++ b/home/xyz/.local/bin/sbar @@ -0,0 +1,90 @@ +#!/bin/sh +# steal from pystardust, GPL3 license: https://github.com/pystardust/sbar +# modified to fit my own need + +# INIT +printf '%s' "$$" > "$XDG_CACHE_HOME/pidofbar" +sec=0 + +bool () { + read str + if [ "$str" = "on" ] || [ "$str" = "up" ] || [ "$str" = "Connected" ]; then + echo 1 + else + echo 0 + fi +} + +# MODULES +update_time () { + time="$(date '+%a %m/%d %H:%M') $(TZ=Asia/Shanghai date '+/%d %H:')" +} + +update_cap () { + cap="$(if xset q | grep -q "Caps Lock: *on"; then echo A; else echo a; fi)" +} + +update_net () { + net="$(bool < /sys/class/net/wlp6s0/operstate)" +} + +update_vpn () { + vpn="$(mullvad status | awk '{print $3}' | bool)" +} + +update_vol () { + vol="$(amixer get Master | awk -F'[][]' 'END{printf"%d %s",($4=="on")?1:0,$2}')" +} + +update_mic () { + mic="$(amixer get Capture | awk -F'[][]' 'END{print $4}' | bool)" +} + +update_bat () { + bat="$(cat /sys/class/power_supply/BAT1/capacity)%" +} + +# For calcurse users, refer https://github.com/pystardust/automeet +#update_event () { +# event="$(calcurse -n | sed 1d | \ +# sed -E "s_^ *\[(.*):(.*)\] ([^\t]*)\t?.*_[\1h \2m->\3]_")" +# [ "[]" = "$event" ] && event="" +#} + +# modules that don't update on their own need to be run at the start for getting their initial value +update_vol +update_mic +update_cap + +display () { + xsetroot -name "$(echo "$time | N $net V $vpn | M $vol C $mic | $cap | $bat")" +} + +# SIGNALLING +# trap ";display" "RTMIN+n" +trap "update_mic;display" "RTMIN" +trap "update_vol;display" "RTMIN+1" +# xev can't read my toggle internet keyboard key, don't know what key to use in sxhkd to send signal +#trap "update_net;display" "RTMIN+2" +trap "update_cap;display" "RTMIN+3" +trap "update_vpn;display" "RTMIN+4" +# to update it from external commands +## kill -m "$(cat "$XDG_CACHE_HOME/pidofbar")" +# where m = 34 + n + +while true; do + # next line of code seems make hotkeys that send kill signals more responsive? not fully understood + sleep 1 & wait && { + # to update item ever n seconds with a offset of m + ## [ $((sec % n)) -eq m ] && udpate_item + [ $((sec % 5 )) -eq 0 ] && update_time # update time every 5 seconds + [ $((sec % 5 )) -eq 0 ] && update_net + [ $((sec % 5 )) -eq 0 ] && update_vpn + [ $((sec % 60)) -eq 0 ] && update_bat + #[ $((sec % 300)) -eq 1 ] && update_event + + # how often the display updates ( 5 seconds ) + [ $((sec % 5 )) -eq 0 ] && display + sec=$((sec + 1)) + } +done diff --git a/home/xyz/.local/bin/shufwall b/home/xyz/.local/bin/shufwall new file mode 100755 index 00000000..5b249e12 --- /dev/null +++ b/home/xyz/.local/bin/shufwall @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ -z "$1" ]; then + file=$(find -L "$XDG_PICTURES_DIR/wallpapers" -type f | shuf -n 1) +else + file=$(find -L "$@" -maxdepth 1 -type f | shuf -n 1) +fi + +display -resize "${SCR_WIDTH}x$SCR_HEIGHT" -backdrop -window root "$file" diff --git a/home/xyz/.local/bin/time.uuid b/home/xyz/.local/bin/time.uuid new file mode 100755 index 00000000..11cc67ad --- /dev/null +++ b/home/xyz/.local/bin/time.uuid @@ -0,0 +1,6 @@ +#!/bin/sh + +# echo current nanosecond since epoch and alpha-numerically ordered UUID +# https://stackoverflow.com/questions/28681650/generate-alpha-numerically-ordered-uuids-over-time?noredirect=1&lq=1 +# https://askubuntu.com/questions/342842/what-does-this-command-mean-awk-f-print-4 +echo "$(date '+%s.%N').$(uuidgen -t | awk -F- '{OFS="-"; print $3,$2,$1,$4,$5}')" diff --git a/home/xyz/.local/bin/topa b/home/xyz/.local/bin/topa new file mode 100755 index 00000000..e921bc31 --- /dev/null +++ b/home/xyz/.local/bin/topa @@ -0,0 +1,6 @@ +#!/bin/sh + +o alacritty -e htop +o alacritty -e radeontop -c +o alacritty -e sudo iotop +o alacritty -e sudo nethogs diff --git a/home/xyz/.local/bin/upd b/home/xyz/.local/bin/upd new file mode 100755 index 00000000..65452b37 --- /dev/null +++ b/home/xyz/.local/bin/upd @@ -0,0 +1,120 @@ +#!/bin/sh + +all () +{ + fast + usb + qb + ncm + kg + refl + gall +} + +# not in all +clean () +{ + nsxiv -c + # my ways + # -exec can't replace -execdir here + find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -empty -execdir rmdir -- '{}' \+ + # -exec can replace -execdir here + #find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -execdir rmdir --ignore-fail-on-non-empty -- '{}' \+ + # nsxiv man page way + #find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -empty ! -name '.' -exec rmdir -- '{}' \; + rm "$HOME/.mozilla/firefox/xxxxxxxx.fly/prefs.js.backup."* +} + +fast () +{ + pac + misc +} + +gall () +{ + gallery-dl --download-archive "$XDG_DOCUMENTS_DIR/database/gallery-dl.sqlite3" -d "$XDG_PICTURES_DIR/anime/gallery-dl/" -i "$XDG_CONFIG_HOME/myconf/gallery_urls" +} + +userjs () +{ + kill $(pidof "$BROWSER") + "$HOME/.mozilla/firefox/xxxxxxxx.fly/prefsCleaner.sh" -s + "$HOME/.mozilla/firefox/xxxxxxxx.fly/updater.sh" -us +} + +g () +{ + curlkg -u649b9e82272a348b -- "$XDG_MUSIC_DIR/not_pure/lan_lan/kg/" + curlkg -u64949d822c25328c -- "$XDG_MUSIC_DIR/not_pure/cheng_ruan/kg/" +} + +misc () +{ + cfg -c submodule foreach git pull + nvim +PlugUpgrade +PlugClean! +PlugUpdate +qa + tldr --update + sudo hardcode-fixer + userjs +} + +ncm () +{ + curlncm -a48860966 -- "$XDG_MUSIC_DIR/not_pure/lan_lan/ncm/artist/" + curlncm -a46703185 -- "$XDG_MUSIC_DIR/not_pure/cheng_ruan/ncm/artist/" + curlncm -r793052426 -- "$XDG_MUSIC_DIR/not_pure/lan_lan/ncm/djradio/" + curlncm -r792968433 -- "$XDG_MUSIC_DIR/not_pure/cheng_ruan/ncm/djradio/" +} + +pac () +{ + sudo pacman --noconfirm -Syu + paru --noconfirm -aSyu + # part steal from aur comment + # sometimes "ERROR: Failure while downloading": https://github.com/neovim/neovim/issues/15709 + rm -rf ~/.cache/paru/clone/neovim-nightly-bin/ && yes 1 | PARU_PAGER=cat paru --rebuild --redownload neovim-nightly-bin + sudo pacman -Fy +} + +qb () +{ + rm -r -- "$HOME/programs/qbittorrent_search_plugins/" + curlqb "$HOME/programs/qbittorrent_search_plugins/" +} + +refl () +{ + sudo reflector --save /etc/pacman.d/mirrorlist --latest 200 --sort rate +} + +usb () +{ + cfg -c push usb + cfg -l push usb + cfg -s push + git --git-dir="$XDG_DOCUMENTS_DIR/notes/.git" --work-tree="$XDG_DOCUMENTS_DIR/notes/" push usb +} + + +if [ $# -eq 0 ]; then + fast +else + while getopts acfgjkmnpqru opt; do + case $opt in + a)all;; + # not in all + c)clean;; + f)fast;; + g)gall;; + j)userjs;; + k)kg;; + m)misc;; + n)ncm;; + p)pac;; + q)qb;; + r)refl;; + u)usb;; + \?)exit 1;; + esac + done +fi diff --git a/home/xyz/.profile b/home/xyz/.profile new file mode 100644 index 00000000..fc2f2066 --- /dev/null +++ b/home/xyz/.profile @@ -0,0 +1,66 @@ +#!/bin/sh + +# here `. ~/.bashrc` same as `source ~/.bashrc`, see `source filename` in `man bash`, and `. file` in `man dash` +# `. file` is POSIX compliant, while `source file` is not +# https://github.com/koalaman/shellcheck/wiki/SC3046 +#[[ -f ~/.bashrc ]] && . ~/.bashrc +[ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc" + +export XDG_CONFIG_HOME="$HOME/.config/" +export XDG_CACHE_HOME="$HOME/.cache/" +export XDG_DATA_HOME="$HOME/.local/share/" + +. "$XDG_CONFIG_HOME/user-dirs.dirs" +export XDG_DESKTOP_DIR="$XDG_DESKTOP_DIR" +export XDG_DOWNLOAD_DIR="$XDG_DOWNLOAD_DIR" +export XDG_TEMPLATES_DIR="$XDG_TEMPLATES_DIR" +export XDG_PUBLICSHARE_DIR="$XDG_PUBLICSHARE_DIR" +export XDG_DOCUMENTS_DIR="$XDG_DOCUMENTS_DIR" +export XDG_MUSIC_DIR="$XDG_MUSIC_DIR" +export XDG_PICTURES_DIR="$XDG_PICTURES_DIR" +export XDG_VIDEOS_DIR="$XDG_VIDEOS_DIR" + +export PATH="$(find "$HOME/.local/bin" -type d -printf %p:)$PATH" +export HISTSIZE=7000 +export HISTFILESIZE=7000 + +export MANPAGER='nvim +Man!' +export EDITOR=nvim +export BROWSER=firefox + +export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket" +export INPUTRC="$XDG_CONFIG_HOME/readline/inputrc" +#export QT_QPA_PLATFORMTHEME=qt5ct +export QT_QPA_PLATFORMTHEME=gtk2 +#export QT_STYLE_OVERRIDE=kvantum +export SDCV_PAGER='less --quit-if-one-screen -RX' +export SXHKD_SHELL=sh +export _ZO_ECHO=1 + +# use sudo find for some files or dirs that has no permission ex: ~/.cache/paru/clone/ +#export FZF_DEFAULT_COMMAND="fd --no-ignore --hidden --exclude .git" +#export FZF_CTRL_T_COMMAND="fd --absolute-path --no-ignore --hidden --exclude .git" +#export FZF_ALT_C_COMMAND="fd --no-ignore --hidden --type d --exclude .git" +export FZF_DEFAULT_COMMAND="sudo find . -mindepth 1 -path '*/\.git' -prune -o -print" +# https://askubuntu.com/questions/444551/get-absolute-path-of-files-using-find-command +# following two lines if use "" on the outermost, will not perfom expected, not sure why +export FZF_CTRL_T_COMMAND='sudo find "$PWD" -mindepth 1 -path "*/\.git" -prune -o -print' +#export FZF_CTRL_T_COMMAND='sudo find "$(pwd)" -path "*/\.git" -prune -o -print' +# ~+ is bashism +#export FZF_CTRL_T_COMMAND="sudo find ~+ -path '*/\.git' -prune -o -print" +export FZF_ALT_C_COMMAND="sudo find . -mindepth 1 -path '*/\.git' -prune -o -type d -print" + +# for clipmenu +# set clipmenud to store clipboard only, don't store selection (primary) +#export CM_SELECTIONS="clipboard" +# X11, copy / close program / paste to another program, if 0 will paste nothing +#export CM_OWN_CLIPBOARD=1 +#export CM_MAX_CLIPS=8 + +export SCR_WIDTH=1600 +export SCR_HEIGHT=900 + +# startx when login, should be put after environmental variables for .xinitrc to use +if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then + exec startx +fi diff --git a/home/xyz/.xinitrc b/home/xyz/.xinitrc new file mode 100644 index 00000000..65d91797 --- /dev/null +++ b/home/xyz/.xinitrc @@ -0,0 +1,52 @@ +#!/bin/sh + +userresources="$HOME/.Xresources" +usermodmap="$HOME/.Xmodmap" +sysresources=/etc/X11/xinit/.Xresources +sysmodmap=/etc/X11/xinit/.Xmodmap + +# merge in defaults and keymaps + +if [ -f $sysresources ]; then + xrdb -merge $sysresources +fi + +if [ -f $sysmodmap ]; then + xmodmap $sysmodmap +fi + +if [ -f "$userresources" ]; then + xrdb -merge "$userresources" +fi + +if [ -f "$usermodmap" ]; then + xmodmap "$usermodmap" +fi + +# start some nice programs + +if [ -d /etc/X11/xinit/xinitrc.d ] ; then + for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do + [ -x "$f" ] && . "$f" + done + unset f +fi + +export GTK_IM_MODULE=fcitx +export QT_IM_MODULE=fcitx +export XMODIFIERS='@im=fcitx' + +#shufwall & +display -window root "$XDG_PICTURES_DIR/wallpapers/wallpaper" & +#clipmenud & +dunst & +fcitx5 -d & +redshift & +sbar & +sxhkd & +udiskie & +# default fastest windows 10 keyboard repeat delay and rate +# without editing registry, using filter key, or other third party program +# see http://stereopsis.com/keyrepeat/ +xset r rate 250 30 & +exec dwm -- cgit v1.2.3-70-g09d2