248
									
								
								.config/dunst/dunstrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										248
									
								
								.config/dunst/dunstrc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,248 @@
 | 
			
		||||
[global]
 | 
			
		||||
    font = Mono 16 
 | 
			
		||||
 | 
			
		||||
    # Allow a small subset of html markup:
 | 
			
		||||
    #   <b>bold</b>
 | 
			
		||||
    #   <i>italic</i>
 | 
			
		||||
    #   <s>strikethrough</s>
 | 
			
		||||
    #   <u>underline</u>
 | 
			
		||||
    #
 | 
			
		||||
    # For a complete reference see
 | 
			
		||||
    # <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
 | 
			
		||||
    # If markup is not allowed, those tags will be stripped out of the
 | 
			
		||||
    # message.
 | 
			
		||||
    allow_markup = yes
 | 
			
		||||
 | 
			
		||||
    # 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
 | 
			
		||||
    # Markup is allowed
 | 
			
		||||
    format = "<b>%s</b>\n%b"
 | 
			
		||||
 | 
			
		||||
    # Sort messages by urgency.
 | 
			
		||||
    sort = no  #yes
 | 
			
		||||
 | 
			
		||||
    # Show how many messages are currently hidden (because of geometry).
 | 
			
		||||
    indicate_hidden = no 
 | 
			
		||||
 | 
			
		||||
    # Alignment of message text.
 | 
			
		||||
    # Possible values are "left", "center" and "right".
 | 
			
		||||
    alignment = left
 | 
			
		||||
 | 
			
		||||
    # The frequency with which text that is longer than the notification
 | 
			
		||||
    # window allows bounces back and forth.
 | 
			
		||||
    # This option conflicts with "word_wrap".
 | 
			
		||||
    # Set to 0 to disable.
 | 
			
		||||
    bounce_freq = 0
 | 
			
		||||
 | 
			
		||||
    # Show age of message if message is older than show_age_threshold
 | 
			
		||||
    # seconds.
 | 
			
		||||
    # Set to -1 to disable.
 | 
			
		||||
    show_age_threshold = -1 #60
 | 
			
		||||
 | 
			
		||||
    # Split notifications into multiple lines if they don't fit into
 | 
			
		||||
    # geometry.
 | 
			
		||||
    word_wrap = yes
 | 
			
		||||
 | 
			
		||||
    # Ignore newlines '\n' in notifications.
 | 
			
		||||
    ignore_newline = no
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # 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 = "400x10-40+30"
 | 
			
		||||
 | 
			
		||||
    # Shrink window if it's smaller than the width.  Will be ignored if
 | 
			
		||||
    # width is 0.
 | 
			
		||||
    shrink = no
 | 
			
		||||
 | 
			
		||||
    # 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
 | 
			
		||||
 | 
			
		||||
    # 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.
 | 
			
		||||
    idle_threshold = 120
 | 
			
		||||
 | 
			
		||||
    # 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
 | 
			
		||||
 | 
			
		||||
    # Should a notification popped up from history be sticky or timeout
 | 
			
		||||
    # as if it would normally do.
 | 
			
		||||
    sticky_history = no # yes
 | 
			
		||||
 | 
			
		||||
    # Maximum amount of notifications kept in history
 | 
			
		||||
    history_length = 20
 | 
			
		||||
 | 
			
		||||
    # Display indicators for URLs (U) and actions (A).
 | 
			
		||||
    show_indicators = no
 | 
			
		||||
 | 
			
		||||
    # The height of a single line.  If the height is smaller than the
 | 
			
		||||
    # font height, it will get raised to the font height.
 | 
			
		||||
    # This adds empty space above and under the text.
 | 
			
		||||
    line_height = 0
 | 
			
		||||
 | 
			
		||||
    # Draw a line of "separator_height" pixel height between two
 | 
			
		||||
    # notifications.
 | 
			
		||||
    # Set to 0 to disable.
 | 
			
		||||
    separator_height = 2
 | 
			
		||||
 | 
			
		||||
    # Padding between text and separator.
 | 
			
		||||
    padding = 8
 | 
			
		||||
 | 
			
		||||
    # Horizontal padding.
 | 
			
		||||
    horizontal_padding = 8
 | 
			
		||||
 | 
			
		||||
    # 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
 | 
			
		||||
 | 
			
		||||
    # Print a notification on startup.
 | 
			
		||||
    # This is mainly for error detection, since dbus (re-)starts dunst
 | 
			
		||||
    # automatically after a crash.
 | 
			
		||||
    startup_notification = false
 | 
			
		||||
 | 
			
		||||
    # dmenu path.
 | 
			
		||||
    dmenu = /usr/bin/dmenu -p dunst:
 | 
			
		||||
 | 
			
		||||
    # Browser for opening urls in context menu.
 | 
			
		||||
    browser = /usr/bin/firefox -new-tab
 | 
			
		||||
 | 
			
		||||
    # Align icons left/right/off
 | 
			
		||||
    icon_position = off
 | 
			
		||||
 | 
			
		||||
    # Paths to default icons.
 | 
			
		||||
    icon_folders = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
 | 
			
		||||
 | 
			
		||||
[frame]
 | 
			
		||||
    width = 1
 | 
			
		||||
    color = "#424242"
 | 
			
		||||
 | 
			
		||||
[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.
 | 
			
		||||
    close = ctrl+space
 | 
			
		||||
 | 
			
		||||
    # Close all notifications.
 | 
			
		||||
    close_all = ctrl+shift+space
 | 
			
		||||
 | 
			
		||||
    # Redisplay last message(s).
 | 
			
		||||
    # On the US keyboard layout "grave" is normally above TAB and left
 | 
			
		||||
    # of "1".
 | 
			
		||||
    history = ctrl+grave
 | 
			
		||||
 | 
			
		||||
    # Context menu.
 | 
			
		||||
    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 = "#222222"
 | 
			
		||||
    #foreground = ${xrdb:color6}
 | 
			
		||||
    foreground = "#dfdfdf"
 | 
			
		||||
    timeout = 5
 | 
			
		||||
 | 
			
		||||
[urgency_normal]
 | 
			
		||||
    background = "#222222"
 | 
			
		||||
    #foreground = "${xrdb:color6}
 | 
			
		||||
    foreground = "#dfdfdf"
 | 
			
		||||
    timeout = 5
 | 
			
		||||
 | 
			
		||||
[urgency_critical]
 | 
			
		||||
    background = "#222222"
 | 
			
		||||
    #foreground = ${xrdb:color6}
 | 
			
		||||
    foreground = "#dfdfdf"
 | 
			
		||||
    timeout = 5
 | 
			
		||||
 | 
			
		||||
# 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", "summary", "body", "icon", "category",
 | 
			
		||||
# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
 | 
			
		||||
# "background", "new_icon" and "format".
 | 
			
		||||
# Shell-like globbing will get expanded.
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
#[espeak]
 | 
			
		||||
#    summary = "*"
 | 
			
		||||
#    script = dunst_espeak.sh
 | 
			
		||||
 | 
			
		||||
#[script-test]
 | 
			
		||||
#    summary = "*script*"
 | 
			
		||||
#    script = dunst_test.sh
 | 
			
		||||
 | 
			
		||||
#[ignore]
 | 
			
		||||
#    # This notification will not be displayed
 | 
			
		||||
#    summary = "foobar"
 | 
			
		||||
#    format = ""
 | 
			
		||||
 | 
			
		||||
#[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
 | 
			
		||||
#
 | 
			
		||||
# vim: ft=cfg
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								.config/iptables
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								.config/iptables
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
# CONFIGURATION:
 | 
			
		||||
# Accept on localhost
 | 
			
		||||
iptables -A INPUT -i lo -j ACCEPT
 | 
			
		||||
iptables -A OUTPUT -o lo -j ACCEPT
 | 
			
		||||
 | 
			
		||||
# Accept outgoing network
 | 
			
		||||
iptables -A OUTPUT -o eth0 -j ACCEPT
 | 
			
		||||
 | 
			
		||||
# Allow established sessions to receive traffic
 | 
			
		||||
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 | 
			
		||||
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
 | 
			
		||||
 | 
			
		||||
# Enable SSH (to internet)
 | 
			
		||||
#iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
 | 
			
		||||
#iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --dport 10571 -j ACCEPT
 | 
			
		||||
 | 
			
		||||
# Disable SSH (to that machine)
 | 
			
		||||
iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.0.0/24 --sport 22 -j DROP
 | 
			
		||||
iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 22 -j DROP
 | 
			
		||||
 | 
			
		||||
# Enable INZ
 | 
			
		||||
#iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 1285 -j ACCEPT
 | 
			
		||||
#iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 3000 -j ACCEPT
 | 
			
		||||
#iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 8080 -j ACCEPT
 | 
			
		||||
 | 
			
		||||
#Enable CSGO
 | 
			
		||||
iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 27015 -j ACCEPT
 | 
			
		||||
iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 27020 -j ACCEPT
 | 
			
		||||
iptables -A INPUT -p udp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 27015 -j ACCEPT
 | 
			
		||||
iptables -A INPUT -p udp -m state --state NEW -m tcp -s 192.168.0.0/24 --dport 27020 -j ACCEPT
 | 
			
		||||
 | 
			
		||||
iptables -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP
 | 
			
		||||
iptables -A FORWARD -i eth0 -m state --state NEW,INVALID -j DROP
 | 
			
		||||
# END OF CONFIG
 | 
			
		||||
 | 
			
		||||
# END CONFIGURATION:
 | 
			
		||||
# END OF CONFIGURATION
 | 
			
		||||
							
								
								
									
										8
									
								
								.config/lutris/lutris.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.config/lutris/lutris.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
[lutris]
 | 
			
		||||
library_ignores = 
 | 
			
		||||
migration_version = 10
 | 
			
		||||
width = 1908
 | 
			
		||||
height = 1001
 | 
			
		||||
maximized = False
 | 
			
		||||
selected_category = runner:linux
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								.config/mpv/mpv.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.config/mpv/mpv.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
# Always allow seeking, e.g. allow seeking within a local cache of HTTP stream
 | 
			
		||||
force-seekable=yes
 | 
			
		||||
# Always open a video window even with no video
 | 
			
		||||
force-window=yes
 | 
			
		||||
# Don't exit when the end of playlist is reached
 | 
			
		||||
keep-open=yes
 | 
			
		||||
# Always save the current playback position on exit
 | 
			
		||||
save-position-on-quit=yes
 | 
			
		||||
 | 
			
		||||
# Create 'high-quality' profile
 | 
			
		||||
[high-quality]
 | 
			
		||||
# Describe this profile
 | 
			
		||||
profile-desc="High quality rendering"
 | 
			
		||||
# Include all settings from the default 'opengl-hq' profile
 | 
			
		||||
profile=opengl-hq
 | 
			
		||||
# Disable debanding for better performance
 | 
			
		||||
deband=no
 | 
			
		||||
							
								
								
									
										505
									
								
								.config/mpv/scripts/iptv.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										505
									
								
								.config/mpv/scripts/iptv.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,505 @@
 | 
			
		||||
--redefine keybindings here if needed; multiple bindings are possible
 | 
			
		||||
keybinds = {
 | 
			
		||||
            activate = {'\\', 'MOUSE_BTN2'},
 | 
			
		||||
            plsup = {'UP', 'MOUSE_BTN3'},
 | 
			
		||||
            plsdown = {'DOWN', 'MOUSE_BTN4'},
 | 
			
		||||
            plsenter = {'ENTER', 'MOUSE_BTN0'}
 | 
			
		||||
        }
 | 
			
		||||
--hide playlist after specified number of seconds
 | 
			
		||||
osd_time=10
 | 
			
		||||
--show only specified number of playlist entries
 | 
			
		||||
window=7
 | 
			
		||||
--fade video when showing playlist
 | 
			
		||||
fade=false
 | 
			
		||||
--if fade=true; -100 — black, 0 — normal
 | 
			
		||||
plsbrightness=-70
 | 
			
		||||
--favorites get promotion to the top of the pls
 | 
			
		||||
favorites = {}
 | 
			
		||||
-- END OF CONFIGURABLE VARIABLES
 | 
			
		||||
 | 
			
		||||
-- put your settings in (SCRIPTS DIR)/_iptvconf.lua
 | 
			
		||||
pcall(require, "_iptvconf")
 | 
			
		||||
 | 
			
		||||
local timer
 | 
			
		||||
--local plscount
 | 
			
		||||
local pattern=""
 | 
			
		||||
local is_active
 | 
			
		||||
local is_playlist_loaded
 | 
			
		||||
 | 
			
		||||
-- UTF-8 lower/upper conversion
 | 
			
		||||
local utf8_lc_uc = {
 | 
			
		||||
  ["a"] = "A",
 | 
			
		||||
  ["b"] = "B",
 | 
			
		||||
  ["c"] = "C",
 | 
			
		||||
  ["d"] = "D",
 | 
			
		||||
  ["e"] = "E",
 | 
			
		||||
  ["f"] = "F",
 | 
			
		||||
  ["g"] = "G",
 | 
			
		||||
  ["h"] = "H",
 | 
			
		||||
  ["i"] = "I",
 | 
			
		||||
  ["j"] = "J",
 | 
			
		||||
  ["k"] = "K",
 | 
			
		||||
  ["l"] = "L",
 | 
			
		||||
  ["m"] = "M",
 | 
			
		||||
  ["n"] = "N",
 | 
			
		||||
  ["o"] = "O",
 | 
			
		||||
  ["p"] = "P",
 | 
			
		||||
  ["q"] = "Q",
 | 
			
		||||
  ["r"] = "R",
 | 
			
		||||
  ["s"] = "S",
 | 
			
		||||
  ["t"] = "T",
 | 
			
		||||
  ["u"] = "U",
 | 
			
		||||
  ["v"] = "V",
 | 
			
		||||
  ["w"] = "W",
 | 
			
		||||
  ["x"] = "X",
 | 
			
		||||
  ["y"] = "Y",
 | 
			
		||||
  ["z"] = "Z",
 | 
			
		||||
  ["а"] = "А",
 | 
			
		||||
  ["б"] = "Б",
 | 
			
		||||
  ["в"] = "В",
 | 
			
		||||
  ["г"] = "Г",
 | 
			
		||||
  ["д"] = "Д",
 | 
			
		||||
  ["е"] = "Е",
 | 
			
		||||
  ["ж"] = "Ж",
 | 
			
		||||
  ["з"] = "З",
 | 
			
		||||
  ["и"] = "И",
 | 
			
		||||
  ["й"] = "Й",
 | 
			
		||||
  ["к"] = "К",
 | 
			
		||||
  ["л"] = "Л",
 | 
			
		||||
  ["м"] = "М",
 | 
			
		||||
  ["н"] = "Н",
 | 
			
		||||
  ["о"] = "О",
 | 
			
		||||
  ["п"] = "П",
 | 
			
		||||
  ["р"] = "Р",
 | 
			
		||||
  ["с"] = "С",
 | 
			
		||||
  ["т"] = "Т",
 | 
			
		||||
  ["у"] = "У",
 | 
			
		||||
  ["ф"] = "Ф",
 | 
			
		||||
  ["х"] = "Х",
 | 
			
		||||
  ["ц"] = "Ц",
 | 
			
		||||
  ["ч"] = "Ч",
 | 
			
		||||
  ["ш"] = "Ш",
 | 
			
		||||
  ["щ"] = "Щ",
 | 
			
		||||
  ["ъ"] = "Ъ",
 | 
			
		||||
  ["ы"] = "Ы",
 | 
			
		||||
  ["ь"] = "Ь",
 | 
			
		||||
  ["э"] = "Э",
 | 
			
		||||
  ["ю"] = "Ю",
 | 
			
		||||
  ["я"] = "Я",
 | 
			
		||||
  ["ё"] = "Ё"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local utf8_uc_lc = {
 | 
			
		||||
  ["A"] = "a",
 | 
			
		||||
  ["B"] = "b",
 | 
			
		||||
  ["C"] = "c",
 | 
			
		||||
  ["D"] = "d",
 | 
			
		||||
  ["E"] = "e",
 | 
			
		||||
  ["F"] = "f",
 | 
			
		||||
  ["G"] = "g",
 | 
			
		||||
  ["H"] = "h",
 | 
			
		||||
  ["I"] = "i",
 | 
			
		||||
  ["J"] = "j",
 | 
			
		||||
  ["K"] = "k",
 | 
			
		||||
  ["L"] = "l",
 | 
			
		||||
  ["M"] = "m",
 | 
			
		||||
  ["N"] = "n",
 | 
			
		||||
  ["O"] = "o",
 | 
			
		||||
  ["P"] = "p",
 | 
			
		||||
  ["Q"] = "q",
 | 
			
		||||
  ["R"] = "r",
 | 
			
		||||
  ["S"] = "s",
 | 
			
		||||
  ["T"] = "t",
 | 
			
		||||
  ["U"] = "u",
 | 
			
		||||
  ["V"] = "v",
 | 
			
		||||
  ["W"] = "w",
 | 
			
		||||
  ["X"] = "x",
 | 
			
		||||
  ["Y"] = "y",
 | 
			
		||||
  ["Z"] = "z",
 | 
			
		||||
  ["А"] = "а",
 | 
			
		||||
  ["Б"] = "б",
 | 
			
		||||
  ["В"] = "в",
 | 
			
		||||
  ["Г"] = "г",
 | 
			
		||||
  ["Д"] = "д",
 | 
			
		||||
  ["Е"] = "е",
 | 
			
		||||
  ["Ж"] = "ж",
 | 
			
		||||
  ["З"] = "з",
 | 
			
		||||
  ["И"] = "и",
 | 
			
		||||
  ["Й"] = "й",
 | 
			
		||||
  ["К"] = "к",
 | 
			
		||||
  ["Л"] = "л",
 | 
			
		||||
  ["М"] = "м",
 | 
			
		||||
  ["Н"] = "н",
 | 
			
		||||
  ["О"] = "о",
 | 
			
		||||
  ["П"] = "п",
 | 
			
		||||
  ["Р"] = "р",
 | 
			
		||||
  ["С"] = "с",
 | 
			
		||||
  ["Т"] = "т",
 | 
			
		||||
  ["У"] = "у",
 | 
			
		||||
  ["Ф"] = "ф",
 | 
			
		||||
  ["Х"] = "х",
 | 
			
		||||
  ["Ц"] = "ц",
 | 
			
		||||
  ["Ч"] = "ч",
 | 
			
		||||
  ["Ш"] = "ш",
 | 
			
		||||
  ["Щ"] = "щ",
 | 
			
		||||
  ["Ъ"] = "ъ",
 | 
			
		||||
  ["Ы"] = "ы",
 | 
			
		||||
  ["Ь"] = "ь",
 | 
			
		||||
  ["Э"] = "э",
 | 
			
		||||
  ["Ю"] = "ю",
 | 
			
		||||
  ["Я"] = "я",
 | 
			
		||||
  ["Ё"] = "ё"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
--utf8 char pattern
 | 
			
		||||
local utf8_char="[\1-\127\192-\223][\128-\191]*"
 | 
			
		||||
 | 
			
		||||
local cyr_chars={'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'}
 | 
			
		||||
 | 
			
		||||
-- символы, которые возможно вводить для поиска
 | 
			
		||||
local chars={}
 | 
			
		||||
for i=string.byte('a'),string.byte('z') do
 | 
			
		||||
  table.insert(chars,i)
 | 
			
		||||
end
 | 
			
		||||
for i=string.byte('A'),string.byte('Z') do
 | 
			
		||||
  table.insert(chars,i)
 | 
			
		||||
end
 | 
			
		||||
for i=string.byte('0'),string.byte('9') do
 | 
			
		||||
  table.insert(chars,i)
 | 
			
		||||
end
 | 
			
		||||
for _,v in ipairs({',','^','$','(',')','%','.','[',']','*','+','-','?','`',"'",";"}) do
 | 
			
		||||
  table.insert(chars,string.byte(v))
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local keybinder = { 
 | 
			
		||||
  remove = function(action)
 | 
			
		||||
    for i,_ in ipairs(keybinds[action]) do
 | 
			
		||||
      mp.remove_key_binding(action..tostring(i))
 | 
			
		||||
    end
 | 
			
		||||
  end,
 | 
			
		||||
  add = function(action, func, repeatable)
 | 
			
		||||
    for i,key in ipairs(keybinds[action]) do
 | 
			
		||||
      assert(type(func)=="function", "not a function")
 | 
			
		||||
      if repeatable then
 | 
			
		||||
        mp.add_forced_key_binding(key, action..tostring(i), func, "repeatable")
 | 
			
		||||
      else
 | 
			
		||||
        mp.add_forced_key_binding(key, action..tostring(i), func)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local fader = {
 | 
			
		||||
  saved_brtns,
 | 
			
		||||
  on = function(self)
 | 
			
		||||
    if fade and not self.saved_brtns then
 | 
			
		||||
        self.saved_brtns = mp.get_property("brightness")
 | 
			
		||||
        mp.set_property("brightness", plsbrightness)
 | 
			
		||||
    end
 | 
			
		||||
  end,
 | 
			
		||||
  off = function(self)
 | 
			
		||||
    if fade and self.saved_brtns then
 | 
			
		||||
      mp.set_property("brightness", self.saved_brtns)
 | 
			
		||||
      self.saved_brtns=nil
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local playlister = {
 | 
			
		||||
-- pls — список элементов плейлиста
 | 
			
		||||
  pls,
 | 
			
		||||
-- plsfiltered — список индексов выбранных фильтром элементов плейлиста
 | 
			
		||||
  plsfiltered,
 | 
			
		||||
  plspos,
 | 
			
		||||
  wndstart,
 | 
			
		||||
  wndend,
 | 
			
		||||
  cursor,
 | 
			
		||||
 | 
			
		||||
  init = function(self)
 | 
			
		||||
    if not self.pls then
 | 
			
		||||
      self.pls = mp.get_property_native("playlist")
 | 
			
		||||
    end
 | 
			
		||||
    mp.commandv("stop")
 | 
			
		||||
    --need to mark first entry non-current (mpv bug?)
 | 
			
		||||
    if self.pls[1] then
 | 
			
		||||
      self.pls[1].current = false
 | 
			
		||||
    end
 | 
			
		||||
    if favorites and #favorites>0 then
 | 
			
		||||
      self:sortfavs()
 | 
			
		||||
    end
 | 
			
		||||
    pattern = ""
 | 
			
		||||
    self.plsfiltered = tablekeys(self.pls)
 | 
			
		||||
  end,
 | 
			
		||||
 | 
			
		||||
  show = function(self)
 | 
			
		||||
    local i
 | 
			
		||||
    local newpos
 | 
			
		||||
    local msg
 | 
			
		||||
    --media-title
 | 
			
		||||
    --playlist t[2].title
 | 
			
		||||
 | 
			
		||||
    if not self.plsfiltered then
 | 
			
		||||
      return
 | 
			
		||||
    end
 | 
			
		||||
    if not self.plspos then
 | 
			
		||||
      self.plspos=mp.get_property_native("playlist-pos-1")
 | 
			
		||||
      --plscount=mp.get_property_native("playlist-count")
 | 
			
		||||
    end
 | 
			
		||||
    if not self.wndstart or not self.cursor then
 | 
			
		||||
      self.wndstart=1
 | 
			
		||||
      self.cursor=0
 | 
			
		||||
    end
 | 
			
		||||
  
 | 
			
		||||
    msg=""
 | 
			
		||||
    i = self.wndstart
 | 
			
		||||
    local prefix
 | 
			
		||||
    while self.plsfiltered[i] and i<=self.wndstart+window-1 do
 | 
			
		||||
      if self.pls[self.plsfiltered[i]].current then
 | 
			
		||||
        prefix="*"
 | 
			
		||||
      elseif i==self.wndstart+self.cursor then
 | 
			
		||||
        prefix=">"
 | 
			
		||||
      else
 | 
			
		||||
        prefix="  "
 | 
			
		||||
      end
 | 
			
		||||
      msg = msg..prefix..(self.pls[self.plsfiltered[i]].title or "").."\n"
 | 
			
		||||
      i=i+1
 | 
			
		||||
    end
 | 
			
		||||
    if self.wndstart>1 then
 | 
			
		||||
      msg = "...\n"..msg
 | 
			
		||||
    else
 | 
			
		||||
      msg = " \n"..msg
 | 
			
		||||
    end
 | 
			
		||||
    if self.wndstart+window-1<#self.plsfiltered then
 | 
			
		||||
      msg = msg.."..."
 | 
			
		||||
    end
 | 
			
		||||
    msg="/"..pattern.."\n"..msg
 | 
			
		||||
    mp.osd_message(msg, osd_time)
 | 
			
		||||
  end,
 | 
			
		||||
 | 
			
		||||
  sortfavs = function(self)
 | 
			
		||||
    --favorites bubbles to the top
 | 
			
		||||
    local favs={}
 | 
			
		||||
    local nonfavs={}
 | 
			
		||||
    for _,v in ipairs(self.pls) do
 | 
			
		||||
      if in_array(favorites,v.title) then
 | 
			
		||||
        favs[#favs+1] = v
 | 
			
		||||
      else
 | 
			
		||||
        nonfavs[#nonfavs+1] = v
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    for i=1,#nonfavs do
 | 
			
		||||
      favs[#favs+1] = nonfavs[i]
 | 
			
		||||
    end
 | 
			
		||||
    self.pls = favs
 | 
			
		||||
  end,
 | 
			
		||||
 | 
			
		||||
  filter = function(self)
 | 
			
		||||
    self.plsfiltered={}
 | 
			
		||||
    for i,v in ipairs(self.pls) do
 | 
			
		||||
      if string.match(mylower(v.title),'.*'..prepat(pattern)..'.*') then
 | 
			
		||||
        table.insert(self.plsfiltered,i)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    self.wndstart=1
 | 
			
		||||
    self.cursor=0
 | 
			
		||||
  end,
 | 
			
		||||
 | 
			
		||||
  down = function(self)
 | 
			
		||||
    if self.cursor >= #self.plsfiltered-1 then return end
 | 
			
		||||
    if self.cursor<window-1 then
 | 
			
		||||
      self.cursor=self.cursor+1
 | 
			
		||||
    else
 | 
			
		||||
      if self.wndstart<#self.plsfiltered-window+1 then
 | 
			
		||||
        self.wndstart=self.wndstart+1
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    self.show(self)
 | 
			
		||||
  end,
 | 
			
		||||
  up = function(self)
 | 
			
		||||
    if self.cursor>0 then
 | 
			
		||||
      self.cursor=self.cursor-1
 | 
			
		||||
      self.show(self)
 | 
			
		||||
    else
 | 
			
		||||
      if self.wndstart>1 then
 | 
			
		||||
        self.wndstart=self.wndstart-1
 | 
			
		||||
        self.show(self)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end,
 | 
			
		||||
 | 
			
		||||
  play = function(self)
 | 
			
		||||
    mp.commandv("loadfile",self.pls[self.plsfiltered[self.wndstart+self.cursor]].filename)
 | 
			
		||||
    if self.plspos then
 | 
			
		||||
      self.pls[self.plspos].current=false
 | 
			
		||||
    end
 | 
			
		||||
    self.plspos=self.plsfiltered[self.wndstart+self.cursor]
 | 
			
		||||
    self.pls[self.plspos].current=true
 | 
			
		||||
  end
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function add_bindings()
 | 
			
		||||
  keybinder.add("plsup", up, true)
 | 
			
		||||
  keybinder.add("plsdown", down, true)
 | 
			
		||||
  for i,v in ipairs(chars) do
 | 
			
		||||
    c=string.char(v)
 | 
			
		||||
    mp.add_forced_key_binding(c, 'search'..v, typing(c),"repeatable")
 | 
			
		||||
  end
 | 
			
		||||
  mp.add_forced_key_binding('SPACE', 'search32', typing(' '),"repeatable")
 | 
			
		||||
    
 | 
			
		||||
--[[    mp.add_key_binding('а', 'search1000', typing('а'),"repeatable")
 | 
			
		||||
    mp.add_key_binding('с', 'search1001', typing('с'),"repeatable")]]
 | 
			
		||||
 | 
			
		||||
  mp.add_forced_key_binding('BS', 'searchbs', backspace,"repeatable")
 | 
			
		||||
  keybinder.add("plsenter", play)
 | 
			
		||||
  for i,v in ipairs(cyr_chars) do
 | 
			
		||||
    mp.add_forced_key_binding(v, 'search'..i+1000, typing(v),"repeatable")
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function remove_bindings()
 | 
			
		||||
  keybinder.remove('plsup')
 | 
			
		||||
  keybinder.remove('plsdown')
 | 
			
		||||
  keybinder.remove('plsenter')
 | 
			
		||||
  for i,v in ipairs(chars) do
 | 
			
		||||
    c=string.char(v)
 | 
			
		||||
    mp.remove_key_binding('search'..v)
 | 
			
		||||
  end
 | 
			
		||||
  mp.remove_key_binding('search32')
 | 
			
		||||
  mp.remove_key_binding('searchbs')
 | 
			
		||||
  for i,v in ipairs(cyr_chars) do
 | 
			
		||||
    mp.remove_key_binding('search'..i+1000)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function activate()
 | 
			
		||||
  if is_active then
 | 
			
		||||
    shutdown()
 | 
			
		||||
    return
 | 
			
		||||
  else
 | 
			
		||||
    is_active=true
 | 
			
		||||
    fader:on()
 | 
			
		||||
    playlister:show()
 | 
			
		||||
    add_bindings()
 | 
			
		||||
    if not timer then
 | 
			
		||||
      timer=mp.add_periodic_timer(osd_time, shutdown)
 | 
			
		||||
      timer.oneshot=true
 | 
			
		||||
    else
 | 
			
		||||
      resumetimer()
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function tablekeys(t)
 | 
			
		||||
  local result={}
 | 
			
		||||
  for i,v in ipairs(t) do
 | 
			
		||||
    table.insert(result,i)
 | 
			
		||||
  end
 | 
			
		||||
  return result
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function in_array(array, value)
 | 
			
		||||
  for _,v in ipairs(array) do
 | 
			
		||||
    if v==value then
 | 
			
		||||
      return true
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  return false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mylower(s)
 | 
			
		||||
  local res,n =  string.gsub(s,utf8_char,function (c) 
 | 
			
		||||
                                    return utf8_uc_lc[c]
 | 
			
		||||
                                 end)
 | 
			
		||||
  return res
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function myupper(s)
 | 
			
		||||
  local res,n =  string.gsub(s,utf8_char,function (c) 
 | 
			
		||||
                                    return utf8_lc_uc[c]
 | 
			
		||||
                                 end)
 | 
			
		||||
  return res
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function prepat(s)
 | 
			
		||||
--prepare nocase and magic chars
 | 
			
		||||
  s = string.gsub(s, "[%^%$%(%)%%%.%[%]%*%+%-%?]",function (c)
 | 
			
		||||
        return '%'..c
 | 
			
		||||
      end)
 | 
			
		||||
--[[  s = string.gsub(s, utf8_char, function (c)
 | 
			
		||||
        return string.format("[%s%s]", utf8_uc_lc[c] or c, utf8_lc_uc[c] or c)
 | 
			
		||||
      end)]]
 | 
			
		||||
  return s
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function resumetimer()
 | 
			
		||||
  timer:kill()
 | 
			
		||||
  timer:resume()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function typing(char)
 | 
			
		||||
  return function()
 | 
			
		||||
           local c=string.lower(char)
 | 
			
		||||
           pattern = pattern..c
 | 
			
		||||
           playlister:filter()
 | 
			
		||||
           playlister:show()
 | 
			
		||||
           resumetimer()
 | 
			
		||||
         end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function backspace()
 | 
			
		||||
  if string.len(pattern)>0 then
 | 
			
		||||
--    pattern = string.sub(pattern,1,-2)
 | 
			
		||||
-- for unicode
 | 
			
		||||
    pattern = string.match(pattern,"(.*)"..utf8_char.."$")
 | 
			
		||||
    playlister:filter()
 | 
			
		||||
    playlister:show()
 | 
			
		||||
    resumetimer()
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function play()
 | 
			
		||||
--  mp.commandv("playlist-move", wndstart+cursor, 1)
 | 
			
		||||
--  mp.commandv("playlist-clear")
 | 
			
		||||
--  mp.commandv("playlist-next")
 | 
			
		||||
  fader:off()
 | 
			
		||||
  playlister:play()
 | 
			
		||||
  playlister:show()
 | 
			
		||||
  resumetimer()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function shutdown()
 | 
			
		||||
  fader:off()
 | 
			
		||||
  remove_bindings()
 | 
			
		||||
  is_active=false
 | 
			
		||||
  mp.osd_message("", 1)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function down()
 | 
			
		||||
  fader:on()
 | 
			
		||||
  playlister:down()
 | 
			
		||||
  resumetimer()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function up()
 | 
			
		||||
  fader:on()
 | 
			
		||||
  playlister:up()
 | 
			
		||||
  resumetimer()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function on_start_file()
 | 
			
		||||
  if is_playlist_loaded then
 | 
			
		||||
    playlister:init()
 | 
			
		||||
    mp.unregister_event(on_start_file)
 | 
			
		||||
    activate()
 | 
			
		||||
  else
 | 
			
		||||
    is_playlist_loaded = true
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if mp.get_opt("iptv") then
 | 
			
		||||
  mp.set_property_bool("idle", true)
 | 
			
		||||
  mp.set_property_bool("force-window", true)
 | 
			
		||||
  mp.register_event("start-file", on_start_file)
 | 
			
		||||
  keybinder.add("activate", activate)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								.config/newsboat/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.config/newsboat/config
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
auto-reload yes
 | 
			
		||||
refresh-on-startup yes
 | 
			
		||||
reload-time 3600
 | 
			
		||||
notify-program "/home/yorune/.local/bin/notify-program"
 | 
			
		||||
notify-always yes
 | 
			
		||||
 | 
			
		||||
unbind-key o
 | 
			
		||||
bind-key o open-in-browser
 | 
			
		||||
 | 
			
		||||
macro , open-in-browser
 | 
			
		||||
macro p set browser "mpv --ytdl-format='bestvideo[ext=mp4][height<=?1080]+bestaudio[ext=m4a]' --no-resume-playback" ; open-in-browser ; set browser "/home/yorune/.local/bin/browser-x -new-tab %u"
 | 
			
		||||
 | 
			
		||||
unbind-key n
 | 
			
		||||
unbind-key p
 | 
			
		||||
bind-key n next
 | 
			
		||||
bind-key p prev
 | 
			
		||||
 | 
			
		||||
color listnormal cyan default
 | 
			
		||||
color listfocus black yellow standout bold
 | 
			
		||||
color listnormal_unread blue default
 | 
			
		||||
color listfocus_unread yellow default bold
 | 
			
		||||
color info red black bold
 | 
			
		||||
color article white default bold
 | 
			
		||||
 | 
			
		||||
browser "/home/yorune/.local/bin/browser-x -new-tab %u"
 | 
			
		||||
player mpv
 | 
			
		||||
							
								
								
									
										70
									
								
								.config/newsboat/urls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								.config/newsboat/urls
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
=====================NEWS====================================
 | 
			
		||||
https://wtf.roflcopter.fr/rss-bridge/?action=display&bridge=Facebook&context=User&u=infoKONINpl&media_type=all&limit=-1&format=Mrss "~infoKONIN - Facebook"
 | 
			
		||||
shttps://wtf.roflcopter.fr/rss-bridge/?action=display&bridge=Facebook&context=User&u=gminakleczew&media_type=all&limit=-1&format=Mrss "~Gmina Kleczew - Facebook"
 | 
			
		||||
https://wtf.roflcopter.fr/rss-bridge/?action=display&bridge=Facebook&context=User&u=portalLM&media_type=all&limit=-1&format=Mrss "~Portal lm.pl - Facebook"
 | 
			
		||||
https://nitter.net/MZ_GOV_PL/rss "~MZ_GOV_PL - Twitter"
 | 
			
		||||
http://www.epoznan.pl/rss.php "~Epoznan - Website"
 | 
			
		||||
http://rss.slashdot.org/Slashdot/slashdotMain "SlashDot"
 | 
			
		||||
https://sekurak.pl/feed/ "~Sekurak"
 | 
			
		||||
https://feeds.feedburner.com/niebezpiecznik/ "~Niebezpiecznik"
 | 
			
		||||
https://www.cybsecurity.org/feed/podcast/ "~CybSecurity"
 | 
			
		||||
============================================================
 | 
			
		||||
https://bugs.gentoo.org/buglist.cgi?bug_status=UNCONFIRMED&chfieldfrom=24h&ctype=atom&title=NEW&list_id=4468306&order=changeddate%20DESC%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&query_format=advanced Gentoo
 | 
			
		||||
https://bugs.gentoo.org/buglist.cgi?component=Package%20issues&product=GURU&query_format=advanced&resolution=---&title=Bug%20List&ctype=atom GURU-BUGS
 | 
			
		||||
https://bugs.gentoo.org/buglist.cgi?component=Trusted%20Contributor%20ascension&product=GURU&query_format=advanced&resolution=---&title=Bug%20List&ctype=atom
 | 
			
		||||
https://www.reddit.com/r/gentoo/new.rss "~Gentoo - Reddit"
 | 
			
		||||
============================================================
 | 
			
		||||
http://rss.uptimerobot.com/u674346-753d02ab763f3725330347d4419a7569 "~UpTimeRoboot"
 | 
			
		||||
=====================ANIME===================================
 | 
			
		||||
https://mirror.animetosho.org/feed/rss2?only_tor=1&q=%5BHorribleSubs%5D%20Sword%20Art%20Online%20720p&filter%5B0%5D%5Bt%5D=nyaa_class&filter%5B0%5D%5Bv%5D=trusted "~Sword Art Online"
 | 
			
		||||
=====================YOUTUBE=================================
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCzuvRWjh7k1SZm1RvqvIx4w "~Krzysztof Gonciarz"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC3QOjSZmJuYgb98BAzKfzig "~Zapytaj Beczkę"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "~Luke Smith"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC2qQkGwReBfucb6yWr7idRA "~Asia Ladowska"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC5ZSM0kOGhtLdtZiqM2noWw "~StudyWithInSpo"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC84AaEtr7hlaYYwXDSKAbNg "~Ignacy z Japonii"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC8JbbaZ_jgdsoUqrZ2bXtQQ "~Lekko Stronniczy"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC8q23MpiyWjv9vd4r85oj1A "~Daniel Rakowiecki"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC9Vi25H6lQvPqcepJCJ3sEg "~Emma"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCAD-xOOaUI6N7Uq9laOVbcw "~Rene Rene"
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCAEQl0BbYrPyTnsWVBJuIqQ
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCaG-Uk3PSpHexeUJaJC_TPw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCAkBZtIl-a0fBLcY7JCPSQw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCB-4hoTjsE3VIFI862C5SZA
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCE5Au4LfcBHxTQR_yLbncrQ
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCe6nK69Yc1zna7QSJEfA9pw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCEbYhDd6c6vngsF5PQpFVWg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCELsE3w85wy7hXFmU2eRn_w
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCfegHHvKywKjJ69Ymcb6j0w
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCFGud6qsbaAjuP6WaXAJj3Q
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCH2OHdQF5c2r2M_l_vPiXRA
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCIDf8pzX2oZmjXtqMwHn0xg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCIj6yjWVKPKO5zNLBjQ8Beg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCJ24N4O0bP7LGLBDvye7oCA
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCJkmbV_cndEe6Af8b5qVyoQ
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCJLLl6AraX1POemgLfhirwg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCjS2aGCvsnhExcWRAI8T4Pw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCMsi03EhTUsUs2OtPus6XDQ
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCMTkC2dA25yFsmtaevpYWfg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCnOo8dtBgwJbdwl4HxqPHwg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCO8DQrSp5yEP937qNqTooOw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCoJjEsNkU-Md3xB6BursT0Q
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCoXxgqIOTa8qCM7Hd7RiURw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCPc_saLjikyw-1sscFsHIsA
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCPKgIhTC3BdkAwMw6s-GEug
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCRxAgfYexGLlu1WHGIMUDqw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCs02jgjMVeirmDHaxAXApkg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCsnGwSIHyoYN0kiINAGUKxg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCv9wKjBogC5AVG54s_Imn0A
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCvbEYH_h8k-hHq2oS-7zIdQ
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCVbn813ctsoChuTT4LuLqrA
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCVVt5tbZEzfQSIsHUh3b_vg
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCw3T7SvPYDHCkdMhC0NcKsw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCWcz2SQMCcijkVta0hSERIA
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCWFKCr40YwOZQx8FHU_ZqqQ
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCXRJfVWEjv9qxooSbOkFmkw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCZgyxIrQnTDLwwEr9VSkoPA
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCZKqIdmPtIU6DOTmWxzudKw
 | 
			
		||||
=============================================================
 | 
			
		||||
							
								
								
									
										567
									
								
								.config/ranger/rc.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										567
									
								
								.config/ranger/rc.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,567 @@
 | 
			
		||||
#set viewmode miller
 | 
			
		||||
set viewmode multipane
 | 
			
		||||
set column_ratios 1,3,4
 | 
			
		||||
set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
 | 
			
		||||
set show_hidden false
 | 
			
		||||
 | 
			
		||||
# Ask for a confirmation when running the "delete" command?
 | 
			
		||||
# Valid values are "always", "never", "multiple" (default)
 | 
			
		||||
# With "multiple", ranger will ask only if you delete multiple files at once.
 | 
			
		||||
#set confirm_on_delete multiple
 | 
			
		||||
set confirm_on_delete never
 | 
			
		||||
set use_preview_script true
 | 
			
		||||
set automatically_count_files true
 | 
			
		||||
set open_all_images true
 | 
			
		||||
set vcs_aware false
 | 
			
		||||
set vcs_backend_git enabled
 | 
			
		||||
set vcs_backend_hg disabled
 | 
			
		||||
set vcs_backend_bzr disabled
 | 
			
		||||
set vcs_backend_svn disabled
 | 
			
		||||
set preview_images true
 | 
			
		||||
set preview_images_method urxvt
 | 
			
		||||
set w3m_delay 0.02
 | 
			
		||||
set iterm2_font_width 8
 | 
			
		||||
set iterm2_font_height 11
 | 
			
		||||
set unicode_ellipsis false
 | 
			
		||||
set bidi_support false
 | 
			
		||||
set show_hidden_bookmarks true
 | 
			
		||||
set colorscheme default
 | 
			
		||||
set preview_files true
 | 
			
		||||
set preview_directories true
 | 
			
		||||
set collapse_preview true
 | 
			
		||||
set save_console_history true
 | 
			
		||||
set status_bar_on_top false
 | 
			
		||||
set draw_progress_bar_in_status_bar true
 | 
			
		||||
set draw_borders true
 | 
			
		||||
set respect draw_borders
 | 
			
		||||
set dirname_in_tabs false
 | 
			
		||||
set mouse_enabled true
 | 
			
		||||
set display_size_in_main_column true
 | 
			
		||||
set display_size_in_status_bar true
 | 
			
		||||
 | 
			
		||||
# Display the free disk space in the status bar?
 | 
			
		||||
set display_free_space_in_status_bar true
 | 
			
		||||
 | 
			
		||||
# Display files tags in all columns or only in main column?
 | 
			
		||||
set display_tags_in_all_columns true
 | 
			
		||||
 | 
			
		||||
# Set a title for the window?
 | 
			
		||||
set update_title false
 | 
			
		||||
 | 
			
		||||
# Set the title to "ranger" in the tmux program?
 | 
			
		||||
set update_tmux_title true
 | 
			
		||||
 | 
			
		||||
# Shorten the title if it gets long?  The number defines how many
 | 
			
		||||
# directories are displayed at once, 0 turns off this feature.
 | 
			
		||||
set shorten_title 3
 | 
			
		||||
 | 
			
		||||
# Show hostname in titlebar?
 | 
			
		||||
set hostname_in_titlebar false
 | 
			
		||||
 | 
			
		||||
# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
 | 
			
		||||
set tilde_in_titlebar true
 | 
			
		||||
 | 
			
		||||
# How many directory-changes or console-commands should be kept in history?
 | 
			
		||||
set max_history_size 20
 | 
			
		||||
set max_console_history_size 50
 | 
			
		||||
 | 
			
		||||
# Try to keep so much space between the top/bottom border when scrolling:
 | 
			
		||||
set scroll_offset 10
 | 
			
		||||
 | 
			
		||||
# Flush the input after each key hit?  (Noticeable when ranger lags)
 | 
			
		||||
set flushinput true
 | 
			
		||||
 | 
			
		||||
# Padding on the right when there's no preview?
 | 
			
		||||
# This allows you to click into the space to run the file.
 | 
			
		||||
set padding_right true
 | 
			
		||||
 | 
			
		||||
# Save bookmarks (used with mX and `X) instantly?
 | 
			
		||||
# This helps to synchronize bookmarks between multiple ranger
 | 
			
		||||
# instances but leads to *slight* performance loss.
 | 
			
		||||
# When false, bookmarks are saved when ranger is exited.
 | 
			
		||||
set autosave_bookmarks true
 | 
			
		||||
 | 
			
		||||
# Save the "`" bookmark to disk.  This can be used to switch to the last
 | 
			
		||||
# directory by typing "``".
 | 
			
		||||
set save_backtick_bookmark true
 | 
			
		||||
 | 
			
		||||
# You can display the "real" cumulative size of directories by using the
 | 
			
		||||
# command :get_cumulative_size or typing "dc".  The size is expensive to
 | 
			
		||||
# calculate and will not be updated automatically.  You can choose
 | 
			
		||||
# to update it automatically though by turning on this option:
 | 
			
		||||
set autoupdate_cumulative_size false
 | 
			
		||||
 | 
			
		||||
# Turning this on makes sense for screen readers:
 | 
			
		||||
set show_cursor false
 | 
			
		||||
 | 
			
		||||
# One of: size, natural, basename, atime, ctime, mtime, type, random
 | 
			
		||||
set sort natural
 | 
			
		||||
 | 
			
		||||
# Additional sorting options
 | 
			
		||||
set sort_reverse false
 | 
			
		||||
set sort_case_insensitive true
 | 
			
		||||
set sort_directories_first true
 | 
			
		||||
set sort_unicode false
 | 
			
		||||
 | 
			
		||||
# Enable this if key combinations with the Alt Key don't work for you.
 | 
			
		||||
# (Especially on xterm)
 | 
			
		||||
set xterm_alt_key false
 | 
			
		||||
 | 
			
		||||
# Whether to include bookmarks in cd command
 | 
			
		||||
set cd_bookmarks true
 | 
			
		||||
 | 
			
		||||
# Changes case sensitivity for the cd command tab completion
 | 
			
		||||
set cd_tab_case sensitive
 | 
			
		||||
 | 
			
		||||
# Use fuzzy tab completion with the "cd" command. For example,
 | 
			
		||||
# ":cd /u/lo/b<tab>" expands to ":cd /usr/local/bin".
 | 
			
		||||
set cd_tab_fuzzy false
 | 
			
		||||
set preview_max_size 0
 | 
			
		||||
set hint_collapse_threshold 10
 | 
			
		||||
set show_selection_in_titlebar true
 | 
			
		||||
set idle_delay 2000
 | 
			
		||||
set metadata_deep_search false
 | 
			
		||||
set clear_filters_on_dir_change false
 | 
			
		||||
set line_numbers false
 | 
			
		||||
set relative_current_zero false
 | 
			
		||||
set one_indexed false
 | 
			
		||||
set save_tabs_on_exit false
 | 
			
		||||
set wrap_scroll false
 | 
			
		||||
set global_inode_type_filter
 | 
			
		||||
set freeze_files false
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == My settings
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
setlocal path=~/Screenshots sort mtime
 | 
			
		||||
setlocal path=~/Screenshots sort_reverse False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Local Options
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# You can set local options that only affect a single directory.
 | 
			
		||||
 | 
			
		||||
# Examples:
 | 
			
		||||
# setlocal path=~/downloads sort mtime
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Command Aliases in the Console
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
alias e     edit
 | 
			
		||||
alias q     quit
 | 
			
		||||
alias q!    quit!
 | 
			
		||||
alias qa    quitall
 | 
			
		||||
alias qa!   quitall!
 | 
			
		||||
alias qall  quitall
 | 
			
		||||
alias qall! quitall!
 | 
			
		||||
alias setl  setlocal
 | 
			
		||||
 | 
			
		||||
alias filter     scout -prts
 | 
			
		||||
alias find       scout -aets
 | 
			
		||||
alias mark       scout -mr
 | 
			
		||||
alias unmark     scout -Mr
 | 
			
		||||
alias search     scout -rs
 | 
			
		||||
alias search_inc scout -rts
 | 
			
		||||
alias travel     scout -aefklst
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Define keys for the browser
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
map bg shell set-wallpaper %f
 | 
			
		||||
map bc shell wall -i %f
 | 
			
		||||
map bh cd ~
 | 
			
		||||
 | 
			
		||||
map     Q quitall
 | 
			
		||||
map     q quit
 | 
			
		||||
copymap q ZZ ZQ
 | 
			
		||||
 | 
			
		||||
map R     reload_cwd
 | 
			
		||||
map F     set freeze_files!
 | 
			
		||||
map <C-r> reset
 | 
			
		||||
map <C-l> redraw_window
 | 
			
		||||
map <C-c> abort
 | 
			
		||||
map <esc> change_mode normal
 | 
			
		||||
map ~ set viewmode!
 | 
			
		||||
 | 
			
		||||
map i display_file
 | 
			
		||||
map ? help
 | 
			
		||||
map W display_log
 | 
			
		||||
map w taskview_open
 | 
			
		||||
map S shell $SHELL
 | 
			
		||||
 | 
			
		||||
map :  console
 | 
			
		||||
map ;  console
 | 
			
		||||
map !  console shell%space
 | 
			
		||||
map @  console -p6 shell  %%s
 | 
			
		||||
map #  console shell -p%space
 | 
			
		||||
map s  console shell%space
 | 
			
		||||
map r  chain draw_possible_programs; console open_with%%space
 | 
			
		||||
map f  console find%space
 | 
			
		||||
map cd console cd%space
 | 
			
		||||
 | 
			
		||||
map <C-p> chain console; eval fm.ui.console.history_move(-1)
 | 
			
		||||
 | 
			
		||||
# Change the line mode
 | 
			
		||||
map Mf linemode filename
 | 
			
		||||
map Mi linemode fileinfo
 | 
			
		||||
map Mm linemode mtime
 | 
			
		||||
map Mp linemode permissions
 | 
			
		||||
map Ms linemode sizemtime
 | 
			
		||||
map Mt linemode metatitle
 | 
			
		||||
 | 
			
		||||
# Tagging / Marking
 | 
			
		||||
map t       tag_toggle
 | 
			
		||||
map ut      tag_remove
 | 
			
		||||
map <Space> mark_files toggle=True
 | 
			
		||||
map v       mark_files all=True toggle=True
 | 
			
		||||
map uv      mark_files all=True val=False
 | 
			
		||||
map V       toggle_visual_mode
 | 
			
		||||
map uV      toggle_visual_mode reverse=True
 | 
			
		||||
 | 
			
		||||
# For the nostalgics: Midnight Commander bindings
 | 
			
		||||
map <F1> help
 | 
			
		||||
map <F2> rename_append
 | 
			
		||||
map <F3> display_file
 | 
			
		||||
map <F4> edit
 | 
			
		||||
map <F5> copy
 | 
			
		||||
map <F6> cut
 | 
			
		||||
map <F7> console mkdir%space
 | 
			
		||||
map <F8> console delete
 | 
			
		||||
map <F10> exit
 | 
			
		||||
 | 
			
		||||
# In case you work on a keyboard with dvorak layout
 | 
			
		||||
map <UP>       move up=1
 | 
			
		||||
map <DOWN>     move down=1
 | 
			
		||||
map <LEFT>     move left=1
 | 
			
		||||
map <RIGHT>    move right=1
 | 
			
		||||
map <HOME>     move to=0
 | 
			
		||||
map <END>      move to=-1
 | 
			
		||||
map <PAGEDOWN> move down=1   pages=True
 | 
			
		||||
map <PAGEUP>   move up=1     pages=True
 | 
			
		||||
map <CR>       move right=1
 | 
			
		||||
#map <DELETE>   console delete
 | 
			
		||||
map <INSERT>   console touch%space
 | 
			
		||||
 | 
			
		||||
# VIM-like
 | 
			
		||||
copymap <UP>       k
 | 
			
		||||
copymap <DOWN>     j
 | 
			
		||||
copymap <LEFT>     h
 | 
			
		||||
copymap <RIGHT>    l
 | 
			
		||||
copymap <HOME>     gg
 | 
			
		||||
copymap <END>      G
 | 
			
		||||
copymap <PAGEDOWN> <C-F>
 | 
			
		||||
copymap <PAGEUP>   <C-B>
 | 
			
		||||
 | 
			
		||||
map J  move down=0.5  pages=True
 | 
			
		||||
map K  move up=0.5    pages=True
 | 
			
		||||
copymap J <C-D>
 | 
			
		||||
copymap K <C-U>
 | 
			
		||||
 | 
			
		||||
# Jumping around
 | 
			
		||||
map H     history_go -1
 | 
			
		||||
map L     history_go 1
 | 
			
		||||
map ]     move_parent 1
 | 
			
		||||
map [     move_parent -1
 | 
			
		||||
map }     traverse
 | 
			
		||||
map {     traverse_backwards
 | 
			
		||||
map )     jump_non
 | 
			
		||||
 | 
			
		||||
#DEFAULT MOVEMENT
 | 
			
		||||
map ge cd /etc
 | 
			
		||||
map gh cd ~
 | 
			
		||||
map gu cd /usr
 | 
			
		||||
#map gl cd -r .
 | 
			
		||||
map gL cd -r %f
 | 
			
		||||
#map gv cd /var
 | 
			
		||||
map gM cd /mnt
 | 
			
		||||
map gr cd /
 | 
			
		||||
map gR eval fm.cd(ranger.RANGERDIR)
 | 
			
		||||
map g? cd /usr/share/doc/ranger
 | 
			
		||||
 | 
			
		||||
# External Programs
 | 
			
		||||
map E  edit
 | 
			
		||||
map du shell -p du --max-depth=1 -h --apparent-size
 | 
			
		||||
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh
 | 
			
		||||
map yp yank path
 | 
			
		||||
map yd yank dir
 | 
			
		||||
map yn yank name
 | 
			
		||||
map y. yank name_without_extension
 | 
			
		||||
 | 
			
		||||
# Filesystem Operations
 | 
			
		||||
map =  chmod
 | 
			
		||||
 | 
			
		||||
map cw console rename%space
 | 
			
		||||
map a  rename_append
 | 
			
		||||
map A  eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"))
 | 
			
		||||
map I  eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)
 | 
			
		||||
 | 
			
		||||
map pp paste
 | 
			
		||||
map po paste overwrite=True
 | 
			
		||||
map pP paste append=True
 | 
			
		||||
map pO paste overwrite=True append=True
 | 
			
		||||
map pl paste_symlink relative=False
 | 
			
		||||
map pL paste_symlink relative=True
 | 
			
		||||
map phl paste_hardlink
 | 
			
		||||
map pht paste_hardlinked_subtree
 | 
			
		||||
 | 
			
		||||
map dD console delete
 | 
			
		||||
 | 
			
		||||
map dd cut
 | 
			
		||||
map ud uncut
 | 
			
		||||
map da cut mode=add
 | 
			
		||||
map dr cut mode=remove
 | 
			
		||||
map dt cut mode=toggle
 | 
			
		||||
 | 
			
		||||
map yy copy
 | 
			
		||||
map uy uncut
 | 
			
		||||
map ya copy mode=add
 | 
			
		||||
map yr copy mode=remove
 | 
			
		||||
map yt copy mode=toggle
 | 
			
		||||
 | 
			
		||||
# Temporary workarounds
 | 
			
		||||
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier)
 | 
			
		||||
map dG  eval fm.cut(dirarg=dict(to=-1), narg=quantifier)
 | 
			
		||||
map dj  eval fm.cut(dirarg=dict(down=1), narg=quantifier)
 | 
			
		||||
map dk  eval fm.cut(dirarg=dict(up=1), narg=quantifier)
 | 
			
		||||
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier)
 | 
			
		||||
map yG  eval fm.copy(dirarg=dict(to=-1), narg=quantifier)
 | 
			
		||||
map yj  eval fm.copy(dirarg=dict(down=1), narg=quantifier)
 | 
			
		||||
map yk  eval fm.copy(dirarg=dict(up=1), narg=quantifier)
 | 
			
		||||
 | 
			
		||||
# Searching
 | 
			
		||||
map /  console search%space
 | 
			
		||||
map n  search_next
 | 
			
		||||
map N  search_next forward=False
 | 
			
		||||
map ct search_next order=tag
 | 
			
		||||
map cs search_next order=size
 | 
			
		||||
map ci search_next order=mimetype
 | 
			
		||||
map cc search_next order=ctime
 | 
			
		||||
map cm search_next order=mtime
 | 
			
		||||
map ca search_next order=atime
 | 
			
		||||
 | 
			
		||||
# Tabs
 | 
			
		||||
map <C-n>     tab_new
 | 
			
		||||
map <C-w>     tab_close
 | 
			
		||||
map <TAB>     tab_move 1
 | 
			
		||||
map <S-TAB>   tab_move -1
 | 
			
		||||
map <A-Right> tab_move 1
 | 
			
		||||
map <A-Left>  tab_move -1
 | 
			
		||||
map uq        tab_restore
 | 
			
		||||
map <a-1>     tab_open 1
 | 
			
		||||
map <a-2>     tab_open 2
 | 
			
		||||
map <a-3>     tab_open 3
 | 
			
		||||
map <a-4>     tab_open 4
 | 
			
		||||
map <a-5>     tab_open 5
 | 
			
		||||
map <a-6>     tab_open 6
 | 
			
		||||
map <a-7>     tab_open 7
 | 
			
		||||
map <a-8>     tab_open 8
 | 
			
		||||
map <a-9>     tab_open 9
 | 
			
		||||
map <a-r>     tab_shift 1
 | 
			
		||||
map <a-l>     tab_shift -1
 | 
			
		||||
 | 
			
		||||
# Sorting
 | 
			
		||||
map or set sort_reverse!
 | 
			
		||||
map oz set sort=random
 | 
			
		||||
map os chain set sort=size;      set sort_reverse=False
 | 
			
		||||
map ob chain set sort=basename;  set sort_reverse=False
 | 
			
		||||
map on chain set sort=natural;   set sort_reverse=False
 | 
			
		||||
map om chain set sort=mtime;     set sort_reverse=False
 | 
			
		||||
map oc chain set sort=ctime;     set sort_reverse=False
 | 
			
		||||
map oa chain set sort=atime;     set sort_reverse=False
 | 
			
		||||
map ot chain set sort=type;      set sort_reverse=False
 | 
			
		||||
map oe chain set sort=extension; set sort_reverse=False
 | 
			
		||||
 | 
			
		||||
map oS chain set sort=size;      set sort_reverse=True
 | 
			
		||||
map oB chain set sort=basename;  set sort_reverse=True
 | 
			
		||||
map oN chain set sort=natural;   set sort_reverse=True
 | 
			
		||||
map oM chain set sort=mtime;     set sort_reverse=True
 | 
			
		||||
map oC chain set sort=ctime;     set sort_reverse=True
 | 
			
		||||
map oA chain set sort=atime;     set sort_reverse=True
 | 
			
		||||
map oT chain set sort=type;      set sort_reverse=True
 | 
			
		||||
map oE chain set sort=extension; set sort_reverse=True
 | 
			
		||||
 | 
			
		||||
map dc get_cumulative_size
 | 
			
		||||
 | 
			
		||||
# Settings
 | 
			
		||||
map zc    set collapse_preview!
 | 
			
		||||
map zd    set sort_directories_first!
 | 
			
		||||
map zh    set show_hidden!
 | 
			
		||||
map <C-h> set show_hidden!
 | 
			
		||||
copymap <C-h> <backspace>
 | 
			
		||||
copymap <backspace> <backspace2>
 | 
			
		||||
map zI    set flushinput!
 | 
			
		||||
map zi    set preview_images!
 | 
			
		||||
map zm    set mouse_enabled!
 | 
			
		||||
map zp    set preview_files!
 | 
			
		||||
map zP    set preview_directories!
 | 
			
		||||
map zs    set sort_case_insensitive!
 | 
			
		||||
map zu    set autoupdate_cumulative_size!
 | 
			
		||||
map zv    set use_preview_script!
 | 
			
		||||
map zf    console filter%space
 | 
			
		||||
copymap zf zz
 | 
			
		||||
 | 
			
		||||
# Filter stack
 | 
			
		||||
map .n console filter_stack add name%space
 | 
			
		||||
map .m console filter_stack add mime%space
 | 
			
		||||
map .d filter_stack add type d
 | 
			
		||||
map .f filter_stack add type f
 | 
			
		||||
map .l filter_stack add type l
 | 
			
		||||
map .| filter_stack add or
 | 
			
		||||
map .& filter_stack add and
 | 
			
		||||
map .! filter_stack add not
 | 
			
		||||
map .r console filter_stack rotate
 | 
			
		||||
map .c filter_stack clear
 | 
			
		||||
map .* filter_stack decompose
 | 
			
		||||
map .p filter_stack pop
 | 
			
		||||
map .. filter_stack show
 | 
			
		||||
 | 
			
		||||
# Bookmarks
 | 
			
		||||
map `<any>  enter_bookmark %any
 | 
			
		||||
map '<any>  enter_bookmark %any
 | 
			
		||||
map m<any>  set_bookmark %any
 | 
			
		||||
map um<any> unset_bookmark %any
 | 
			
		||||
 | 
			
		||||
map m<bg>   draw_bookmarks
 | 
			
		||||
copymap m<bg>  um<bg> `<bg> '<bg>
 | 
			
		||||
 | 
			
		||||
# Generate all the chmod bindings with some python help:
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +{0}  shell -f chmod u+{0} %s".format(arg))
 | 
			
		||||
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -{0}  shell -f chmod u-{0} %s".format(arg))
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Define keys for the console
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# Note: Unmapped keys are passed directly to the console.
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
cmap <tab>   eval fm.ui.console.tab()
 | 
			
		||||
cmap <s-tab> eval fm.ui.console.tab(-1)
 | 
			
		||||
cmap <ESC>   eval fm.ui.console.close()
 | 
			
		||||
cmap <CR>    eval fm.ui.console.execute()
 | 
			
		||||
cmap <C-l>   redraw_window
 | 
			
		||||
 | 
			
		||||
copycmap <ESC> <C-c>
 | 
			
		||||
copycmap <CR>  <C-j>
 | 
			
		||||
 | 
			
		||||
# Move around
 | 
			
		||||
cmap <up>    eval fm.ui.console.history_move(-1)
 | 
			
		||||
cmap <down>  eval fm.ui.console.history_move(1)
 | 
			
		||||
cmap <left>  eval fm.ui.console.move(left=1)
 | 
			
		||||
cmap <right> eval fm.ui.console.move(right=1)
 | 
			
		||||
cmap <home>  eval fm.ui.console.move(right=0, absolute=True)
 | 
			
		||||
cmap <end>   eval fm.ui.console.move(right=-1, absolute=True)
 | 
			
		||||
cmap <a-b> eval fm.ui.console.move_word(left=1)
 | 
			
		||||
cmap <a-f> eval fm.ui.console.move_word(right=1)
 | 
			
		||||
 | 
			
		||||
copycmap <a-b> <a-left>
 | 
			
		||||
copycmap <a-f> <a-right>
 | 
			
		||||
 | 
			
		||||
# Line Editing
 | 
			
		||||
cmap <backspace>  eval fm.ui.console.delete(-1)
 | 
			
		||||
cmap <delete>     eval fm.ui.console.delete(0)
 | 
			
		||||
cmap <C-w>        eval fm.ui.console.delete_word()
 | 
			
		||||
cmap <A-d>        eval fm.ui.console.delete_word(backward=False)
 | 
			
		||||
cmap <C-k>        eval fm.ui.console.delete_rest(1)
 | 
			
		||||
cmap <C-u>        eval fm.ui.console.delete_rest(-1)
 | 
			
		||||
cmap <C-y>        eval fm.ui.console.paste()
 | 
			
		||||
 | 
			
		||||
# And of course the emacs way
 | 
			
		||||
copycmap <ESC>       <C-g>
 | 
			
		||||
copycmap <up>        <C-p>
 | 
			
		||||
copycmap <down>      <C-n>
 | 
			
		||||
copycmap <left>      <C-b>
 | 
			
		||||
copycmap <right>     <C-f>
 | 
			
		||||
copycmap <home>      <C-a>
 | 
			
		||||
copycmap <end>       <C-e>
 | 
			
		||||
copycmap <delete>    <C-d>
 | 
			
		||||
copycmap <backspace> <C-h>
 | 
			
		||||
 | 
			
		||||
# Note: There are multiple ways to express backspaces.  <backspace> (code 263)
 | 
			
		||||
# and <backspace2> (code 127).  To be sure, use both.
 | 
			
		||||
copycmap <backspace> <backspace2>
 | 
			
		||||
 | 
			
		||||
# This special expression allows typing in numerals:
 | 
			
		||||
cmap <allow_quantifiers> false
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Pager Keybindings
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# Movement
 | 
			
		||||
pmap  <down>      pager_move  down=1
 | 
			
		||||
pmap  <up>        pager_move  up=1
 | 
			
		||||
pmap  <left>      pager_move  left=4
 | 
			
		||||
pmap  <right>     pager_move  right=4
 | 
			
		||||
pmap  <home>      pager_move  to=0
 | 
			
		||||
pmap  <end>       pager_move  to=-1
 | 
			
		||||
pmap  <pagedown>  pager_move  down=1.0  pages=True
 | 
			
		||||
pmap  <pageup>    pager_move  up=1.0    pages=True
 | 
			
		||||
pmap  <C-d>       pager_move  down=0.5  pages=True
 | 
			
		||||
pmap  <C-u>       pager_move  up=0.5    pages=True
 | 
			
		||||
 | 
			
		||||
copypmap <UP>       k  <C-p>
 | 
			
		||||
copypmap <DOWN>     j  <C-n> <CR>
 | 
			
		||||
copypmap <LEFT>     h
 | 
			
		||||
copypmap <RIGHT>    l
 | 
			
		||||
copypmap <HOME>     g
 | 
			
		||||
copypmap <END>      G
 | 
			
		||||
copypmap <C-d>      d
 | 
			
		||||
copypmap <C-u>      u
 | 
			
		||||
copypmap <PAGEDOWN> n  f  <C-F>  <Space>
 | 
			
		||||
copypmap <PAGEUP>   p  b  <C-B>
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
pmap     <C-l> redraw_window
 | 
			
		||||
pmap     <ESC> pager_close
 | 
			
		||||
copypmap <ESC> q Q i <F3>
 | 
			
		||||
pmap E      edit_file
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Taskview Keybindings
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# Movement
 | 
			
		||||
tmap <up>        taskview_move up=1
 | 
			
		||||
tmap <down>      taskview_move down=1
 | 
			
		||||
tmap <home>      taskview_move to=0
 | 
			
		||||
tmap <end>       taskview_move to=-1
 | 
			
		||||
tmap <pagedown>  taskview_move down=1.0  pages=True
 | 
			
		||||
tmap <pageup>    taskview_move up=1.0    pages=True
 | 
			
		||||
tmap <C-d>       taskview_move down=0.5  pages=True
 | 
			
		||||
tmap <C-u>       taskview_move up=0.5    pages=True
 | 
			
		||||
 | 
			
		||||
copytmap <UP>       k  <C-p>
 | 
			
		||||
copytmap <DOWN>     j  <C-n> <CR>
 | 
			
		||||
copytmap <HOME>     g
 | 
			
		||||
copytmap <END>      G
 | 
			
		||||
copytmap <C-u>      u
 | 
			
		||||
copytmap <PAGEDOWN> n  f  <C-F>  <Space>
 | 
			
		||||
copytmap <PAGEUP>   p  b  <C-B>
 | 
			
		||||
 | 
			
		||||
# Changing priority and deleting tasks
 | 
			
		||||
tmap J          eval -q fm.ui.taskview.task_move(-1)
 | 
			
		||||
tmap K          eval -q fm.ui.taskview.task_move(0)
 | 
			
		||||
tmap dd         eval -q fm.ui.taskview.task_remove()
 | 
			
		||||
tmap <pagedown> eval -q fm.ui.taskview.task_move(-1)
 | 
			
		||||
tmap <pageup>   eval -q fm.ui.taskview.task_move(0)
 | 
			
		||||
tmap <delete>   eval -q fm.ui.taskview.task_remove()
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
tmap <C-l> redraw_window
 | 
			
		||||
tmap <ESC> taskview_close
 | 
			
		||||
copytmap <ESC> q Q w <C-c>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										210
									
								
								.config/ranger/rifle.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								.config/ranger/rifle.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,210 @@
 | 
			
		||||
ext jpg = feh --scale-down "$@"
 | 
			
		||||
#ext doc = openoffice4 "$@"
 | 
			
		||||
#ext odt = openoffice4 "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Websites
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Rarely installed browsers get higher priority; It is assumed that if you
 | 
			
		||||
# install a rare browser, you probably use it.  Firefox/konqueror/w3m on the
 | 
			
		||||
# other hand are often only installed as fallback browsers.
 | 
			
		||||
ext x?html?, has surf,             X, flag f = surf -- file://"$1"
 | 
			
		||||
ext x?html?, has vimprobable,      X, flag f = vimprobable -- "$@"
 | 
			
		||||
ext x?html?, has vimprobable2,     X, flag f = vimprobable2 -- "$@"
 | 
			
		||||
ext x?html?, has qutebrowser,      X, flag f = qutebrowser -- "$@"
 | 
			
		||||
ext x?html?, has dwb,              X, flag f = dwb -- "$@"
 | 
			
		||||
ext x?html?, has jumanji,          X, flag f = jumanji -- "$@"
 | 
			
		||||
ext x?html?, has luakit,           X, flag f = luakit -- "$@"
 | 
			
		||||
ext x?html?, has uzbl,             X, flag f = uzbl -- "$@"
 | 
			
		||||
ext x?html?, has uzbl-tabbed,      X, flag f = uzbl-tabbed -- "$@"
 | 
			
		||||
ext x?html?, has uzbl-browser,     X, flag f = uzbl-browser -- "$@"
 | 
			
		||||
ext x?html?, has uzbl-core,        X, flag f = uzbl-core -- "$@"
 | 
			
		||||
ext x?html?, has midori,           X, flag f = midori -- "$@"
 | 
			
		||||
ext x?html?, has chromium-browser, X, flag f = chromium-browser -- "$@"
 | 
			
		||||
ext x?html?, has chromium,         X, flag f = chromium -- "$@"
 | 
			
		||||
ext x?html?, has google-chrome,    X, flag f = google-chrome -- "$@"
 | 
			
		||||
ext x?html?, has opera,            X, flag f = opera -- "$@"
 | 
			
		||||
ext x?html?, has firefox,          X, flag f = firefox -- "$@"
 | 
			
		||||
ext x?html?, has seamonkey,        X, flag f = seamonkey -- "$@"
 | 
			
		||||
ext x?html?, has iceweasel,        X, flag f = iceweasel -- "$@"
 | 
			
		||||
ext x?html?, has epiphany,         X, flag f = epiphany -- "$@"
 | 
			
		||||
ext x?html?, has konqueror,        X, flag f = konqueror -- "$@"
 | 
			
		||||
ext x?html?, has elinks,            terminal = elinks "$@"
 | 
			
		||||
ext x?html?, has links2,            terminal = links2 "$@"
 | 
			
		||||
ext x?html?, has links,             terminal = links "$@"
 | 
			
		||||
ext x?html?, has lynx,              terminal = lynx -- "$@"
 | 
			
		||||
ext x?html?, has w3m,               terminal = w3m "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Misc
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Define the "editor" for text files as first action
 | 
			
		||||
mime ^text,  label editor = ${VISUAL:-$EDITOR} -- "$@"
 | 
			
		||||
mime ^text,  label pager  = "$PAGER" -- "$@"
 | 
			
		||||
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
 | 
			
		||||
!mime ^text, label pager,  ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@"
 | 
			
		||||
 | 
			
		||||
ext 1                         = man "$1"
 | 
			
		||||
ext s[wmf]c, has zsnes, X     = zsnes "$1"
 | 
			
		||||
ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1"
 | 
			
		||||
ext nes, has fceux, X         = fceux "$1"
 | 
			
		||||
ext exe                       = wine "$1"
 | 
			
		||||
name ^[mM]akefile$            = make
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Code
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
ext py  = python -- "$1"
 | 
			
		||||
ext pl  = perl -- "$1"
 | 
			
		||||
ext rb  = ruby -- "$1"
 | 
			
		||||
ext js  = node -- "$1"
 | 
			
		||||
ext sh  = sh -- "$1"
 | 
			
		||||
ext php = php -- "$1"
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Audio without X
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^audio|ogg$, terminal, has mpv      = mpv -- "$@"
 | 
			
		||||
mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@"
 | 
			
		||||
mime ^audio|ogg$, terminal, has mplayer  = mplayer -- "$@"
 | 
			
		||||
ext midi?,        terminal, has wildmidi = wildmidi -- "$@"
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Video/Audio with a GUI
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^video|audio, has gmplayer, X, flag f = gmplayer -- "$@"
 | 
			
		||||
mime ^video|audio, has smplayer, X, flag f = smplayer "$@"
 | 
			
		||||
mime ^video,       has mpv,      X, flag f = mpv -- "$@"
 | 
			
		||||
mime ^video,       has mpv,      X, flag f = mpv --fs -- "$@"
 | 
			
		||||
mime ^video,       has mplayer2, X, flag f = mplayer2 -- "$@"
 | 
			
		||||
mime ^video,       has mplayer2, X, flag f = mplayer2 -fs -- "$@"
 | 
			
		||||
mime ^video,       has mplayer,  X, flag f = mplayer -- "$@"
 | 
			
		||||
mime ^video,       has mplayer,  X, flag f = mplayer -fs -- "$@"
 | 
			
		||||
mime ^video|audio, has vlc,      X, flag f = vlc -- "$@"
 | 
			
		||||
mime ^video|audio, has totem,    X, flag f = totem -- "$@"
 | 
			
		||||
mime ^video|audio, has totem,    X, flag f = totem --fullscreen -- "$@"
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Video without X:
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^video, terminal, !X, has mpv       = mpv -- "$@"
 | 
			
		||||
mime ^video, terminal, !X, has mplayer2  = mplayer2 -- "$@"
 | 
			
		||||
mime ^video, terminal, !X, has mplayer   = mplayer -- "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Documents
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
ext pdf, has llpp,     X, flag f = llpp "$@"
 | 
			
		||||
ext pdf, has zathura,  X, flag f = zathura -- "$@"
 | 
			
		||||
ext pdf, has mupdf,    X, flag f = mupdf "$@"
 | 
			
		||||
ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@"
 | 
			
		||||
ext pdf, has apvlv,    X, flag f = apvlv -- "$@"
 | 
			
		||||
ext pdf, has xpdf,     X, flag f = xpdf -- "$@"
 | 
			
		||||
ext pdf, has evince,   X, flag f = evince -- "$@"
 | 
			
		||||
ext pdf, has atril,    X, flag f = atril -- "$@"
 | 
			
		||||
ext pdf, has okular,   X, flag f = okular -- "$@"
 | 
			
		||||
ext pdf, has epdfview, X, flag f = epdfview -- "$@"
 | 
			
		||||
ext pdf, has qpdfview, X, flag f = qpdfview "$@"
 | 
			
		||||
ext pdf, has open,     X, flag f = open "$@"
 | 
			
		||||
 | 
			
		||||
ext docx?, has catdoc,       terminal = catdoc -- "$@" | "$PAGER"
 | 
			
		||||
 | 
			
		||||
ext                        sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric,    X, flag f = gnumeric -- "$@"
 | 
			
		||||
ext                        sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread,     X, flag f = kspread -- "$@"
 | 
			
		||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@"
 | 
			
		||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice,     X, flag f = soffice "$@"
 | 
			
		||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice,     X, flag f = ooffice "$@"
 | 
			
		||||
 | 
			
		||||
ext djvu, has zathura,X, flag f = zathura -- "$@"
 | 
			
		||||
ext djvu, has evince, X, flag f = evince -- "$@"
 | 
			
		||||
ext djvu, has atril,  X, flag f = atril -- "$@"
 | 
			
		||||
ext djvu, has djview, X, flag f = djview -- "$@"
 | 
			
		||||
 | 
			
		||||
ext epub, has ebook-viewer, X, flag f = ebook-viewer -- "$@"
 | 
			
		||||
ext mobi, has ebook-viewer, X, flag f = ebook-viewer -- "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Image Viewing:
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@"
 | 
			
		||||
mime ^image/svg, has display,  X, flag f = display -- "$@"
 | 
			
		||||
 | 
			
		||||
mime ^image, has pqiv,      X, flag f = pqiv -- "$@"
 | 
			
		||||
mime ^image, has sxiv,      X, flag f = sxiv -- "$@"
 | 
			
		||||
mime ^image, has feh,       X, flag f = feh -- "$@"
 | 
			
		||||
mime ^image, has mirage,    X, flag f = mirage -- "$@"
 | 
			
		||||
mime ^image, has ristretto, X, flag f = ristretto "$@"
 | 
			
		||||
mime ^image, has eog,       X, flag f = eog -- "$@"
 | 
			
		||||
mime ^image, has eom,       X, flag f = eom -- "$@"
 | 
			
		||||
mime ^image, has nomacs,    X, flag f = nomacs -- "$@"
 | 
			
		||||
mime ^image, has geeqie,    X, flag f = geeqie -- "$@"
 | 
			
		||||
mime ^image, has gwenview,  X, flag f = gwenview -- "$@"
 | 
			
		||||
mime ^image, has gimp,      X, flag f = gimp -- "$@"
 | 
			
		||||
ext xcf,                    X, flag f = gimp -- "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Archives
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
# avoid password prompt by providing empty password
 | 
			
		||||
ext 7z, has 7z = 7z -p l "$@" | "$PAGER"
 | 
			
		||||
# This requires atool
 | 
			
		||||
ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz,     has atool = atool --list --each -- "$@" | "$PAGER"
 | 
			
		||||
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --list --each -- "$@" | "$PAGER"
 | 
			
		||||
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz,  has atool = atool --extract --each -- "$@"
 | 
			
		||||
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --extract --each -- "$@"
 | 
			
		||||
 | 
			
		||||
# Listing and extracting archives without atool:
 | 
			
		||||
ext tar|gz|bz2|xz, has tar = tar vvtf "$1" | "$PAGER"
 | 
			
		||||
ext tar|gz|bz2|xz, has tar = for file in "$@"; do tar vvxf "$file"; done
 | 
			
		||||
ext bz2, has bzip2 = for file in "$@"; do bzip2 -dk "$file"; done
 | 
			
		||||
ext zip, has unzip = unzip -l "$1" | less
 | 
			
		||||
ext zip, has unzip = for file in "$@"; do unzip -d "${file%.*}" "$file"; done
 | 
			
		||||
ext ace, has unace = unace l "$1" | less
 | 
			
		||||
ext ace, has unace = for file in "$@"; do unace e "$file"; done
 | 
			
		||||
ext rar, has unrar = unrar l "$1" | less
 | 
			
		||||
ext rar, has unrar = for file in "$@"; do unrar x "$file"; done
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Flag t fallback terminals
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Rarely installed terminal emulators get higher priority; It is assumed that
 | 
			
		||||
# if you install a rare terminal emulator, you probably use it.
 | 
			
		||||
# gnome-terminal/konsole/xterm on the other hand are often installed as part of
 | 
			
		||||
# a desktop environment or as fallback terminal emulators.
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has terminology = terminology -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has kitty = kitty -- "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has alacritty = alacritty -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has sakura = sakura -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has lilyterm = lilyterm -e "$@"
 | 
			
		||||
#mime ^ranger/x-terminal-emulator, has cool-retro-term = cool-retro-term -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has termite = termite -x '"$@"'
 | 
			
		||||
#mime ^ranger/x-terminal-emulator, has yakuake = yakuake -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has guake = guake -ne "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has tilda = tilda -c "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has st = st -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has terminator = terminator -x "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has urxvt = urxvt -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has pantheon-terminal = pantheon-terminal -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has lxterminal = lxterminal -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has mate-terminal = mate-terminal -x "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has xfce4-terminal = xfce4-terminal -x "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has konsole = konsole -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has gnome-terminal = gnome-terminal -- "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has xterm = xterm -e "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Misc
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1"
 | 
			
		||||
label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1"
 | 
			
		||||
label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1"
 | 
			
		||||
label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1"
 | 
			
		||||
 | 
			
		||||
# Define the editor for non-text files + pager as last action
 | 
			
		||||
              !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php  = ask
 | 
			
		||||
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php  = ${VISUAL:-$EDITOR} -- "$@"
 | 
			
		||||
label pager,  !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php  = "$PAGER" -- "$@"
 | 
			
		||||
 | 
			
		||||
# The very last action, so that it's never triggered accidentally, is to execute a program:
 | 
			
		||||
mime application/x-executable = "$1"
 | 
			
		||||
							
								
								
									
										14
									
								
								.emacs.d/emacs-custom.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.emacs.d/emacs-custom.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
(custom-set-variables
 | 
			
		||||
 ;; custom-set-variables was added by Custom.
 | 
			
		||||
 ;; If you edit it by hand, you could mess it up, so be careful.
 | 
			
		||||
 ;; Your init file should contain only one such instance.
 | 
			
		||||
 ;; If there is more than one, they won't work right.
 | 
			
		||||
 '(custom-safe-themes
 | 
			
		||||
   '("2dff5f0b44a9e6c8644b2159414af72261e38686072e063aa66ee98a2faecf0e" default))
 | 
			
		||||
 '(markdown-command "/usr/bin/pandoc"))
 | 
			
		||||
(custom-set-faces
 | 
			
		||||
 ;; custom-set-faces was added by Custom.
 | 
			
		||||
 ;; If you edit it by hand, you could mess it up, so be careful.
 | 
			
		||||
 ;; Your init file should contain only one such instance.
 | 
			
		||||
 ;; If there is more than one, they won't work right.
 | 
			
		||||
 )
 | 
			
		||||
							
								
								
									
										529
									
								
								.emacs.d/init.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										529
									
								
								.emacs.d/init.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,529 @@
 | 
			
		||||
;Packages
 | 
			
		||||
 | 
			
		||||
;; package archives
 | 
			
		||||
(require 'package)
 | 
			
		||||
(setq package-enable-at-startup nil)
 | 
			
		||||
(setq package-archives
 | 
			
		||||
      '(
 | 
			
		||||
	("melpa" . "https://melpa.org/packages/")
 | 
			
		||||
	("ELPA"  . "http://tromey.com/elpa/")
 | 
			
		||||
	("gnu"   . "http://elpa.gnu.org/packages/")
 | 
			
		||||
	("ORG"   . "https://orgmode.org/elpa/")
 | 
			
		||||
	)
 | 
			
		||||
      )
 | 
			
		||||
(package-initialize)
 | 
			
		||||
(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
 | 
			
		||||
 | 
			
		||||
;; Remove welcome screen
 | 
			
		||||
(setq inhibit-startup-screen t)
 | 
			
		||||
 | 
			
		||||
;; Disable menu
 | 
			
		||||
(menu-bar-mode 0)
 | 
			
		||||
 | 
			
		||||
;; Enable IDO mode
 | 
			
		||||
(setq ido-enable-flex-matching t)
 | 
			
		||||
;;(setq ido-everywhere t)
 | 
			
		||||
;;(ido-mode 1)
 | 
			
		||||
(global-set-key (kbd "C-x b") 'ido-switch-buffer)
 | 
			
		||||
 | 
			
		||||
;; Remove working cl
 | 
			
		||||
(require 'cl-lib)
 | 
			
		||||
(setq byte-compile-warnings '(cl-functions))
 | 
			
		||||
(advice-add 'sh-set-shell :around
 | 
			
		||||
	    (lambda (orig-fun &rest args)
 | 
			
		||||
	      (cl-letf (((symbol-function 'message) #'ignore))
 | 
			
		||||
		(apply orig-fun args))))
 | 
			
		||||
 | 
			
		||||
;; install use-package
 | 
			
		||||
(unless (package-installed-p 'use-package)
 | 
			
		||||
  (package-refresh-contents)
 | 
			
		||||
  (package-install 'use-package)
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; Set path to store "custom-set"
 | 
			
		||||
(setq custom-file "~/.emacs.d/emacs-custom.el")
 | 
			
		||||
 | 
			
		||||
;; Enable awesome-tab-mode
 | 
			
		||||
(add-to-list 'load-path (expand-file-name "~/.emacs.d/plugins"))
 | 
			
		||||
(require 'awesome-tab)
 | 
			
		||||
(awesome-tab-mode t)
 | 
			
		||||
 | 
			
		||||
(use-package awesome-tab
 | 
			
		||||
  :load-path "~/.emacs.d/plugins"
 | 
			
		||||
  :config
 | 
			
		||||
  (awesome-tab-mode t))
 | 
			
		||||
(awesome-tab-mode t)
 | 
			
		||||
 | 
			
		||||
(global-set-key (kbd "C-x j") 'awesome-tab-backward-tab)
 | 
			
		||||
(global-set-key (kbd "C-x k") 'awesome-tab-forward-tab)
 | 
			
		||||
 | 
			
		||||
;; 80-charaters mode
 | 
			
		||||
(add-hook 'text-mode-hook 'auto-fill-mode)
 | 
			
		||||
(setq-default fill-column 80)
 | 
			
		||||
 | 
			
		||||
; Global turn on flycheck
 | 
			
		||||
(add-hook 'after-init-hook #'global-flycheck-mode)
 | 
			
		||||
 | 
			
		||||
; Org Files
 | 
			
		||||
(add-hook 'org-mode-hook '(lambda () (setq fill-column 80)))
 | 
			
		||||
(add-hook 'org-mode-hook 'auto-fill-mode)
 | 
			
		||||
(add-hook 'org-mode-hook 'turn-on-flyspell)
 | 
			
		||||
 | 
			
		||||
;; Latex files
 | 
			
		||||
(add-hook 'latex-mode-hook 'turn-on-flyspell)
 | 
			
		||||
(setq ispell-dictionary "pl")
 | 
			
		||||
 | 
			
		||||
;; Broswer
 | 
			
		||||
(setq browse-url-browser-function 'browse-url-generic
 | 
			
		||||
      browse-url-generic-program "browser-x")
 | 
			
		||||
 | 
			
		||||
;; Switch-window
 | 
			
		||||
(use-package switch-window
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  (setq
 | 
			
		||||
   switch-window-increase 4
 | 
			
		||||
   switch-window-input-style 'minibuffer
 | 
			
		||||
   switch-window-shortcut-style 'qwerty
 | 
			
		||||
   switch-window-threshold 2
 | 
			
		||||
   )
 | 
			
		||||
  (setq
 | 
			
		||||
   switch-window-qwerty-shortcuts
 | 
			
		||||
   '( "a" "s" "d" "f" "g" "h" "j" "k" "l")
 | 
			
		||||
   )
 | 
			
		||||
  :bind
 | 
			
		||||
  ([remap other-window] . switch-window)
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; Enable japanese
 | 
			
		||||
(if (condition-case nil (require 'mozc)(error nil))
 | 
			
		||||
  (setq ecb-be-more-like-better-yes-p t)
 | 
			
		||||
  (message "Monz not available; not configuring") )
 | 
			
		||||
(setq default-input-method "japanese-mozc")
 | 
			
		||||
 | 
			
		||||
;; Enable Smex
 | 
			
		||||
(use-package smex
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :init
 | 
			
		||||
  (smex-initialize)
 | 
			
		||||
  :bind
 | 
			
		||||
  ("M-x" . smex)
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; reveal dependency
 | 
			
		||||
(use-package htmlize
 | 
			
		||||
  :ensure t
 | 
			
		||||
  )
 | 
			
		||||
(use-package ox-reveal
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  ;; maybe add auto-installer in the future
 | 
			
		||||
  (setq org-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
;; moveline
 | 
			
		||||
(use-package move-text
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config)
 | 
			
		||||
 | 
			
		||||
(global-set-key (kbd "M-<up>") 'move-text-up)
 | 
			
		||||
(global-set-key (kbd "M-<down>") 'move-text-down)
 | 
			
		||||
 | 
			
		||||
;; company
 | 
			
		||||
(use-package company
 | 
			
		||||
  :ensure t
 | 
			
		||||
  )
 | 
			
		||||
(global-company-mode)
 | 
			
		||||
 | 
			
		||||
;; Shell - bash
 | 
			
		||||
(use-package flymake-shellcheck
 | 
			
		||||
  :ensure t
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
(use-package flycheck-bashate
 | 
			
		||||
  :ensure t
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
(require 'bash-completion)
 | 
			
		||||
(bash-completion-setup)
 | 
			
		||||
 | 
			
		||||
(use-package flymake-shell
 | 
			
		||||
  :ensure t
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
(require 'flymake-shell)
 | 
			
		||||
(add-hook 'sh-set-shell-hook 'flymake-shell-load)
 | 
			
		||||
 | 
			
		||||
;; Default font
 | 
			
		||||
(defun rc/get-default-font ()
 | 
			
		||||
  (cond
 | 
			
		||||
   ((eq system-type 'windows-nt) "Consolas-13")
 | 
			
		||||
   ((eq system-type 'gnu/linux) "xos4 Terminus Bold 16")))
 | 
			
		||||
 | 
			
		||||
(add-to-list 'default-frame-alist `(font . ,(rc/get-default-font)))
 | 
			
		||||
 | 
			
		||||
;; Theme
 | 
			
		||||
(use-package dracula-theme
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  (load-theme 'dracula t))
 | 
			
		||||
 | 
			
		||||
;; Sitebar dirred
 | 
			
		||||
(use-package dired-sidebar
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :commands (dired-sidebar-toggle-sidebar))
 | 
			
		||||
 | 
			
		||||
(require 'dired-sidebar)
 | 
			
		||||
(global-set-key (kbd "C-x d") 'dired-sidebar-toggle-sidebar)
 | 
			
		||||
 | 
			
		||||
;; Smex
 | 
			
		||||
(require 'smex)
 | 
			
		||||
(smex-initialize)
 | 
			
		||||
(global-set-key (kbd "M-x") 'smex)
 | 
			
		||||
 | 
			
		||||
;;buffer-move
 | 
			
		||||
(require 'buffer-move)
 | 
			
		||||
(global-set-key (kbd "<C-S-up>")     'buf-move-up)
 | 
			
		||||
(global-set-key (kbd "<C-S-down>")   'buf-move-down)
 | 
			
		||||
(global-set-key (kbd "<C-S-left>")   'buf-move-left)
 | 
			
		||||
(global-set-key (kbd "<C-S-right>")  'buf-move-right)
 | 
			
		||||
 | 
			
		||||
;; Multiple-cursors
 | 
			
		||||
(use-package multiple-cursors
 | 
			
		||||
    :ensure t
 | 
			
		||||
    :config
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
 | 
			
		||||
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
 | 
			
		||||
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
 | 
			
		||||
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
 | 
			
		||||
 | 
			
		||||
;; Magit
 | 
			
		||||
(use-package magit
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
(global-set-key (kbd "C-x g") 'magit-status)
 | 
			
		||||
 | 
			
		||||
;; Helpers for easily building Emacs flymake checkers.
 | 
			
		||||
(use-package flymake-easy
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; Error list
 | 
			
		||||
(define-key flymake-mode-map (kbd "M-n") 'flymake-goto-next-error)
 | 
			
		||||
(define-key flymake-mode-map (kbd "M-p") 'flymake-goto-prev-error)
 | 
			
		||||
 | 
			
		||||
;; Ruby
 | 
			
		||||
(use-package flymake-ruby
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;;robe
 | 
			
		||||
(use-package robe
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
(require 'robe)
 | 
			
		||||
(add-hook 'ruby-mode-hook 'robe-mode)
 | 
			
		||||
(add-hook 'robe-mode-hook 'ac-robe-setup)
 | 
			
		||||
(eval-after-load 'company
 | 
			
		||||
  '(push 'company-robe company-backends))
 | 
			
		||||
 | 
			
		||||
(require 'flymake-ruby)
 | 
			
		||||
(add-hook 'ruby-mode-hook 'flymake-ruby-load)
 | 
			
		||||
 | 
			
		||||
;; Docker
 | 
			
		||||
(use-package dockerfile-mode
 | 
			
		||||
   :ensure t
 | 
			
		||||
   :defer t)
 | 
			
		||||
 | 
			
		||||
;; YAML
 | 
			
		||||
(require 'flymake-yaml)
 | 
			
		||||
 | 
			
		||||
(use-package yaml-mode
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; Ansible
 | 
			
		||||
(use-package ansible
 | 
			
		||||
   :ensure t
 | 
			
		||||
   :config
 | 
			
		||||
   )
 | 
			
		||||
 | 
			
		||||
(use-package ansible-doc
 | 
			
		||||
   :ensure t
 | 
			
		||||
   :config
 | 
			
		||||
   )
 | 
			
		||||
 | 
			
		||||
(use-package company-ansible
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
(add-to-list 'company-backends 'company-ansible)
 | 
			
		||||
(add-hook 'yaml-mode-hook '(lambda () (ansible 1)))
 | 
			
		||||
(add-hook 'yaml-mode-hook #'ansible-doc-mode)
 | 
			
		||||
 | 
			
		||||
;; Markdown-mode
 | 
			
		||||
(custom-set-variables
 | 
			
		||||
 '(markdown-command "/usr/bin/pandoc"))
 | 
			
		||||
(use-package markdown-mode
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; C++ C
 | 
			
		||||
(use-package auto-complete-clang
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; Apache
 | 
			
		||||
(use-package apache-mode
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
;; Haskell
 | 
			
		||||
(use-package haskell-mode
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(use-package flycheck-haskell
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  )
 | 
			
		||||
(add-hook 'flycheck-mode-hook #'flycheck-haskell-setup)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;; Java
 | 
			
		||||
;; lsp-install-server
 | 
			
		||||
;; jdtls
 | 
			
		||||
(use-package lsp-java
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config
 | 
			
		||||
  (global-set-key (kbd "C-.") 'lsp-execute-code-action)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(global-set-key (kbd "<f9>") 'dap-breakpoint-toggle)
 | 
			
		||||
(global-set-key (kbd "<f10>") 'dap-next)
 | 
			
		||||
(global-set-key (kbd "<f11>") 'dap-step-in)
 | 
			
		||||
(global-set-key (kbd "<f12>") 'lsp-jt-browser)
 | 
			
		||||
(global-set-key (kbd "<C-f12>") 'dap-stop-thread)
 | 
			
		||||
(global-set-key (kbd "<C-?>") 'comment-or-uncomment-region)
 | 
			
		||||
 | 
			
		||||
(add-hook 'dap-stopped-hook
 | 
			
		||||
          (lambda (arg) (call-interactively #'dap-hydra)))
 | 
			
		||||
 | 
			
		||||
(setq dap-auto-configure-features '(sessions locals controls tooltip))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(require 'lsp-java)
 | 
			
		||||
(add-hook 'java-mode-hook #'lsp)
 | 
			
		||||
 | 
			
		||||
(require 'dap-java)
 | 
			
		||||
 | 
			
		||||
;; Treemacs
 | 
			
		||||
(use-package treemacs
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :defer t
 | 
			
		||||
  :init
 | 
			
		||||
  (with-eval-after-load 'winum
 | 
			
		||||
    (define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
 | 
			
		||||
  :config
 | 
			
		||||
  (progn
 | 
			
		||||
    (setq treemacs-collapse-dirs                 (if treemacs-python-executable 3 0)
 | 
			
		||||
          treemacs-deferred-git-apply-delay      0.5
 | 
			
		||||
          treemacs-directory-name-transformer    #'identity
 | 
			
		||||
          treemacs-display-in-side-window        t
 | 
			
		||||
          treemacs-eldoc-display                 t
 | 
			
		||||
          treemacs-file-event-delay              5000
 | 
			
		||||
          treemacs-file-extension-regex          treemacs-last-period-regex-value
 | 
			
		||||
          treemacs-file-follow-delay             0.2
 | 
			
		||||
          treemacs-file-name-transformer         #'identity
 | 
			
		||||
          treemacs-follow-after-init             t
 | 
			
		||||
          treemacs-git-command-pipe              ""
 | 
			
		||||
          treemacs-goto-tag-strategy             'refetch-index
 | 
			
		||||
          treemacs-indentation                   2
 | 
			
		||||
          treemacs-indentation-string            " "
 | 
			
		||||
          treemacs-is-never-other-window         nil
 | 
			
		||||
          treemacs-max-git-entries               5000
 | 
			
		||||
          treemacs-missing-project-action        'ask
 | 
			
		||||
          treemacs-move-forward-on-expand        nil
 | 
			
		||||
          treemacs-no-png-images                 nil
 | 
			
		||||
          treemacs-no-delete-other-windows       t
 | 
			
		||||
          treemacs-project-follow-cleanup        nil
 | 
			
		||||
          treemacs-persist-file                  (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
 | 
			
		||||
          treemacs-position                      'left
 | 
			
		||||
          treemacs-read-string-input             'from-child-frame
 | 
			
		||||
          treemacs-recenter-distance             0.1
 | 
			
		||||
          treemacs-recenter-after-file-follow    nil
 | 
			
		||||
          treemacs-recenter-after-tag-follow     nil
 | 
			
		||||
          treemacs-recenter-after-project-jump   'always
 | 
			
		||||
          treemacs-recenter-after-project-expand 'on-distance
 | 
			
		||||
          treemacs-show-cursor                   nil
 | 
			
		||||
          treemacs-show-hidden-files             t
 | 
			
		||||
          treemacs-silent-filewatch              nil
 | 
			
		||||
          treemacs-silent-refresh                nil
 | 
			
		||||
          treemacs-sorting                       'alphabetic-asc
 | 
			
		||||
          treemacs-space-between-root-nodes      t
 | 
			
		||||
          treemacs-tag-follow-cleanup            t
 | 
			
		||||
          treemacs-tag-follow-delay              1.5
 | 
			
		||||
          treemacs-user-mode-line-format         nil
 | 
			
		||||
          treemacs-user-header-line-format       nil
 | 
			
		||||
          treemacs-width                         35
 | 
			
		||||
          treemacs-workspace-switch-cleanup      nil)
 | 
			
		||||
 | 
			
		||||
    ;; The default width and height of the icons is 22 pixels. If you are
 | 
			
		||||
    ;; using a Hi-DPI display, uncomment this to double the icon size.
 | 
			
		||||
    ;;(treemacs-resize-icons 44)
 | 
			
		||||
 | 
			
		||||
    (treemacs-follow-mode t)
 | 
			
		||||
    (treemacs-filewatch-mode t)
 | 
			
		||||
    (treemacs-fringe-indicator-mode 'always)
 | 
			
		||||
    (pcase (cons (not (null (executable-find "git")))
 | 
			
		||||
                 (not (null treemacs-python-executable)))
 | 
			
		||||
      (`(t . t)
 | 
			
		||||
       (treemacs-git-mode 'deferred))
 | 
			
		||||
      (`(t . _)
 | 
			
		||||
       (treemacs-git-mode 'simple))))
 | 
			
		||||
  :bind
 | 
			
		||||
  (:map global-map
 | 
			
		||||
        ("M-0"       . treemacs-select-window)
 | 
			
		||||
        ("C-x t 1"   . treemacs-delete-other-windows)
 | 
			
		||||
        ("C-x t t"   . treemacs)
 | 
			
		||||
        ("C-x t B"   . treemacs-bookmark)
 | 
			
		||||
        ("C-x t C-t" . treemacs-find-file)
 | 
			
		||||
        ("C-x t M-t" . treemacs-find-tag)))
 | 
			
		||||
 | 
			
		||||
(use-package treemacs-evil
 | 
			
		||||
  :after treemacs evil
 | 
			
		||||
  :ensure t)
 | 
			
		||||
 | 
			
		||||
(use-package treemacs-projectile
 | 
			
		||||
  :after treemacs projectile
 | 
			
		||||
  :ensure t)
 | 
			
		||||
 | 
			
		||||
(use-package treemacs-icons-dired
 | 
			
		||||
  :after treemacs dired
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config (treemacs-icons-dired-mode))
 | 
			
		||||
 | 
			
		||||
(use-package treemacs-magit
 | 
			
		||||
  :after treemacs magit
 | 
			
		||||
  :ensure t)
 | 
			
		||||
 | 
			
		||||
(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode
 | 
			
		||||
  :after treemacs persp-mode ;;or perspective vs. persp-mode
 | 
			
		||||
  :ensure t
 | 
			
		||||
  :config (treemacs-set-scope-type 'Perspectives))
 | 
			
		||||
 | 
			
		||||
;;; --- Look & Feel ---
 | 
			
		||||
 | 
			
		||||
;; Helm
 | 
			
		||||
(use-package helm
 | 
			
		||||
   :ensure t
 | 
			
		||||
   :config
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(add-hook 'helm-minibuffer-set-up-hook
 | 
			
		||||
          'helm-hide-minibuffer-maybe)
 | 
			
		||||
 | 
			
		||||
(setq helm-autoresize-max-height 0)
 | 
			
		||||
(setq helm-autoresize-min-height 20)
 | 
			
		||||
 | 
			
		||||
(helm-autoresize-mode 1)
 | 
			
		||||
(helm-mode 1)
 | 
			
		||||
 | 
			
		||||
;; Disable scroll bar
 | 
			
		||||
;; no toolbar:
 | 
			
		||||
(if (display-graphic-p)
 | 
			
		||||
    (progn
 | 
			
		||||
      (tool-bar-mode -1)
 | 
			
		||||
      (scroll-bar-mode -1)))
 | 
			
		||||
 | 
			
		||||
;; Copy
 | 
			
		||||
(setq select-active-regions nil)
 | 
			
		||||
(setq mouse-drag-copy-region t)
 | 
			
		||||
(global-set-key [mouse-2] 'mouse-yank-at-click)
 | 
			
		||||
 | 
			
		||||
;; Zoom in/out.
 | 
			
		||||
(global-set-key (kbd "M-+") 'text-scale-increase)
 | 
			
		||||
(global-set-key (kbd "M--") 'text-scale-decrease)
 | 
			
		||||
 | 
			
		||||
;; line numbers:
 | 
			
		||||
(global-display-line-numbers-mode 1)
 | 
			
		||||
 | 
			
		||||
;; scrolling:
 | 
			
		||||
(setq scroll-conservatively 100)
 | 
			
		||||
 | 
			
		||||
;; Whitespaces
 | 
			
		||||
(global-whitespace-mode 1)
 | 
			
		||||
(setq whitespace-display-mappings '((space-mark 32 [?·])))
 | 
			
		||||
(set-face-attribute 'whitespace-space nil :background nil :foreground "gray30")
 | 
			
		||||
(setq whitespace-style (quote (face tabs spaces trailing space-before-tab newline indentation empty space-after-tab space-mark tab-mark)))
 | 
			
		||||
(add-hook 'before-save-hook (lambda () (delete-trailing-whitespace)))
 | 
			
		||||
 | 
			
		||||
;; no "bell" (audible notification):
 | 
			
		||||
(setq ring-bell-function 'ignore)
 | 
			
		||||
 | 
			
		||||
;; auto reloading (reverting) buffers
 | 
			
		||||
(global-auto-revert-mode 1)
 | 
			
		||||
 | 
			
		||||
;; disable lock files:
 | 
			
		||||
(setq create-lockfiles nil)
 | 
			
		||||
 | 
			
		||||
;; disable autosave:
 | 
			
		||||
(setq auto-save-default nil)
 | 
			
		||||
 | 
			
		||||
;; disable backups:
 | 
			
		||||
(setq make-backup-files nil)
 | 
			
		||||
 | 
			
		||||
;; Pass "y or n" instead of "yes or no"
 | 
			
		||||
(defalias 'yes-or-no-p 'y-or-n-p)
 | 
			
		||||
 | 
			
		||||
;; Highlight parens
 | 
			
		||||
(show-paren-mode 1)
 | 
			
		||||
 | 
			
		||||
;; Candy
 | 
			
		||||
(global-prettify-symbols-mode 1)
 | 
			
		||||
 | 
			
		||||
;; Modeline
 | 
			
		||||
(column-number-mode 1)
 | 
			
		||||
(size-indication-mode 1)
 | 
			
		||||
 | 
			
		||||
;; Horizontal splitting
 | 
			
		||||
(defun split-and-follow-horizontally ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (split-window-below)
 | 
			
		||||
  (balance-windows)
 | 
			
		||||
  (other-window 1)
 | 
			
		||||
  )
 | 
			
		||||
(global-set-key (kbd "C-x 2") 'split-and-follow-horizontally)
 | 
			
		||||
 | 
			
		||||
;; Vertical splitting
 | 
			
		||||
(defun split-and-follow-vertically ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (split-window-right)
 | 
			
		||||
  (balance-windows)
 | 
			
		||||
  (other-window 1)
 | 
			
		||||
  )
 | 
			
		||||
(global-set-key (kbd "C-x 3") 'split-and-follow-vertically)
 | 
			
		||||
 | 
			
		||||
;; Kill & remove split
 | 
			
		||||
(defun kill-and-remove-split ()
 | 
			
		||||
  "Kill and remove split."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (kill-buffer)
 | 
			
		||||
  (delete-window)
 | 
			
		||||
  (balance-windows)
 | 
			
		||||
  (other-window 1)
 | 
			
		||||
  )
 | 
			
		||||
(global-set-key (kbd "C-x x") 'kill-and-remove-split)
 | 
			
		||||
							
								
								
									
										1924
									
								
								.emacs.d/plugins/awesome-tab.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1924
									
								
								.emacs.d/plugins/awesome-tab.el
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1723
									
								
								.emacs.d/plugins/bash-completion.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1723
									
								
								.emacs.d/plugins/bash-completion.el
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										138
									
								
								.emacs.d/plugins/buffer-move.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								.emacs.d/plugins/buffer-move.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,138 @@
 | 
			
		||||
;;; buffer-move.el --- 
 | 
			
		||||
 | 
			
		||||
;; Copyright (C) 2004-2014  Lucas Bonnet <lucas@rincevent.net.fr>
 | 
			
		||||
 | 
			
		||||
;; Author: Lucas Bonnet <lucas@rincevent.net>
 | 
			
		||||
;; Keywords: lisp,convenience
 | 
			
		||||
;; Version: 0.5
 | 
			
		||||
;; URL : https://github.com/lukhas/buffer-move
 | 
			
		||||
 | 
			
		||||
;; This program is free software; you can redistribute it and/or
 | 
			
		||||
;; modify it under the terms of the GNU General Public License
 | 
			
		||||
;; as published by the Free Software Foundation; either version 2
 | 
			
		||||
;; of the License, or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
;; This program is distributed in the hope that it will be useful,
 | 
			
		||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
;; GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
;; You should have received a copy of the GNU General Public License
 | 
			
		||||
;; along with this program; if not, write to the Free Software
 | 
			
		||||
;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 | 
			
		||||
;; 02111-1307, USA.
 | 
			
		||||
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
 | 
			
		||||
;; This file is for lazy people wanting to swap buffers without
 | 
			
		||||
;; typing C-x b on each window. This is useful when you have :
 | 
			
		||||
 | 
			
		||||
;; +--------------+-------------+
 | 
			
		||||
;; |              |             |
 | 
			
		||||
;; |    #emacs    |    #gnus    |
 | 
			
		||||
;; |              |             |
 | 
			
		||||
;; +--------------+-------------+
 | 
			
		||||
;; |                            |
 | 
			
		||||
;; |           .emacs           |
 | 
			
		||||
;; |                            |
 | 
			
		||||
;; +----------------------------+
 | 
			
		||||
 | 
			
		||||
;; and you want to have :
 | 
			
		||||
 | 
			
		||||
;; +--------------+-------------+
 | 
			
		||||
;; |              |             |
 | 
			
		||||
;; |    #gnus     |   .emacs    |
 | 
			
		||||
;; |              |             |
 | 
			
		||||
;; +--------------+-------------+
 | 
			
		||||
;; |                            |
 | 
			
		||||
;; |           #emacs           |
 | 
			
		||||
;; |                            |
 | 
			
		||||
;; +----------------------------+
 | 
			
		||||
 | 
			
		||||
;; With buffer-move, just go in #gnus, do buf-move-left, go to #emacs
 | 
			
		||||
;; (which now should be on top right) and do buf-move-down.
 | 
			
		||||
 | 
			
		||||
;; To use it, simply put a (require 'buffer-move) in your ~/.emacs and
 | 
			
		||||
;; define some keybindings. For example, i use :
 | 
			
		||||
 | 
			
		||||
;; (global-set-key (kbd "<C-S-up>")     'buf-move-up)
 | 
			
		||||
;; (global-set-key (kbd "<C-S-down>")   'buf-move-down)
 | 
			
		||||
;; (global-set-key (kbd "<C-S-left>")   'buf-move-left)
 | 
			
		||||
;; (global-set-key (kbd "<C-S-right>")  'buf-move-right)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;;; Code:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(require 'windmove)
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun buf-move-up ()
 | 
			
		||||
  "Swap the current buffer and the buffer above the split.
 | 
			
		||||
If there is no split, ie now window above the current one, an
 | 
			
		||||
error is signaled."
 | 
			
		||||
;;  "Switches between the current buffer, and the buffer above the
 | 
			
		||||
;;  split, if possible."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (let* ((other-win (windmove-find-other-window 'up))
 | 
			
		||||
	 (buf-this-buf (window-buffer (selected-window))))
 | 
			
		||||
    (if (null other-win)
 | 
			
		||||
        (error "No window above this one")
 | 
			
		||||
      ;; swap top with this one
 | 
			
		||||
      (set-window-buffer (selected-window) (window-buffer other-win))
 | 
			
		||||
      ;; move this one to top
 | 
			
		||||
      (set-window-buffer other-win buf-this-buf)
 | 
			
		||||
      (select-window other-win))))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun buf-move-down ()
 | 
			
		||||
"Swap the current buffer and the buffer under the split.
 | 
			
		||||
If there is no split, ie now window under the current one, an
 | 
			
		||||
error is signaled."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (let* ((other-win (windmove-find-other-window 'down))
 | 
			
		||||
	 (buf-this-buf (window-buffer (selected-window))))
 | 
			
		||||
    (if (or (null other-win) 
 | 
			
		||||
            (string-match "^ \\*Minibuf" (buffer-name (window-buffer other-win))))
 | 
			
		||||
        (error "No window under this one")
 | 
			
		||||
      ;; swap top with this one
 | 
			
		||||
      (set-window-buffer (selected-window) (window-buffer other-win))
 | 
			
		||||
      ;; move this one to top
 | 
			
		||||
      (set-window-buffer other-win buf-this-buf)
 | 
			
		||||
      (select-window other-win))))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun buf-move-left ()
 | 
			
		||||
"Swap the current buffer and the buffer on the left of the split.
 | 
			
		||||
If there is no split, ie now window on the left of the current
 | 
			
		||||
one, an error is signaled."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (let* ((other-win (windmove-find-other-window 'left))
 | 
			
		||||
	 (buf-this-buf (window-buffer (selected-window))))
 | 
			
		||||
    (if (null other-win)
 | 
			
		||||
        (error "No left split")
 | 
			
		||||
      ;; swap top with this one
 | 
			
		||||
      (set-window-buffer (selected-window) (window-buffer other-win))
 | 
			
		||||
      ;; move this one to top
 | 
			
		||||
      (set-window-buffer other-win buf-this-buf)
 | 
			
		||||
      (select-window other-win))))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun buf-move-right ()
 | 
			
		||||
"Swap the current buffer and the buffer on the right of the split.
 | 
			
		||||
If there is no split, ie now window on the right of the current
 | 
			
		||||
one, an error is signaled."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (let* ((other-win (windmove-find-other-window 'right))
 | 
			
		||||
	 (buf-this-buf (window-buffer (selected-window))))
 | 
			
		||||
    (if (null other-win)
 | 
			
		||||
        (error "No right split")
 | 
			
		||||
      ;; swap top with this one
 | 
			
		||||
      (set-window-buffer (selected-window) (window-buffer other-win))
 | 
			
		||||
      ;; move this one to top
 | 
			
		||||
      (set-window-buffer other-win buf-this-buf)
 | 
			
		||||
      (select-window other-win))))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(provide 'buffer-move)
 | 
			
		||||
;;; buffer-move.el ends here
 | 
			
		||||
							
								
								
									
										1195
									
								
								.emacs.d/plugins/dired-sidebar.el
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1195
									
								
								.emacs.d/plugins/dired-sidebar.el
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										68
									
								
								.emacs.d/plugins/flymake-yaml.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								.emacs.d/plugins/flymake-yaml.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
;;; flymake-yaml.el --- A flymake handler for YAML
 | 
			
		||||
 | 
			
		||||
;; Copyright (C) 2013 Yasuyuki Oka
 | 
			
		||||
 | 
			
		||||
;; Author: Yasuyuki Oka <yasuyk@gmail.com>
 | 
			
		||||
;; Version: 0.0.2
 | 
			
		||||
;; URL: https://github.com/yasuyk/flymake-yaml
 | 
			
		||||
;; Package-Requires: ((flymake-easy "0.1"))
 | 
			
		||||
;; Keywords: yaml
 | 
			
		||||
 | 
			
		||||
;; This program is free software; you can redistribute it and/or modify
 | 
			
		||||
;; it under the terms of the GNU General Public License as published by
 | 
			
		||||
;; the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
;; (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
;; This program is distributed in the hope that it will be useful,
 | 
			
		||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
;; GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
;; You should have received a copy of the GNU General Public License
 | 
			
		||||
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
;;
 | 
			
		||||
;; Based in part on http://d.hatena.ne.jp/kitokitoki/20120306/p1
 | 
			
		||||
;;
 | 
			
		||||
;; Usage:
 | 
			
		||||
;;
 | 
			
		||||
;;   (require 'flymake-yaml) ;; Not necessary if using ELPA package
 | 
			
		||||
;;   (add-hook 'yaml-mode-hook 'flymake-yaml-load)
 | 
			
		||||
;;
 | 
			
		||||
;; Uses flymake-easy, from https://github.com/purcell/flymake-easy
 | 
			
		||||
 | 
			
		||||
;;; Code:
 | 
			
		||||
 | 
			
		||||
(require 'flymake-easy)
 | 
			
		||||
 | 
			
		||||
(defconst flymake-yaml-err-line-patterns
 | 
			
		||||
  ;; Syck error message
 | 
			
		||||
  '(("syntax error on line \\([0-9]+\\), col \\([0-9]+\\): `\\(.*\\)'" nil 1 2 3)
 | 
			
		||||
    ;; Psych error message
 | 
			
		||||
    (".*: \\(.*\\) at line \\([0-9]+\\) column \\([0-9]+\\)" nil 2 3 1)))
 | 
			
		||||
 | 
			
		||||
(defun flymake-yaml-command (filename)
 | 
			
		||||
  "Construct a command that flymake can use to check yaml source.
 | 
			
		||||
Argument FILENAME
 | 
			
		||||
    YAML file name."
 | 
			
		||||
  (list "ruby" "-ryaml" "-e" "YAML.load(ARGF) rescue warn $!" filename))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun flymake-yaml-load ()
 | 
			
		||||
  "Configure flymake mode to check the current buffer's YAML syntax."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (when (eq major-mode 'yaml-mode)
 | 
			
		||||
    (flymake-easy-load 'flymake-yaml-command
 | 
			
		||||
                       flymake-yaml-err-line-patterns
 | 
			
		||||
                       'tempdir
 | 
			
		||||
                       "yml")))
 | 
			
		||||
 | 
			
		||||
(provide 'flymake-yaml)
 | 
			
		||||
 | 
			
		||||
;; Local Variables:
 | 
			
		||||
;; coding: utf-8
 | 
			
		||||
;; eval: (checkdoc-minor-mode 1)
 | 
			
		||||
;; End:
 | 
			
		||||
 | 
			
		||||
;;; flymake-yaml.el ends here
 | 
			
		||||
							
								
								
									
										27
									
								
								.emacs.d/plugins/latexmk-mode.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								.emacs.d/plugins/latexmk-mode.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
;;; latexmk-mode.el --- LatexMK minor mode
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
;;; none
 | 
			
		||||
;;; Code:
 | 
			
		||||
 | 
			
		||||
(define-minor-mode latexmk-mode
 | 
			
		||||
  "Toggle LatexMK mode."
 | 
			
		||||
  :init-value nil
 | 
			
		||||
  :lighter " LatexMK "
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(defun my/run-latexmk ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (start-process "latexmk" "latexmk out" "latexmk" "--silent" "--pdf" (buffer-file-name (current-buffer)))
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(defun my/try-run-latexmk ()
 | 
			
		||||
    "Try to run latexmk."
 | 
			
		||||
 | 
			
		||||
  (if (bound-and-true-p latexmk-mode)
 | 
			
		||||
      (my/run-latexmk)
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
(add-hook 'after-save-hook 'my/try-run-latexmk)
 | 
			
		||||
(add-hook 'latex-mode-hook 'latexmk-mode)
 | 
			
		||||
;;; latexmk-mode.el ends here
 | 
			
		||||
							
								
								
									
										75
									
								
								.emacs.d/plugins/livedown.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								.emacs.d/plugins/livedown.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
;;; livedown.el --- Realtime Markdown previews for Emacs.
 | 
			
		||||
 | 
			
		||||
;; Copyright (C) 2014-2016 Hrvoje Simic
 | 
			
		||||
 | 
			
		||||
;; Author: Hrvoje Simic <hrvoje@twobucks.co>
 | 
			
		||||
;; Version: 1.0.0
 | 
			
		||||
;; Keywords: markdown, preview, live
 | 
			
		||||
;; URL: https://github.com/shime/emacs-livedown
 | 
			
		||||
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
 | 
			
		||||
;; Realtime Markdown previews for Emacs.
 | 
			
		||||
 | 
			
		||||
;;; Code:
 | 
			
		||||
 | 
			
		||||
(defgroup livedown nil
 | 
			
		||||
  "Realtime Markdown previews"
 | 
			
		||||
  :group 'livedown
 | 
			
		||||
  :prefix "livedown-")
 | 
			
		||||
 | 
			
		||||
(defcustom livedown-port 1337
 | 
			
		||||
  "Port on which livedown server will run."
 | 
			
		||||
  :type 'integer
 | 
			
		||||
  :group 'livedown)
 | 
			
		||||
 | 
			
		||||
(defcustom livedown-open t
 | 
			
		||||
  "Open browser automatically."
 | 
			
		||||
  :type 'boolean
 | 
			
		||||
  :group 'livedown)
 | 
			
		||||
 | 
			
		||||
(defcustom livedown-browser nil
 | 
			
		||||
  "Open alternative browser."
 | 
			
		||||
  :type 'string
 | 
			
		||||
  :group 'livedown)
 | 
			
		||||
 | 
			
		||||
(defcustom livedown-autostart nil
 | 
			
		||||
  "Auto-open previews when opening markdown files."
 | 
			
		||||
  :type 'boolean
 | 
			
		||||
  :group 'livedown)
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun livedown-preview ()
 | 
			
		||||
    "Preview the current file in livedown."
 | 
			
		||||
    (interactive)
 | 
			
		||||
 | 
			
		||||
   (call-process-shell-command
 | 
			
		||||
             (format "livedown stop --port %s &"
 | 
			
		||||
                            livedown-port))
 | 
			
		||||
 | 
			
		||||
        (start-process-shell-command
 | 
			
		||||
            (format "emacs-livedown")
 | 
			
		||||
            (format "emacs-livedown-buffer")
 | 
			
		||||
            (format "livedown start %s --port %s %s %s "
 | 
			
		||||
                            buffer-file-name
 | 
			
		||||
                            livedown-port
 | 
			
		||||
                            (if livedown-browser (concat "--browser " livedown-browser) "")
 | 
			
		||||
                            (if livedown-open "--open" "")))
 | 
			
		||||
        (print (format "%s rendered @ %s" buffer-file-name livedown-port) (get-buffer "emacs-livedown-buffer")))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun livedown-kill (&optional async)
 | 
			
		||||
  "Stops the livedown process."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (let ((stop-livedown (if async 'async-shell-command 'call-process-shell-command)))
 | 
			
		||||
    (funcall stop-livedown
 | 
			
		||||
             (format "livedown stop --port %s &"
 | 
			
		||||
                     livedown-port))))
 | 
			
		||||
 | 
			
		||||
(if livedown-autostart
 | 
			
		||||
  (eval-after-load 'markdown-mode '(livedown-preview)))
 | 
			
		||||
 | 
			
		||||
(add-hook 'kill-emacs-query-functions (lambda () (livedown-kill t)))
 | 
			
		||||
 | 
			
		||||
(provide 'livedown)
 | 
			
		||||
;;; livedown.el ends here
 | 
			
		||||
							
								
								
									
										261
									
								
								.emacs.d/plugins/org-ac.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										261
									
								
								.emacs.d/plugins/org-ac.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,261 @@
 | 
			
		||||
;;; org-ac.el --- Some auto-complete sources for org-mode
 | 
			
		||||
 | 
			
		||||
;; Copyright (C) 2014  Hiroaki Otsu
 | 
			
		||||
 | 
			
		||||
;; Author: Hiroaki Otsu <ootsuhiroaki@gmail.com>
 | 
			
		||||
;; Keywords: org, completion
 | 
			
		||||
;; URL: https://github.com/aki2o/org-ac
 | 
			
		||||
;; Version: 0.0.2
 | 
			
		||||
;; Package-Requires: ((auto-complete-pcmp "0.0.1") (log4e "0.2.0") (yaxception "0.1"))
 | 
			
		||||
 | 
			
		||||
;; This program is free software; you can redistribute it and/or modify
 | 
			
		||||
;; it under the terms of the GNU General Public License as published by
 | 
			
		||||
;; the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
;; (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
;; This file is distributed in the hope that it will be useful,
 | 
			
		||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
;; GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
;; You should have received a copy of the GNU General Public License
 | 
			
		||||
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
;; 
 | 
			
		||||
;; This extension provides auto-complete sources for org-mode.
 | 
			
		||||
 | 
			
		||||
;;; Dependency:
 | 
			
		||||
;; 
 | 
			
		||||
;; - auto-complete-pcmp.el ( see <https://github.com/aki2o/auto-complete-pcmp> )
 | 
			
		||||
;; - yaxception.el ( see <https://github.com/aki2o/yaxception> )
 | 
			
		||||
;; - log4e.el ( see <https://github.com/aki2o/log4e> )
 | 
			
		||||
 | 
			
		||||
;;; Installation:
 | 
			
		||||
;;
 | 
			
		||||
;; Put this to your load-path.
 | 
			
		||||
;; And put the following lines in your .emacs or site-start.el file.
 | 
			
		||||
;; 
 | 
			
		||||
;; (require 'org-ac)
 | 
			
		||||
 | 
			
		||||
;;; Configuration:
 | 
			
		||||
;; 
 | 
			
		||||
;; ;; Make config suit for you. About the config item, see Customization or eval the following sexp.
 | 
			
		||||
;; ;; (customize-group "org-ac")
 | 
			
		||||
;; 
 | 
			
		||||
;; (org-ac/config-default)
 | 
			
		||||
 | 
			
		||||
;;; Customization:
 | 
			
		||||
;; 
 | 
			
		||||
;; [EVAL] (autodoc-document-lisp-buffer :type 'user-variable :prefix "org-ac/" :docstring t)
 | 
			
		||||
;; `org-ac/ac-trigger-command-keys'
 | 
			
		||||
;; Keystrokes for doing `ac-start' with self insert.
 | 
			
		||||
;; 
 | 
			
		||||
;;  *** END auto-documentation
 | 
			
		||||
 | 
			
		||||
;;; API:
 | 
			
		||||
;; 
 | 
			
		||||
;; [EVAL] (autodoc-document-lisp-buffer :type 'command :prefix "org-ac/" :docstring t)
 | 
			
		||||
;; `org-ac/setup-current-buffer'
 | 
			
		||||
;; Do setup for using org-ac in current buffer.
 | 
			
		||||
;; 
 | 
			
		||||
;;  *** END auto-documentation
 | 
			
		||||
;; [Note] Functions and variables other than listed above, Those specifications may be changed without notice.
 | 
			
		||||
 | 
			
		||||
;;; Tested On:
 | 
			
		||||
;; 
 | 
			
		||||
;; - Emacs ... GNU Emacs 24.3.1 (i686-pc-linux-gnu, GTK+ Version 3.4.2) of 2013-08-22 on chindi02, modified by Debian
 | 
			
		||||
;; - auto-complete-pcmp.el ... Version 0.0.1
 | 
			
		||||
;; - yaxception.el ... Version 0.1
 | 
			
		||||
;; - log4e.el ... Version 0.2.0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;; Enjoy!!!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(eval-when-compile (require 'cl))
 | 
			
		||||
(require 'org)
 | 
			
		||||
(require 'auto-complete-pcmp)
 | 
			
		||||
(require 'rx)
 | 
			
		||||
(require 'log4e)
 | 
			
		||||
(require 'yaxception)
 | 
			
		||||
 | 
			
		||||
(defgroup org-ac nil
 | 
			
		||||
  "Auto completion for org-mode."
 | 
			
		||||
  :group 'org
 | 
			
		||||
  :prefix "org-ac/")
 | 
			
		||||
 | 
			
		||||
(defcustom org-ac/ac-trigger-command-keys '("\\" "*" "SPC" ":" "[" "+")
 | 
			
		||||
  "Keystrokes for doing `ac-start' with self insert."
 | 
			
		||||
  :type '(repeat string)
 | 
			
		||||
  :group 'org-ac)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(log4e:deflogger "org-ac" "%t [%l] %m" "%H:%M:%S" '((fatal . "fatal")
 | 
			
		||||
                                                    (error . "error")
 | 
			
		||||
                                                    (warn  . "warn")
 | 
			
		||||
                                                    (info  . "info")
 | 
			
		||||
                                                    (debug . "debug")
 | 
			
		||||
                                                    (trace . "trace")))
 | 
			
		||||
(org-ac--log-set-level 'trace)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(defun* org-ac--show-message (msg &rest args)
 | 
			
		||||
  (apply 'message (concat "[ORG-AC] " msg) args)
 | 
			
		||||
  nil)
 | 
			
		||||
 | 
			
		||||
(defun org-ac--complete-close-option-at-current-point ()
 | 
			
		||||
  (let ((pt (point)))
 | 
			
		||||
    (yaxception:$
 | 
			
		||||
      (yaxception:try
 | 
			
		||||
        (org-ac--trace "start complete close option at current point")
 | 
			
		||||
        (when (save-excursion
 | 
			
		||||
                (re-search-backward "#\\+\\(begin\\|BEGIN\\)_\\([a-zA-Z0-9]+\\) *\\=" nil t))
 | 
			
		||||
          (let* ((opennm (match-string-no-properties 1))
 | 
			
		||||
                 (typenm (match-string-no-properties 2))
 | 
			
		||||
                 (closenm (cond ((string= opennm "begin") "end")
 | 
			
		||||
                                ((string= opennm "BEGIN") "END")))
 | 
			
		||||
                 (case-fold-search t))
 | 
			
		||||
            (if (or (not (re-search-forward "^[ \t]*#\\+" nil t))
 | 
			
		||||
                    (not (re-search-forward (concat "\\=" closenm "_") nil t)))
 | 
			
		||||
                (progn (goto-char pt)
 | 
			
		||||
                       (insert "\n#+" closenm "_" typenm)
 | 
			
		||||
                       (org-cycle))
 | 
			
		||||
              (let ((currtypenm (if (re-search-forward "\\=\\([a-zA-Z0-9]+\\)" nil t)
 | 
			
		||||
                                    (match-string-no-properties 1)
 | 
			
		||||
                                  "")))
 | 
			
		||||
                (backward-delete-char (+ (length closenm)
 | 
			
		||||
                                         1
 | 
			
		||||
                                         (length currtypenm)))
 | 
			
		||||
                (insert closenm "_" typenm)))
 | 
			
		||||
            (goto-char pt))))
 | 
			
		||||
      (yaxception:catch 'error e
 | 
			
		||||
        (org-ac--show-message "Failed complete close option : %s" (yaxception:get-text e))
 | 
			
		||||
        (org-ac--error "failed complete close option at current point : %s\n%s"
 | 
			
		||||
                       (yaxception:get-text e)
 | 
			
		||||
                       (yaxception:get-stack-trace-string e))
 | 
			
		||||
        (goto-char pt)))))
 | 
			
		||||
 | 
			
		||||
(defun org-ac--get-link-head-candidates ()
 | 
			
		||||
  (append (ac-pcmp/get-ac-candidates)
 | 
			
		||||
          (mapcar (lambda (x) (concat x ":")) org-link-types)))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-tex
 | 
			
		||||
  '((candidates . ac-pcmp/get-ac-candidates)
 | 
			
		||||
    (prefix . "\\\\\\([a-zA-Z0-9_-]*\\)")
 | 
			
		||||
    (symbol . "t")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . ac-pcmp/do-ac-action)))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-head
 | 
			
		||||
  '((candidates . ac-pcmp/get-ac-candidates)
 | 
			
		||||
    (prefix . "[^\r\n*]\\*\\([^\t\r\n]*\\)")
 | 
			
		||||
    (symbol . "h")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . ac-pcmp/do-ac-action)))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-todo
 | 
			
		||||
  '((candidates . ac-pcmp/get-ac-candidates)
 | 
			
		||||
    (prefix . "^\\*+ \\([a-zA-Z0-9_-]*\\)")
 | 
			
		||||
    (symbol . "d")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . ac-pcmp/do-ac-action)))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-tag
 | 
			
		||||
  '((candidates . ac-pcmp/get-ac-candidates)
 | 
			
		||||
    (prefix . "[ \t]:\\([a-zA-Z0-9_-]*\\)")
 | 
			
		||||
    (symbol . "t")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . ac-pcmp/do-ac-action)))
 | 
			
		||||
 | 
			
		||||
(defvar org-ac--regexp-link-head (rx-to-string `(and "["
 | 
			
		||||
                                                     (* (any " \t"))
 | 
			
		||||
                                                     "["
 | 
			
		||||
                                                     (group (* (not (any ":*]")))))))
 | 
			
		||||
(defvar ac-source-org-ac-link-head
 | 
			
		||||
  `((candidates . org-ac--get-link-head-candidates)
 | 
			
		||||
    (prefix . ,org-ac--regexp-link-head)
 | 
			
		||||
    (symbol . "l")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . (lambda ()
 | 
			
		||||
                (ac-pcmp/do-ac-action)
 | 
			
		||||
                (ac-start)))))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-option
 | 
			
		||||
  '((candidates . ac-pcmp/get-ac-candidates)
 | 
			
		||||
    (prefix . "^[ \t]*#\\+\\([a-zA-Z0-9_:=-]*\\)")
 | 
			
		||||
    (symbol . "o")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . (lambda ()
 | 
			
		||||
                (ac-pcmp/do-ac-action)
 | 
			
		||||
                (org-ac--complete-close-option-at-current-point)
 | 
			
		||||
                (auto-complete '(ac-source-org-ac-option-key))))))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-option-key
 | 
			
		||||
  '((candidates . ac-pcmp/get-ac-candidates)
 | 
			
		||||
    (prefix . "^[ \t]*#\\+[a-zA-Z0-9_:=-]+ +\\([a-zA-Z0-9_-]*\\)")
 | 
			
		||||
    (symbol . "k")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . ac-pcmp/do-ac-action)))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-option-options
 | 
			
		||||
  '((candidates . ac-pcmp/get-ac-candidates)
 | 
			
		||||
    (prefix . "^[ \t]*#\\+\\(?:options\\|OPTIONS\\):.* +\\([a-zA-Z0-9_-]*\\)")
 | 
			
		||||
    (symbol . "x")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (cache)
 | 
			
		||||
    (action . ac-pcmp/do-ac-action)))
 | 
			
		||||
 | 
			
		||||
(defvar ac-source-org-ac-file
 | 
			
		||||
  '((init . (setq ac-filename-cache nil))
 | 
			
		||||
    (candidates . org-ac/file-candidate)
 | 
			
		||||
    (prefix . "\\[file:\\(.*\\)")
 | 
			
		||||
    (symbol . "f")
 | 
			
		||||
    (requires . 0)
 | 
			
		||||
    (action . ac-start)
 | 
			
		||||
    (limit . nil)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun org-ac/setup-current-buffer ()
 | 
			
		||||
  "Do setup for using org-ac in current buffer."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (when (eq major-mode 'org-mode)
 | 
			
		||||
    (loop for stroke in org-ac/ac-trigger-command-keys
 | 
			
		||||
          do (local-set-key (read-kbd-macro stroke) 'ac-pcmp/self-insert-command-with-ac-start))
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-tex)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-head)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-todo)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-tag)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-link-head)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-option)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-option-key)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-option-options)
 | 
			
		||||
    (add-to-list 'ac-sources 'ac-source-org-ac-file)
 | 
			
		||||
    (auto-complete-mode t)))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun org-ac/config-default ()
 | 
			
		||||
  "Do setting recommemded configuration."
 | 
			
		||||
  (add-to-list 'ac-modes 'org-mode)
 | 
			
		||||
  (add-hook 'org-mode-hook 'org-ac/setup-current-buffer t))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(defun org-ac/file-candidate ()
 | 
			
		||||
  "Adds [file: to the normal file completition, plus allows relative paths"
 | 
			
		||||
  (if (string-match "^[~./]+" ac-prefix)
 | 
			
		||||
      (ac-filename-candidate)
 | 
			
		||||
    (let ((ac-prefix (concat "./" ac-prefix)))
 | 
			
		||||
      (mapcar (lambda (path) (substring path 2))
 | 
			
		||||
              (ac-filename-candidate)))))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(provide 'org-ac)
 | 
			
		||||
;;; org-ac.el ends here
 | 
			
		||||
							
								
								
									
										483
									
								
								.emacs.d/plugins/smex.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										483
									
								
								.emacs.d/plugins/smex.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,483 @@
 | 
			
		||||
;;; smex.el --- M-x interface with Ido-style fuzzy matching. -*- lexical-binding: t; -*-
 | 
			
		||||
 | 
			
		||||
;; Copyright (C) 2009-2014 Cornelius Mika and contributors
 | 
			
		||||
;;
 | 
			
		||||
;; Author: Cornelius Mika <cornelius.mika@gmail.com> and contributors
 | 
			
		||||
;; URL: http://github.com/nonsequitur/smex/
 | 
			
		||||
;; Package-Requires: ((emacs "24"))
 | 
			
		||||
;; Version: 3.0
 | 
			
		||||
;; Keywords: convenience, usability
 | 
			
		||||
 | 
			
		||||
;; This file is not part of GNU Emacs.
 | 
			
		||||
 | 
			
		||||
;;; License:
 | 
			
		||||
 | 
			
		||||
;; Licensed under the same terms as Emacs.
 | 
			
		||||
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
 | 
			
		||||
;; Quick start:
 | 
			
		||||
;; run (smex-initialize)
 | 
			
		||||
;;
 | 
			
		||||
;; Bind the following commands:
 | 
			
		||||
;; smex, smex-major-mode-commands
 | 
			
		||||
;;
 | 
			
		||||
;; For a detailed introduction see:
 | 
			
		||||
;; http://github.com/nonsequitur/smex/blob/master/README.markdown
 | 
			
		||||
 | 
			
		||||
;;; Code:
 | 
			
		||||
 | 
			
		||||
(require 'ido)
 | 
			
		||||
 | 
			
		||||
(defgroup smex nil
 | 
			
		||||
  "M-x interface with Ido-style fuzzy matching and ranking heuristics."
 | 
			
		||||
  :group 'extensions
 | 
			
		||||
  :group 'convenience
 | 
			
		||||
  :link '(emacs-library-link :tag "Lisp File" "smex.el"))
 | 
			
		||||
 | 
			
		||||
(defcustom smex-auto-update t
 | 
			
		||||
  "If non-nil, `Smex' checks for new commands each time it is run.
 | 
			
		||||
Turn it off for minor speed improvements on older systems."
 | 
			
		||||
  :type 'boolean
 | 
			
		||||
  :group 'smex)
 | 
			
		||||
 | 
			
		||||
(defcustom smex-save-file (locate-user-emacs-file "smex-items" ".smex-items")
 | 
			
		||||
  "File in which the smex state is saved between Emacs sessions.
 | 
			
		||||
Variables stored are: `smex-data', `smex-history'.
 | 
			
		||||
Must be set before initializing Smex."
 | 
			
		||||
  :type 'string
 | 
			
		||||
  :group 'smex)
 | 
			
		||||
 | 
			
		||||
(defcustom smex-history-length 7
 | 
			
		||||
  "Determines on how many recently executed commands
 | 
			
		||||
Smex should keep a record.
 | 
			
		||||
Must be set before initializing Smex."
 | 
			
		||||
  :type 'integer
 | 
			
		||||
  :group 'smex)
 | 
			
		||||
 | 
			
		||||
(defcustom smex-prompt-string "M-x "
 | 
			
		||||
  "String to display in the Smex prompt."
 | 
			
		||||
  :type 'string
 | 
			
		||||
  :group 'smex)
 | 
			
		||||
 | 
			
		||||
(defcustom smex-flex-matching t
 | 
			
		||||
  "Enables Ido flex matching. On by default.
 | 
			
		||||
Set this to nil to disable fuzzy matching."
 | 
			
		||||
  :type 'boolean
 | 
			
		||||
  :group 'smex)
 | 
			
		||||
 | 
			
		||||
(defvar smex-initialized-p nil)
 | 
			
		||||
(defvar smex-cache)
 | 
			
		||||
(defvar smex-ido-cache)
 | 
			
		||||
(defvar smex-data)
 | 
			
		||||
(defvar smex-history)
 | 
			
		||||
(defvar smex-command-count 0)
 | 
			
		||||
(defvar smex-custom-action nil)
 | 
			
		||||
 | 
			
		||||
;; Check if Smex is supported
 | 
			
		||||
(when (equal (cons 1 1)
 | 
			
		||||
             (ignore-errors
 | 
			
		||||
               (subr-arity (symbol-function 'execute-extended-command))))
 | 
			
		||||
  (error "Your Emacs has a non-elisp version of `execute-extended-command', which is incompatible with Smex"))
 | 
			
		||||
 | 
			
		||||
;;--------------------------------------------------------------------------------
 | 
			
		||||
;; Smex Interface
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun smex ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (unless smex-initialized-p
 | 
			
		||||
    (smex-initialize))
 | 
			
		||||
  (if (smex-already-running)
 | 
			
		||||
      (smex-update-and-rerun)
 | 
			
		||||
    (and smex-auto-update
 | 
			
		||||
         (smex-detect-new-commands)
 | 
			
		||||
         (smex-update))
 | 
			
		||||
    (smex-read-and-run smex-ido-cache)))
 | 
			
		||||
 | 
			
		||||
(defun smex-already-running ()
 | 
			
		||||
  (and (boundp 'ido-choice-list)
 | 
			
		||||
       (eql ido-choice-list smex-ido-cache)
 | 
			
		||||
       (minibuffer-window-active-p (selected-window))))
 | 
			
		||||
 | 
			
		||||
(defun smex-update-and-rerun ()
 | 
			
		||||
  (smex-do-with-selected-item
 | 
			
		||||
   (lambda (_) (smex-update) (smex-read-and-run smex-ido-cache ido-text))))
 | 
			
		||||
 | 
			
		||||
(defun smex-read-and-run (commands &optional initial-input)
 | 
			
		||||
  (let* ((chosen-item-name (smex-completing-read commands initial-input))
 | 
			
		||||
         (chosen-item (intern chosen-item-name)))
 | 
			
		||||
    (if smex-custom-action
 | 
			
		||||
        (let ((action smex-custom-action))
 | 
			
		||||
          (setq smex-custom-action nil)
 | 
			
		||||
          (funcall action chosen-item))
 | 
			
		||||
      (unwind-protect
 | 
			
		||||
          (with-no-warnings ; Don't warn about interactive use of `execute-extended-command'
 | 
			
		||||
            (execute-extended-command current-prefix-arg chosen-item-name))
 | 
			
		||||
        (smex-rank chosen-item)))))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun smex-major-mode-commands ()
 | 
			
		||||
  "Like `smex', but limited to commands that are relevant to the active major mode."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (unless smex-initialized-p
 | 
			
		||||
    (smex-initialize))
 | 
			
		||||
  (let ((commands (delete-dups (append (smex-extract-commands-from-keymap (current-local-map))
 | 
			
		||||
                                       (smex-extract-commands-from-features major-mode)))))
 | 
			
		||||
    (setq commands (smex-sort-according-to-cache commands))
 | 
			
		||||
    (setq commands (mapcar #'symbol-name commands))
 | 
			
		||||
    (smex-read-and-run commands)))
 | 
			
		||||
 | 
			
		||||
(defun smex-completing-read (choices initial-input)
 | 
			
		||||
  (let ((ido-completion-map ido-completion-map)
 | 
			
		||||
        (ido-setup-hook (cons 'smex-prepare-ido-bindings ido-setup-hook))
 | 
			
		||||
        (ido-enable-prefix nil)
 | 
			
		||||
        (ido-enable-flex-matching smex-flex-matching)
 | 
			
		||||
        (ido-max-prospects 10)
 | 
			
		||||
        (minibuffer-completion-table choices))
 | 
			
		||||
    (ido-completing-read (smex-prompt-with-prefix-arg) choices nil nil
 | 
			
		||||
                         initial-input 'extended-command-history (car choices))))
 | 
			
		||||
 | 
			
		||||
(defun smex-prompt-with-prefix-arg ()
 | 
			
		||||
  (if (not current-prefix-arg)
 | 
			
		||||
      smex-prompt-string
 | 
			
		||||
    (concat
 | 
			
		||||
     (if (eq current-prefix-arg '-)
 | 
			
		||||
         "- "
 | 
			
		||||
       (if (integerp current-prefix-arg)
 | 
			
		||||
           (format "%d " current-prefix-arg)
 | 
			
		||||
         (if (= (car current-prefix-arg) 4)
 | 
			
		||||
             "C-u "
 | 
			
		||||
           (format "%d " (car current-prefix-arg)))))
 | 
			
		||||
     smex-prompt-string)))
 | 
			
		||||
 | 
			
		||||
(defun smex-prepare-ido-bindings ()
 | 
			
		||||
  (define-key ido-completion-map (kbd "TAB") 'minibuffer-complete)
 | 
			
		||||
  (define-key ido-completion-map (kbd "C-h f") 'smex-describe-function)
 | 
			
		||||
  (define-key ido-completion-map (kbd "C-h w") 'smex-where-is)
 | 
			
		||||
  (define-key ido-completion-map (kbd "M-.") 'smex-find-function)
 | 
			
		||||
  (define-key ido-completion-map (kbd "C-a") 'move-beginning-of-line))
 | 
			
		||||
 | 
			
		||||
;;--------------------------------------------------------------------------------
 | 
			
		||||
;; Cache and Maintenance
 | 
			
		||||
 | 
			
		||||
(defun smex-rebuild-cache ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (setq smex-cache nil)
 | 
			
		||||
 | 
			
		||||
  ;; Build up list 'new-commands' and later put it at the end of 'smex-cache'.
 | 
			
		||||
  ;; This speeds up sorting.
 | 
			
		||||
  (let (new-commands)
 | 
			
		||||
    (mapatoms (lambda (symbol)
 | 
			
		||||
                (when (commandp symbol)
 | 
			
		||||
                  (let ((known-command (assq symbol smex-data)))
 | 
			
		||||
                    (if known-command
 | 
			
		||||
                        (setq smex-cache (cons known-command smex-cache))
 | 
			
		||||
                      (setq new-commands (cons (list symbol) new-commands)))))))
 | 
			
		||||
    (if (eq (length smex-cache) 0)
 | 
			
		||||
        (setq smex-cache new-commands)
 | 
			
		||||
      (setcdr (last smex-cache) new-commands)))
 | 
			
		||||
 | 
			
		||||
  (setq smex-cache (sort smex-cache 'smex-sorting-rules))
 | 
			
		||||
  (smex-restore-history)
 | 
			
		||||
  (setq smex-ido-cache (smex-convert-for-ido smex-cache)))
 | 
			
		||||
 | 
			
		||||
(defun smex-convert-for-ido (command-items)
 | 
			
		||||
  (mapcar (lambda (command-item) (symbol-name (car command-item))) command-items))
 | 
			
		||||
 | 
			
		||||
(defun smex-restore-history ()
 | 
			
		||||
  "Rearranges `smex-cache' according to `smex-history'"
 | 
			
		||||
  (if (> (length smex-history) smex-history-length)
 | 
			
		||||
      (setcdr (nthcdr (- smex-history-length 1) smex-history) nil))
 | 
			
		||||
  (mapc (lambda (command)
 | 
			
		||||
          (unless (eq command (caar smex-cache))
 | 
			
		||||
            (let ((command-cell-position (smex-detect-position
 | 
			
		||||
                                          smex-cache
 | 
			
		||||
                                          (lambda (cell)
 | 
			
		||||
                                            (eq command (caar cell))))))
 | 
			
		||||
              (when command-cell-position
 | 
			
		||||
                (let ((command-cell (smex-remove-nth-cell
 | 
			
		||||
                                     command-cell-position smex-cache)))
 | 
			
		||||
                  (setcdr command-cell smex-cache)
 | 
			
		||||
                  (setq smex-cache command-cell))))))
 | 
			
		||||
        (reverse smex-history)))
 | 
			
		||||
 | 
			
		||||
(defun smex-sort-according-to-cache (list)
 | 
			
		||||
  "Sorts a list of commands by their order in `smex-cache'"
 | 
			
		||||
  (let (sorted)
 | 
			
		||||
    (dolist (command-item smex-cache)
 | 
			
		||||
      (let ((command (car command-item)))
 | 
			
		||||
        (when (memq command list)
 | 
			
		||||
          (setq sorted (cons command sorted))
 | 
			
		||||
          (setq list (delq command list)))))
 | 
			
		||||
    (nreverse (append list sorted))))
 | 
			
		||||
 | 
			
		||||
(defun smex-update ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (smex-save-history)
 | 
			
		||||
  (smex-rebuild-cache))
 | 
			
		||||
 | 
			
		||||
(defun smex-detect-new-commands ()
 | 
			
		||||
  (let ((i 0))
 | 
			
		||||
    (mapatoms (lambda (symbol) (if (commandp symbol) (setq i (1+ i)))))
 | 
			
		||||
    (unless (= i smex-command-count)
 | 
			
		||||
      (setq smex-command-count i))))
 | 
			
		||||
 | 
			
		||||
(defun smex-auto-update (&optional idle-time)
 | 
			
		||||
  "Update Smex when Emacs has been idle for IDLE-TIME."
 | 
			
		||||
  (unless idle-time (setq idle-time 60))
 | 
			
		||||
  (run-with-idle-timer idle-time t
 | 
			
		||||
                       '(lambda () (if (smex-detect-new-commands) (smex-update)))))
 | 
			
		||||
 | 
			
		||||
;;;###autoload
 | 
			
		||||
(defun smex-initialize ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (unless ido-mode (smex-initialize-ido))
 | 
			
		||||
  (smex-load-save-file)
 | 
			
		||||
  (smex-detect-new-commands)
 | 
			
		||||
  (smex-rebuild-cache)
 | 
			
		||||
  (add-hook 'kill-emacs-hook 'smex-save-to-file)
 | 
			
		||||
  (setq smex-initialized-p t))
 | 
			
		||||
 | 
			
		||||
(defun smex-initialize-ido ()
 | 
			
		||||
  "Sets up a minimal Ido environment for `ido-completing-read'."
 | 
			
		||||
  (with-no-warnings ; `ido-init-completion-maps' is deprecated in Emacs 25
 | 
			
		||||
    (ido-init-completion-maps))
 | 
			
		||||
  (add-hook 'minibuffer-setup-hook 'ido-minibuffer-setup))
 | 
			
		||||
 | 
			
		||||
(defsubst smex-save-file-not-empty-p ()
 | 
			
		||||
  (string-match-p "\[^[:space:]\]" (buffer-string)))
 | 
			
		||||
 | 
			
		||||
(defun smex-load-save-file ()
 | 
			
		||||
  "Loads `smex-history' and `smex-data' from `smex-save-file'"
 | 
			
		||||
  (let ((save-file (expand-file-name smex-save-file)))
 | 
			
		||||
    (if (file-readable-p save-file)
 | 
			
		||||
        (with-temp-buffer
 | 
			
		||||
          (insert-file-contents save-file)
 | 
			
		||||
          (condition-case nil
 | 
			
		||||
              (setq smex-history (read (current-buffer))
 | 
			
		||||
                    smex-data    (read (current-buffer)))
 | 
			
		||||
            (error (if (smex-save-file-not-empty-p)
 | 
			
		||||
                       (error "Invalid data in smex-save-file (%s). Can't restore history."
 | 
			
		||||
                              smex-save-file)
 | 
			
		||||
                     (unless (boundp 'smex-history) (setq smex-history nil))
 | 
			
		||||
                     (unless (boundp 'smex-data)    (setq smex-data nil))))))
 | 
			
		||||
      (setq smex-history nil smex-data nil))))
 | 
			
		||||
 | 
			
		||||
(defun smex-save-history ()
 | 
			
		||||
  "Updates `smex-history'"
 | 
			
		||||
  (setq smex-history nil)
 | 
			
		||||
  (let ((cell smex-cache))
 | 
			
		||||
    (dotimes (_ smex-history-length)
 | 
			
		||||
      (setq smex-history (cons (caar cell) smex-history))
 | 
			
		||||
      (setq cell (cdr cell))))
 | 
			
		||||
  (setq smex-history (nreverse smex-history)))
 | 
			
		||||
 | 
			
		||||
(defmacro smex-pp (list-var)
 | 
			
		||||
  `(smex-pp* ,list-var ,(symbol-name list-var)))
 | 
			
		||||
 | 
			
		||||
(defun smex-save-to-file ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (smex-save-history)
 | 
			
		||||
  (with-temp-file (expand-file-name smex-save-file)
 | 
			
		||||
    (smex-pp smex-history)
 | 
			
		||||
    (smex-pp smex-data)))
 | 
			
		||||
 | 
			
		||||
;;--------------------------------------------------------------------------------
 | 
			
		||||
;; Ranking
 | 
			
		||||
 | 
			
		||||
(defun smex-sorting-rules (command-item other-command-item)
 | 
			
		||||
  "Returns true if COMMAND-ITEM should sort before OTHER-COMMAND-ITEM."
 | 
			
		||||
  (let* ((count        (or (cdr command-item      ) 0))
 | 
			
		||||
         (other-count  (or (cdr other-command-item) 0))
 | 
			
		||||
         (name         (car command-item))
 | 
			
		||||
         (other-name   (car other-command-item))
 | 
			
		||||
         (length       (length (symbol-name name)))
 | 
			
		||||
         (other-length (length (symbol-name other-name))))
 | 
			
		||||
    (or (> count other-count)                         ; 1. Frequency of use
 | 
			
		||||
        (and (= count other-count)
 | 
			
		||||
             (or (< length other-length)              ; 2. Command length
 | 
			
		||||
                 (and (= length other-length)
 | 
			
		||||
                      (string< name other-name))))))) ; 3. Alphabetical order
 | 
			
		||||
 | 
			
		||||
(defun smex-rank (command)
 | 
			
		||||
  (let ((command-item (or (assq command smex-cache)
 | 
			
		||||
                          ;; Update caches and try again if not found.
 | 
			
		||||
                          (progn (smex-update)
 | 
			
		||||
                                 (assq command smex-cache)))))
 | 
			
		||||
    (when command-item
 | 
			
		||||
      (smex-update-counter command-item)
 | 
			
		||||
 | 
			
		||||
      ;; Don't touch the cache order if the chosen command
 | 
			
		||||
      ;; has just been execucted previously.
 | 
			
		||||
      (unless (eq command-item (car smex-cache))
 | 
			
		||||
        (let (command-cell
 | 
			
		||||
              (pos (smex-detect-position smex-cache (lambda (cell)
 | 
			
		||||
                                                      (eq command-item (car cell))))))
 | 
			
		||||
          ;; Remove the just executed command.
 | 
			
		||||
          (setq command-cell (smex-remove-nth-cell pos smex-cache))
 | 
			
		||||
          ;; And put it on top of the cache.
 | 
			
		||||
          (setcdr command-cell smex-cache)
 | 
			
		||||
          (setq smex-cache command-cell)
 | 
			
		||||
 | 
			
		||||
          ;; Repeat the same for the ido cache. Should this be DRYed?
 | 
			
		||||
          (setq command-cell (smex-remove-nth-cell pos smex-ido-cache))
 | 
			
		||||
          (setcdr command-cell smex-ido-cache)
 | 
			
		||||
          (setq smex-ido-cache command-cell)
 | 
			
		||||
 | 
			
		||||
          ;; Now put the last history item back to its normal place.
 | 
			
		||||
          (smex-sort-item-at smex-history-length))))))
 | 
			
		||||
 | 
			
		||||
(defun smex-update-counter (command-item)
 | 
			
		||||
  (let ((count (cdr command-item)))
 | 
			
		||||
    (setcdr command-item
 | 
			
		||||
            (if count
 | 
			
		||||
                (1+ count)
 | 
			
		||||
              ;; Else: Command has just been executed for the first time.
 | 
			
		||||
              ;; Add it to `smex-data'.
 | 
			
		||||
              (if smex-data
 | 
			
		||||
                  (setcdr (last smex-data) (list command-item))
 | 
			
		||||
                (setq smex-data (list command-item)))
 | 
			
		||||
              1))))
 | 
			
		||||
 | 
			
		||||
(defun smex-sort-item-at (n)
 | 
			
		||||
  "Sorts item at position N in `smex-cache'."
 | 
			
		||||
  (let* ((command-cell (nthcdr n smex-cache))
 | 
			
		||||
         (command-item (car command-cell)))
 | 
			
		||||
    (let ((insert-at (smex-detect-position
 | 
			
		||||
                      command-cell
 | 
			
		||||
                      (lambda (cell)
 | 
			
		||||
                        (smex-sorting-rules command-item (car cell))))))
 | 
			
		||||
      ;; TODO: Should we handle the case of 'insert-at' being nil?
 | 
			
		||||
      ;; This will never happen in practice.
 | 
			
		||||
      (when (> insert-at 1)
 | 
			
		||||
        (setq command-cell (smex-remove-nth-cell n smex-cache))
 | 
			
		||||
        ;; smex-cache just got shorter by one element, so subtract '1' from insert-at.
 | 
			
		||||
        (setq insert-at (+ n (- insert-at 1)))
 | 
			
		||||
        (smex-insert-cell command-cell insert-at smex-cache)
 | 
			
		||||
 | 
			
		||||
        ;; Repeat the same for the ido cache. DRY?
 | 
			
		||||
        (setq command-cell (smex-remove-nth-cell n smex-ido-cache))
 | 
			
		||||
        (smex-insert-cell command-cell insert-at smex-ido-cache)))))
 | 
			
		||||
 | 
			
		||||
(defun smex-detect-position (cell function)
 | 
			
		||||
  "Detects, relatively to CELL, the position of the cell
 | 
			
		||||
on which FUNCTION returns true.
 | 
			
		||||
Only checks cells after CELL, starting with the cell right after CELL.
 | 
			
		||||
Returns nil when reaching the end of the list."
 | 
			
		||||
  (let ((pos 1))
 | 
			
		||||
    (catch 'break
 | 
			
		||||
      (while t
 | 
			
		||||
        (setq cell (cdr cell))
 | 
			
		||||
        (if (not cell)
 | 
			
		||||
            (throw 'break nil)
 | 
			
		||||
          (if (funcall function cell) (throw 'break pos))
 | 
			
		||||
          (setq pos (1+ pos)))))))
 | 
			
		||||
 | 
			
		||||
(defun smex-remove-nth-cell (n list)
 | 
			
		||||
  "Removes and returns the Nth cell in LIST."
 | 
			
		||||
  (let* ((previous-cell (nthcdr (- n 1) list))
 | 
			
		||||
         (result (cdr previous-cell)))
 | 
			
		||||
    (setcdr previous-cell (cdr result))
 | 
			
		||||
    result))
 | 
			
		||||
 | 
			
		||||
(defun smex-insert-cell (new-cell n list)
 | 
			
		||||
  "Inserts cell at position N in LIST."
 | 
			
		||||
  (let* ((cell (nthcdr (- n 1) list))
 | 
			
		||||
         (next-cell (cdr cell)))
 | 
			
		||||
    (setcdr (setcdr cell new-cell) next-cell)))
 | 
			
		||||
 | 
			
		||||
;;--------------------------------------------------------------------------------
 | 
			
		||||
;; Help and Reference
 | 
			
		||||
 | 
			
		||||
(defun smex-do-with-selected-item (fn)
 | 
			
		||||
  (setq smex-custom-action fn)
 | 
			
		||||
  (ido-exit-minibuffer))
 | 
			
		||||
 | 
			
		||||
(defun smex-describe-function ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (smex-do-with-selected-item (lambda (chosen)
 | 
			
		||||
                                (describe-function chosen)
 | 
			
		||||
                                (pop-to-buffer "*Help*"))))
 | 
			
		||||
 | 
			
		||||
(defun smex-where-is ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (smex-do-with-selected-item 'where-is))
 | 
			
		||||
 | 
			
		||||
(defun smex-find-function ()
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (smex-do-with-selected-item 'find-function))
 | 
			
		||||
 | 
			
		||||
(defun smex-extract-commands-from-keymap (map)
 | 
			
		||||
  (let (commands)
 | 
			
		||||
    (smex-parse-keymap map commands)
 | 
			
		||||
    commands))
 | 
			
		||||
 | 
			
		||||
(defun smex-parse-keymap (map commands)
 | 
			
		||||
  (map-keymap (lambda (_binding element)
 | 
			
		||||
                (if (and (listp element) (eq 'keymap (car element)))
 | 
			
		||||
                    (smex-parse-keymap element commands)
 | 
			
		||||
                  ;; Strings are commands, too. Reject them.
 | 
			
		||||
                  (if (and (symbolp element) (commandp element))
 | 
			
		||||
                      (push element commands))))
 | 
			
		||||
              map))
 | 
			
		||||
 | 
			
		||||
(defun smex-extract-commands-from-features (mode)
 | 
			
		||||
  (let ((library-path (symbol-file mode))
 | 
			
		||||
        (mode-name (symbol-name mode))
 | 
			
		||||
        commands)
 | 
			
		||||
 | 
			
		||||
    (string-match "\\(.+?\\)\\(-mode\\)?$" mode-name)
 | 
			
		||||
    ;; 'lisp-mode' -> 'lisp'
 | 
			
		||||
    (setq mode-name (match-string 1 mode-name))
 | 
			
		||||
    (if (string= mode-name "c") (setq mode-name "cc"))
 | 
			
		||||
    (setq mode-name (regexp-quote mode-name))
 | 
			
		||||
 | 
			
		||||
    (dolist (feature load-history)
 | 
			
		||||
      (let ((feature-path (car feature)))
 | 
			
		||||
        (when (and feature-path (or (equal feature-path library-path)
 | 
			
		||||
                                    (string-match mode-name (file-name-nondirectory
 | 
			
		||||
                                                             feature-path))))
 | 
			
		||||
          (dolist (item (cdr feature))
 | 
			
		||||
            (if (and (listp item) (eq 'defun (car item)))
 | 
			
		||||
                (let ((function (cdr item)))
 | 
			
		||||
                  (when (commandp function)
 | 
			
		||||
                    (setq commands (append commands (list function))))))))))
 | 
			
		||||
    commands))
 | 
			
		||||
 | 
			
		||||
(defun smex-show-unbound-commands ()
 | 
			
		||||
  "Shows unbound commands in a new buffer,
 | 
			
		||||
sorted by frequency of use."
 | 
			
		||||
  (interactive)
 | 
			
		||||
  (setq smex-data (sort smex-data 'smex-sorting-rules))
 | 
			
		||||
  (let ((unbound-commands (delq nil
 | 
			
		||||
                                (mapcar (lambda (command-item)
 | 
			
		||||
                                          (unless (where-is-internal (car command-item))
 | 
			
		||||
                                            command-item))
 | 
			
		||||
                                        smex-data))))
 | 
			
		||||
    (view-buffer-other-window "*Smex: Unbound Commands*")
 | 
			
		||||
    (setq buffer-read-only t)
 | 
			
		||||
    (let ((inhibit-read-only t))
 | 
			
		||||
      (erase-buffer)
 | 
			
		||||
      (smex-pp unbound-commands))
 | 
			
		||||
    (set-buffer-modified-p nil)
 | 
			
		||||
    (goto-char (point-min))))
 | 
			
		||||
 | 
			
		||||
;; A copy of `ido-pp' that's compatible with lexical bindings
 | 
			
		||||
(defun smex-pp* (list list-name)
 | 
			
		||||
  (let ((print-level nil) (eval-expression-print-level nil)
 | 
			
		||||
        (print-length nil) (eval-expression-print-length nil))
 | 
			
		||||
    (insert "\n;; ----- " list-name " -----\n(\n ")
 | 
			
		||||
    (while list
 | 
			
		||||
      (let* ((elt (car list))
 | 
			
		||||
             (s (if (consp elt) (car elt) elt)))
 | 
			
		||||
        (if (and (stringp s) (= (length s) 0))
 | 
			
		||||
            (setq s nil))
 | 
			
		||||
        (if s
 | 
			
		||||
            (prin1 elt (current-buffer)))
 | 
			
		||||
        (if (and (setq list (cdr list)) s)
 | 
			
		||||
            (insert "\n "))))
 | 
			
		||||
    (insert "\n)\n")))
 | 
			
		||||
 | 
			
		||||
(provide 'smex)
 | 
			
		||||
;;; smex.el ends here
 | 
			
		||||
							
								
								
									
										42
									
								
								.emacs.d/smex-items
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								.emacs.d/smex-items
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
 | 
			
		||||
;; ----- smex-history -----
 | 
			
		||||
(
 | 
			
		||||
 goto-line
 | 
			
		||||
 overwrite-mode
 | 
			
		||||
 shell
 | 
			
		||||
 load-theme
 | 
			
		||||
 treemacs
 | 
			
		||||
 inf-ruby-console-auto
 | 
			
		||||
 compile
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
;; ----- smex-data -----
 | 
			
		||||
(
 | 
			
		||||
 (lsp-install-server . 6)
 | 
			
		||||
 (treemacs . 17)
 | 
			
		||||
 (lsp-java-update-server . 1)
 | 
			
		||||
 (set-frame-font . 1)
 | 
			
		||||
 (lsp-jt-browser . 6)
 | 
			
		||||
 (sort-lines . 5)
 | 
			
		||||
 (lsp-jt-report-open . 17)
 | 
			
		||||
 (treemacs-edit-workspaces . 2)
 | 
			
		||||
 (treemacs-refresh . 1)
 | 
			
		||||
 (treemacs-mode . 3)
 | 
			
		||||
 (menu-set-font . 2)
 | 
			
		||||
 (magit-commit . 1)
 | 
			
		||||
 (column-number-mode . 1)
 | 
			
		||||
 (set-fill-column . 3)
 | 
			
		||||
 (dap-java-debug . 7)
 | 
			
		||||
 (ruby-indent-exp . 1)
 | 
			
		||||
 (ruby-indent-line . 1)
 | 
			
		||||
 (ruby-mode-menu . 1)
 | 
			
		||||
 (inf-ruby-console-auto . 8)
 | 
			
		||||
 (shell . 4)
 | 
			
		||||
 (package-install-selected-packages . 1)
 | 
			
		||||
 (package-install . 1)
 | 
			
		||||
 (compile . 2)
 | 
			
		||||
 (lsp-mode . 2)
 | 
			
		||||
 (load-theme . 14)
 | 
			
		||||
 (overwrite-mode . 1)
 | 
			
		||||
 (goto-line . 2)
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								.emacs.d/tramp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.emacs.d/tramp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
;; -*- emacs-lisp -*- <21/03/22 00:03:53 /home/yorune/.emacs.d/tramp>
 | 
			
		||||
;; Tramp connection history.  Don't change this file.
 | 
			
		||||
;; Run `M-x tramp-cleanup-all-connections' instead.
 | 
			
		||||
 | 
			
		||||
(((tramp-file-name "sudo" "root" nil "Gentoo" nil nil nil)
 | 
			
		||||
  nil))
 | 
			
		||||
							
								
								
									
										3
									
								
								.emacs.d/transient/history.el
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.emacs.d/transient/history.el
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
((magit-commit nil)
 | 
			
		||||
 (magit-dispatch nil)
 | 
			
		||||
 (magit-push nil))
 | 
			
		||||
							
								
								
									
										104
									
								
								.local/bin/Checking-repo
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										104
									
								
								.local/bin/Checking-repo
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
####################################################
 | 
			
		||||
#
 | 
			
		||||
# SRC_PREPARE
 | 
			
		||||
#
 | 
			
		||||
# Marcin Woźniak
 | 
			
		||||
# y0rune@aol.com
 | 
			
		||||
#
 | 
			
		||||
# Last edit: 16-09-2020
 | 
			
		||||
#
 | 
			
		||||
###################################################
 | 
			
		||||
 | 
			
		||||
mainteiner="Marcin Woźniak"
 | 
			
		||||
 | 
			
		||||
function scanning(){
 | 
			
		||||
    EUSCAN=$(euscan --nocolor --quiet "$1")
 | 
			
		||||
    if [ -n "$EUSCAN" ]; then
 | 
			
		||||
        echo $1
 | 
			
		||||
        echo "=============== NOW: $(find ./* -mindepth 2 -maxdepth 2  -name ''"$1"'*.ebuild' | sort | tail -1) =================
 | 
			
		||||
        $(echo -e "$EUSCAN" | tail -1)"
 | 
			
		||||
        sleep 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function folder(){
 | 
			
		||||
    cd "$1"; git pull || exit
 | 
			
		||||
 | 
			
		||||
    PACKAGES=()
 | 
			
		||||
 | 
			
		||||
    for FILE in */*
 | 
			
		||||
    do
 | 
			
		||||
        PACKAGE=$(echo "$FILE" | grep -Eo '[A-z0-9_-]+$')
 | 
			
		||||
        PACKAGES+=("$PACKAGE")
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    for i in "${PACKAGES[@]}"
 | 
			
		||||
    do
 | 
			
		||||
        scanning "$i" &
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    for j in $(jobs -p)
 | 
			
		||||
    do
 | 
			
		||||
        wait "$j"
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    echo -n ">>> Done scanning $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function nofolder(){
 | 
			
		||||
    if [ -z "${1}" ]; then
 | 
			
		||||
        echo "No overlay names given"
 | 
			
		||||
        echo "Please give at least one overlay name as a commandline argument"
 | 
			
		||||
        echo "Exiting"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
for overlay in "${@}"
 | 
			
		||||
do
 | 
			
		||||
    for ebuild in $(EIX_LIMIT=0 eix --only-names --in-overlay "${overlay}")
 | 
			
		||||
    do
 | 
			
		||||
        euscan --nocolor --quiet "${ebuild}" &
 | 
			
		||||
        sleep 1
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    for j in $(jobs -p)
 | 
			
		||||
    do
 | 
			
		||||
        wait "$j"
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    echo -n ">>> Done scanning ${overlay}"
 | 
			
		||||
done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function help(){
 | 
			
		||||
    echo "You can use:"
 | 
			
		||||
    echo "*   -r or --repo <HERE-REPO-NAME>"
 | 
			
		||||
    echo "*   -f or --folder <FOLDER-NAME>"
 | 
			
		||||
    echo
 | 
			
		||||
    echo "Example of usage"
 | 
			
		||||
    echo "./logeuscan -r src_prepare-overlay"
 | 
			
		||||
    echo "./logeuscan -f ~/git/src_prepare-overlay"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function main(){
 | 
			
		||||
    [ "$(whereis eix | wc -w)" -le "1" ] && { echo "The eix is NOT installed"; exit; }
 | 
			
		||||
    [ "$(whereis euscan | wc -w)" -le "1" ] && { echo "The euscan is NOT installed"; exit; }
 | 
			
		||||
    case $1 in
 | 
			
		||||
        -h|--help)
 | 
			
		||||
            help
 | 
			
		||||
            ;;
 | 
			
		||||
        -r|--repo)
 | 
			
		||||
            nofolder "$2" | tee -a "euscan-$(date -I).log"
 | 
			
		||||
            ;;
 | 
			
		||||
        -f|--folder)
 | 
			
		||||
            folder "$2" | tee -a "euscan-$(date -I).log"
 | 
			
		||||
 | 
			
		||||
            ;;
 | 
			
		||||
        *)
 | 
			
		||||
        echo "No found variable"; echo; help
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main "$@"
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/Logs
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/Logs
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
emerge-logs
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								.local/bin/__pycache__/pwiz.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.local/bin/__pycache__/pwiz.cpython-38.pyc
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										177
									
								
								.local/bin/ansible
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										177
									
								
								.local/bin/ansible
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,177 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
 | 
			
		||||
#
 | 
			
		||||
# This file is part of Ansible
 | 
			
		||||
#
 | 
			
		||||
# Ansible is free software: you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# Ansible is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
# PYTHON_ARGCOMPLETE_OK
 | 
			
		||||
 | 
			
		||||
from __future__ import (absolute_import, division, print_function)
 | 
			
		||||
__metaclass__ = type
 | 
			
		||||
 | 
			
		||||
__requires__ = ['ansible_core']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import errno
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
import sys
 | 
			
		||||
import traceback
 | 
			
		||||
 | 
			
		||||
from ansible import context
 | 
			
		||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
 | 
			
		||||
from ansible.module_utils._text import to_text
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Used for determining if the system is running a new enough python version
 | 
			
		||||
# and should only restrict on our documented minimum versions
 | 
			
		||||
_PY38_MIN = sys.version_info[:2] >= (3, 8)
 | 
			
		||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
 | 
			
		||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
 | 
			
		||||
_PY_MIN = _PY3_MIN or _PY2_MIN
 | 
			
		||||
if not _PY_MIN:
 | 
			
		||||
    raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LastResort(object):
 | 
			
		||||
    # OUTPUT OF LAST RESORT
 | 
			
		||||
    def display(self, msg, log_only=None):
 | 
			
		||||
        print(msg, file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
    def error(self, msg, wrap_text=None):
 | 
			
		||||
        print(msg, file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
 | 
			
		||||
    display = LastResort()
 | 
			
		||||
 | 
			
		||||
    try:  # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
 | 
			
		||||
        import ansible.constants as C
 | 
			
		||||
        from ansible.utils.display import Display, initialize_locale
 | 
			
		||||
    except AnsibleOptionsError as e:
 | 
			
		||||
        display.error(to_text(e), wrap_text=False)
 | 
			
		||||
        sys.exit(5)
 | 
			
		||||
 | 
			
		||||
    initialize_locale()
 | 
			
		||||
 | 
			
		||||
    cli = None
 | 
			
		||||
    me = os.path.basename(sys.argv[0])
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        display = Display()
 | 
			
		||||
        if C.CONTROLLER_PYTHON_WARNING and not _PY38_MIN:
 | 
			
		||||
            display.deprecated(
 | 
			
		||||
                (
 | 
			
		||||
                    'Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. '
 | 
			
		||||
                    'Current version: %s' % ''.join(sys.version.splitlines())
 | 
			
		||||
                ),
 | 
			
		||||
                version='2.12',
 | 
			
		||||
                collection_name='ansible.builtin',
 | 
			
		||||
            )
 | 
			
		||||
        display.debug("starting run")
 | 
			
		||||
 | 
			
		||||
        sub = None
 | 
			
		||||
        target = me.split('-')
 | 
			
		||||
        if target[-1][0].isdigit():
 | 
			
		||||
            # Remove any version or python version info as downstreams
 | 
			
		||||
            # sometimes add that
 | 
			
		||||
            target = target[:-1]
 | 
			
		||||
 | 
			
		||||
        if len(target) > 1:
 | 
			
		||||
            sub = target[1]
 | 
			
		||||
            myclass = "%sCLI" % sub.capitalize()
 | 
			
		||||
        elif target[0] == 'ansible':
 | 
			
		||||
            sub = 'adhoc'
 | 
			
		||||
            myclass = 'AdHocCLI'
 | 
			
		||||
        else:
 | 
			
		||||
            raise AnsibleError("Unknown Ansible alias: %s" % me)
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
 | 
			
		||||
        except ImportError as e:
 | 
			
		||||
            # ImportError members have changed in py3
 | 
			
		||||
            if 'msg' in dir(e):
 | 
			
		||||
                msg = e.msg
 | 
			
		||||
            else:
 | 
			
		||||
                msg = e.message
 | 
			
		||||
            if msg.endswith(' %s' % sub):
 | 
			
		||||
                raise AnsibleError("Ansible sub-program not implemented: %s" % me)
 | 
			
		||||
            else:
 | 
			
		||||
                raise
 | 
			
		||||
 | 
			
		||||
        b_ansible_dir = os.path.expanduser(os.path.expandvars(b"~/.ansible"))
 | 
			
		||||
        try:
 | 
			
		||||
            os.mkdir(b_ansible_dir, 0o700)
 | 
			
		||||
        except OSError as exc:
 | 
			
		||||
            if exc.errno != errno.EEXIST:
 | 
			
		||||
                display.warning("Failed to create the directory '%s': %s"
 | 
			
		||||
                                % (to_text(b_ansible_dir, errors='surrogate_or_replace'),
 | 
			
		||||
                                   to_text(exc, errors='surrogate_or_replace')))
 | 
			
		||||
        else:
 | 
			
		||||
            display.debug("Created the '%s' directory" % to_text(b_ansible_dir, errors='surrogate_or_replace'))
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
 | 
			
		||||
        except UnicodeError:
 | 
			
		||||
            display.error('Command line args are not in utf-8, unable to continue.  Ansible currently only understands utf-8')
 | 
			
		||||
            display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
 | 
			
		||||
            exit_code = 6
 | 
			
		||||
        else:
 | 
			
		||||
            cli = mycli(args)
 | 
			
		||||
            exit_code = cli.run()
 | 
			
		||||
 | 
			
		||||
    except AnsibleOptionsError as e:
 | 
			
		||||
        cli.parser.print_help()
 | 
			
		||||
        display.error(to_text(e), wrap_text=False)
 | 
			
		||||
        exit_code = 5
 | 
			
		||||
    except AnsibleParserError as e:
 | 
			
		||||
        display.error(to_text(e), wrap_text=False)
 | 
			
		||||
        exit_code = 4
 | 
			
		||||
# TQM takes care of these, but leaving comment to reserve the exit codes
 | 
			
		||||
#    except AnsibleHostUnreachable as e:
 | 
			
		||||
#        display.error(str(e))
 | 
			
		||||
#        exit_code = 3
 | 
			
		||||
#    except AnsibleHostFailed as e:
 | 
			
		||||
#        display.error(str(e))
 | 
			
		||||
#        exit_code = 2
 | 
			
		||||
    except AnsibleError as e:
 | 
			
		||||
        display.error(to_text(e), wrap_text=False)
 | 
			
		||||
        exit_code = 1
 | 
			
		||||
    except KeyboardInterrupt:
 | 
			
		||||
        display.error("User interrupted execution")
 | 
			
		||||
        exit_code = 99
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        if C.DEFAULT_DEBUG:
 | 
			
		||||
            # Show raw stacktraces in debug mode, It also allow pdb to
 | 
			
		||||
            # enter post mortem mode.
 | 
			
		||||
            raise
 | 
			
		||||
        have_cli_options = bool(context.CLIARGS)
 | 
			
		||||
        display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
 | 
			
		||||
        if not have_cli_options or have_cli_options and context.CLIARGS['verbosity'] > 2:
 | 
			
		||||
            log_only = False
 | 
			
		||||
            if hasattr(e, 'orig_exc'):
 | 
			
		||||
                display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
 | 
			
		||||
                why = to_text(e.orig_exc)
 | 
			
		||||
                if to_text(e) != why:
 | 
			
		||||
                    display.vvv('\noriginal msg: %s' % why)
 | 
			
		||||
        else:
 | 
			
		||||
            display.display("to see the full traceback, use -vvv")
 | 
			
		||||
            log_only = True
 | 
			
		||||
        display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
 | 
			
		||||
        exit_code = 250
 | 
			
		||||
 | 
			
		||||
    sys.exit(exit_code)
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-config
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-config
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										342
									
								
								.local/bin/ansible-connection
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										342
									
								
								.local/bin/ansible-connection
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,342 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
# Copyright: (c) 2017, Ansible Project
 | 
			
		||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
 | 
			
		||||
from __future__ import (absolute_import, division, print_function)
 | 
			
		||||
 | 
			
		||||
__metaclass__ = type
 | 
			
		||||
__requires__ = ['ansible_core']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import fcntl
 | 
			
		||||
import hashlib
 | 
			
		||||
import os
 | 
			
		||||
import signal
 | 
			
		||||
import socket
 | 
			
		||||
import sys
 | 
			
		||||
import time
 | 
			
		||||
import traceback
 | 
			
		||||
import errno
 | 
			
		||||
import json
 | 
			
		||||
 | 
			
		||||
from contextlib import contextmanager
 | 
			
		||||
 | 
			
		||||
from ansible import constants as C
 | 
			
		||||
from ansible.module_utils._text import to_bytes, to_text
 | 
			
		||||
from ansible.module_utils.six import PY3
 | 
			
		||||
from ansible.module_utils.six.moves import cPickle, StringIO
 | 
			
		||||
from ansible.module_utils.connection import Connection, ConnectionError, send_data, recv_data
 | 
			
		||||
from ansible.module_utils.service import fork_process
 | 
			
		||||
from ansible.parsing.ajson import AnsibleJSONEncoder, AnsibleJSONDecoder
 | 
			
		||||
from ansible.playbook.play_context import PlayContext
 | 
			
		||||
from ansible.plugins.loader import connection_loader
 | 
			
		||||
from ansible.utils.path import unfrackpath, makedirs_safe
 | 
			
		||||
from ansible.utils.display import Display
 | 
			
		||||
from ansible.utils.jsonrpc import JsonRpcServer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def read_stream(byte_stream):
 | 
			
		||||
    size = int(byte_stream.readline().strip())
 | 
			
		||||
 | 
			
		||||
    data = byte_stream.read(size)
 | 
			
		||||
    if len(data) < size:
 | 
			
		||||
        raise Exception("EOF found before data was complete")
 | 
			
		||||
 | 
			
		||||
    data_hash = to_text(byte_stream.readline().strip())
 | 
			
		||||
    if data_hash != hashlib.sha1(data).hexdigest():
 | 
			
		||||
        raise Exception("Read {0} bytes, but data did not match checksum".format(size))
 | 
			
		||||
 | 
			
		||||
    # restore escaped loose \r characters
 | 
			
		||||
    data = data.replace(br'\r', b'\r')
 | 
			
		||||
 | 
			
		||||
    return data
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@contextmanager
 | 
			
		||||
def file_lock(lock_path):
 | 
			
		||||
    """
 | 
			
		||||
    Uses contextmanager to create and release a file lock based on the
 | 
			
		||||
    given path. This allows us to create locks using `with file_lock()`
 | 
			
		||||
    to prevent deadlocks related to failure to unlock properly.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    lock_fd = os.open(lock_path, os.O_RDWR | os.O_CREAT, 0o600)
 | 
			
		||||
    fcntl.lockf(lock_fd, fcntl.LOCK_EX)
 | 
			
		||||
    yield
 | 
			
		||||
    fcntl.lockf(lock_fd, fcntl.LOCK_UN)
 | 
			
		||||
    os.close(lock_fd)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ConnectionProcess(object):
 | 
			
		||||
    '''
 | 
			
		||||
    The connection process wraps around a Connection object that manages
 | 
			
		||||
    the connection to a remote device that persists over the playbook
 | 
			
		||||
    '''
 | 
			
		||||
    def __init__(self, fd, play_context, socket_path, original_path, task_uuid=None, ansible_playbook_pid=None):
 | 
			
		||||
        self.play_context = play_context
 | 
			
		||||
        self.socket_path = socket_path
 | 
			
		||||
        self.original_path = original_path
 | 
			
		||||
        self._task_uuid = task_uuid
 | 
			
		||||
 | 
			
		||||
        self.fd = fd
 | 
			
		||||
        self.exception = None
 | 
			
		||||
 | 
			
		||||
        self.srv = JsonRpcServer()
 | 
			
		||||
        self.sock = None
 | 
			
		||||
 | 
			
		||||
        self.connection = None
 | 
			
		||||
        self._ansible_playbook_pid = ansible_playbook_pid
 | 
			
		||||
 | 
			
		||||
    def start(self, variables):
 | 
			
		||||
        try:
 | 
			
		||||
            messages = list()
 | 
			
		||||
            result = {}
 | 
			
		||||
 | 
			
		||||
            messages.append(('vvvv', 'control socket path is %s' % self.socket_path))
 | 
			
		||||
 | 
			
		||||
            # If this is a relative path (~ gets expanded later) then plug the
 | 
			
		||||
            # key's path on to the directory we originally came from, so we can
 | 
			
		||||
            # find it now that our cwd is /
 | 
			
		||||
            if self.play_context.private_key_file and self.play_context.private_key_file[0] not in '~/':
 | 
			
		||||
                self.play_context.private_key_file = os.path.join(self.original_path, self.play_context.private_key_file)
 | 
			
		||||
            self.connection = connection_loader.get(self.play_context.connection, self.play_context, '/dev/null',
 | 
			
		||||
                                                    task_uuid=self._task_uuid, ansible_playbook_pid=self._ansible_playbook_pid)
 | 
			
		||||
            self.connection.set_options(var_options=variables)
 | 
			
		||||
 | 
			
		||||
            self.connection._socket_path = self.socket_path
 | 
			
		||||
            self.srv.register(self.connection)
 | 
			
		||||
            messages.extend([('vvvv', msg) for msg in sys.stdout.getvalue().splitlines()])
 | 
			
		||||
 | 
			
		||||
            self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
 | 
			
		||||
            self.sock.bind(self.socket_path)
 | 
			
		||||
            self.sock.listen(1)
 | 
			
		||||
            messages.append(('vvvv', 'local domain socket listeners started successfully'))
 | 
			
		||||
        except Exception as exc:
 | 
			
		||||
            messages.extend(self.connection.pop_messages())
 | 
			
		||||
            result['error'] = to_text(exc)
 | 
			
		||||
            result['exception'] = traceback.format_exc()
 | 
			
		||||
        finally:
 | 
			
		||||
            result['messages'] = messages
 | 
			
		||||
            self.fd.write(json.dumps(result, cls=AnsibleJSONEncoder))
 | 
			
		||||
            self.fd.close()
 | 
			
		||||
 | 
			
		||||
    def run(self):
 | 
			
		||||
        try:
 | 
			
		||||
            while not self.connection._conn_closed:
 | 
			
		||||
                signal.signal(signal.SIGALRM, self.connect_timeout)
 | 
			
		||||
                signal.signal(signal.SIGTERM, self.handler)
 | 
			
		||||
                signal.alarm(self.connection.get_option('persistent_connect_timeout'))
 | 
			
		||||
 | 
			
		||||
                self.exception = None
 | 
			
		||||
                (s, addr) = self.sock.accept()
 | 
			
		||||
                signal.alarm(0)
 | 
			
		||||
                signal.signal(signal.SIGALRM, self.command_timeout)
 | 
			
		||||
                while True:
 | 
			
		||||
                    data = recv_data(s)
 | 
			
		||||
                    if not data:
 | 
			
		||||
                        break
 | 
			
		||||
                    log_messages = self.connection.get_option('persistent_log_messages')
 | 
			
		||||
 | 
			
		||||
                    if log_messages:
 | 
			
		||||
                        display.display("jsonrpc request: %s" % data, log_only=True)
 | 
			
		||||
 | 
			
		||||
                    request = json.loads(to_text(data, errors='surrogate_or_strict'))
 | 
			
		||||
                    if request.get('method') == "exec_command" and not self.connection.connected:
 | 
			
		||||
                        self.connection._connect()
 | 
			
		||||
 | 
			
		||||
                    signal.alarm(self.connection.get_option('persistent_command_timeout'))
 | 
			
		||||
 | 
			
		||||
                    resp = self.srv.handle_request(data)
 | 
			
		||||
                    signal.alarm(0)
 | 
			
		||||
 | 
			
		||||
                    if log_messages:
 | 
			
		||||
                        display.display("jsonrpc response: %s" % resp, log_only=True)
 | 
			
		||||
 | 
			
		||||
                    send_data(s, to_bytes(resp))
 | 
			
		||||
 | 
			
		||||
                s.close()
 | 
			
		||||
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            # socket.accept() will raise EINTR if the socket.close() is called
 | 
			
		||||
            if hasattr(e, 'errno'):
 | 
			
		||||
                if e.errno != errno.EINTR:
 | 
			
		||||
                    self.exception = traceback.format_exc()
 | 
			
		||||
            else:
 | 
			
		||||
                self.exception = traceback.format_exc()
 | 
			
		||||
 | 
			
		||||
        finally:
 | 
			
		||||
            # allow time for any exception msg send over socket to receive at other end before shutting down
 | 
			
		||||
            time.sleep(0.1)
 | 
			
		||||
 | 
			
		||||
            # when done, close the connection properly and cleanup the socket file so it can be recreated
 | 
			
		||||
            self.shutdown()
 | 
			
		||||
 | 
			
		||||
    def connect_timeout(self, signum, frame):
 | 
			
		||||
        msg = 'persistent connection idle timeout triggered, timeout value is %s secs.\nSee the timeout setting options in the Network Debug and ' \
 | 
			
		||||
              'Troubleshooting Guide.' % self.connection.get_option('persistent_connect_timeout')
 | 
			
		||||
        display.display(msg, log_only=True)
 | 
			
		||||
        raise Exception(msg)
 | 
			
		||||
 | 
			
		||||
    def command_timeout(self, signum, frame):
 | 
			
		||||
        msg = 'command timeout triggered, timeout value is %s secs.\nSee the timeout setting options in the Network Debug and Troubleshooting Guide.'\
 | 
			
		||||
              % self.connection.get_option('persistent_command_timeout')
 | 
			
		||||
        display.display(msg, log_only=True)
 | 
			
		||||
        raise Exception(msg)
 | 
			
		||||
 | 
			
		||||
    def handler(self, signum, frame):
 | 
			
		||||
        msg = 'signal handler called with signal %s.' % signum
 | 
			
		||||
        display.display(msg, log_only=True)
 | 
			
		||||
        raise Exception(msg)
 | 
			
		||||
 | 
			
		||||
    def shutdown(self):
 | 
			
		||||
        """ Shuts down the local domain socket
 | 
			
		||||
        """
 | 
			
		||||
        lock_path = unfrackpath("%s/.ansible_pc_lock_%s" % os.path.split(self.socket_path))
 | 
			
		||||
        if os.path.exists(self.socket_path):
 | 
			
		||||
            try:
 | 
			
		||||
                if self.sock:
 | 
			
		||||
                    self.sock.close()
 | 
			
		||||
                if self.connection:
 | 
			
		||||
                    self.connection.close()
 | 
			
		||||
                    if self.connection.get_option("persistent_log_messages"):
 | 
			
		||||
                        for _level, message in self.connection.pop_messages():
 | 
			
		||||
                            display.display(message, log_only=True)
 | 
			
		||||
            except Exception:
 | 
			
		||||
                pass
 | 
			
		||||
            finally:
 | 
			
		||||
                if os.path.exists(self.socket_path):
 | 
			
		||||
                    os.remove(self.socket_path)
 | 
			
		||||
                    setattr(self.connection, '_socket_path', None)
 | 
			
		||||
                    setattr(self.connection, '_connected', False)
 | 
			
		||||
 | 
			
		||||
        if os.path.exists(lock_path):
 | 
			
		||||
            os.remove(lock_path)
 | 
			
		||||
 | 
			
		||||
        display.display('shutdown complete', log_only=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    """ Called to initiate the connect to the remote device
 | 
			
		||||
    """
 | 
			
		||||
    rc = 0
 | 
			
		||||
    result = {}
 | 
			
		||||
    messages = list()
 | 
			
		||||
    socket_path = None
 | 
			
		||||
 | 
			
		||||
    # Need stdin as a byte stream
 | 
			
		||||
    if PY3:
 | 
			
		||||
        stdin = sys.stdin.buffer
 | 
			
		||||
    else:
 | 
			
		||||
        stdin = sys.stdin
 | 
			
		||||
 | 
			
		||||
    # Note: update the below log capture code after Display.display() is refactored.
 | 
			
		||||
    saved_stdout = sys.stdout
 | 
			
		||||
    sys.stdout = StringIO()
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        # read the play context data via stdin, which means depickling it
 | 
			
		||||
        vars_data = read_stream(stdin)
 | 
			
		||||
        init_data = read_stream(stdin)
 | 
			
		||||
 | 
			
		||||
        if PY3:
 | 
			
		||||
            pc_data = cPickle.loads(init_data, encoding='bytes')
 | 
			
		||||
            variables = cPickle.loads(vars_data, encoding='bytes')
 | 
			
		||||
        else:
 | 
			
		||||
            pc_data = cPickle.loads(init_data)
 | 
			
		||||
            variables = cPickle.loads(vars_data)
 | 
			
		||||
 | 
			
		||||
        play_context = PlayContext()
 | 
			
		||||
        play_context.deserialize(pc_data)
 | 
			
		||||
        display.verbosity = play_context.verbosity
 | 
			
		||||
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        rc = 1
 | 
			
		||||
        result.update({
 | 
			
		||||
            'error': to_text(e),
 | 
			
		||||
            'exception': traceback.format_exc()
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
    if rc == 0:
 | 
			
		||||
        ssh = connection_loader.get('ssh', class_only=True)
 | 
			
		||||
        ansible_playbook_pid = sys.argv[1]
 | 
			
		||||
        task_uuid = sys.argv[2]
 | 
			
		||||
        cp = ssh._create_control_path(play_context.remote_addr, play_context.port, play_context.remote_user, play_context.connection, ansible_playbook_pid)
 | 
			
		||||
        # create the persistent connection dir if need be and create the paths
 | 
			
		||||
        # which we will be using later
 | 
			
		||||
        tmp_path = unfrackpath(C.PERSISTENT_CONTROL_PATH_DIR)
 | 
			
		||||
        makedirs_safe(tmp_path)
 | 
			
		||||
 | 
			
		||||
        socket_path = unfrackpath(cp % dict(directory=tmp_path))
 | 
			
		||||
        lock_path = unfrackpath("%s/.ansible_pc_lock_%s" % os.path.split(socket_path))
 | 
			
		||||
 | 
			
		||||
        with file_lock(lock_path):
 | 
			
		||||
            if not os.path.exists(socket_path):
 | 
			
		||||
                messages.append(('vvvv', 'local domain socket does not exist, starting it'))
 | 
			
		||||
                original_path = os.getcwd()
 | 
			
		||||
                r, w = os.pipe()
 | 
			
		||||
                pid = fork_process()
 | 
			
		||||
 | 
			
		||||
                if pid == 0:
 | 
			
		||||
                    try:
 | 
			
		||||
                        os.close(r)
 | 
			
		||||
                        wfd = os.fdopen(w, 'w')
 | 
			
		||||
                        process = ConnectionProcess(wfd, play_context, socket_path, original_path, task_uuid, ansible_playbook_pid)
 | 
			
		||||
                        process.start(variables)
 | 
			
		||||
                    except Exception:
 | 
			
		||||
                        messages.append(('error', traceback.format_exc()))
 | 
			
		||||
                        rc = 1
 | 
			
		||||
 | 
			
		||||
                    if rc == 0:
 | 
			
		||||
                        process.run()
 | 
			
		||||
                    else:
 | 
			
		||||
                        process.shutdown()
 | 
			
		||||
 | 
			
		||||
                    sys.exit(rc)
 | 
			
		||||
 | 
			
		||||
                else:
 | 
			
		||||
                    os.close(w)
 | 
			
		||||
                    rfd = os.fdopen(r, 'r')
 | 
			
		||||
                    data = json.loads(rfd.read(), cls=AnsibleJSONDecoder)
 | 
			
		||||
                    messages.extend(data.pop('messages'))
 | 
			
		||||
                    result.update(data)
 | 
			
		||||
 | 
			
		||||
            else:
 | 
			
		||||
                messages.append(('vvvv', 'found existing local domain socket, using it!'))
 | 
			
		||||
                conn = Connection(socket_path)
 | 
			
		||||
                conn.set_options(var_options=variables)
 | 
			
		||||
                pc_data = to_text(init_data)
 | 
			
		||||
                try:
 | 
			
		||||
                    conn.update_play_context(pc_data)
 | 
			
		||||
                    conn.set_check_prompt(task_uuid)
 | 
			
		||||
                except Exception as exc:
 | 
			
		||||
                    # Only network_cli has update_play context and set_check_prompt, so missing this is
 | 
			
		||||
                    # not fatal e.g. netconf
 | 
			
		||||
                    if isinstance(exc, ConnectionError) and getattr(exc, 'code', None) == -32601:
 | 
			
		||||
                        pass
 | 
			
		||||
                    else:
 | 
			
		||||
                        result.update({
 | 
			
		||||
                            'error': to_text(exc),
 | 
			
		||||
                            'exception': traceback.format_exc()
 | 
			
		||||
                        })
 | 
			
		||||
 | 
			
		||||
    if os.path.exists(socket_path):
 | 
			
		||||
        messages.extend(Connection(socket_path).pop_messages())
 | 
			
		||||
    messages.append(('vvvv', sys.stdout.getvalue()))
 | 
			
		||||
    result.update({
 | 
			
		||||
        'messages': messages,
 | 
			
		||||
        'socket_path': socket_path
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    sys.stdout = saved_stdout
 | 
			
		||||
    if 'exception' in result:
 | 
			
		||||
        rc = 1
 | 
			
		||||
        sys.stderr.write(json.dumps(result, cls=AnsibleJSONEncoder))
 | 
			
		||||
    else:
 | 
			
		||||
        rc = 0
 | 
			
		||||
        sys.stdout.write(json.dumps(result, cls=AnsibleJSONEncoder))
 | 
			
		||||
 | 
			
		||||
    sys.exit(rc)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    display = Display()
 | 
			
		||||
    main()
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-console
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-console
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-doc
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-doc
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-galaxy
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-galaxy
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-inventory
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-inventory
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-playbook
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-playbook
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-pull
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-pull
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										28
									
								
								.local/bin/ansible-test
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								.local/bin/ansible-test
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
# PYTHON_ARGCOMPLETE_OK
 | 
			
		||||
"""Command line entry point for ansible-test."""
 | 
			
		||||
 | 
			
		||||
from __future__ import (absolute_import, division, print_function)
 | 
			
		||||
__metaclass__ = type
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    """Main program entry point."""
 | 
			
		||||
    ansible_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | 
			
		||||
    source_root = os.path.join(ansible_root, 'test', 'lib')
 | 
			
		||||
 | 
			
		||||
    if os.path.exists(os.path.join(source_root, 'ansible_test', '_internal', 'cli.py')):
 | 
			
		||||
        # running from source, use that version of ansible-test instead of any version that may already be installed
 | 
			
		||||
        sys.path.insert(0, source_root)
 | 
			
		||||
 | 
			
		||||
    # noinspection PyProtectedMember
 | 
			
		||||
    from ansible_test._internal.cli import main as cli_main
 | 
			
		||||
 | 
			
		||||
    cli_main()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
							
								
								
									
										1
									
								
								.local/bin/ansible-vault
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.local/bin/ansible-vault
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ansible
 | 
			
		||||
							
								
								
									
										18
									
								
								.local/bin/backupSynology
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								.local/bin/backupSynology
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
source ~/.password
 | 
			
		||||
mkdir -p ~/Movies/{Anime,Videos}
 | 
			
		||||
mkdir -p ~/Music
 | 
			
		||||
mkdir -p ~/Collage
 | 
			
		||||
 | 
			
		||||
#sudo mount -t cifs //192.168.0.220/Mega -o username=${USERNAME},password=${PASSWORD},vers=2\.0 /mnt/Synology
 | 
			
		||||
#sudo mount -t cifs //192.168.0.220/music -o username=${USERNAME},password=${PASSWORD},vers=2\.0 ~/Music
 | 
			
		||||
#sudo mount -t cifs //192.168.0.220/usbshare1/Video -o username=${USERNAME},password=${PASSWORD},vers=2\.0 ~/Movies/Videos
 | 
			
		||||
#sudo mount -t cifs //192.168.0.220/usbshare1/Anime -o username=${USERNAME},password=${PASSWORD},vers=2\.0 ~/Movies/Anime
 | 
			
		||||
#sudo mount -t cifs //192.168.0.220/Studia -o username=${USERNAME},password=${PASSWORD},vers=2\.0 ~/Collage
 | 
			
		||||
 | 
			
		||||
if [ -e /mnt/Synology/Systems ]
 | 
			
		||||
then
 | 
			
		||||
    echo "Starting $(date)" > ~/.cache/.logSynology
 | 
			
		||||
    sudo rsync -r --bwlimit=1024 --update --progress /usr/mega/ /mnt/Synology >> ~/.cache/.logSynology
 | 
			
		||||
    echo "Ending $(date)" >> ~/.cache/.logSynology
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/bin-cp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/bin-cp
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
chmod +x * 
 | 
			
		||||
chown -R yorune: *
 | 
			
		||||
sudo cp -pr * /bin/ 
 | 
			
		||||
#sudo cp /etc/bash.bashrc ../configs
 | 
			
		||||
#cp /home/yorune/Arch/configs/zshrc /home/yorune/.zshrc
 | 
			
		||||
#cp /home/yorune/Arch/configs/vimrc /home/yorune/.vimrc
 | 
			
		||||
echo DONE!!
 | 
			
		||||
							
								
								
									
										12
									
								
								.local/bin/browser-x
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								.local/bin/browser-x
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
export GTK_IM_MODULE=ibus
 | 
			
		||||
export XMODIFIERS=@im=ibus
 | 
			
		||||
export QT_IM_MODULE=ibus
 | 
			
		||||
 | 
			
		||||
KERNEL=$(uname -sr)
 | 
			
		||||
[[ $KERNEL =~ "icrosoft" ]] && "/mnt/c/Program Files/Mozilla Firefox/firefox.exe" "$@"
 | 
			
		||||
[[ $KERNEL =~ "gentoo" ]] && GDK_DPI_SCALE="1.2" firefox-bin "$@"
 | 
			
		||||
#[[ $KERNEL =~ "gentoo" ]] && __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 __GLX_VENDOR_LIBRARY_NAME=nvidia __GL_SYNC_TO_VBLANK=0 GDK_DPI_SCALE="1.2" firefox "$@"
 | 
			
		||||
 | 
			
		||||
# Firefox
 | 
			
		||||
# media.ffmpeg.vaapi.enabled -> true
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/chardetect
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/chardetect
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from chardet.cli.chardetect import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										15
									
								
								.local/bin/cleaner
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								.local/bin/cleaner
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -x
 | 
			
		||||
sudo rm -rf /var/tmp/portage/*
 | 
			
		||||
sudo rm -rf /var/tmp/binpkgs/*
 | 
			
		||||
sudo rm -rf /var/tmp/genkernel/*
 | 
			
		||||
sudo rm -rf /var/cache/genkernel/*
 | 
			
		||||
sudo emerge -a --depclean
 | 
			
		||||
sudo emerge -a @preserved-rebuild
 | 
			
		||||
sudo eclean -C -q packages
 | 
			
		||||
sudo eclean -C -q -d -t1w distfiles
 | 
			
		||||
sudo revdep-rebuild
 | 
			
		||||
sudo perl-cleaner --all
 | 
			
		||||
sudo etc-update
 | 
			
		||||
sudo env-update
 | 
			
		||||
source /etc/profile
 | 
			
		||||
							
								
								
									
										6
									
								
								.local/bin/cleanertmp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								.local/bin/cleanertmp
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
sudo rm -rf /var/tmp/portage/*
 | 
			
		||||
sudo rm -rf /var/tmp/binpkgs/*
 | 
			
		||||
sudo rm -rf /var/tmp/genkernel/*
 | 
			
		||||
sudo rm -rf /var/cache/genkernel/*
 | 
			
		||||
sudo eclean-dist -d
 | 
			
		||||
sudo eclean-pkg -d
 | 
			
		||||
							
								
								
									
										5
									
								
								.local/bin/cmus-control
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								.local/bin/cmus-control
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
pkill -RTMIN+11 dwmblocks
 | 
			
		||||
[ "$1" = "play" ] && cmus-remote -u
 | 
			
		||||
[ "$1" = "next" ] && cmus-remote -n
 | 
			
		||||
[ "$1" = "prev" ] && cmus-remote -r
 | 
			
		||||
							
								
								
									
										4
									
								
								.local/bin/cmus-shell
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.local/bin/cmus-shell
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
if ! screen -r -D cmus >/dev/null ; then
 | 
			
		||||
    screen -S cmus /usr/bin/cmus "$@"
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										59
									
								
								.local/bin/dmenumount
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								.local/bin/dmenumount
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Gives a dmenu prompt to mount unmounted drives.
 | 
			
		||||
# If they're in /etc/fstab, they'll be mounted automatically.
 | 
			
		||||
# Otherwise, you'll be prompted to give a mountpoint from already existsing directories.
 | 
			
		||||
# If you input a novel directory, it will prompt you to create that directory.
 | 
			
		||||
 | 
			
		||||
getmount() { \
 | 
			
		||||
	[ -z "$chosen" ] && exit 1
 | 
			
		||||
	mp="$(find $1 | dmenu -i -p "Type in mount point.")"
 | 
			
		||||
	[ "$mp" = "" ] && exit 1
 | 
			
		||||
	if [ ! -d "$mp" ]; then
 | 
			
		||||
		mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?")
 | 
			
		||||
		[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
 | 
			
		||||
	fi
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
mountusb() { \
 | 
			
		||||
	chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?" | awk '{print $1}')"
 | 
			
		||||
	sudo -A mount "$chosen" && notify-send "💻 USB mounting" "$chosen mounted." && exit 0
 | 
			
		||||
	alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$2=="part"&&$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not \( -path *%s -prune \) \ \n",$3}')
 | 
			
		||||
	getmount "/mnt /media -maxdepth 5 -type d $alreadymounted"
 | 
			
		||||
	partitiontype="$(lsblk -no "fstype" "$chosen")"
 | 
			
		||||
	case "$partitiontype" in
 | 
			
		||||
		"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
 | 
			
		||||
		*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" 741 "$mp";;
 | 
			
		||||
	esac
 | 
			
		||||
	notify-send "💻 USB mounting" "$chosen mounted to $mp."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
mountandroid() { \
 | 
			
		||||
	chosen=$(echo "$anddrives" | dmenu -i -p "Which Android device?" | cut -d : -f 1)
 | 
			
		||||
	getmount "/media -maxdepth 3 -type d"
 | 
			
		||||
	sudo simple-mtpfs --device "$chosen" "$mp"
 | 
			
		||||
	notify-send "🤖 Android Mounting" "Android device mounted to $mp."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
asktype() { \
 | 
			
		||||
	case $(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?") in
 | 
			
		||||
		USB) mountusb ;;
 | 
			
		||||
		Android) mountandroid ;;
 | 
			
		||||
	esac
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
anddrives=$(simple-mtpfs -l 2>/dev/null)
 | 
			
		||||
usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | awk '$2=="part"&&$4==""{printf "%s (%s)\n",$1,$3}')"
 | 
			
		||||
 | 
			
		||||
if [ -z "$usbdrives" ]; then
 | 
			
		||||
	[ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit
 | 
			
		||||
	echo "Android device(s) detected."
 | 
			
		||||
	mountandroid
 | 
			
		||||
else
 | 
			
		||||
	if [ -z "$anddrives" ]; then
 | 
			
		||||
		echo "USB drive(s) detected."
 | 
			
		||||
	       	mountusb
 | 
			
		||||
	else
 | 
			
		||||
		echo "Mountable USB drive(s) and Android device(s) detected."
 | 
			
		||||
		asktype
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										41
									
								
								.local/bin/dmenuumount
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										41
									
								
								.local/bin/dmenuumount
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# A dmenu prompt to unmount drives.
 | 
			
		||||
# Provides you with mounted partitions, select one to unmount.
 | 
			
		||||
# Drives mounted at /, /boot and /home will not be options to unmount.
 | 
			
		||||
 | 
			
		||||
unmountusb() {
 | 
			
		||||
	[ -z "$drives" ] && exit
 | 
			
		||||
	chosen=$(echo "$drives" | dmenu -i -p "Unmount which drive?" | awk '{print $1}')
 | 
			
		||||
	[ -z "$chosen" ] && exit
 | 
			
		||||
	sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
unmountandroid() { \
 | 
			
		||||
	chosen=$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")
 | 
			
		||||
	[ -z "$chosen" ] && exit
 | 
			
		||||
	sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
asktype() { \
 | 
			
		||||
	case "$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" in
 | 
			
		||||
		USB) unmountusb ;;
 | 
			
		||||
		Android) unmountandroid ;;
 | 
			
		||||
	esac
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
drives=$(lsblk -nrpo "name,type,size,mountpoint" | awk '$2=="part"&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')
 | 
			
		||||
 | 
			
		||||
if ! grep simple-mtpfs /etc/mtab; then
 | 
			
		||||
	[ -z "$drives" ] && echo "No drives to unmount." &&  exit
 | 
			
		||||
	echo "Unmountable USB drive detected."
 | 
			
		||||
	unmountusb
 | 
			
		||||
else
 | 
			
		||||
	if [ -z "$drives" ]
 | 
			
		||||
	then
 | 
			
		||||
		echo "Unmountable Android device detected."
 | 
			
		||||
	       	unmountandroid
 | 
			
		||||
	else
 | 
			
		||||
		echo "Unmountable USB drive(s) and Android device(s) detected."
 | 
			
		||||
		asktype
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										18
									
								
								.local/bin/dmenuunicode
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								.local/bin/dmenuunicode
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Give dmenu list of all unicode characters to copy.
 | 
			
		||||
# Shows the selected character in dunst if running.
 | 
			
		||||
 | 
			
		||||
# Must have xclip installed to even show menu.
 | 
			
		||||
xclip -h >/dev/null || exit
 | 
			
		||||
 | 
			
		||||
chosen=$(grep -v "#" ~/dwm/emoji | dmenu -i -l 20 -fn Monospace-18)
 | 
			
		||||
 | 
			
		||||
[ "$chosen" != "" ] || exit
 | 
			
		||||
 | 
			
		||||
c=$(echo "$chosen" | sed "s/ .*//")
 | 
			
		||||
echo "$c" | tr -d '\n' | xclip -selection clipboard
 | 
			
		||||
notify-send "'$c' copied to clipboard." &
 | 
			
		||||
 | 
			
		||||
s=$(echo "$chosen" | sed "s/.*; //" | awk '{print $1}')
 | 
			
		||||
echo "$s" | tr -d '\n' | xclip
 | 
			
		||||
notify-send "'$s' copied to primary." &
 | 
			
		||||
							
								
								
									
										17
									
								
								.local/bin/docker-start
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								.local/bin/docker-start
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
#!/bin/bash -
 | 
			
		||||
#===============================================================================
 | 
			
		||||
#
 | 
			
		||||
#          FILE: docker-start.sh
 | 
			
		||||
#
 | 
			
		||||
#         USAGE: ./docker-start.sh
 | 
			
		||||
#
 | 
			
		||||
#       OPTIONS: ---
 | 
			
		||||
#  REQUIREMENTS: openrc system
 | 
			
		||||
#        AUTHOR: Marcin Woźniak, y0rune@aol.com
 | 
			
		||||
#       CREATED: 11/08/2020 11:21
 | 
			
		||||
#      REVISION:  ---
 | 
			
		||||
#===============================================================================
 | 
			
		||||
 | 
			
		||||
sudo rc-service docker start
 | 
			
		||||
sleep 10
 | 
			
		||||
sudo docker ps
 | 
			
		||||
							
								
								
									
										99
									
								
								.local/bin/dwmstatusbar
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										99
									
								
								.local/bin/dwmstatusbar
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_weather() {
 | 
			
		||||
[ "$(stat -c %y "/home/yorune/.config/weatherreport" 2>/dev/null | cut -d' ' -f1)" != "$(date '+%Y-%m-%d')" ] && curl -s "wttr.in/$location" > "/home/yorune/.config/weatherreport"
 | 
			
		||||
 | 
			
		||||
printf "%s" "$(sed '16q;d' "/home/yorune/.config/weatherreport" | grep -wo "[0-9]*%" | sort -n | sed -e '$!d' | sed -e "s/^/☔ /g" | tr -d '\n')" &&  sed '13q;d' "/home/yorune/.config/weatherreport" | grep -o "m\\(-\\)*[0-9]\\+" | sort -n -t 'm' -k 2n | sed -e 1b -e '$!d' | tr '\n|m' ' ' | awk '{print" ❄",$1"°","☀",$2"°"}'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_volume() {
 | 
			
		||||
[ "$(pulsemixer --get-mute)" = "1" ] && printf "🔇" && exit
 | 
			
		||||
vol=$(pulsemixer --get-volume | awk '{print $1}')
 | 
			
		||||
printf "%s%%\\n" "🔊 $vol"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_wifi(){
 | 
			
		||||
    echo -e "$(cat /sys/class/net/w*/operstate | sed "s/down/❌/;s/up/📶/") $(cat /sys/class/net/e*/operstate | sed "s/down/❌/;s/up/🌐/")"
 | 
			
		||||
    #echo -e "$(cat /sys/class/net/w*/operstate | sed "s/down/❌/;s/up/📶/") $(cat /sys/class/net/e*/operstate | sed "s/down/❌/;s/up/🌐/") $( [[ $(ip -br a show | awk {'print $1'}) =~ "vpn" ]] && echo "📡" || echo "❌" )"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_temp(){
 | 
			
		||||
    echo -e "🔥 $(sensors | awk '/Core 0/ {print int($3)"°C"}') $(sudo nvidia-smi -q -d temperature | grep --color=no -i "GPU Current" |egrep --color=no -o '[0-9]*')°C"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_date(){
 | 
			
		||||
	echo -e "🕛 $(date +"%d/%m %H:%M")"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_mem(){
 | 
			
		||||
	free --mebi | sed -n '2{p;q}' | awk '{printf ("🧠 %2.2fGiB", ( $3 / 1024) )}'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_music(){
 | 
			
		||||
# Source: https://github.com/joestandring/dwm-bar
 | 
			
		||||
# A dwm_bar function that shows the current artist, track, position, duration, and status from cmus
 | 
			
		||||
# Joe Standring <git@joestandring.com>
 | 
			
		||||
# GNU GPLv3
 | 
			
		||||
# Dependencies: cmus
 | 
			
		||||
 | 
			
		||||
if ps -C cmus > /dev/null; then
 | 
			
		||||
    ARTIST=$(cmus-remote -Q | grep -a '^tag artist' | awk '{gsub("tag artist ", "");print}')
 | 
			
		||||
    TRACK=$(cmus-remote -Q | grep -a '^tag title' | awk '{gsub("tag title ", "");print}')
 | 
			
		||||
    POSITION=$(cmus-remote -Q | grep -a '^position' | awk '{gsub("position ", "");print}')
 | 
			
		||||
    DURATION=$(cmus-remote -Q | grep -a '^duration' | awk '{gsub("duration ", "");print}')
 | 
			
		||||
    STATUS=$(cmus-remote -Q | grep -a '^status' | awk '{gsub("status ", "");print}')
 | 
			
		||||
    SHUFFLE=$(cmus-remote -Q | grep -a '^set shuffle' | awk '{gsub("set shuffle ", "");print}')
 | 
			
		||||
 | 
			
		||||
    if [ "$STATUS" = "playing" ]; then
 | 
			
		||||
        STATUS="▶"
 | 
			
		||||
    else
 | 
			
		||||
        STATUS="⏸"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    #printf "%s%s %s - %s " "$STATUS" "$ARTIST" "$TRACK"
 | 
			
		||||
    printf "%s" "$STATUS"
 | 
			
		||||
    #printf "%0d:%02d/" $((POSITION%3600/60)) $((POSITION%60))
 | 
			
		||||
    #printf "%0d:%02d" $((DURATION%3600/60)) $((DURATION%60))
 | 
			
		||||
    #printf "%s\n"
 | 
			
		||||
fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_battery() {
 | 
			
		||||
	# Find the battery level
 | 
			
		||||
	hash acpi || return 0
 | 
			
		||||
	onl="$(acpi -V | grep "on-line")"
 | 
			
		||||
	charge="$(cat /sys/class/power_supply/BAT*/capacity)"
 | 
			
		||||
    time="$(awk '{print $5}' <(acpi))"
 | 
			
		||||
 | 
			
		||||
	# Determine battery glyph by percentage range
 | 
			
		||||
	if [[ -z $onl && ${charge} -gt 80 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 80 && ${charge} -gt 60 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 60 && ${charge} -gt 40 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 40 && ${charge} -gt 20 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 20 ]]; then
 | 
			
		||||
		echo -e "❗🔋 ${charge}% ${time}"
 | 
			
		||||
	# If charging, use animated glyph
 | 
			
		||||
	else
 | 
			
		||||
		echo -e "🔌"
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_mail(){
 | 
			
		||||
	unread="$(find "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f | wc -l 2>/dev/null)"
 | 
			
		||||
	icon="$(cat "/tmp/imapsyncicon_$USER" 2>/dev/null)"
 | 
			
		||||
	[ "$unread" = "1" ] && [ "$icon" = "" ] || echo "📬 $unread$icon"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_cpu() {
 | 
			
		||||
    cpuUse=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print int(100 - $1)"%"}')
 | 
			
		||||
    echo -e "💻 $cpuUse"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
while true
 | 
			
		||||
do
 | 
			
		||||
    xsetroot -name "$(print_music) $(print_temp) $(print_weather) $(print_mail) $(print_cpu) $(print_mem) $(print_wifi) $(print_battery) $(print_volume) $(print_date)"
 | 
			
		||||
    sleep 10
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										2
									
								
								.local/bin/eix-repos-sync
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								.local/bin/eix-repos-sync
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
for i in /usr/repos/*/.git; do ( echo $i; cd $i/..; sudo git pull; ); done
 | 
			
		||||
							
								
								
									
										13
									
								
								.local/bin/emerge-logs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								.local/bin/emerge-logs
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
LOGS=( $(sudo find /var/tmp/portage/ -mindepth 1 -maxdepth 5 -name "build.log") )
 | 
			
		||||
LEN=${#LOGS[@]}
 | 
			
		||||
 | 
			
		||||
for (( i=0; i<$LEN; i++ ));
 | 
			
		||||
do
 | 
			
		||||
    echo "$(( $i + 1 )) - ${LOGS[$i]}"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
read -p 'Select number to show logs: ' NUMBER
 | 
			
		||||
 | 
			
		||||
sudo tail -f ${LOGS[$NUMBER-1]}
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/epylint
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/epylint
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/lib/python-exec/python3.7/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from pylint import run_epylint
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(run_epylint())
 | 
			
		||||
							
								
								
									
										4
									
								
								.local/bin/euscan
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.local/bin/euscan
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
#!/usr/lib/python-exec/python3.8/python
 | 
			
		||||
# EASY-INSTALL-SCRIPT: 'euscan==9999','euscan'
 | 
			
		||||
__requires__ = 'euscan==9999'
 | 
			
		||||
__import__('pkg_resources').run_script('euscan==9999', 'euscan')
 | 
			
		||||
							
								
								
									
										44
									
								
								.local/bin/ext
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										44
									
								
								.local/bin/ext
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# A general, all-purpose extraction script. Not all extraction programs here
 | 
			
		||||
# are installed by LARBS automatically.
 | 
			
		||||
#
 | 
			
		||||
# Default behavior: Extract archive into new directory
 | 
			
		||||
# Behavior with `-c` option: Extract contents into current directory
 | 
			
		||||
 | 
			
		||||
while getopts "hc" o; do case "${o}" in
 | 
			
		||||
	c) extracthere="True" ;;
 | 
			
		||||
	*) printf "Options:\\n   -c: Extract archive into current directory rather than a new one.\\n" && exit 1 ;;
 | 
			
		||||
esac done
 | 
			
		||||
 | 
			
		||||
if [ -z "$extracthere" ]; then
 | 
			
		||||
	archive="$(readlink -f "$*")" &&
 | 
			
		||||
	directory="$(echo "$archive" | sed 's/\.[^\/.]*$//')" &&
 | 
			
		||||
	mkdir -p "$directory" &&
 | 
			
		||||
	cd "$directory" || exit 1
 | 
			
		||||
else
 | 
			
		||||
	archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)" 2>/dev/null)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
[ -z "$archive" ] && printf "Give archive to extract as argument.\\n" && exit 1
 | 
			
		||||
 | 
			
		||||
if [ -f "$archive" ] ; then
 | 
			
		||||
	case "$archive" in
 | 
			
		||||
		*.tar.bz2|*.tbz2) tar xvjf "$archive" ;;
 | 
			
		||||
		*.tar.xz) tar -vxf "$archive" ;;
 | 
			
		||||
		*.tar.gz|*.tgz) tar xvzf "$archive" ;;
 | 
			
		||||
		*.lzma) unlzma "$archive" ;;
 | 
			
		||||
		*.bz2) bunzip2 "$archive" ;;
 | 
			
		||||
		*.rar) unrar x -ad "$archive" ;;
 | 
			
		||||
		*.gz) gunzip "$archive" ;;
 | 
			
		||||
		*.tar) tar xvf "$archive" ;;
 | 
			
		||||
		*.zip) unzip "$archive" ;;
 | 
			
		||||
		*.Z) uncompress "$archive" ;;
 | 
			
		||||
		*.7z) 7z x "$archive" ;;
 | 
			
		||||
		*.xz) unxz "$archive" ;;
 | 
			
		||||
		*.exe) cabextract "$archive" ;;
 | 
			
		||||
		*) printf "extract: '%s' - unknown archive method\\n" "$archive" ;;
 | 
			
		||||
	esac
 | 
			
		||||
else
 | 
			
		||||
	printf "File \"%s\" not found.\\n" "$archive"
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/f2py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/f2py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from numpy.f2py.f2py2e import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/f2py3
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/f2py3
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from numpy.f2py.f2py2e import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/f2py3.6
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/f2py3.6
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.6
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from numpy.f2py.f2py2e import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/f2py3.7
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/f2py3.7
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.7
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from numpy.f2py.f2py2e import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/f2py3.8
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/f2py3.8
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from numpy.f2py.f2py2e import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/flask
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/flask
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from flask.cli import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/futurize
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/futurize
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from libfuturize.main import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										28
									
								
								.local/bin/gentoo-test
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								.local/bin/gentoo-test
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
sudo mount /dev/disk/by-uuid/c61f258f-5fd1-47f2-a270-bb8aa63b0020 /mnt/gentoo
 | 
			
		||||
 | 
			
		||||
sleep 5
 | 
			
		||||
sync
 | 
			
		||||
 | 
			
		||||
if [ -e /dev/disk/by-uuid/c61f258f-5fd1-47f2-a270-bb8aa63b0020 ]
 | 
			
		||||
then
 | 
			
		||||
    sudo mkdir -p /mnt/gentoo/proc
 | 
			
		||||
    sudo mkdir -p /mnt/gentoo/dev
 | 
			
		||||
    sudo mkdir -p /mnt/gentoo/sys
 | 
			
		||||
    sudo mkdir -p /mnt/gentoo/mnt/backup/ccache
 | 
			
		||||
    sudo cp -r $CCACHE_DIR/ccache.conf /mnt/gentoo/mnt/backup/ccache
 | 
			
		||||
    sudo rsync -az -H /etc/portage/ /mnt/gentoo/gentoo/etc/portage/
 | 
			
		||||
    #sudo rsync -az -H /usr/portage/ /mnt/gentoo/gentoo/usr/portage/
 | 
			
		||||
    #sudo rsync -az -H /usr/repos/ /mnt/gentoo/gentoo/usr/repos/
 | 
			
		||||
    sudo mount --types proc /proc /mnt/gentoo/gentoo/proc
 | 
			
		||||
    sudo mount --rbind /sys /mnt/gentoo/gentoo/sys
 | 
			
		||||
    sudo mount --make-rslave /mnt/gentoo/gentoo/sys
 | 
			
		||||
    sudo mount --rbind /dev /mnt/gentoo/gentoo/dev
 | 
			
		||||
    sudo mount --make-rslave /mnt/gentoo/gentoo/dev
 | 
			
		||||
    sleep 5
 | 
			
		||||
    sudo chroot /mnt/gentoo/gentoo /bin/bash
 | 
			
		||||
    # echo "Europe/Warsaw" > /etc/timezone
 | 
			
		||||
    # emerge --config sys-libs/timezone-data
 | 
			
		||||
    # emerge dev-util/ccache app-shells/oh-my-zsh app-admin/sudo app-editors/vim
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										3
									
								
								.local/bin/geoip
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								.local/bin/geoip
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
curl -s ipinfo.io/$1
 | 
			
		||||
							
								
								
									
										16
									
								
								.local/bin/getforecast
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								.local/bin/getforecast
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Updates weather forecast
 | 
			
		||||
 | 
			
		||||
FILE="$HOME/.config/.weatherreport.tmp"
 | 
			
		||||
FILER="$HOME/.config/weatherreport"
 | 
			
		||||
location="Kleczew"
 | 
			
		||||
 | 
			
		||||
curl -s --max-time 10 "wttr.in/$location" > $FILE
 | 
			
		||||
 | 
			
		||||
if [ -s "$FILE" ]
 | 
			
		||||
then
 | 
			
		||||
    mv $FILE $FILER
 | 
			
		||||
#    notify-send " Weather" "The weather forecast has been updated."
 | 
			
		||||
else
 | 
			
		||||
    rm $FILE
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										133
									
								
								.local/bin/gfetch
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										133
									
								
								.local/bin/gfetch
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,133 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2020, XGQT
 | 
			
		||||
# Licensed under the ISC License
 | 
			
		||||
 | 
			
		||||
#     .vir.
 | 
			
		||||
#   ,d$$$$$$b.
 | 
			
		||||
#   &&&&( )&&&b
 | 
			
		||||
#   Q$$$$$$$$$$B
 | 
			
		||||
#     "$$$$$$$P
 | 
			
		||||
#   ,d$$$$$$P"
 | 
			
		||||
#   $$$$$$P
 | 
			
		||||
#   `Q$$P"
 | 
			
		||||
 | 
			
		||||
# gfetch - tiny system info for gentoo
 | 
			
		||||
 | 
			
		||||
# based on:
 | 
			
		||||
# https://github.com/jschx/ufetch/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# INFO
 | 
			
		||||
 | 
			
		||||
host="$(hostname 2>/dev/null)"
 | 
			
		||||
cpu="$(uname -p 2>/dev/null)"
 | 
			
		||||
kernel="$(uname -sr 2>/dev/null)"
 | 
			
		||||
uptime="$(uptime -p 2>/dev/null | sed 's/up //')"
 | 
			
		||||
shell="$(basename "${SHELL}" 2>/dev/null)"
 | 
			
		||||
 | 
			
		||||
if [ -f /etc/lsb-release ]
 | 
			
		||||
then
 | 
			
		||||
    os="$(cut -d \" -f 2 < /etc/lsb-release) $(uname -m)"
 | 
			
		||||
elif [ -f /etc/os-release ]
 | 
			
		||||
then
 | 
			
		||||
    os="$(cut -d = -f 2 < /etc/os-release | sed 1q) $(uname -m)"
 | 
			
		||||
else
 | 
			
		||||
    os="Gentoo $(uname -m)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -d "${EPREFIX}"/var/db/pkg ]
 | 
			
		||||
then
 | 
			
		||||
    packages="All: $(find "${EPREFIX}"/var/db/pkg/*/* -type d | wc -l)"
 | 
			
		||||
    real="Real: $(find "${EPREFIX}"/var/db/pkg/*/* -type d | grep -c -v -E 'acct-group|acct-user|app-eselect|java-virtuals|media-fonts|virtual')"
 | 
			
		||||
else
 | 
			
		||||
    packages="n/a"
 | 
			
		||||
    real=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -f "${EPREFIX}"/var/lib/portage/world ]
 | 
			
		||||
then
 | 
			
		||||
    world="World: $(wc -l < "${EPREFIX}"/var/lib/portage/world)"
 | 
			
		||||
else
 | 
			
		||||
    world=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -n "${DE}" ]
 | 
			
		||||
then
 | 
			
		||||
    ui="${DE}"
 | 
			
		||||
    uitype='DE'
 | 
			
		||||
elif [ -n "${WM}" ]
 | 
			
		||||
then
 | 
			
		||||
    ui="${WM}"
 | 
			
		||||
    uitype='WM'
 | 
			
		||||
elif [ -n "${XDG_CURRENT_DESKTOP}" ]
 | 
			
		||||
then
 | 
			
		||||
    ui="${XDG_CURRENT_DESKTOP}"
 | 
			
		||||
    uitype='DE'
 | 
			
		||||
elif [ -n "${DESKTOP_SESSION}" ]
 | 
			
		||||
then
 | 
			
		||||
    ui="${DESKTOP_SESSION}"
 | 
			
		||||
    uitype='DE'
 | 
			
		||||
elif [ -f "${HOME}/.xinitrc" ]
 | 
			
		||||
then
 | 
			
		||||
    ui="$(tail -n 1 "${HOME}/.xinitrc" | cut -d ' ' -f 2)"
 | 
			
		||||
    uitype='WM'
 | 
			
		||||
elif [ -f "${HOME}/.xsession" ]
 | 
			
		||||
then
 | 
			
		||||
    ui="$(tail -n 1 "${HOME}/.xsession" | cut -d ' ' -f 2)"
 | 
			
		||||
    uitype='WM'
 | 
			
		||||
else
 | 
			
		||||
    ui='unknown'
 | 
			
		||||
    uitype='UI'
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Color Definitions
 | 
			
		||||
 | 
			
		||||
if [ -x "$(command -v tput)" ]; then
 | 
			
		||||
    bold="$(tput bold)"
 | 
			
		||||
    # black="$(tput setaf 0)"
 | 
			
		||||
    # red="$(tput setaf 1)"
 | 
			
		||||
    # green="$(tput setaf 2)"
 | 
			
		||||
    # yellow="$(tput setaf 3)"
 | 
			
		||||
    # blue="$(tput setaf 4)"
 | 
			
		||||
    magenta="$(tput setaf 5)"
 | 
			
		||||
    # cyan="$(tput setaf 6)"
 | 
			
		||||
    white="$(tput setaf 7)"
 | 
			
		||||
    reset="$(tput sgr0)"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Output color
 | 
			
		||||
 | 
			
		||||
# labels
 | 
			
		||||
lc="${reset}${bold}${magenta}"
 | 
			
		||||
 | 
			
		||||
# user and hostname
 | 
			
		||||
nc="${reset}${bold}${magenta}"
 | 
			
		||||
 | 
			
		||||
# info
 | 
			
		||||
ic="${reset}${bold}${white}"
 | 
			
		||||
 | 
			
		||||
# first color
 | 
			
		||||
c0="${reset}${bold}${magenta}"
 | 
			
		||||
 | 
			
		||||
# second color
 | 
			
		||||
c1="${reset}${magenta}"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# OUTPUT
 | 
			
		||||
 | 
			
		||||
cat <<EOF
 | 
			
		||||
 | 
			
		||||
${c0}     .vir.       ${nc}${USER}${ic}@${nc}${host}${reset}
 | 
			
		||||
${c0}   ,d\$\$\$\$${c1}\$\$b.    ${lc}CPU:     ${ic}${cpu}${reset}
 | 
			
		||||
${c0}   &&&&${c1}( )&&&b   ${lc}OS:      ${ic}${os}${reset}
 | 
			
		||||
${c0}   Q\$\$\$\$\$\$\$\$${c1}\$\$B  ${lc}KERNEL:  ${ic}${kernel}${reset}
 | 
			
		||||
${c0}     "\$\$\$\$\$${c1}\$\$P   ${lc}UP:      ${ic}${uptime}${reset}
 | 
			
		||||
${c0}   ,d\$\$\$\$${c1}\$\$P"    ${lc}PKGS:    ${ic}${packages}  ${world}  ${real}${reset}
 | 
			
		||||
${c0}   \$\$\$\$${c1}\$\$P       ${lc}SHELL:   ${ic}${shell}${reset}
 | 
			
		||||
${c0}   \`Q\$\$${c1}P"        ${lc}${uitype}:      ${ic}${ui}${reset}
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
							
								
								
									
										11
									
								
								.local/bin/git-init-folder
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								.local/bin/git-init-folder
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
mkdir $1
 | 
			
		||||
cd $1 
 | 
			
		||||
git init
 | 
			
		||||
touch README.md
 | 
			
		||||
git add README.md
 | 
			
		||||
git commit -m "first commit"
 | 
			
		||||
curl -u 'linux923344' https://api.github.com/user/repos -d '{"name":"'$1'"}'
 | 
			
		||||
git remote add origin git@github.com:linux923344/$1.git
 | 
			
		||||
git push -u origin master
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/haruhi-dl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/haruhi-dl
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/lib/python-exec/python3.8/python3
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from haruhi_dl import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										6
									
								
								.local/bin/iptables-restart
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								.local/bin/iptables-restart
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
sudo rc-service iptables stop
 | 
			
		||||
sudo iptables -F
 | 
			
		||||
sudo ~/.config/iptables
 | 
			
		||||
sudo /etc/init.d/iptables save
 | 
			
		||||
sudo rc-service iptables start
 | 
			
		||||
							
								
								
									
										42
									
								
								.local/bin/iptables-update
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								.local/bin/iptables-update
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
TEMP=/tmp/iptablesTemp
 | 
			
		||||
FINAL="/home/yorune/.config/iptables"
 | 
			
		||||
LINK="https://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz"
 | 
			
		||||
#BLOCKEDCOUNTRIES=(ad ae af ag ai al am ao ap aq ar as at au aw ax az ba bb bd be bf bg bh bi bj bl bm bn bo bq br bs bt bw by bz ca cd cf cg ch ci ck cl cm cn co cr cu cv cw cy cz de dj dk dm do dz ec ee eg er es et eu fi fj fk fm fo fr ga gb gd ge gf gg gh gi gl gm gn gp gq gr gt gu gw gy hk hn hr ht hu id ie il im in io iq ir is it je jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md me mf mg mh mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nc ne nf ng ni nl no np nr nu nz om pa pe pf pg ph pk pm pr ps pt pw py qa re ro rs ru rw sa sb sc sd se sg si sk sl sm sn so sr ss st sv sx sy sz tc td tg th tj tk tl tm tn to tr tt tv tw tz ua ug us uy uz va vc ve vg vivn vu wf ws ye yt za zm zw)
 | 
			
		||||
BLOCKEDCOUNTRIES=(af ax al dz as ad ao ai aq ag ar am aw au az bs bh bd bb by bz bj bm bt bo ba bw br io bn bg bf bi kh cm cv cf td cl cn co km cg cd ck cr ci hr cu cy dj dm do ec sv gq er ee et fk fj gf ga gm ge gh gi gd gp gu gt gn gw ht hn hk hu is in id ir iq im il jm je jo kz ke ki kp kr kw kg la lv lb ls lr ly mo mk mg mw my mv ml mt mh mq mr mu yt fm md mc mn me ms ma mz mm na nr np nc nz ni ne ng nu nf mp om pk pw ps pa py pe pr qa re ro ru rw kn lc pm vc ws sm st sa sn rs sc sl sg sk si sb so za es lk sd sr sy tw tj tz th tl tg tk to tt tn tr tm tc ug ua ae uy uz vu ve vn vg vi ye zm zw)
 | 
			
		||||
 | 
			
		||||
cd $HOME
 | 
			
		||||
mkdir {blocked,allzones}
 | 
			
		||||
 | 
			
		||||
curl -LO $LINK
 | 
			
		||||
tar xzvf all-zones.tar.gz -C allzones
 | 
			
		||||
rm all-zones.tar.gz
 | 
			
		||||
 | 
			
		||||
sed -n '/# CONFIGURATION:/,/# END OF CONFIG/p' $FINAL > beggining.txt
 | 
			
		||||
sed -n '/# END CONFIGURATION:/,/# END OF CONFIGURATION/p' $FINAL > end.txt
 | 
			
		||||
 | 
			
		||||
for blockedCountries in "${BLOCKEDCOUNTRIES[@]}"
 | 
			
		||||
do
 | 
			
		||||
    mv allzones/$blockedCountries.zone blocked/
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
for f in blocked/*.zone;
 | 
			
		||||
do
 | 
			
		||||
    echo "Adding $f to iptables.."
 | 
			
		||||
    echo "" >> $TEMP
 | 
			
		||||
    echo "# Adding zone $f" >> $TEMP
 | 
			
		||||
 | 
			
		||||
    while read line; do
 | 
			
		||||
	    echo "iptables -A INPUT -s $line -j DROP" >> $TEMP
 | 
			
		||||
	    #echo "-A INPUT -s $line -j DROP" >> $TEMP
 | 
			
		||||
    done < $f
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
cat beggining.txt > $FINAL
 | 
			
		||||
cat $TEMP >> $FINAL
 | 
			
		||||
echo "" >> $FINAL
 | 
			
		||||
cat end.txt >> $FINAL
 | 
			
		||||
 | 
			
		||||
rm -rf blocked allzones $TEMP beggining.txt end.txt
 | 
			
		||||
sh ~/.local/bin/iptables-restart
 | 
			
		||||
#systemctl restart iptables
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/isort
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/isort
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/lib/python-exec/python3.7/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from isort.main import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										73
									
								
								.local/bin/mailsync
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								.local/bin/mailsync
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Sync mail and give notification if there is new mail.
 | 
			
		||||
# Run only if user logged in (prevent cron errors)
 | 
			
		||||
export DISPLAY=:0
 | 
			
		||||
 | 
			
		||||
pgrep -u "${USER:=$LOGNAME}" >/dev/null || { echo "$USER not logged in; sync will not run."; exit ;}
 | 
			
		||||
# Run only if not already running in other instance
 | 
			
		||||
pgrep -x mbsync >/dev/null && { echo "mbsync is already running." ; exit ;}
 | 
			
		||||
 | 
			
		||||
# Checks for internet connection and set notification script.
 | 
			
		||||
ping -q -c 1 1.1.1.1 > /dev/null || { echo "No internet connection detected."; exit ;}
 | 
			
		||||
command -v notify-send >/dev/null || echo "Note that \`libnotify\` or \`libnotify-send\` should be installed for pop-up mail notifications with this script."
 | 
			
		||||
 | 
			
		||||
# Required to display notifications if run as a cronjob:
 | 
			
		||||
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
 | 
			
		||||
 | 
			
		||||
# For individual configurations:
 | 
			
		||||
[ -d "$HOME/.local/share/password-store" ] && export PASSWORD_STORE_DIR="$HOME/.local/share/password-store"
 | 
			
		||||
 | 
			
		||||
# Settings are different for MacOS (Darwin) systems.
 | 
			
		||||
if [ "$(uname)" = "Darwin" ]; then
 | 
			
		||||
    notify() { osascript -e "display notification \"$2 in $1\" with title \"You've got Mail\" subtitle \"Account: $account\"" && sleep 2 ;}
 | 
			
		||||
    messageinfo() { osascript "display notification with title \"📧 $from\" subtitle \"$subject\"" ;}
 | 
			
		||||
else
 | 
			
		||||
    notify() { notify-send --app-name="mutt-wizard" "mutt-wizard" "📬 $2 new mail(s) in \`$1\` account." ;}
 | 
			
		||||
    messageinfo() { notify-send --app-name="mutt-wizard" "📧$from:" "$subject" ;}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check account for new mail. Notify if there is new content.
 | 
			
		||||
syncandnotify() {
 | 
			
		||||
    acc="$(echo "$account" | sed "s/.*\///")"
 | 
			
		||||
    mbsync $opts "$acc"
 | 
			
		||||
    new=$(find $(ls $HOME/.local/share/mail/$acc/* | grep -i inbox | sed 's/\://')/new -type f -newer "$HOME/.config/mutt/.mailsynclastrun" 2> /dev/null)
 | 
			
		||||
    newcount=$(echo "$new" | sed '/^\s*$/d' | wc -l)
 | 
			
		||||
    if [ "$newcount" -gt "0" ]; then
 | 
			
		||||
        notify "$acc" "$newcount" &
 | 
			
		||||
        for file in $new; do
 | 
			
		||||
            # Extract subject and sender from mail.
 | 
			
		||||
            from=$(awk '/^From: / && ++n ==1,/^\<.*\>:/' "$file" | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | awk '{ $1=""; if (NF>=3)$NF=""; print $0 }' | sed 's/^[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//')
 | 
			
		||||
            subject=$(awk '/^Subject: / && ++n == 1,/^\<.*\>: / && ++i == 2' "$file" | head -n-1 | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | sed 's/^Subject: //' | sed 's/^{[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//' | tr -d '\n')
 | 
			
		||||
	    messageinfo &
 | 
			
		||||
        done
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Sync accounts passed as argument or all.
 | 
			
		||||
if [ "$#" -eq "0" ]; then
 | 
			
		||||
    accounts="$(awk '/^Channel/ {print $2}' "$HOME/.mbsyncrc")"
 | 
			
		||||
else
 | 
			
		||||
    for arg in "$@"; do
 | 
			
		||||
        [ "${arg%${arg#?}}" = '-' ] && opts="${opts:+${opts} }${arg}" && shift 1
 | 
			
		||||
    done
 | 
			
		||||
    accounts=$*
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo " 🔃" > /tmp/imapsyncicon_"$USER"
 | 
			
		||||
( pkill -RTMIN+12 "${STATUSBAR:-blocks}" >/dev/null 2>&1 ) 2>/dev/null
 | 
			
		||||
 | 
			
		||||
# Parallelize multiple accounts
 | 
			
		||||
for account in $accounts
 | 
			
		||||
do
 | 
			
		||||
    syncandnotify &
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
wait
 | 
			
		||||
rm -f /tmp/imapsyncicon_"$USER"
 | 
			
		||||
( pkill -RTMIN+12 "${STATUSBAR:-blocks}" >/dev/null 2>&1 ) 2>/dev/null
 | 
			
		||||
 | 
			
		||||
notmuch new 2>/dev/null
 | 
			
		||||
 | 
			
		||||
#Create a touch file that indicates the time of the last run of mailsync
 | 
			
		||||
touch "$HOME/.config/mutt/.mailsynclastrun"
 | 
			
		||||
							
								
								
									
										2
									
								
								.local/bin/minecraft-launcher
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								.local/bin/minecraft-launcher
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
__NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 __GLX_VENDOR_LIBRARY_NAME=nvidia __GL_SYNC_TO_VBLANK=0 java -jar ~/Downloads/TLauncher-2.75/TLauncher-2.75.jar
 | 
			
		||||
							
								
								
									
										10
									
								
								.local/bin/mouse-set
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								.local/bin/mouse-set
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
choices="Off\nCycle"
 | 
			
		||||
chosen=$(echo -e "$choices" | dmenu -i)
 | 
			
		||||
 | 
			
		||||
mouse=$(sudo ratbag-command list | awk '{print $1}' | sed 's/://')
 | 
			
		||||
 | 
			
		||||
case "$chosen" in
 | 
			
		||||
    Off) sudo ratbag-command led 0 set mode off $mouse ;;
 | 
			
		||||
    Cycle) sudo ratbag-command led 0 set mode cycle $mouse && sudo ratbag-command led 0 set rate 25000 $mouse ;;
 | 
			
		||||
esac
 | 
			
		||||
							
								
								
									
										2
									
								
								.local/bin/night
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								.local/bin/night
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
redshift -l 52.2327:18.3036 -t 6500:3200&
 | 
			
		||||
							
								
								
									
										4
									
								
								.local/bin/notify-program
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.local/bin/notify-program
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
KERNEL=$(uname -sr)
 | 
			
		||||
[[ $KERNEL =~ "icrosoft" ]] && $HOME/.local/bin/wsl-notify "$@"
 | 
			
		||||
[[ $KERNEL =~ "gentoo" ]] && /usr/bin/notify-send "$@"
 | 
			
		||||
							
								
								
									
										2
									
								
								.local/bin/password-manager
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								.local/bin/password-manager
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
QT_SCALE_FACTOR=1.5 keepassxc
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/pasteurize
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/pasteurize
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from libpasteurize.main import main
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
							
								
								
									
										223
									
								
								.local/bin/pwiz.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										223
									
								
								.local/bin/pwiz.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,223 @@
 | 
			
		||||
#!/usr/bin/python3.8
 | 
			
		||||
 | 
			
		||||
import datetime
 | 
			
		||||
import sys
 | 
			
		||||
from getpass import getpass
 | 
			
		||||
from optparse import OptionParser
 | 
			
		||||
 | 
			
		||||
from peewee import *
 | 
			
		||||
from peewee import print_
 | 
			
		||||
from peewee import __version__ as peewee_version
 | 
			
		||||
from playhouse.cockroachdb import CockroachDatabase
 | 
			
		||||
from playhouse.reflection import *
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
HEADER = """from peewee import *%s
 | 
			
		||||
 | 
			
		||||
database = %s('%s'%s)
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
BASE_MODEL = """\
 | 
			
		||||
class BaseModel(Model):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        database = database
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
UNKNOWN_FIELD = """\
 | 
			
		||||
class UnknownField(object):
 | 
			
		||||
    def __init__(self, *_, **__): pass
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
DATABASE_ALIASES = {
 | 
			
		||||
    CockroachDatabase: ['cockroach', 'cockroachdb', 'crdb'],
 | 
			
		||||
    MySQLDatabase: ['mysql', 'mysqldb'],
 | 
			
		||||
    PostgresqlDatabase: ['postgres', 'postgresql'],
 | 
			
		||||
    SqliteDatabase: ['sqlite', 'sqlite3'],
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DATABASE_MAP = dict((value, key)
 | 
			
		||||
                    for key in DATABASE_ALIASES
 | 
			
		||||
                    for value in DATABASE_ALIASES[key])
 | 
			
		||||
 | 
			
		||||
def make_introspector(database_type, database_name, **kwargs):
 | 
			
		||||
    if database_type not in DATABASE_MAP:
 | 
			
		||||
        err('Unrecognized database, must be one of: %s' %
 | 
			
		||||
            ', '.join(DATABASE_MAP.keys()))
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
    schema = kwargs.pop('schema', None)
 | 
			
		||||
    DatabaseClass = DATABASE_MAP[database_type]
 | 
			
		||||
    db = DatabaseClass(database_name, **kwargs)
 | 
			
		||||
    return Introspector.from_database(db, schema=schema)
 | 
			
		||||
 | 
			
		||||
def print_models(introspector, tables=None, preserve_order=False,
 | 
			
		||||
                 include_views=False, ignore_unknown=False, snake_case=True):
 | 
			
		||||
    database = introspector.introspect(table_names=tables,
 | 
			
		||||
                                       include_views=include_views,
 | 
			
		||||
                                       snake_case=snake_case)
 | 
			
		||||
 | 
			
		||||
    db_kwargs = introspector.get_database_kwargs()
 | 
			
		||||
    header = HEADER % (
 | 
			
		||||
        introspector.get_additional_imports(),
 | 
			
		||||
        introspector.get_database_class().__name__,
 | 
			
		||||
        introspector.get_database_name(),
 | 
			
		||||
        ', **%s' % repr(db_kwargs) if db_kwargs else '')
 | 
			
		||||
    print_(header)
 | 
			
		||||
 | 
			
		||||
    if not ignore_unknown:
 | 
			
		||||
        print_(UNKNOWN_FIELD)
 | 
			
		||||
 | 
			
		||||
    print_(BASE_MODEL)
 | 
			
		||||
 | 
			
		||||
    def _print_table(table, seen, accum=None):
 | 
			
		||||
        accum = accum or []
 | 
			
		||||
        foreign_keys = database.foreign_keys[table]
 | 
			
		||||
        for foreign_key in foreign_keys:
 | 
			
		||||
            dest = foreign_key.dest_table
 | 
			
		||||
 | 
			
		||||
            # In the event the destination table has already been pushed
 | 
			
		||||
            # for printing, then we have a reference cycle.
 | 
			
		||||
            if dest in accum and table not in accum:
 | 
			
		||||
                print_('# Possible reference cycle: %s' % dest)
 | 
			
		||||
 | 
			
		||||
            # If this is not a self-referential foreign key, and we have
 | 
			
		||||
            # not already processed the destination table, do so now.
 | 
			
		||||
            if dest not in seen and dest not in accum:
 | 
			
		||||
                seen.add(dest)
 | 
			
		||||
                if dest != table:
 | 
			
		||||
                    _print_table(dest, seen, accum + [table])
 | 
			
		||||
 | 
			
		||||
        print_('class %s(BaseModel):' % database.model_names[table])
 | 
			
		||||
        columns = database.columns[table].items()
 | 
			
		||||
        if not preserve_order:
 | 
			
		||||
            columns = sorted(columns)
 | 
			
		||||
        primary_keys = database.primary_keys[table]
 | 
			
		||||
        for name, column in columns:
 | 
			
		||||
            skip = all([
 | 
			
		||||
                name in primary_keys,
 | 
			
		||||
                name == 'id',
 | 
			
		||||
                len(primary_keys) == 1,
 | 
			
		||||
                column.field_class in introspector.pk_classes])
 | 
			
		||||
            if skip:
 | 
			
		||||
                continue
 | 
			
		||||
            if column.primary_key and len(primary_keys) > 1:
 | 
			
		||||
                # If we have a CompositeKey, then we do not want to explicitly
 | 
			
		||||
                # mark the columns as being primary keys.
 | 
			
		||||
                column.primary_key = False
 | 
			
		||||
 | 
			
		||||
            is_unknown = column.field_class is UnknownField
 | 
			
		||||
            if is_unknown and ignore_unknown:
 | 
			
		||||
                disp = '%s - %s' % (column.name, column.raw_column_type or '?')
 | 
			
		||||
                print_('    # %s' % disp)
 | 
			
		||||
            else:
 | 
			
		||||
                print_('    %s' % column.get_field())
 | 
			
		||||
 | 
			
		||||
        print_('')
 | 
			
		||||
        print_('    class Meta:')
 | 
			
		||||
        print_('        table_name = \'%s\'' % table)
 | 
			
		||||
        multi_column_indexes = database.multi_column_indexes(table)
 | 
			
		||||
        if multi_column_indexes:
 | 
			
		||||
            print_('        indexes = (')
 | 
			
		||||
            for fields, unique in sorted(multi_column_indexes):
 | 
			
		||||
                print_('            ((%s), %s),' % (
 | 
			
		||||
                    ', '.join("'%s'" % field for field in fields),
 | 
			
		||||
                    unique,
 | 
			
		||||
                ))
 | 
			
		||||
            print_('        )')
 | 
			
		||||
 | 
			
		||||
        if introspector.schema:
 | 
			
		||||
            print_('        schema = \'%s\'' % introspector.schema)
 | 
			
		||||
        if len(primary_keys) > 1:
 | 
			
		||||
            pk_field_names = sorted([
 | 
			
		||||
                field.name for col, field in columns
 | 
			
		||||
                if col in primary_keys])
 | 
			
		||||
            pk_list = ', '.join("'%s'" % pk for pk in pk_field_names)
 | 
			
		||||
            print_('        primary_key = CompositeKey(%s)' % pk_list)
 | 
			
		||||
        elif not primary_keys:
 | 
			
		||||
            print_('        primary_key = False')
 | 
			
		||||
        print_('')
 | 
			
		||||
 | 
			
		||||
        seen.add(table)
 | 
			
		||||
 | 
			
		||||
    seen = set()
 | 
			
		||||
    for table in sorted(database.model_names.keys()):
 | 
			
		||||
        if table not in seen:
 | 
			
		||||
            if not tables or table in tables:
 | 
			
		||||
                _print_table(table, seen)
 | 
			
		||||
 | 
			
		||||
def print_header(cmd_line, introspector):
 | 
			
		||||
    timestamp = datetime.datetime.now()
 | 
			
		||||
    print_('# Code generated by:')
 | 
			
		||||
    print_('# python -m pwiz %s' % cmd_line)
 | 
			
		||||
    print_('# Date: %s' % timestamp.strftime('%B %d, %Y %I:%M%p'))
 | 
			
		||||
    print_('# Database: %s' % introspector.get_database_name())
 | 
			
		||||
    print_('# Peewee version: %s' % peewee_version)
 | 
			
		||||
    print_('')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def err(msg):
 | 
			
		||||
    sys.stderr.write('\033[91m%s\033[0m\n' % msg)
 | 
			
		||||
    sys.stderr.flush()
 | 
			
		||||
 | 
			
		||||
def get_option_parser():
 | 
			
		||||
    parser = OptionParser(usage='usage: %prog [options] database_name')
 | 
			
		||||
    ao = parser.add_option
 | 
			
		||||
    ao('-H', '--host', dest='host')
 | 
			
		||||
    ao('-p', '--port', dest='port', type='int')
 | 
			
		||||
    ao('-u', '--user', dest='user')
 | 
			
		||||
    ao('-P', '--password', dest='password', action='store_true')
 | 
			
		||||
    engines = sorted(DATABASE_MAP)
 | 
			
		||||
    ao('-e', '--engine', dest='engine', default='postgresql', choices=engines,
 | 
			
		||||
       help=('Database type, e.g. sqlite, mysql, postgresql or cockroachdb. '
 | 
			
		||||
             'Default is "postgresql".'))
 | 
			
		||||
    ao('-s', '--schema', dest='schema')
 | 
			
		||||
    ao('-t', '--tables', dest='tables',
 | 
			
		||||
       help=('Only generate the specified tables. Multiple table names should '
 | 
			
		||||
             'be separated by commas.'))
 | 
			
		||||
    ao('-v', '--views', dest='views', action='store_true',
 | 
			
		||||
       help='Generate model classes for VIEWs in addition to tables.')
 | 
			
		||||
    ao('-i', '--info', dest='info', action='store_true',
 | 
			
		||||
       help=('Add database information and other metadata to top of the '
 | 
			
		||||
             'generated file.'))
 | 
			
		||||
    ao('-o', '--preserve-order', action='store_true', dest='preserve_order',
 | 
			
		||||
       help='Model definition column ordering matches source table.')
 | 
			
		||||
    ao('-I', '--ignore-unknown', action='store_true', dest='ignore_unknown',
 | 
			
		||||
       help='Ignore fields whose type cannot be determined.')
 | 
			
		||||
    ao('-L', '--legacy-naming', action='store_true', dest='legacy_naming',
 | 
			
		||||
       help='Use legacy table- and column-name generation.')
 | 
			
		||||
    return parser
 | 
			
		||||
 | 
			
		||||
def get_connect_kwargs(options):
 | 
			
		||||
    ops = ('host', 'port', 'user', 'schema')
 | 
			
		||||
    kwargs = dict((o, getattr(options, o)) for o in ops if getattr(options, o))
 | 
			
		||||
    if options.password:
 | 
			
		||||
        kwargs['password'] = getpass()
 | 
			
		||||
    return kwargs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    raw_argv = sys.argv
 | 
			
		||||
 | 
			
		||||
    parser = get_option_parser()
 | 
			
		||||
    options, args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    if len(args) < 1:
 | 
			
		||||
        err('Missing required parameter "database"')
 | 
			
		||||
        parser.print_help()
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
    connect = get_connect_kwargs(options)
 | 
			
		||||
    database = args[-1]
 | 
			
		||||
 | 
			
		||||
    tables = None
 | 
			
		||||
    if options.tables:
 | 
			
		||||
        tables = [table.strip() for table in options.tables.split(',')
 | 
			
		||||
                  if table.strip()]
 | 
			
		||||
 | 
			
		||||
    introspector = make_introspector(options.engine, database, **connect)
 | 
			
		||||
    if options.info:
 | 
			
		||||
        cmd_line = ' '.join(raw_argv[1:])
 | 
			
		||||
        print_header(cmd_line, introspector)
 | 
			
		||||
 | 
			
		||||
    print_models(introspector, tables, options.preserve_order, options.views,
 | 
			
		||||
                 options.ignore_unknown, not options.legacy_naming)
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/pylint
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/pylint
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/lib/python-exec/python3.7/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from pylint import run_pylint
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(run_pylint())
 | 
			
		||||
							
								
								
									
										8
									
								
								.local/bin/pyreverse
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								.local/bin/pyreverse
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
#!/usr/lib/python-exec/python3.7/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
from pylint import run_pyreverse
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
 | 
			
		||||
    sys.exit(run_pyreverse())
 | 
			
		||||
							
								
								
									
										5
									
								
								.local/bin/rasp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								.local/bin/rasp
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
sudo chown yorune: /mnt/rasp
 | 
			
		||||
sshfs root@192.168.0.222:/mnt/ /mnt/rasp/
 | 
			
		||||
sleep 10
 | 
			
		||||
cd /mnt/rasp
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								.local/bin/rcon
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.local/bin/rcon
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										19
									
								
								.local/bin/record
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								.local/bin/record
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
AUDIO=$(pactl list sources | awk '/Name: alsa_out/{print $2}' | head -n1)
 | 
			
		||||
 | 
			
		||||
pkill -9 xautolock; xset s 10800
 | 
			
		||||
 | 
			
		||||
ffmpeg \
 | 
			
		||||
-f pulse \
 | 
			
		||||
-i "$AUDIO" \
 | 
			
		||||
-f x11grab \
 | 
			
		||||
-framerate 60 \
 | 
			
		||||
-r 30 \
 | 
			
		||||
-s 1920x1080 \
 | 
			
		||||
-i :0 \
 | 
			
		||||
-b:v 5500k \
 | 
			
		||||
-c:v h264 -preset ultrafast -c:a aac \
 | 
			
		||||
"$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4"
 | 
			
		||||
 | 
			
		||||
xset s 600&
 | 
			
		||||
xautolock -time 15 -locker slock&
 | 
			
		||||
							
								
								
									
										6
									
								
								.local/bin/remove-kernel
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								.local/bin/remove-kernel
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
sudo emerge -C "=sys-kernel/gentoo-sources-$1"
 | 
			
		||||
sudo rm -rf /usr/src/linux-$1-gentoo
 | 
			
		||||
sudo rm -rf /lib/modules/$1-gentoo-x86_64
 | 
			
		||||
sudo rm -rf /boot/*$1*
 | 
			
		||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
 | 
			
		||||
							
								
								
									
										2
									
								
								.local/bin/runJava
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								.local/bin/runJava
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 __GLX_VENDOR_LIBRARY_NAME=nvidia __GL_SYNC_TO_VBLANK=0 DRI_PRIME=1 exec java "$@"
 | 
			
		||||
							
								
								
									
										4
									
								
								.local/bin/saver-off
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.local/bin/saver-off
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
xset s off
 | 
			
		||||
xset -dpms
 | 
			
		||||
pkill -9 xautolock
 | 
			
		||||
							
								
								
									
										25
									
								
								.local/bin/sb-battery
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								.local/bin/sb-battery
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_battery() {
 | 
			
		||||
	# Find the battery level
 | 
			
		||||
	hash acpi || return 0
 | 
			
		||||
	onl="$(acpi -V | grep "on-line")"
 | 
			
		||||
	charge="$(cat /sys/class/power_supply/BAT*/capacity)"
 | 
			
		||||
    time="$(awk '{print $5}' <(acpi))"
 | 
			
		||||
 | 
			
		||||
	# Determine battery glyph by percentage range
 | 
			
		||||
	if [[ -z $onl && ${charge} -gt 80 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 80 && ${charge} -gt 60 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 60 && ${charge} -gt 40 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 40 && ${charge} -gt 20 ]]; then
 | 
			
		||||
		echo -e "🔋 ${charge}% ${time}"
 | 
			
		||||
	elif [[ -z $onl && ${charge} -le 20 ]]; then
 | 
			
		||||
		echo -e "❗🔋 ${charge}% ${time}"
 | 
			
		||||
	# If charging, use animated glyph
 | 
			
		||||
	else
 | 
			
		||||
		echo -e "🔌"
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
print_battery
 | 
			
		||||
							
								
								
									
										5
									
								
								.local/bin/sb-clock
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								.local/bin/sb-clock
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_date(){
 | 
			
		||||
	echo -e "🕛 $(date +"%d/%m %H:%M")"
 | 
			
		||||
}
 | 
			
		||||
print_date
 | 
			
		||||
							
								
								
									
										6
									
								
								.local/bin/sb-cpu
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								.local/bin/sb-cpu
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_cpu() {
 | 
			
		||||
    cpuUse=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print int(100 - $1)"%"}')
 | 
			
		||||
    echo -e "💻 $cpuUse"
 | 
			
		||||
}
 | 
			
		||||
print_cpu
 | 
			
		||||
							
								
								
									
										7
									
								
								.local/bin/sb-mail
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								.local/bin/sb-mail
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_mail(){
 | 
			
		||||
	unread="$(find "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f | wc -l 2>/dev/null)"
 | 
			
		||||
	icon="$(cat "/tmp/imapsyncicon_$USER" 2>/dev/null)"
 | 
			
		||||
	[ "$unread" = "1" ] && [ "$icon" = "" ] || echo "📬 $unread$icon"
 | 
			
		||||
}
 | 
			
		||||
print_mail
 | 
			
		||||
							
								
								
									
										5
									
								
								.local/bin/sb-mem
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								.local/bin/sb-mem
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_mem(){
 | 
			
		||||
	free --mebi | sed -n '2{p;q}' | awk '{printf ("🧠 %2.2fGiB", ( $3 / 1024) )}'
 | 
			
		||||
}
 | 
			
		||||
print_mem
 | 
			
		||||
							
								
								
									
										30
									
								
								.local/bin/sb-music
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								.local/bin/sb-music
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_music(){
 | 
			
		||||
# Source: https://github.com/joestandring/dwm-bar
 | 
			
		||||
# A dwm_bar function that shows the current artist, track, position, duration, and status from cmus
 | 
			
		||||
# Joe Standring <git@joestandring.com>
 | 
			
		||||
# GNU GPLv3
 | 
			
		||||
# Dependencies: cmus
 | 
			
		||||
 | 
			
		||||
if ps -C cmus > /dev/null; then
 | 
			
		||||
    ARTIST=$(cmus-remote -Q | grep -a '^tag artist' | awk '{gsub("tag artist ", "");print}')
 | 
			
		||||
    TRACK=$(cmus-remote -Q | grep -a '^tag title' | awk '{gsub("tag title ", "");print}')
 | 
			
		||||
    POSITION=$(cmus-remote -Q | grep -a '^position' | awk '{gsub("position ", "");print}')
 | 
			
		||||
    DURATION=$(cmus-remote -Q | grep -a '^duration' | awk '{gsub("duration ", "");print}')
 | 
			
		||||
    STATUS=$(cmus-remote -Q | grep -a '^status' | awk '{gsub("status ", "");print}')
 | 
			
		||||
    SHUFFLE=$(cmus-remote -Q | grep -a '^set shuffle' | awk '{gsub("set shuffle ", "");print}')
 | 
			
		||||
 | 
			
		||||
    if [ "$STATUS" = "playing" ]; then
 | 
			
		||||
        STATUS="▶"
 | 
			
		||||
    else
 | 
			
		||||
        STATUS="⏸"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    #printf "%s%s %s - %s " "$STATUS" "$ARTIST" "$TRACK"
 | 
			
		||||
    printf "%s" "$STATUS"
 | 
			
		||||
    #printf "%0d:%02d/" $((POSITION%3600/60)) $((POSITION%60))
 | 
			
		||||
    #printf "%0d:%02d" $((DURATION%3600/60)) $((DURATION%60))
 | 
			
		||||
    #printf "%s\n"
 | 
			
		||||
fi
 | 
			
		||||
}
 | 
			
		||||
print_music
 | 
			
		||||
							
								
								
									
										5
									
								
								.local/bin/sb-network
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								.local/bin/sb-network
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_wifi(){
 | 
			
		||||
    echo -e "$(cat /sys/class/net/w*/operstate | sed "s/down/❌/;s/up/📶/") $(cat /sys/class/net/e*/operstate | sed "s/down/❌/;s/up/🌐/")"
 | 
			
		||||
}
 | 
			
		||||
print_wifi
 | 
			
		||||
							
								
								
									
										5
									
								
								.local/bin/sb-temp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								.local/bin/sb-temp
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_temp(){
 | 
			
		||||
    echo -e "🔥 $(sensors | awk '/Core 0/ {print int($3)"°C"}') $(sudo nvidia-smi -q -d temperature | grep --color=no -i "GPU Current" |egrep --color=no -o '[0-9]*')°C"
 | 
			
		||||
}
 | 
			
		||||
print_temp
 | 
			
		||||
							
								
								
									
										7
									
								
								.local/bin/sb-volume
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								.local/bin/sb-volume
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_volume() {
 | 
			
		||||
    [ "$(pulsemixer --get-mute)" = "1" ] && printf "🔇" && exit
 | 
			
		||||
    vol=$(pulsemixer --get-volume | awk '{print $1}')
 | 
			
		||||
    printf "%s%%\\n" "🔊 $vol"
 | 
			
		||||
}
 | 
			
		||||
print_volume
 | 
			
		||||
							
								
								
									
										7
									
								
								.local/bin/sb-weather
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								.local/bin/sb-weather
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
print_weather() {
 | 
			
		||||
[ "$(stat -c %y "/home/yorune/.config/weatherreport" 2>/dev/null | cut -d' ' -f1)" != "$(date '+%Y-%m-%d')" ] && curl -s "wttr.in/$location" > "/home/yorune/.config/weatherreport"
 | 
			
		||||
 | 
			
		||||
printf "%s" "$(sed '16q;d' "/home/yorune/.config/weatherreport" | grep -wo "[0-9]*%" | sort -n | sed -e '$!d' | sed -e "s/^/☔ /g" | tr -d '\n')" &&  sed '13q;d' "/home/yorune/.config/weatherreport" | grep -o "m\\(-\\)*[0-9]\\+" | sort -n -t 'm' -k 2n | sed -e 1b -e '$!d' | tr '\n|m' ' ' | awk '{print" ❄",$1"°","☀",$2"°"}'
 | 
			
		||||
}
 | 
			
		||||
print_weather
 | 
			
		||||
							
								
								
									
										13
									
								
								.local/bin/screen-switcher
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								.local/bin/screen-switcher
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
choices="Left\nRight\nDuplicated\nHDMI\nMonitor\nTV\n"
 | 
			
		||||
 | 
			
		||||
chosen=$(echo -e "$choices" | dmenu -i)
 | 
			
		||||
 | 
			
		||||
case "$chosen" in
 | 
			
		||||
	Monitor) mons -o ;;
 | 
			
		||||
	Duplicated) mons -d ;;
 | 
			
		||||
	Left) mons -e left ;;
 | 
			
		||||
	Right) mons -e right ;;
 | 
			
		||||
	HDMI) mons -s ;;
 | 
			
		||||
    TV) xrandr --output HDMI-1 --left-of eDP-1 --mode 1366x768 --rate 60
 | 
			
		||||
esac
 | 
			
		||||
							
								
								
									
										7
									
								
								.local/bin/screenshot
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								.local/bin/screenshot
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
FILE="/tmp/`date +%Y%m%d-%H.%M.%S.png`"
 | 
			
		||||
NAME=$(date +%s | sha256sum | base64 | head -c 20 ; echo)
 | 
			
		||||
 | 
			
		||||
gnome-screenshot -f "$FILE"
 | 
			
		||||
rsync -avz --delete $FILE -e "ssh -p 22" root@209.250.255.224:/var/www/yorune.pl/u/$NAME.png &&
 | 
			
		||||
 | 
			
		||||
echo -e "https://yorune.pl/u/$NAME.png" | xclip -selection clipboard && notify-send "Screenshot has been updated"
 | 
			
		||||
							
								
								
									
										7
									
								
								.local/bin/screenshot-area
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								.local/bin/screenshot-area
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
FILE="/tmp/`date +%Y%m%d-%H.%M.%S.png`"
 | 
			
		||||
NAME=$(date +%s | sha256sum | base64 | head -c 20 ; echo)
 | 
			
		||||
 | 
			
		||||
gnome-screenshot --area -f "$FILE"
 | 
			
		||||
rsync -avz --delete $FILE -e "ssh -p 22" root@209.250.255.224:/var/www/yorune.pl/u/$NAME.png &&
 | 
			
		||||
 | 
			
		||||
echo -e "https://yorune.pl/u/$NAME.png" | xclip -selection clipboard && notify-send "Screenshot has been updated"
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user