Merge branch 'linux' into dev
This commit is contained in:
commit
c7901d1328
145 changed files with 12495 additions and 6398 deletions
37
.bin/Scripts/apple-fans
Executable file
37
.bin/Scripts/apple-fans
Executable file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
## Wizard Kit: Apple fan speed tool
|
||||||
|
|
||||||
|
SMCPATH="/sys/devices/platform/applesmc.768"
|
||||||
|
SET_MAX="True"
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "Usage: $(basename "$0") auto|max"
|
||||||
|
echo " e.g. $(basename "$0") max"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set mode
|
||||||
|
case $1 in
|
||||||
|
auto)
|
||||||
|
SET_MAX="False";;
|
||||||
|
max)
|
||||||
|
SET_MAX="True";;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ -e "$SMCPATH" ]]; then
|
||||||
|
if [[ "$SET_MAX" == "True" ]]; then
|
||||||
|
# Set fans to max RPM
|
||||||
|
for fan in $SMCPATH/fan*max; do
|
||||||
|
echo '1' | sudo tee ${fan:0:-4}_manual > /dev/null
|
||||||
|
cat $fan | sudo tee ${fan:0:-4}_output > /dev/null
|
||||||
|
done
|
||||||
|
else
|
||||||
|
# Set fans to auto
|
||||||
|
for fan in $SMCPATH/fan*manual; do
|
||||||
|
echo '0' | sudo tee $fan > /dev/null
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
35
.bin/Scripts/borrowed/sensors-README.md
Normal file
35
.bin/Scripts/borrowed/sensors-README.md
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
sensors.py
|
||||||
|
==========
|
||||||
|
python bindings using ctypes for libsensors3 of the [lm-sensors project](https://github.com/groeck/lm-sensors). The code was written against libsensors 3.3.4.
|
||||||
|
|
||||||
|
For documentation of the low level API see [sensors.h](https://github.com/groeck/lm-sensors/blob/master/lib/sensors.h). For an example of the high level API see [example.py](example.py).
|
||||||
|
|
||||||
|
For a GUI application that displays the sensor readings and is based on this library, take a look at [sensors-unity](https://launchpad.net/sensors-unity).
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
* Full access to low level libsensors3 API
|
||||||
|
* High level iterator API
|
||||||
|
* unicode handling
|
||||||
|
* Python2 and Python3 compatible
|
||||||
|
|
||||||
|
Licensing
|
||||||
|
---------
|
||||||
|
LGPLv2 (same as libsensors3)
|
||||||
|
|
||||||
|
Usage Notes
|
||||||
|
-----------
|
||||||
|
As Python does not support call by reference for primitive types some of the libsensors API had to be adapted:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# nr is changed by refrence in the C API
|
||||||
|
chip_name, nr = sensors.get_detected_chips(None, nr)
|
||||||
|
|
||||||
|
# returns the value. throws on error
|
||||||
|
val = sensors.get_value(chip, subfeature_nr)
|
||||||
|
```
|
||||||
|
|
||||||
|
Missing Features (pull requests are welcome):
|
||||||
|
* `sensors_subfeature_type` enum
|
||||||
|
* `sensors_get_subfeature`
|
||||||
|
* Error handlers
|
||||||
236
.bin/Scripts/borrowed/sensors.py
Normal file
236
.bin/Scripts/borrowed/sensors.py
Normal file
|
|
@ -0,0 +1,236 @@
|
||||||
|
"""
|
||||||
|
@package sensors.py
|
||||||
|
Python Bindings for libsensors3
|
||||||
|
|
||||||
|
use the documentation of libsensors for the low level API.
|
||||||
|
see example.py for high level API usage.
|
||||||
|
|
||||||
|
@author: Pavel Rojtberg (http://www.rojtberg.net)
|
||||||
|
@see: https://github.com/paroj/sensors.py
|
||||||
|
@copyright: LGPLv2 (same as libsensors) <http://opensource.org/licenses/LGPL-2.1>
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ctypes import *
|
||||||
|
import ctypes.util
|
||||||
|
|
||||||
|
_libc = cdll.LoadLibrary(ctypes.util.find_library("c"))
|
||||||
|
# see https://github.com/paroj/sensors.py/issues/1
|
||||||
|
_libc.free.argtypes = [c_void_p]
|
||||||
|
|
||||||
|
_hdl = cdll.LoadLibrary(ctypes.util.find_library("sensors"))
|
||||||
|
|
||||||
|
version = c_char_p.in_dll(_hdl, "libsensors_version").value.decode("ascii")
|
||||||
|
|
||||||
|
class bus_id(Structure):
|
||||||
|
_fields_ = [("type", c_short),
|
||||||
|
("nr", c_short)]
|
||||||
|
|
||||||
|
class chip_name(Structure):
|
||||||
|
_fields_ = [("prefix", c_char_p),
|
||||||
|
("bus", bus_id),
|
||||||
|
("addr", c_int),
|
||||||
|
("path", c_char_p)]
|
||||||
|
|
||||||
|
class feature(Structure):
|
||||||
|
_fields_ = [("name", c_char_p),
|
||||||
|
("number", c_int),
|
||||||
|
("type", c_int)]
|
||||||
|
|
||||||
|
# sensors_feature_type
|
||||||
|
IN = 0x00
|
||||||
|
FAN = 0x01
|
||||||
|
TEMP = 0x02
|
||||||
|
POWER = 0x03
|
||||||
|
ENERGY = 0x04
|
||||||
|
CURR = 0x05
|
||||||
|
HUMIDITY = 0x06
|
||||||
|
MAX_MAIN = 0x7
|
||||||
|
VID = 0x10
|
||||||
|
INTRUSION = 0x11
|
||||||
|
MAX_OTHER = 0x12
|
||||||
|
BEEP_ENABLE = 0x18
|
||||||
|
|
||||||
|
class subfeature(Structure):
|
||||||
|
_fields_ = [("name", c_char_p),
|
||||||
|
("number", c_int),
|
||||||
|
("type", c_int),
|
||||||
|
("mapping", c_int),
|
||||||
|
("flags", c_uint)]
|
||||||
|
|
||||||
|
_hdl.sensors_get_detected_chips.restype = POINTER(chip_name)
|
||||||
|
_hdl.sensors_get_features.restype = POINTER(feature)
|
||||||
|
_hdl.sensors_get_all_subfeatures.restype = POINTER(subfeature)
|
||||||
|
_hdl.sensors_get_label.restype = c_void_p # return pointer instead of str so we can free it
|
||||||
|
_hdl.sensors_get_adapter_name.restype = c_char_p # docs do not say whether to free this or not
|
||||||
|
_hdl.sensors_strerror.restype = c_char_p
|
||||||
|
|
||||||
|
### RAW API ###
|
||||||
|
MODE_R = 1
|
||||||
|
MODE_W = 2
|
||||||
|
COMPUTE_MAPPING = 4
|
||||||
|
|
||||||
|
def init(cfg_file = None):
|
||||||
|
file = _libc.fopen(cfg_file.encode("utf-8"), "r") if cfg_file is not None else None
|
||||||
|
|
||||||
|
if _hdl.sensors_init(file) != 0:
|
||||||
|
raise Exception("sensors_init failed")
|
||||||
|
|
||||||
|
if file is not None:
|
||||||
|
_libc.fclose(file)
|
||||||
|
|
||||||
|
def cleanup():
|
||||||
|
_hdl.sensors_cleanup()
|
||||||
|
|
||||||
|
def parse_chip_name(orig_name):
|
||||||
|
ret = chip_name()
|
||||||
|
err= _hdl.sensors_parse_chip_name(orig_name.encode("utf-8"), byref(ret))
|
||||||
|
|
||||||
|
if err < 0:
|
||||||
|
raise Exception(strerror(err))
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def strerror(errnum):
|
||||||
|
return _hdl.sensors_strerror(errnum).decode("utf-8")
|
||||||
|
|
||||||
|
def free_chip_name(chip):
|
||||||
|
_hdl.sensors_free_chip_name(byref(chip))
|
||||||
|
|
||||||
|
def get_detected_chips(match, nr):
|
||||||
|
"""
|
||||||
|
@return: (chip, next nr to query)
|
||||||
|
"""
|
||||||
|
_nr = c_int(nr)
|
||||||
|
|
||||||
|
if match is not None:
|
||||||
|
match = byref(match)
|
||||||
|
|
||||||
|
chip = _hdl.sensors_get_detected_chips(match, byref(_nr))
|
||||||
|
chip = chip.contents if bool(chip) else None
|
||||||
|
return chip, _nr.value
|
||||||
|
|
||||||
|
def chip_snprintf_name(chip, buffer_size=200):
|
||||||
|
"""
|
||||||
|
@param buffer_size defaults to the size used in the sensors utility
|
||||||
|
"""
|
||||||
|
ret = create_string_buffer(buffer_size)
|
||||||
|
err = _hdl.sensors_snprintf_chip_name(ret, buffer_size, byref(chip))
|
||||||
|
|
||||||
|
if err < 0:
|
||||||
|
raise Exception(strerror(err))
|
||||||
|
|
||||||
|
return ret.value.decode("utf-8")
|
||||||
|
|
||||||
|
def do_chip_sets(chip):
|
||||||
|
"""
|
||||||
|
@attention this function was not tested
|
||||||
|
"""
|
||||||
|
err = _hdl.sensors_do_chip_sets(byref(chip))
|
||||||
|
if err < 0:
|
||||||
|
raise Exception(strerror(err))
|
||||||
|
|
||||||
|
def get_adapter_name(bus):
|
||||||
|
return _hdl.sensors_get_adapter_name(byref(bus)).decode("utf-8")
|
||||||
|
|
||||||
|
def get_features(chip, nr):
|
||||||
|
"""
|
||||||
|
@return: (feature, next nr to query)
|
||||||
|
"""
|
||||||
|
_nr = c_int(nr)
|
||||||
|
feature = _hdl.sensors_get_features(byref(chip), byref(_nr))
|
||||||
|
feature = feature.contents if bool(feature) else None
|
||||||
|
return feature, _nr.value
|
||||||
|
|
||||||
|
def get_label(chip, feature):
|
||||||
|
ptr = _hdl.sensors_get_label(byref(chip), byref(feature))
|
||||||
|
val = cast(ptr, c_char_p).value.decode("utf-8")
|
||||||
|
_libc.free(ptr)
|
||||||
|
return val
|
||||||
|
|
||||||
|
def get_all_subfeatures(chip, feature, nr):
|
||||||
|
"""
|
||||||
|
@return: (subfeature, next nr to query)
|
||||||
|
"""
|
||||||
|
_nr = c_int(nr)
|
||||||
|
subfeature = _hdl.sensors_get_all_subfeatures(byref(chip), byref(feature), byref(_nr))
|
||||||
|
subfeature = subfeature.contents if bool(subfeature) else None
|
||||||
|
return subfeature, _nr.value
|
||||||
|
|
||||||
|
def get_value(chip, subfeature_nr):
|
||||||
|
val = c_double()
|
||||||
|
err = _hdl.sensors_get_value(byref(chip), subfeature_nr, byref(val))
|
||||||
|
if err < 0:
|
||||||
|
raise Exception(strerror(err))
|
||||||
|
return val.value
|
||||||
|
|
||||||
|
def set_value(chip, subfeature_nr, value):
|
||||||
|
"""
|
||||||
|
@attention this function was not tested
|
||||||
|
"""
|
||||||
|
val = c_double(value)
|
||||||
|
err = _hdl.sensors_set_value(byref(chip), subfeature_nr, byref(val))
|
||||||
|
if err < 0:
|
||||||
|
raise Exception(strerror(err))
|
||||||
|
|
||||||
|
### Convenience API ###
|
||||||
|
class ChipIterator:
|
||||||
|
def __init__(self, match = None):
|
||||||
|
self.match = parse_chip_name(match) if match is not None else None
|
||||||
|
self.nr = 0
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
chip, self.nr = get_detected_chips(self.match, self.nr)
|
||||||
|
|
||||||
|
if chip is None:
|
||||||
|
raise StopIteration
|
||||||
|
|
||||||
|
return chip
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
if self.match is not None:
|
||||||
|
free_chip_name(self.match)
|
||||||
|
|
||||||
|
def next(self): # python2 compability
|
||||||
|
return self.__next__()
|
||||||
|
|
||||||
|
class FeatureIterator:
|
||||||
|
def __init__(self, chip):
|
||||||
|
self.chip = chip
|
||||||
|
self.nr = 0
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
feature, self.nr = get_features(self.chip, self.nr)
|
||||||
|
|
||||||
|
if feature is None:
|
||||||
|
raise StopIteration
|
||||||
|
|
||||||
|
return feature
|
||||||
|
|
||||||
|
def next(self): # python2 compability
|
||||||
|
return self.__next__()
|
||||||
|
|
||||||
|
class SubFeatureIterator:
|
||||||
|
def __init__(self, chip, feature):
|
||||||
|
self.chip = chip
|
||||||
|
self.feature = feature
|
||||||
|
self.nr = 0
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
subfeature, self.nr = get_all_subfeatures(self.chip, self.feature, self.nr)
|
||||||
|
|
||||||
|
if subfeature is None:
|
||||||
|
raise StopIteration
|
||||||
|
|
||||||
|
return subfeature
|
||||||
|
|
||||||
|
def next(self): # python2 compability
|
||||||
|
return self.__next__()
|
||||||
30
.bin/Scripts/connect-to-network
Executable file
30
.bin/Scripts/connect-to-network
Executable file
|
|
@ -0,0 +1,30 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: Network connection tool
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.network import *
|
||||||
|
init_global_vars()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
clear_screen()
|
||||||
|
|
||||||
|
# Connect
|
||||||
|
connect_to_network()
|
||||||
|
|
||||||
|
# Done
|
||||||
|
print_standard('\nDone.')
|
||||||
|
#pause("Press Enter to exit...")
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
major_exception()
|
||||||
|
|
||||||
|
|
@ -8,7 +8,11 @@ import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
import winreg
|
try:
|
||||||
|
import winreg
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
if psutil.WINDOWS:
|
||||||
|
raise
|
||||||
|
|
||||||
from subprocess import CalledProcessError
|
from subprocess import CalledProcessError
|
||||||
|
|
||||||
|
|
@ -26,9 +30,13 @@ COLORS = {
|
||||||
'YELLOW': '\033[33m',
|
'YELLOW': '\033[33m',
|
||||||
'BLUE': '\033[34m'
|
'BLUE': '\033[34m'
|
||||||
}
|
}
|
||||||
HKU = winreg.HKEY_USERS
|
try:
|
||||||
HKCU = winreg.HKEY_CURRENT_USER
|
HKU = winreg.HKEY_USERS
|
||||||
HKLM = winreg.HKEY_LOCAL_MACHINE
|
HKCU = winreg.HKEY_CURRENT_USER
|
||||||
|
HKLM = winreg.HKEY_LOCAL_MACHINE
|
||||||
|
except NameError:
|
||||||
|
if psutil.WINDOWS:
|
||||||
|
raise
|
||||||
|
|
||||||
# Error Classes
|
# Error Classes
|
||||||
class BIOSKeyNotFoundError(Exception):
|
class BIOSKeyNotFoundError(Exception):
|
||||||
|
|
@ -86,8 +94,11 @@ def ask(prompt='Kotaero!'):
|
||||||
return answer
|
return answer
|
||||||
|
|
||||||
def clear_screen():
|
def clear_screen():
|
||||||
"""Simple wrapper for cls."""
|
"""Simple wrapper for cls/clear."""
|
||||||
|
if psutil.WINDOWS:
|
||||||
os.system('cls')
|
os.system('cls')
|
||||||
|
else:
|
||||||
|
os.system('clear')
|
||||||
|
|
||||||
def convert_to_bytes(size):
|
def convert_to_bytes(size):
|
||||||
"""Convert human-readable size str to bytes and return an int."""
|
"""Convert human-readable size str to bytes and return an int."""
|
||||||
|
|
@ -121,7 +132,7 @@ def exit_script(return_value=0):
|
||||||
|
|
||||||
# Open Log (if it exists)
|
# Open Log (if it exists)
|
||||||
log = global_vars.get('LogFile', '')
|
log = global_vars.get('LogFile', '')
|
||||||
if log and os.path.exists(log):
|
if log and os.path.exists(log) and psutil.WINDOWS:
|
||||||
try:
|
try:
|
||||||
extract_item('NotepadPlusPlus', silent=True)
|
extract_item('NotepadPlusPlus', silent=True)
|
||||||
popen_program(
|
popen_program(
|
||||||
|
|
@ -160,8 +171,10 @@ def get_ticket_number():
|
||||||
_input = input('Enter ticket number: ')
|
_input = input('Enter ticket number: ')
|
||||||
if re.match(r'^([0-9]+([-_]?\w+|))$', _input):
|
if re.match(r'^([0-9]+([-_]?\w+|))$', _input):
|
||||||
ticket_number = _input
|
ticket_number = _input
|
||||||
with open(r'{}\TicketNumber'.format(global_vars['LogDir']), 'w',
|
out_file = r'{}\TicketNumber'.format(global_vars['LogDir'])
|
||||||
encoding='utf-8') as f:
|
if not psutil.WINDOWS:
|
||||||
|
out_file = out_file.replace('\\', '/')
|
||||||
|
with open(out_file, 'w', encoding='utf-8') as f:
|
||||||
f.write(ticket_number)
|
f.write(ticket_number)
|
||||||
return ticket_number
|
return ticket_number
|
||||||
|
|
||||||
|
|
@ -220,7 +233,8 @@ def major_exception():
|
||||||
|
|
||||||
def menu_select(title='~ Untitled Menu ~',
|
def menu_select(title='~ Untitled Menu ~',
|
||||||
prompt='Please make a selection', secret_exit=False,
|
prompt='Please make a selection', secret_exit=False,
|
||||||
main_entries=[], action_entries=[], disabled_label='DISABLED'):
|
main_entries=[], action_entries=[], disabled_label='DISABLED',
|
||||||
|
spacer=''):
|
||||||
"""Display options in a menu and return selected option as a str."""
|
"""Display options in a menu and return selected option as a str."""
|
||||||
# Bail early
|
# Bail early
|
||||||
if not main_entries and not action_entries:
|
if not main_entries and not action_entries:
|
||||||
|
|
@ -231,7 +245,7 @@ def menu_select(title='~ Untitled Menu ~',
|
||||||
title = '{}\n\n{}'.format(global_vars['Title'], title)
|
title = '{}\n\n{}'.format(global_vars['Title'], title)
|
||||||
|
|
||||||
# Build menu
|
# Build menu
|
||||||
menu_splash = '{}\n\n'.format(title)
|
menu_splash = '{}\n{}\n'.format(title, spacer)
|
||||||
width = len(str(len(main_entries)))
|
width = len(str(len(main_entries)))
|
||||||
valid_answers = []
|
valid_answers = []
|
||||||
if (secret_exit):
|
if (secret_exit):
|
||||||
|
|
@ -242,7 +256,7 @@ def menu_select(title='~ Untitled Menu ~',
|
||||||
entry = main_entries[i]
|
entry = main_entries[i]
|
||||||
# Add Spacer
|
# Add Spacer
|
||||||
if ('CRLF' in entry):
|
if ('CRLF' in entry):
|
||||||
menu_splash += '\n'
|
menu_splash += '{}\n'.format(spacer)
|
||||||
entry_str = '{number:>{width}}: {name}'.format(
|
entry_str = '{number:>{width}}: {name}'.format(
|
||||||
number = i+1,
|
number = i+1,
|
||||||
width = width,
|
width = width,
|
||||||
|
|
@ -255,13 +269,13 @@ def menu_select(title='~ Untitled Menu ~',
|
||||||
else:
|
else:
|
||||||
valid_answers.append(str(i+1))
|
valid_answers.append(str(i+1))
|
||||||
menu_splash += '{}\n'.format(entry_str)
|
menu_splash += '{}\n'.format(entry_str)
|
||||||
menu_splash += '\n'
|
menu_splash += '{}\n'.format(spacer)
|
||||||
|
|
||||||
# Add action entries
|
# Add action entries
|
||||||
for entry in action_entries:
|
for entry in action_entries:
|
||||||
# Add Spacer
|
# Add Spacer
|
||||||
if ('CRLF' in entry):
|
if ('CRLF' in entry):
|
||||||
menu_splash += '\n'
|
menu_splash += '{}\n'.format(spacer)
|
||||||
valid_answers.append(entry['Letter'])
|
valid_answers.append(entry['Letter'])
|
||||||
menu_splash += '{letter:>{width}}: {name}\n'.format(
|
menu_splash += '{letter:>{width}}: {name}\n'.format(
|
||||||
letter = entry['Letter'].upper(),
|
letter = entry['Letter'].upper(),
|
||||||
|
|
@ -272,7 +286,7 @@ def menu_select(title='~ Untitled Menu ~',
|
||||||
answer = ''
|
answer = ''
|
||||||
|
|
||||||
while (answer.upper() not in valid_answers):
|
while (answer.upper() not in valid_answers):
|
||||||
os.system('cls')
|
clear_screen()
|
||||||
print(menu_splash)
|
print(menu_splash)
|
||||||
answer = input('{}: '.format(prompt))
|
answer = input('{}: '.format(prompt))
|
||||||
|
|
||||||
|
|
@ -294,7 +308,11 @@ def pause(prompt='Press Enter to continue... '):
|
||||||
|
|
||||||
def ping(addr='google.com'):
|
def ping(addr='google.com'):
|
||||||
"""Attempt to ping addr."""
|
"""Attempt to ping addr."""
|
||||||
cmd = ['ping', '-n', '2', addr]
|
cmd = [
|
||||||
|
'ping',
|
||||||
|
'-n' if psutil.WINDOWS else '-c',
|
||||||
|
'2',
|
||||||
|
addr]
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
|
|
||||||
def popen_program(cmd, pipe=False, minimized=False, shell=False, **kwargs):
|
def popen_program(cmd, pipe=False, minimized=False, shell=False, **kwargs):
|
||||||
|
|
@ -341,7 +359,7 @@ def print_warning(*args, **kwargs):
|
||||||
|
|
||||||
def print_log(message='', end='\n', timestamp=True):
|
def print_log(message='', end='\n', timestamp=True):
|
||||||
time_str = time.strftime("%Y-%m-%d %H%M%z: ") if timestamp else ''
|
time_str = time.strftime("%Y-%m-%d %H%M%z: ") if timestamp else ''
|
||||||
if 'LogFile' in global_vars and global_vars['LogFile'] is not None:
|
if 'LogFile' in global_vars and global_vars['LogFile']:
|
||||||
with open(global_vars['LogFile'], 'a', encoding='utf-8') as f:
|
with open(global_vars['LogFile'], 'a', encoding='utf-8') as f:
|
||||||
for line in message.splitlines():
|
for line in message.splitlines():
|
||||||
f.write('{timestamp}{line}{end}'.format(
|
f.write('{timestamp}{line}{end}'.format(
|
||||||
|
|
@ -442,10 +460,13 @@ def try_and_print(message='Trying...',
|
||||||
try:
|
try:
|
||||||
out = function(*args, **kwargs)
|
out = function(*args, **kwargs)
|
||||||
if print_return:
|
if print_return:
|
||||||
print_standard(out[0], timestamp=False)
|
str_list = out
|
||||||
for item in out[1:]:
|
if isinstance(out, subprocess.CompletedProcess):
|
||||||
|
str_list = out.stdout.decode().strip().splitlines()
|
||||||
|
print_standard(str_list[0].strip(), timestamp=False)
|
||||||
|
for item in str_list[1:]:
|
||||||
print_standard('{indent}{item}'.format(
|
print_standard('{indent}{item}'.format(
|
||||||
indent=' '*(indent+width), item=item))
|
indent=' '*(indent+width), item=item.strip()))
|
||||||
elif silent_function:
|
elif silent_function:
|
||||||
print_success(cs, timestamp=False)
|
print_success(cs, timestamp=False)
|
||||||
except w_exceptions as e:
|
except w_exceptions as e:
|
||||||
|
|
@ -534,7 +555,14 @@ def wait_for_process(name, poll_rate=3):
|
||||||
def init_global_vars():
|
def init_global_vars():
|
||||||
"""Sets global variables based on system info."""
|
"""Sets global variables based on system info."""
|
||||||
print_info('Initializing')
|
print_info('Initializing')
|
||||||
|
if psutil.WINDOWS:
|
||||||
os.system('title Wizard Kit')
|
os.system('title Wizard Kit')
|
||||||
|
if psutil.LINUX:
|
||||||
|
init_functions = [
|
||||||
|
['Checking environment...', set_linux_vars],
|
||||||
|
['Clearing collisions...', clean_env_vars],
|
||||||
|
]
|
||||||
|
else:
|
||||||
init_functions = [
|
init_functions = [
|
||||||
['Checking .bin...', find_bin],
|
['Checking .bin...', find_bin],
|
||||||
['Checking environment...', set_common_vars],
|
['Checking environment...', set_common_vars],
|
||||||
|
|
@ -713,5 +741,14 @@ def set_common_vars():
|
||||||
global_vars['TmpDir'] = r'{BinDir}\tmp'.format(
|
global_vars['TmpDir'] = r'{BinDir}\tmp'.format(
|
||||||
**global_vars)
|
**global_vars)
|
||||||
|
|
||||||
|
def set_linux_vars():
|
||||||
|
result = run_program(['mktemp', '-d'])
|
||||||
|
global_vars['TmpDir'] = result.stdout.decode().strip()
|
||||||
|
global_vars['Date'] = time.strftime("%Y-%m-%d")
|
||||||
|
global_vars['Date-Time'] = time.strftime("%Y-%m-%d_%H%M_%z")
|
||||||
|
global_vars['Env'] = os.environ.copy()
|
||||||
|
global_vars['BinDir'] = '/usr/local/bin'
|
||||||
|
global_vars['LogDir'] = global_vars['TmpDir']
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
# Wizard Kit: Functions - Data
|
# Wizard Kit: Functions - Data
|
||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
|
import json
|
||||||
|
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
|
||||||
|
|
@ -157,38 +158,143 @@ def is_valid_wim_file(item):
|
||||||
print_log('WARNING: Image "{}" damaged.'.format(item.name))
|
print_log('WARNING: Image "{}" damaged.'.format(item.name))
|
||||||
return valid
|
return valid
|
||||||
|
|
||||||
|
def get_mounted_data():
|
||||||
|
"""Get mounted volumes, returns dict."""
|
||||||
|
cmd = [
|
||||||
|
'findmnt', '-J', '-b', '-i',
|
||||||
|
't', (
|
||||||
|
'autofs,binfmt_misc,cgroup,cgroup2,configfs,debugfs,devpts,devtmpfs,'
|
||||||
|
'hugetlbfs,mqueue,proc,pstore,securityfs,sysfs,tmpfs'
|
||||||
|
),
|
||||||
|
'-o', 'SOURCE,TARGET,FSTYPE,LABEL,SIZE,AVAIL,USED']
|
||||||
|
result = run_program(cmd)
|
||||||
|
json_data = json.loads(result.stdout.decode())
|
||||||
|
mounted_data = []
|
||||||
|
for item in json_data.get('filesystems', []):
|
||||||
|
mounted_data.append(item)
|
||||||
|
mounted_data.extend(item.get('children', []))
|
||||||
|
return {item['source']: item for item in mounted_data}
|
||||||
|
|
||||||
|
def mount_all_volumes():
|
||||||
|
"""Mount all attached devices with recognized filesystems."""
|
||||||
|
report = []
|
||||||
|
|
||||||
|
# Get list of block devices
|
||||||
|
cmd = ['lsblk', '-J', '-o', 'NAME,FSTYPE,LABEL,UUID,PARTTYPE,TYPE,SIZE']
|
||||||
|
result = run_program(cmd)
|
||||||
|
json_data = json.loads(result.stdout.decode())
|
||||||
|
devs = json_data.get('blockdevices', [])
|
||||||
|
|
||||||
|
# Get list of mounted devices
|
||||||
|
mounted_data = get_mounted_data()
|
||||||
|
mounted_list = [m['source'] for m in mounted_data.values()]
|
||||||
|
|
||||||
|
# Loop over devices
|
||||||
|
for dev in devs:
|
||||||
|
dev_path = '/dev/{}'.format(dev['name'])
|
||||||
|
if re.search(r'^(loop|sr)', dev['name'], re.IGNORECASE):
|
||||||
|
# Skip loopback devices and optical media
|
||||||
|
report.append([dev_path, 'Skipped'])
|
||||||
|
continue
|
||||||
|
for child in dev.get('children', []):
|
||||||
|
child_path = '/dev/{}'.format(child['name'])
|
||||||
|
if child_path in mounted_list:
|
||||||
|
report.append([child_path, 'Already Mounted'])
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
run_program(['udevil', 'mount', '-o', 'ro', child_path])
|
||||||
|
report.append([child_path, 'CS'])
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
report.append([child_path, 'NS'])
|
||||||
|
|
||||||
|
# Update list of mounted devices
|
||||||
|
mounted_data = get_mounted_data()
|
||||||
|
mounted_list = [m['source'] for m in mounted_data.values()]
|
||||||
|
|
||||||
|
# Update report lines for show_data()
|
||||||
|
for line in report:
|
||||||
|
_path = line[0]
|
||||||
|
_result = line[1]
|
||||||
|
info = {'message': '{}:'.format(_path)}
|
||||||
|
if _path in mounted_list:
|
||||||
|
info['data'] = 'Mounted on {}'.format(
|
||||||
|
mounted_data[_path]['target'])
|
||||||
|
info['data'] = '{:40} ({} used, {} free)'.format(
|
||||||
|
info['data'],
|
||||||
|
human_readable_size(mounted_data[_path]['used']),
|
||||||
|
human_readable_size(mounted_data[_path]['avail']))
|
||||||
|
if _result == 'Already Mounted':
|
||||||
|
info['warning'] = True
|
||||||
|
elif _result == 'Skipped':
|
||||||
|
info['data'] = 'Skipped'
|
||||||
|
info['warning'] = True
|
||||||
|
else:
|
||||||
|
info['data'] = 'Failed to mount'
|
||||||
|
info['error'] = True
|
||||||
|
line.append(info)
|
||||||
|
return report
|
||||||
|
|
||||||
def mount_backup_shares():
|
def mount_backup_shares():
|
||||||
"""Mount the backup shares unless labeled as already mounted."""
|
"""Mount the backup shares unless labeled as already mounted."""
|
||||||
|
if psutil.LINUX:
|
||||||
|
mounted_data = get_mounted_data()
|
||||||
for server in BACKUP_SERVERS:
|
for server in BACKUP_SERVERS:
|
||||||
# Blindly skip if we mounted earlier
|
if psutil.LINUX:
|
||||||
|
# Update mounted status
|
||||||
|
source = '//{IP}/{Share}'.format(**server)
|
||||||
|
dest = '/Backups/{Name}'.format(**server)
|
||||||
|
mounted_str = '(Already) Mounted {}'.format(dest)
|
||||||
|
data = mounted_data.get(source, {})
|
||||||
|
if dest == data.get('target', ''):
|
||||||
|
server['Mounted'] = True
|
||||||
|
elif psutil.WINDOWS:
|
||||||
|
mounted_str = '(Already) Mounted {Name}'.format(**server)
|
||||||
if server['Mounted']:
|
if server['Mounted']:
|
||||||
|
print_warning(mounted_str)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
mount_network_share(server)
|
mount_network_share(server)
|
||||||
|
|
||||||
def mount_network_share(server):
|
def mount_network_share(server):
|
||||||
"""Mount a network share defined by server."""
|
"""Mount a network share defined by server."""
|
||||||
|
if psutil.WINDOWS:
|
||||||
|
cmd = r'net use \\{IP}\{Share} /user:{User} {Pass}'.format(**server)
|
||||||
|
cmd = cmd.split(' ')
|
||||||
|
warning = r'Failed to mount \\{Name}\{Share}, {IP} unreachable.'.format(
|
||||||
|
**server)
|
||||||
|
error = r'Failed to mount \\{Name}\{Share} ({IP})'.format(**server)
|
||||||
|
success = 'Mounted {Name}'.format(**server)
|
||||||
|
elif psutil.LINUX:
|
||||||
|
cmd = [
|
||||||
|
'sudo', 'mkdir', '-p',
|
||||||
|
'/Backups/{Name}'.format(**server)]
|
||||||
|
run_program(cmd)
|
||||||
|
cmd = [
|
||||||
|
'sudo', 'mount',
|
||||||
|
'//{IP}/{Share}'.format(**server),
|
||||||
|
'/Backups/{Name}'.format(**server),
|
||||||
|
'-o', 'username={User},password={Pass}'.format(**server)]
|
||||||
|
warning = 'Failed to mount /Backups/{Name}, {IP} unreachable.'.format(
|
||||||
|
**server)
|
||||||
|
error = 'Failed to mount /Backups/{Name}'.format(**server)
|
||||||
|
success = 'Mounted /Backups/{Name}'.format(**server)
|
||||||
|
|
||||||
# Test connection
|
# Test connection
|
||||||
try:
|
try:
|
||||||
ping(server['IP'])
|
ping(server['IP'])
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
print_error(
|
print_warning(warning)
|
||||||
r'Failed to mount \\{Name}\{Share}, {IP} unreachable.'.format(
|
|
||||||
**server))
|
|
||||||
sleep(1)
|
sleep(1)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Mount
|
# Mount
|
||||||
cmd = r'net use \\{IP}\{Share} /user:{User} {Pass}'.format(**server)
|
|
||||||
cmd = cmd.split(' ')
|
|
||||||
try:
|
try:
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
except Exception:
|
except Exception:
|
||||||
print_warning(r'Failed to mount \\{Name}\{Share} ({IP})'.format(
|
print_error(error)
|
||||||
**server))
|
|
||||||
sleep(1)
|
sleep(1)
|
||||||
else:
|
else:
|
||||||
print_info('Mounted {Name}'.format(**server))
|
print_info(success)
|
||||||
server['Mounted'] = True
|
server['Mounted'] = True
|
||||||
|
|
||||||
def run_fast_copy(items, dest):
|
def run_fast_copy(items, dest):
|
||||||
|
|
|
||||||
655
.bin/Scripts/functions/hw_diags.py
Normal file
655
.bin/Scripts/functions/hw_diags.py
Normal file
|
|
@ -0,0 +1,655 @@
|
||||||
|
# Wizard Kit: Functions - HW Diagnostics
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
from functions.common import *
|
||||||
|
|
||||||
|
# STATIC VARIABLES
|
||||||
|
ATTRIBUTES = {
|
||||||
|
'NVMe': {
|
||||||
|
'critical_warning': {'Error': 1},
|
||||||
|
'media_errors': {'Error': 1},
|
||||||
|
'power_on_hours': {'Warning': 12000, 'Error': 18000, 'Ignore': True},
|
||||||
|
'unsafe_shutdowns': {'Warning': 1},
|
||||||
|
},
|
||||||
|
'SMART': {
|
||||||
|
5: {'Error': 1},
|
||||||
|
9: {'Warning': 12000, 'Error': 18000, 'Ignore': True},
|
||||||
|
10: {'Warning': 1},
|
||||||
|
184: {'Error': 1},
|
||||||
|
187: {'Warning': 1},
|
||||||
|
188: {'Warning': 1},
|
||||||
|
197: {'Error': 1},
|
||||||
|
198: {'Error': 1},
|
||||||
|
201: {'Warning': 1},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
TESTS = {
|
||||||
|
'Prime95': {
|
||||||
|
'Enabled': False,
|
||||||
|
'Status': 'Pending',
|
||||||
|
},
|
||||||
|
'NVMe/SMART': {
|
||||||
|
'Enabled': False,
|
||||||
|
'Quick': False,
|
||||||
|
'Status': {},
|
||||||
|
},
|
||||||
|
'badblocks': {
|
||||||
|
'Enabled': False,
|
||||||
|
'Results': {},
|
||||||
|
'Status': {},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_smart_details(dev):
|
||||||
|
cmd = 'sudo smartctl --all --json /dev/{}'.format(dev).split()
|
||||||
|
result = run_program(cmd, check=False)
|
||||||
|
try:
|
||||||
|
return json.loads(result.stdout.decode())
|
||||||
|
except Exception:
|
||||||
|
# Let other sections deal with the missing data
|
||||||
|
return {}
|
||||||
|
|
||||||
|
def get_status_color(s):
|
||||||
|
color = COLORS['CLEAR']
|
||||||
|
if s in ['Denied', 'NS', 'OVERRIDE', 'Unknown']:
|
||||||
|
color = COLORS['RED']
|
||||||
|
elif s in ['Aborted', 'Working', 'Skipped']:
|
||||||
|
color = COLORS['YELLOW']
|
||||||
|
elif s in ['CS']:
|
||||||
|
color = COLORS['GREEN']
|
||||||
|
return color
|
||||||
|
|
||||||
|
def menu_diags(*args):
|
||||||
|
diag_modes = [
|
||||||
|
{'Name': 'All tests',
|
||||||
|
'Tests': ['Prime95', 'NVMe/SMART', 'badblocks']},
|
||||||
|
{'Name': 'Prime95',
|
||||||
|
'Tests': ['Prime95']},
|
||||||
|
{'Name': 'NVMe/SMART & badblocks',
|
||||||
|
'Tests': ['NVMe/SMART', 'badblocks']},
|
||||||
|
{'Name': 'NVMe/SMART',
|
||||||
|
'Tests': ['NVMe/SMART']},
|
||||||
|
{'Name': 'badblocks',
|
||||||
|
'Tests': ['badblocks']},
|
||||||
|
{'Name': 'Quick drive test',
|
||||||
|
'Tests': ['Quick', 'NVMe/SMART']},
|
||||||
|
]
|
||||||
|
actions = [
|
||||||
|
{'Letter': 'A', 'Name': 'Audio test'},
|
||||||
|
{'Letter': 'N', 'Name': 'Network test'},
|
||||||
|
{'Letter': 'M', 'Name': 'Screen Saver - Matrix', 'CRLF': True},
|
||||||
|
{'Letter': 'P', 'Name': 'Screen Saver - Pipes'},
|
||||||
|
{'Letter': 'Q', 'Name': 'Quit', 'CRLF': True},
|
||||||
|
]
|
||||||
|
|
||||||
|
# Quick disk check
|
||||||
|
if 'quick' in args:
|
||||||
|
run_tests(['Quick', 'NVMe/SMART'])
|
||||||
|
exit_script()
|
||||||
|
|
||||||
|
# Show menu
|
||||||
|
while True:
|
||||||
|
selection = menu_select(
|
||||||
|
title = 'Hardware Diagnostics: Menu',
|
||||||
|
main_entries = diag_modes,
|
||||||
|
action_entries = actions,
|
||||||
|
spacer = '──────────────────────────')
|
||||||
|
if selection.isnumeric():
|
||||||
|
if diag_modes[int(selection)-1]['Name'] != 'Quick drive test':
|
||||||
|
# Save log for non-quick tests
|
||||||
|
ticket_number = get_ticket_number()
|
||||||
|
global_vars['LogDir'] = '{}/Tickets/{}'.format(
|
||||||
|
global_vars['Env']['HOME'],
|
||||||
|
ticket_number)
|
||||||
|
os.makedirs(global_vars['LogDir'], exist_ok=True)
|
||||||
|
global_vars['LogFile'] = '{}/Hardware Diagnostics.log'.format(
|
||||||
|
global_vars['LogDir'])
|
||||||
|
run_tests(diag_modes[int(selection)-1]['Tests'])
|
||||||
|
elif selection == 'A':
|
||||||
|
run_program(['hw-diags-audio'], check=False, pipe=False)
|
||||||
|
pause('Press Enter to return to main menu... ')
|
||||||
|
elif selection == 'N':
|
||||||
|
run_program(['hw-diags-network'], check=False, pipe=False)
|
||||||
|
pause('Press Enter to return to main menu... ')
|
||||||
|
elif selection == 'M':
|
||||||
|
run_program(['cmatrix', '-abs'], check=False, pipe=False)
|
||||||
|
elif selection == 'P':
|
||||||
|
run_program(
|
||||||
|
'pipes -t 0 -t 1 -t 2 -t 3 -p 5 -R -r 4000'.split(),
|
||||||
|
check=False, pipe=False)
|
||||||
|
elif selection == 'Q':
|
||||||
|
break
|
||||||
|
|
||||||
|
def run_badblocks():
|
||||||
|
aborted = False
|
||||||
|
clear_screen()
|
||||||
|
print_log('\nStart badblocks test(s)\n')
|
||||||
|
progress_file = '{}/badblocks_progress.out'.format(global_vars['LogDir'])
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Set Window layout and start test
|
||||||
|
run_program('tmux split-window -dhl 15 watch -c -n1 -t cat {}'.format(
|
||||||
|
TESTS['Progress Out']).split())
|
||||||
|
|
||||||
|
# Show disk details
|
||||||
|
for name, dev in sorted(TESTS['badblocks']['Devices'].items()):
|
||||||
|
show_disk_details(dev)
|
||||||
|
print_standard(' ')
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Run
|
||||||
|
print_standard('Running badblock test(s):')
|
||||||
|
for name, dev in sorted(TESTS['badblocks']['Devices'].items()):
|
||||||
|
cur_status = TESTS['badblocks']['Status'][name]
|
||||||
|
nvme_smart_status = TESTS['NVMe/SMART']['Status'].get(name, None)
|
||||||
|
if cur_status == 'Denied':
|
||||||
|
# Skip denied disks
|
||||||
|
continue
|
||||||
|
if nvme_smart_status == 'NS':
|
||||||
|
TESTS['badblocks']['Status'][name] = 'Skipped'
|
||||||
|
else:
|
||||||
|
# Not testing SMART, SMART CS, or SMART OVERRIDE
|
||||||
|
TESTS['badblocks']['Status'][name] = 'Working'
|
||||||
|
update_progress()
|
||||||
|
print_standard(' /dev/{:11} '.format(name+'...'), end='', flush=True)
|
||||||
|
run_program('tmux split-window -dl 5 {} {} {}'.format(
|
||||||
|
'hw-diags-badblocks',
|
||||||
|
'/dev/{}'.format(name),
|
||||||
|
progress_file).split())
|
||||||
|
wait_for_process('badblocks')
|
||||||
|
print_standard('Done', timestamp=False)
|
||||||
|
|
||||||
|
# Check results
|
||||||
|
with open(progress_file, 'r') as f:
|
||||||
|
text = f.read()
|
||||||
|
TESTS['badblocks']['Results'][name] = text
|
||||||
|
r = re.search(r'Pass completed.*0/0/0 errors', text)
|
||||||
|
if r:
|
||||||
|
TESTS['badblocks']['Status'][name] = 'CS'
|
||||||
|
else:
|
||||||
|
TESTS['badblocks']['Status'][name] = 'NS'
|
||||||
|
|
||||||
|
# Move temp file
|
||||||
|
shutil.move(progress_file, '{}/badblocks-{}.log'.format(
|
||||||
|
global_vars['LogDir'], name))
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Done
|
||||||
|
run_program('tmux kill-pane -a'.split(), check=False)
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run_mprime():
|
||||||
|
aborted = False
|
||||||
|
clear_screen()
|
||||||
|
print_log('\nStart Prime95 test')
|
||||||
|
TESTS['Prime95']['Status'] = 'Working'
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Set Window layout and start test
|
||||||
|
run_program('tmux split-window -dl 10 -c {wd} {cmd} {wd}'.format(
|
||||||
|
wd=global_vars['TmpDir'], cmd='hw-diags-prime95').split())
|
||||||
|
run_program('tmux split-window -dhl 15 watch -c -n1 -t cat {}'.format(
|
||||||
|
TESTS['Progress Out']).split())
|
||||||
|
run_program('tmux split-window -bd watch -c -n1 -t hw-sensors'.split())
|
||||||
|
run_program('tmux resize-pane -y 3'.split())
|
||||||
|
|
||||||
|
# Start test
|
||||||
|
run_program(['apple-fans', 'max'])
|
||||||
|
print_standard('Running Prime95 for {} minutes'.format(MPRIME_LIMIT))
|
||||||
|
print_warning('If running too hot, press CTL+c to abort the test')
|
||||||
|
try:
|
||||||
|
sleep(int(MPRIME_LIMIT)*60)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
# Catch CTL+C
|
||||||
|
aborted = True
|
||||||
|
|
||||||
|
# Save "final" temps
|
||||||
|
run_program(
|
||||||
|
cmd = 'hw-sensors >> "{}/Final Temps.out"'.format(
|
||||||
|
global_vars['LogDir']).split(),
|
||||||
|
check = False,
|
||||||
|
pipe = False,
|
||||||
|
shell = True)
|
||||||
|
run_program(
|
||||||
|
cmd = 'hw-sensors --nocolor >> "{}/Final Temps.log"'.format(
|
||||||
|
global_vars['LogDir']).split(),
|
||||||
|
check = False,
|
||||||
|
pipe = False,
|
||||||
|
shell = True)
|
||||||
|
|
||||||
|
# Stop test
|
||||||
|
run_program('killall -s INT mprime'.split(), check=False)
|
||||||
|
run_program(['apple-fans', 'auto'])
|
||||||
|
|
||||||
|
# Move logs to Ticket folder
|
||||||
|
for item in os.scandir(global_vars['TmpDir']):
|
||||||
|
try:
|
||||||
|
shutil.move(item.path, global_vars['LogDir'])
|
||||||
|
except Exception:
|
||||||
|
print_error('ERROR: Failed to move "{}" to "{}"'.format(
|
||||||
|
item.path,
|
||||||
|
global_vars['LogDir']))
|
||||||
|
|
||||||
|
# Check logs
|
||||||
|
TESTS['Prime95']['NS'] = False
|
||||||
|
TESTS['Prime95']['CS'] = False
|
||||||
|
log = '{}/results.txt'.format(global_vars['LogDir'])
|
||||||
|
if os.path.exists(log):
|
||||||
|
with open(log, 'r') as f:
|
||||||
|
text = f.read()
|
||||||
|
TESTS['Prime95']['results.txt'] = text
|
||||||
|
r = re.search(r'(error|fail)', text)
|
||||||
|
TESTS['Prime95']['NS'] = bool(r)
|
||||||
|
log = '{}/prime.log'.format(global_vars['LogDir'])
|
||||||
|
if os.path.exists(log):
|
||||||
|
with open(log, 'r') as f:
|
||||||
|
text = f.read()
|
||||||
|
TESTS['Prime95']['prime.log'] = text
|
||||||
|
r = re.search(r'completed.*0 errors, 0 warnings', text)
|
||||||
|
TESTS['Prime95']['CS'] = bool(r)
|
||||||
|
|
||||||
|
# Update status
|
||||||
|
if aborted:
|
||||||
|
TESTS['Prime95']['Status'] = 'Aborted'
|
||||||
|
print_warning('\nAborted.')
|
||||||
|
update_progress()
|
||||||
|
if TESTS['NVMe/SMART']['Enabled'] or TESTS['badblocks']['Enabled']:
|
||||||
|
if not ask('Proceed to next test?'):
|
||||||
|
run_program('tmux kill-pane -a'.split())
|
||||||
|
raise GenericError
|
||||||
|
else:
|
||||||
|
if TESTS['Prime95']['NS']:
|
||||||
|
TESTS['Prime95']['Status'] = 'NS'
|
||||||
|
elif TESTS['Prime95']['CS']:
|
||||||
|
TESTS['Prime95']['Status'] = 'CS'
|
||||||
|
else:
|
||||||
|
TESTS['Prime95']['Status'] = 'Unknown'
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Done
|
||||||
|
run_program('tmux kill-pane -a'.split())
|
||||||
|
|
||||||
|
def run_nvme_smart():
|
||||||
|
aborted = False
|
||||||
|
clear_screen()
|
||||||
|
print_log('\nStart NVMe/SMART test(s)\n')
|
||||||
|
progress_file = '{}/selftest_progress.out'.format(global_vars['LogDir'])
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Set Window layout and start test
|
||||||
|
run_program('tmux split-window -dl 3 watch -c -n1 -t cat {}'.format(
|
||||||
|
progress_file).split())
|
||||||
|
run_program('tmux split-window -dhl 15 watch -c -n1 -t cat {}'.format(
|
||||||
|
TESTS['Progress Out']).split())
|
||||||
|
|
||||||
|
# Show disk details
|
||||||
|
for name, dev in sorted(TESTS['NVMe/SMART']['Devices'].items()):
|
||||||
|
show_disk_details(dev)
|
||||||
|
print_standard(' ')
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Run
|
||||||
|
for name, dev in sorted(TESTS['NVMe/SMART']['Devices'].items()):
|
||||||
|
cur_status = TESTS['NVMe/SMART']['Status'][name]
|
||||||
|
if cur_status == 'OVERRIDE':
|
||||||
|
# Skipping test per user request
|
||||||
|
continue
|
||||||
|
if TESTS['NVMe/SMART']['Quick'] or dev.get('NVMe Disk', False):
|
||||||
|
# Skip SMART self-tests for quick checks and NVMe disks
|
||||||
|
if dev['Quick Health OK']:
|
||||||
|
TESTS['NVMe/SMART']['Status'][name] = 'CS'
|
||||||
|
else:
|
||||||
|
TESTS['NVMe/SMART']['Status'][name] = 'NS'
|
||||||
|
elif not dev['Quick Health OK']:
|
||||||
|
# SMART overall == Failed or attributes bad, avoid self-test
|
||||||
|
TESTS['NVMe/SMART']['Status'][name] = 'NS'
|
||||||
|
else:
|
||||||
|
# Start SMART short self-test
|
||||||
|
test_length = dev['smartctl'].get(
|
||||||
|
'ata_smart_data', {}).get(
|
||||||
|
'self_test', {}).get(
|
||||||
|
'polling_minutes', {}).get(
|
||||||
|
'short', 5)
|
||||||
|
test_length = int(test_length) + 5
|
||||||
|
TESTS['NVMe/SMART']['Status'][name] = 'Working'
|
||||||
|
update_progress()
|
||||||
|
print_standard('Running SMART short self-test(s):')
|
||||||
|
print_standard(
|
||||||
|
' /dev/{:8}({} minutes)... '.format(name, test_length),
|
||||||
|
end='', flush=True)
|
||||||
|
run_program(
|
||||||
|
'sudo smartctl -t short /dev/{}'.format(name).split(),
|
||||||
|
check=False)
|
||||||
|
|
||||||
|
# Wait and show progress (in 10 second increments)
|
||||||
|
for iteration in range(int(test_length*60/10)):
|
||||||
|
# Update SMART data
|
||||||
|
dev['smartctl'] = get_smart_details(name)
|
||||||
|
|
||||||
|
# Check if test is complete
|
||||||
|
if iteration >= 6:
|
||||||
|
done = dev['smartctl'].get(
|
||||||
|
'ata_smart_data', {}).get(
|
||||||
|
'self_test', {}).get(
|
||||||
|
'status', {}).get(
|
||||||
|
'passed', False)
|
||||||
|
if done:
|
||||||
|
break
|
||||||
|
|
||||||
|
# Update progress_file
|
||||||
|
with open(progress_file, 'w') as f:
|
||||||
|
f.write('SMART self-test status:\n {}'.format(
|
||||||
|
dev['smartctl'].get(
|
||||||
|
'ata_smart_data', {}).get(
|
||||||
|
'self_test', {}).get(
|
||||||
|
'status', {}).get(
|
||||||
|
'string', 'unknown')))
|
||||||
|
sleep(10)
|
||||||
|
os.remove(progress_file)
|
||||||
|
|
||||||
|
# Check result
|
||||||
|
test_passed = dev['smartctl'].get(
|
||||||
|
'ata_smart_data', {}).get(
|
||||||
|
'self_test', {}).get(
|
||||||
|
'status', {}).get(
|
||||||
|
'passed', False)
|
||||||
|
if test_passed:
|
||||||
|
TESTS['NVMe/SMART']['Status'][name] = 'CS'
|
||||||
|
else:
|
||||||
|
TESTS['NVMe/SMART']['Status'][name] = 'NS'
|
||||||
|
update_progress()
|
||||||
|
print_standard('Done', timestamp=False)
|
||||||
|
|
||||||
|
# Done
|
||||||
|
run_program('tmux kill-pane -a'.split(), check=False)
|
||||||
|
|
||||||
|
def run_tests(tests):
|
||||||
|
print_log('Starting Hardware Diagnostics')
|
||||||
|
print_log('\nRunning tests: {}'.format(', '.join(tests)))
|
||||||
|
# Enable selected tests
|
||||||
|
for t in ['Prime95', 'NVMe/SMART', 'badblocks']:
|
||||||
|
TESTS[t]['Enabled'] = t in tests
|
||||||
|
TESTS['NVMe/SMART']['Quick'] = 'Quick' in tests
|
||||||
|
|
||||||
|
# Initialize
|
||||||
|
if TESTS['NVMe/SMART']['Enabled'] or TESTS['badblocks']['Enabled']:
|
||||||
|
scan_disks()
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Run
|
||||||
|
mprime_aborted = False
|
||||||
|
if TESTS['Prime95']['Enabled']:
|
||||||
|
try:
|
||||||
|
run_mprime()
|
||||||
|
except GenericError:
|
||||||
|
mprime_aborted = True
|
||||||
|
if not mprime_aborted:
|
||||||
|
if TESTS['NVMe/SMART']['Enabled']:
|
||||||
|
run_nvme_smart()
|
||||||
|
if TESTS['badblocks']['Enabled']:
|
||||||
|
run_badblocks()
|
||||||
|
|
||||||
|
# Show results
|
||||||
|
show_results()
|
||||||
|
|
||||||
|
# Open log
|
||||||
|
if not TESTS['NVMe/SMART']['Quick']:
|
||||||
|
try:
|
||||||
|
popen_program(['nohup', 'leafpad', global_vars['LogFile']])
|
||||||
|
except Exception:
|
||||||
|
print_error('ERROR: Failed to open log: {}'.format(
|
||||||
|
global_vars['LogFile']))
|
||||||
|
pause('Press Enter to exit...')
|
||||||
|
|
||||||
|
def scan_disks():
|
||||||
|
clear_screen()
|
||||||
|
|
||||||
|
# Get eligible disk list
|
||||||
|
result = run_program(['lsblk', '-J', '-O'])
|
||||||
|
json_data = json.loads(result.stdout.decode())
|
||||||
|
devs = {}
|
||||||
|
for d in json_data.get('blockdevices', []):
|
||||||
|
if d['type'] == 'disk' and d['hotplug'] == '0':
|
||||||
|
devs[d['name']] = {'lsblk': d}
|
||||||
|
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
||||||
|
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
||||||
|
|
||||||
|
for dev, data in devs.items():
|
||||||
|
# Get SMART attributes
|
||||||
|
run_program(
|
||||||
|
cmd = 'sudo smartctl -s on /dev/{}'.format(dev).split(),
|
||||||
|
check = False)
|
||||||
|
data['smartctl'] = get_smart_details(dev)
|
||||||
|
|
||||||
|
# Get NVMe attributes
|
||||||
|
if data['lsblk']['tran'] == 'nvme':
|
||||||
|
cmd = 'sudo nvme smart-log /dev/{} -o json'.format(dev).split()
|
||||||
|
result = run_program(cmd, check=False)
|
||||||
|
try:
|
||||||
|
data['nvme-cli'] = json.loads(result.stdout.decode())
|
||||||
|
except Exception:
|
||||||
|
# Let other sections deal with the missing data
|
||||||
|
data['nvme-cli'] = {}
|
||||||
|
data['NVMe Disk'] = True
|
||||||
|
|
||||||
|
# Set "Quick Health OK" value
|
||||||
|
## NOTE: If False then require override for badblocks test
|
||||||
|
wanted_smart_list = [
|
||||||
|
'ata_smart_attributes',
|
||||||
|
'ata_smart_data',
|
||||||
|
'smart_status',
|
||||||
|
]
|
||||||
|
if data.get('NVMe Disk', False):
|
||||||
|
crit_warn = data['nvme-cli'].get('critical_warning', 1)
|
||||||
|
data['Quick Health OK'] = True if crit_warn == 0 else False
|
||||||
|
elif set(wanted_smart_list).issubset(data['smartctl'].keys()):
|
||||||
|
data['SMART Pass'] = data['smartctl'].get('smart_status', {}).get(
|
||||||
|
'passed', False)
|
||||||
|
data['Quick Health OK'] = data['SMART Pass']
|
||||||
|
data['SMART Support'] = True
|
||||||
|
else:
|
||||||
|
data['Quick Health OK'] = False
|
||||||
|
data['SMART Support'] = False
|
||||||
|
|
||||||
|
# Ask for manual overrides if necessary
|
||||||
|
if not data['Quick Health OK'] and TESTS['badblocks']['Enabled']:
|
||||||
|
show_disk_details(data)
|
||||||
|
print_warning("WARNING: Health can't be confirmed for: {}".format(
|
||||||
|
'/dev/{}'.format(dev)))
|
||||||
|
dev_name = data['lsblk']['name']
|
||||||
|
print_standard(' ')
|
||||||
|
if ask('Run badblocks for this device anyway?'):
|
||||||
|
TESTS['NVMe/SMART']['Status'][dev_name] = 'OVERRIDE'
|
||||||
|
else:
|
||||||
|
TESTS['NVMe/SMART']['Status'][dev_name] = 'NS'
|
||||||
|
TESTS['badblocks']['Status'][dev_name] = 'Denied'
|
||||||
|
print_standard(' ') # In case there's more than one "OVERRIDE" disk
|
||||||
|
|
||||||
|
TESTS['NVMe/SMART']['Devices'] = devs
|
||||||
|
TESTS['badblocks']['Devices'] = devs
|
||||||
|
|
||||||
|
def show_disk_details(dev):
|
||||||
|
dev_name = dev['lsblk']['name']
|
||||||
|
# Device description
|
||||||
|
print_info('Device: /dev/{}'.format(dev['lsblk']['name']))
|
||||||
|
print_standard(' {:>4} ({}) {} {}'.format(
|
||||||
|
str(dev['lsblk'].get('size', '???b')).strip(),
|
||||||
|
str(dev['lsblk'].get('tran', '???')).strip().upper().replace(
|
||||||
|
'NVME', 'NVMe'),
|
||||||
|
str(dev['lsblk'].get('model', 'Unknown Model')).strip(),
|
||||||
|
str(dev['lsblk'].get('serial', 'Unknown Serial')).strip(),
|
||||||
|
))
|
||||||
|
|
||||||
|
# Warnings
|
||||||
|
if dev.get('NVMe Disk', False):
|
||||||
|
if dev['Quick Health OK']:
|
||||||
|
print_warning('WARNING: NVMe support is still experimental')
|
||||||
|
else:
|
||||||
|
print_error('ERROR: NVMe disk is reporting critical warnings')
|
||||||
|
elif not dev['SMART Support']:
|
||||||
|
print_error('ERROR: Unable to retrieve SMART data')
|
||||||
|
elif not dev['SMART Pass']:
|
||||||
|
print_error('ERROR: SMART overall-health assessment result: FAILED')
|
||||||
|
|
||||||
|
# Attributes
|
||||||
|
if dev.get('NVMe Disk', False):
|
||||||
|
print_info('Attributes:')
|
||||||
|
for attrib, threshold in sorted(ATTRIBUTES['NVMe'].items()):
|
||||||
|
if attrib in dev['nvme-cli']:
|
||||||
|
print_standard(
|
||||||
|
' {:37}'.format(attrib.replace('_', ' ').title()),
|
||||||
|
end='', flush=True)
|
||||||
|
raw_num = dev['nvme-cli'][attrib]
|
||||||
|
raw_str = str(raw_num)
|
||||||
|
if (threshold.get('Error', False) and
|
||||||
|
raw_num >= threshold.get('Error', -1)):
|
||||||
|
print_error(raw_str, timestamp=False)
|
||||||
|
if not threshold.get('Ignore', False):
|
||||||
|
dev['Quick Health OK'] = False
|
||||||
|
TESTS['NVMe/SMART']['Status'][dev_name] = 'NS'
|
||||||
|
elif (threshold.get('Warning', False) and
|
||||||
|
raw_num >= threshold.get('Warning', -1)):
|
||||||
|
print_warning(raw_str, timestamp=False)
|
||||||
|
else:
|
||||||
|
print_success(raw_str, timestamp=False)
|
||||||
|
elif dev['smartctl'].get('ata_smart_attributes', None):
|
||||||
|
# SMART attributes
|
||||||
|
print_info('Attributes:')
|
||||||
|
s_table = dev['smartctl'].get('ata_smart_attributes', {}).get(
|
||||||
|
'table', {})
|
||||||
|
s_table = {a.get('id', 'Unknown'): a for a in s_table}
|
||||||
|
for attrib, threshold in sorted(ATTRIBUTES['SMART'].items()):
|
||||||
|
if attrib in s_table:
|
||||||
|
print_standard(
|
||||||
|
' {:>3} {:32}'.format(
|
||||||
|
attrib,
|
||||||
|
s_table[attrib]['name']).replace('_', ' ').title(),
|
||||||
|
end='', flush=True)
|
||||||
|
raw_str = s_table[attrib]['raw']['string']
|
||||||
|
raw_num = re.sub(r'^(\d+).*$', r'\1', raw_str)
|
||||||
|
try:
|
||||||
|
raw_num = float(raw_num)
|
||||||
|
except ValueError:
|
||||||
|
# Not sure about this one, print raw_str without color?
|
||||||
|
print_standard(raw_str, timestamp=False)
|
||||||
|
continue
|
||||||
|
if (threshold.get('Error', False) and
|
||||||
|
raw_num >= threshold.get('Error', -1)):
|
||||||
|
print_error(raw_str, timestamp=False)
|
||||||
|
if not threshold.get('Ignore', False):
|
||||||
|
dev['Quick Health OK'] = False
|
||||||
|
TESTS['NVMe/SMART']['Status'][dev_name] = 'NS'
|
||||||
|
elif (threshold.get('Warning', False) and
|
||||||
|
raw_num >= threshold.get('Warning', -1)):
|
||||||
|
print_warning(raw_str, timestamp=False)
|
||||||
|
else:
|
||||||
|
print_success(raw_str, timestamp=False)
|
||||||
|
|
||||||
|
def show_results():
|
||||||
|
clear_screen()
|
||||||
|
print_log('\n───────────────────────────')
|
||||||
|
print_standard('Hardware Diagnostic Results')
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Set Window layout and show progress
|
||||||
|
run_program('tmux split-window -dhl 15 watch -c -n1 -t cat {}'.format(
|
||||||
|
TESTS['Progress Out']).split())
|
||||||
|
|
||||||
|
# Prime95
|
||||||
|
if TESTS['Prime95']['Enabled']:
|
||||||
|
print_success('\nPrime95:')
|
||||||
|
for log, regex in [
|
||||||
|
['results.txt', r'(error|fail)'],
|
||||||
|
['prime.log', r'completed.*0 errors, 0 warnings']]:
|
||||||
|
if log in TESTS['Prime95']:
|
||||||
|
print_info('Log: {}'.format(log))
|
||||||
|
lines = [line.strip() for line
|
||||||
|
in TESTS['Prime95'][log].splitlines()
|
||||||
|
if re.search(regex, line, re.IGNORECASE)]
|
||||||
|
for line in lines[-4:]:
|
||||||
|
line = re.sub(r'^.*Worker #\d.*Torture Test (.*)', r'\1',
|
||||||
|
line, re.IGNORECASE)
|
||||||
|
if TESTS['Prime95'].get('NS', False):
|
||||||
|
print_error(' {}'.format(line))
|
||||||
|
else:
|
||||||
|
print_standard(' {}'.format(line))
|
||||||
|
print_info('Final temps')
|
||||||
|
print_log(' See Final Temps.log')
|
||||||
|
with open('{}/Final Temps.out'.format(global_vars['LogDir']), 'r') as f:
|
||||||
|
for line in f.readlines():
|
||||||
|
if re.search(r'^\s*$', line.strip()):
|
||||||
|
# Stop after coretemps (which should be first)
|
||||||
|
break
|
||||||
|
print(' {}'.format(line.strip()))
|
||||||
|
print_standard(' ')
|
||||||
|
|
||||||
|
# NVMe/SMART / badblocks
|
||||||
|
if TESTS['NVMe/SMART']['Enabled'] or TESTS['badblocks']['Enabled']:
|
||||||
|
print_success('Disks:')
|
||||||
|
for name, dev in sorted(TESTS['NVMe/SMART']['Devices'].items()):
|
||||||
|
show_disk_details(dev)
|
||||||
|
bb_status = TESTS['badblocks']['Status'].get(name, None)
|
||||||
|
if (TESTS['badblocks']['Enabled']
|
||||||
|
and bb_status not in ['Denied', 'OVERRIDE', 'Skipped']):
|
||||||
|
print_info('badblocks:')
|
||||||
|
result = TESTS['badblocks']['Results'].get(name, '')
|
||||||
|
for line in result.splitlines():
|
||||||
|
if re.search(r'Pass completed', line, re.IGNORECASE):
|
||||||
|
line = re.sub(
|
||||||
|
r'Pass completed,?\s+', r'',
|
||||||
|
line.strip(), re.IGNORECASE)
|
||||||
|
if TESTS['badblocks']['Status'][name] == 'CS':
|
||||||
|
print_standard(' {}'.format(line))
|
||||||
|
else:
|
||||||
|
print_error(' {}'.format(line))
|
||||||
|
print_standard(' ')
|
||||||
|
|
||||||
|
# Done
|
||||||
|
pause('Press Enter to return to main menu... ')
|
||||||
|
run_program('tmux kill-pane -a'.split())
|
||||||
|
|
||||||
|
def update_progress():
|
||||||
|
if 'Progress Out' not in TESTS:
|
||||||
|
TESTS['Progress Out'] = '{}/progress.out'.format(global_vars['LogDir'])
|
||||||
|
output = []
|
||||||
|
output.append('{BLUE}HW Diagnostics{CLEAR}'.format(**COLORS))
|
||||||
|
output.append('───────────────')
|
||||||
|
if TESTS['Prime95']['Enabled']:
|
||||||
|
output.append(' ')
|
||||||
|
output.append('{BLUE}Prime95{s_color}{status:>8}{CLEAR}'.format(
|
||||||
|
s_color = get_status_color(TESTS['Prime95']['Status']),
|
||||||
|
status = TESTS['Prime95']['Status'],
|
||||||
|
**COLORS))
|
||||||
|
if TESTS['NVMe/SMART']['Enabled']:
|
||||||
|
output.append(' ')
|
||||||
|
output.append('{BLUE}NVMe / SMART{CLEAR}'.format(**COLORS))
|
||||||
|
if TESTS['NVMe/SMART']['Quick']:
|
||||||
|
output.append('{YELLOW} (Quick Check){CLEAR}'.format(**COLORS))
|
||||||
|
for dev, status in sorted(TESTS['NVMe/SMART']['Status'].items()):
|
||||||
|
output.append('{dev}{s_color}{status:>{pad}}{CLEAR}'.format(
|
||||||
|
dev = dev,
|
||||||
|
pad = 15-len(dev),
|
||||||
|
s_color = get_status_color(status),
|
||||||
|
status = status,
|
||||||
|
**COLORS))
|
||||||
|
if TESTS['badblocks']['Enabled']:
|
||||||
|
output.append(' ')
|
||||||
|
output.append('{BLUE}badblocks{CLEAR}'.format(**COLORS))
|
||||||
|
for dev, status in sorted(TESTS['badblocks']['Status'].items()):
|
||||||
|
output.append('{dev}{s_color}{status:>{pad}}{CLEAR}'.format(
|
||||||
|
dev = dev,
|
||||||
|
pad = 15-len(dev),
|
||||||
|
s_color = get_status_color(status),
|
||||||
|
status = status,
|
||||||
|
**COLORS))
|
||||||
|
|
||||||
|
# Add line-endings
|
||||||
|
output = ['{}\n'.format(line) for line in output]
|
||||||
|
|
||||||
|
with open(TESTS['Progress Out'], 'w') as f:
|
||||||
|
f.writelines(output)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print("This file is not meant to be called directly.")
|
||||||
|
|
||||||
81
.bin/Scripts/functions/network.py
Normal file
81
.bin/Scripts/functions/network.py
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: Functions - Network
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.common import *
|
||||||
|
|
||||||
|
# REGEX
|
||||||
|
REGEX_VALID_IP = re.compile(
|
||||||
|
r'(10.\d+.\d+.\d+'
|
||||||
|
r'|172.(1[6-9]|2\d|3[0-1])'
|
||||||
|
r'|192.168.\d+.\d+)',
|
||||||
|
re.IGNORECASE)
|
||||||
|
|
||||||
|
def connect_to_network():
|
||||||
|
"""Connect to network if not already connected."""
|
||||||
|
net_ifs = psutil.net_if_addrs()
|
||||||
|
net_ifs = [i[:2] for i in net_ifs.keys()]
|
||||||
|
|
||||||
|
# Bail if currently connected
|
||||||
|
if is_connected():
|
||||||
|
return
|
||||||
|
|
||||||
|
# LAN
|
||||||
|
if 'en' in net_ifs:
|
||||||
|
# Reload the tg3/broadcom driver (known fix for some Dell systems)
|
||||||
|
try_and_print(message='Reloading drivers...', function=reload_tg3)
|
||||||
|
|
||||||
|
# WiFi
|
||||||
|
if not is_connected() and 'wl' in net_ifs:
|
||||||
|
cmd = [
|
||||||
|
'nmcli', 'dev', 'wifi',
|
||||||
|
'connect', WIFI_SSID,
|
||||||
|
'password', WIFI_PASSWORD]
|
||||||
|
try_and_print(
|
||||||
|
message = 'Connecting to {}...'.format(WIFI_SSID),
|
||||||
|
function = run_program,
|
||||||
|
cmd = cmd)
|
||||||
|
|
||||||
|
def is_connected():
|
||||||
|
"""Check for a valid private IP."""
|
||||||
|
devs = psutil.net_if_addrs()
|
||||||
|
for dev in devs.values():
|
||||||
|
for family in dev:
|
||||||
|
if REGEX_VALID_IP.search(family.address):
|
||||||
|
# Valid IP found
|
||||||
|
return True
|
||||||
|
# Else
|
||||||
|
return False
|
||||||
|
|
||||||
|
def show_valid_addresses():
|
||||||
|
devs = psutil.net_if_addrs()
|
||||||
|
for dev, families in sorted(devs.items()):
|
||||||
|
for family in families:
|
||||||
|
if REGEX_VALID_IP.search(family.address):
|
||||||
|
# Valid IP found
|
||||||
|
show_data(message=dev, data=family.address)
|
||||||
|
|
||||||
|
def speedtest():
|
||||||
|
result = run_program(['speedtest-cli', '--simple'])
|
||||||
|
output = [line.strip() for line in result.stdout.decode().splitlines()
|
||||||
|
if line.strip()]
|
||||||
|
output = [line.split() for line in output]
|
||||||
|
output = [(a, float(b), c) for a, b, c in output]
|
||||||
|
return ['{:10}{:6.2f} {}'.format(*line) for line in output]
|
||||||
|
|
||||||
|
def reload_tg3():
|
||||||
|
"""Reload tg3 module as a workaround for some Dell systems."""
|
||||||
|
run_program(['sudo', 'modprobe', '-r', 'tg3'])
|
||||||
|
run_program(['sudo', 'modprobe', 'broadcom'])
|
||||||
|
run_program(['sudo', 'modprobe', 'tg3'])
|
||||||
|
sleep(5)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print("This file is not meant to be called directly.")
|
||||||
|
|
||||||
43
.bin/Scripts/hw-diags
Executable file
43
.bin/Scripts/hw-diags
Executable file
|
|
@ -0,0 +1,43 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
## Wizard Kit: HW Diagnostics - Menu Launcher
|
||||||
|
|
||||||
|
SESSION_NAME="hw-diags"
|
||||||
|
WINDOW_NAME="Hardware Diagnostics"
|
||||||
|
MENU="hw-diags-menu"
|
||||||
|
|
||||||
|
function ask() {
|
||||||
|
while :; do
|
||||||
|
read -p "$1 " -r answer
|
||||||
|
if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then
|
||||||
|
return 0
|
||||||
|
elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo "$0:" "$@" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for running session
|
||||||
|
if tmux list-session | grep -q "$SESSION_NAME"; then
|
||||||
|
echo "WARNING: hw-diags tmux session already exists."
|
||||||
|
echo ""
|
||||||
|
if ask "Kill current session?"; then
|
||||||
|
tmux kill-session -t "$SESSION_NAME" || \
|
||||||
|
die "Failed to kill session: $SESSION_NAME"
|
||||||
|
else
|
||||||
|
echo "Aborted."
|
||||||
|
echo ""
|
||||||
|
echo -n "Press Enter to exit... "
|
||||||
|
read -r
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start session
|
||||||
|
tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $*
|
||||||
|
|
||||||
42
.bin/Scripts/hw-diags-audio
Executable file
42
.bin/Scripts/hw-diags-audio
Executable file
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: HW Diagnostics - Audio
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.common import *
|
||||||
|
init_global_vars()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
clear_screen()
|
||||||
|
print_standard('Hardware Diagnostics: Audio\n')
|
||||||
|
|
||||||
|
# Set volume
|
||||||
|
try:
|
||||||
|
run_program('amixer -q set "Master" 80% unmute'.split())
|
||||||
|
run_program('amixer -q set "PCM" 90% unmute'.split())
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
print_error('Failed to set volume')
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
for mode in ['pink', 'wav']:
|
||||||
|
run_program(
|
||||||
|
cmd = 'speaker-test -c 2 -l 1 -t {}'.format(mode).split(),
|
||||||
|
check = False,
|
||||||
|
pipe = False)
|
||||||
|
|
||||||
|
# Done
|
||||||
|
#print_standard('\nDone.')
|
||||||
|
#pause("Press Enter to exit...")
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
major_exception()
|
||||||
|
|
||||||
18
.bin/Scripts/hw-diags-badblocks
Executable file
18
.bin/Scripts/hw-diags-badblocks
Executable file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
## Wizard Kit: HW Diagnostics - badblocks
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "Usage: $0 device log-file"
|
||||||
|
echo " e.g. $0 /dev/sda /tmp/tmp.XXXXXXX/badblocks.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bail early
|
||||||
|
if [ ! -b "$1" ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run Badblocks
|
||||||
|
sudo badblocks -sv -e 1 "$1" 2>&1 | tee -a "$2"
|
||||||
|
|
||||||
30
.bin/Scripts/hw-diags-menu
Executable file
30
.bin/Scripts/hw-diags-menu
Executable file
|
|
@ -0,0 +1,30 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: HW Diagnostics - Menu
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.hw_diags import *
|
||||||
|
init_global_vars()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
clear_screen()
|
||||||
|
|
||||||
|
# Show menu
|
||||||
|
menu_diags(*sys.argv)
|
||||||
|
|
||||||
|
# Done
|
||||||
|
#print_standard('\nDone.')
|
||||||
|
#pause("Press Enter to exit...")
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
major_exception()
|
||||||
|
|
||||||
46
.bin/Scripts/hw-diags-network
Executable file
46
.bin/Scripts/hw-diags-network
Executable file
|
|
@ -0,0 +1,46 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: HW Diagnostics - Network
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.network import *
|
||||||
|
|
||||||
|
def check_connection():
|
||||||
|
if not is_connected():
|
||||||
|
# Raise to cause NS in try_and_print()
|
||||||
|
raise Exception
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
clear_screen()
|
||||||
|
print_standard('Hardware Diagnostics: Network\n')
|
||||||
|
|
||||||
|
# Connect
|
||||||
|
print_standard('Initializing...')
|
||||||
|
connect_to_network()
|
||||||
|
|
||||||
|
# Tests
|
||||||
|
try_and_print(
|
||||||
|
message='Network connection:', function=check_connection, cs='OK')
|
||||||
|
show_valid_addresses()
|
||||||
|
try_and_print(message='Internet connection:', function=ping,
|
||||||
|
addr='8.8.8.8', cs='OK')
|
||||||
|
try_and_print(message='DNS Resolution:', function=ping, cs='OK')
|
||||||
|
try_and_print(message='Speedtest:', function=speedtest,
|
||||||
|
print_return=True)
|
||||||
|
|
||||||
|
# Done
|
||||||
|
print_standard('\nDone.')
|
||||||
|
#pause("Press Enter to exit...")
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
major_exception()
|
||||||
|
|
||||||
18
.bin/Scripts/hw-diags-prime95
Executable file
18
.bin/Scripts/hw-diags-prime95
Executable file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
## Wizard Kit: HW Diagnostics - Prime95
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "Usage: $0 log-dir"
|
||||||
|
echo " e.g. $0 /tmp/tmp.7Mh5f1RhSL9001"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bail early
|
||||||
|
if [ ! -d "$1" ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run Prime95
|
||||||
|
mprime -t | grep -iv --line-buffered 'stress.txt' | tee -a "$1/prime.log"
|
||||||
|
|
||||||
164
.bin/Scripts/hw-sensors
Executable file
164
.bin/Scripts/hw-sensors
Executable file
|
|
@ -0,0 +1,164 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: Sensor monitoring tool
|
||||||
|
|
||||||
|
import itertools
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.common import *
|
||||||
|
from borrowed import sensors
|
||||||
|
|
||||||
|
# STATIC VARIABLES
|
||||||
|
COLORS = {
|
||||||
|
'CLEAR': '\033[0m',
|
||||||
|
'RED': '\033[31m',
|
||||||
|
'GREEN': '\033[32m',
|
||||||
|
'YELLOW': '\033[33m',
|
||||||
|
'ORANGE': '\033[31;1m',
|
||||||
|
'BLUE': '\033[34m'
|
||||||
|
}
|
||||||
|
TEMP_LIMITS = {
|
||||||
|
'GREEN': 60,
|
||||||
|
'YELLOW': 70,
|
||||||
|
'ORANGE': 80,
|
||||||
|
'RED': 90,
|
||||||
|
}
|
||||||
|
|
||||||
|
# REGEX
|
||||||
|
REGEX_COLORS = re.compile(r'\033\[\d+;?1?m')
|
||||||
|
|
||||||
|
def color_temp(temp):
|
||||||
|
try:
|
||||||
|
temp = float(temp)
|
||||||
|
except ValueError:
|
||||||
|
return '{YELLOW}{temp}{CLEAR}'.format(temp=temp, **COLORS)
|
||||||
|
if temp > TEMP_LIMITS['RED']:
|
||||||
|
color = COLORS['RED']
|
||||||
|
elif temp > TEMP_LIMITS['ORANGE']:
|
||||||
|
color = COLORS['ORANGE']
|
||||||
|
elif temp > TEMP_LIMITS['YELLOW']:
|
||||||
|
color = COLORS['YELLOW']
|
||||||
|
elif temp > TEMP_LIMITS['GREEN']:
|
||||||
|
color = COLORS['GREEN']
|
||||||
|
elif temp > 0:
|
||||||
|
color = COLORS['BLUE']
|
||||||
|
else:
|
||||||
|
color = COLORS['CLEAR']
|
||||||
|
return '{color}{prefix}{temp:2.0f}°C{CLEAR}'.format(
|
||||||
|
color = color,
|
||||||
|
prefix = '+' if temp>0 else '-',
|
||||||
|
temp = temp,
|
||||||
|
**COLORS)
|
||||||
|
|
||||||
|
def get_feature_string(chip, feature):
|
||||||
|
sfs = list(sensors.SubFeatureIterator(chip, feature)) # get a list of all subfeatures
|
||||||
|
label = sensors.get_label(chip, feature)
|
||||||
|
skipname = len(feature.name)+1 # skip common prefix
|
||||||
|
data = {}
|
||||||
|
|
||||||
|
if feature.type == sensors.feature.INTRUSION:
|
||||||
|
vals = [sensors.get_value(chip, sf.number) for sf in sfs]
|
||||||
|
# short path for INTRUSION to demonstrate type usage
|
||||||
|
status = "alarm" if int(vals[0]) == 1 else "normal"
|
||||||
|
print_standard(' {:18} {}'.format(label, status))
|
||||||
|
return
|
||||||
|
|
||||||
|
for sf in sfs:
|
||||||
|
name = sf.name[skipname:].decode("utf-8").strip()
|
||||||
|
val = sensors.get_value(chip, sf.number)
|
||||||
|
if 'alarm' in name:
|
||||||
|
# Skip
|
||||||
|
continue
|
||||||
|
if '--nocolor' in sys.argv:
|
||||||
|
try:
|
||||||
|
temp = float(val)
|
||||||
|
except ValueError:
|
||||||
|
data[name] = ' {}°C'.format(val)
|
||||||
|
else:
|
||||||
|
data[name] = '{}{:2.0f}°C'.format(
|
||||||
|
'+' if temp>0 else '-',
|
||||||
|
temp)
|
||||||
|
else:
|
||||||
|
data[name] = color_temp(val)
|
||||||
|
|
||||||
|
main_temp = data.pop('input', None)
|
||||||
|
if main_temp:
|
||||||
|
list_data = []
|
||||||
|
for item in ['max', 'crit']:
|
||||||
|
if item in data:
|
||||||
|
list_data.append('{}: {}'.format(item, data.pop(item)))
|
||||||
|
list_data.extend(
|
||||||
|
['{}: {}'.format(k, v) for k, v in sorted(data.items())])
|
||||||
|
data_str = '{:18} {} ({})'.format(
|
||||||
|
label, main_temp, ', '.join(list_data))
|
||||||
|
else:
|
||||||
|
list_data.extend(sorted(data.items()))
|
||||||
|
list_data = ['{}: {}'.format(item[0], item[1]) for item in list_data]
|
||||||
|
data_str = '{:18} {}'.format(label, ', '.join(list_data))
|
||||||
|
return data_str
|
||||||
|
|
||||||
|
def join_columns(column1, column2, width=55):
|
||||||
|
return '{:<{}}{}'.format(
|
||||||
|
column1,
|
||||||
|
55+len(column1)-len(REGEX_COLORS.sub('', column1)),
|
||||||
|
column2)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
sensors.init()
|
||||||
|
|
||||||
|
# Get sensor data
|
||||||
|
chip_temps = {}
|
||||||
|
for chip in sensors.ChipIterator():
|
||||||
|
chip_name = '{} ({})'.format(
|
||||||
|
sensors.chip_snprintf_name(chip),
|
||||||
|
sensors.get_adapter_name(chip.bus))
|
||||||
|
chip_temps[chip_name] = [chip_name]
|
||||||
|
for feature in sensors.FeatureIterator(chip):
|
||||||
|
chip_temps[chip_name].append(get_feature_string(chip, feature))
|
||||||
|
chip_temps[chip_name].append('')
|
||||||
|
|
||||||
|
# Sort chips
|
||||||
|
sensor_temps = []
|
||||||
|
for chip in [k for k in sorted(chip_temps.keys()) if 'coretemp' in k]:
|
||||||
|
sensor_temps.extend(chip_temps[chip])
|
||||||
|
for chip in sorted(chip_temps.keys()):
|
||||||
|
if 'coretemp' not in chip:
|
||||||
|
sensor_temps.extend(chip_temps[chip])
|
||||||
|
|
||||||
|
# Wrap columns as needed
|
||||||
|
screen_size = shutil.get_terminal_size()
|
||||||
|
rows = screen_size.lines - 1
|
||||||
|
if len(sensor_temps) > rows and screen_size.columns > 55*2:
|
||||||
|
sensor_temps = list(itertools.zip_longest(
|
||||||
|
sensor_temps[:rows], sensor_temps[rows:], fillvalue=''))
|
||||||
|
sensor_temps = [join_columns(a, b) for a, b in sensor_temps]
|
||||||
|
|
||||||
|
# Print data
|
||||||
|
if sensor_temps:
|
||||||
|
for line in sensor_temps:
|
||||||
|
print_standard(line)
|
||||||
|
else:
|
||||||
|
if '--nocolor' in sys.argv:
|
||||||
|
print_standard('WARNING: No sensors found')
|
||||||
|
print_standard('\nPlease monitor temps manually')
|
||||||
|
else:
|
||||||
|
print_warning('WARNING: No sensors found')
|
||||||
|
print_standard('\nPlease monitor temps manually')
|
||||||
|
|
||||||
|
# Done
|
||||||
|
sensors.cleanup()
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
sensors.cleanup()
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
sensors.cleanup()
|
||||||
|
major_exception()
|
||||||
|
|
||||||
38
.bin/Scripts/mount-all-volumes
Executable file
38
.bin/Scripts/mount-all-volumes
Executable file
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: Volume mount tool
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.data import *
|
||||||
|
init_global_vars()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
clear_screen()
|
||||||
|
print_standard('{}: Volume mount tool'.format(KIT_NAME_FULL))
|
||||||
|
|
||||||
|
# Mount volumes
|
||||||
|
report = mount_all_volumes()
|
||||||
|
|
||||||
|
# Print report
|
||||||
|
print_info('\nResults')
|
||||||
|
for line in report:
|
||||||
|
show_data(indent=4, width=16, **line[-1])
|
||||||
|
|
||||||
|
# Done
|
||||||
|
print_standard('\nDone.')
|
||||||
|
if 'gui' in sys.argv:
|
||||||
|
pause("Press Enter to exit...")
|
||||||
|
popen_program(['nohup', 'thunar', '/media'])
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
major_exception()
|
||||||
|
|
||||||
38
.bin/Scripts/mount-backup-shares
Executable file
38
.bin/Scripts/mount-backup-shares
Executable file
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: Backup share mount tool
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.data import *
|
||||||
|
from functions.network import *
|
||||||
|
init_global_vars()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
clear_screen()
|
||||||
|
|
||||||
|
# Connect
|
||||||
|
connect_to_network()
|
||||||
|
|
||||||
|
# Mount
|
||||||
|
if is_connected():
|
||||||
|
mount_backup_shares()
|
||||||
|
else:
|
||||||
|
# Couldn't connect
|
||||||
|
print_error('ERROR: No network connectivity.')
|
||||||
|
|
||||||
|
# Done
|
||||||
|
print_standard('\nDone.')
|
||||||
|
#pause("Press Enter to exit...")
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
major_exception()
|
||||||
|
|
||||||
81
.bin/Scripts/msword-search
Executable file
81
.bin/Scripts/msword-search
Executable file
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/bin/python3
|
||||||
|
#
|
||||||
|
## Wizard Kit: MS Word content search tool
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# STATIC VARIABLES
|
||||||
|
SCANDIR = os.getcwd()
|
||||||
|
USAGE = '''Usage: {script} <search-terms>...
|
||||||
|
e.g. {script} "Book Title" "Keyword" "etc"
|
||||||
|
|
||||||
|
This script will search all doc/docx files below the current directory for
|
||||||
|
the search-terms provided (case-insensitive).'''.format(script=__file__)
|
||||||
|
|
||||||
|
# Init
|
||||||
|
os.chdir(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
from functions.network import *
|
||||||
|
init_global_vars()
|
||||||
|
|
||||||
|
REGEX_DOC_FILES = re.compile(r'\.docx?$', re.IGNORECASE)
|
||||||
|
|
||||||
|
def scan_for_docs(path):
|
||||||
|
for entry in os.scandir(path):
|
||||||
|
if entry.is_dir(follow_symlinks=False):
|
||||||
|
yield from scantree(entry.path)
|
||||||
|
elif entry.is_file and REGEX_DOC_FILES.search(entry.name):
|
||||||
|
yield entry
|
||||||
|
|
||||||
|
def scan_file(file_path, search):
|
||||||
|
match = False
|
||||||
|
try:
|
||||||
|
if entry.name.lower().endswith('.docx'):
|
||||||
|
result = run_program(['unzip', '-p', entry.path])
|
||||||
|
else:
|
||||||
|
# Assuming .doc
|
||||||
|
result = run_program(['antiword', entry.path])
|
||||||
|
out = result.stdout.decode()
|
||||||
|
match = re.search(search, out, re.IGNORECASE)
|
||||||
|
except Exception:
|
||||||
|
# Ignore errors since files may be corrupted
|
||||||
|
pass
|
||||||
|
|
||||||
|
return entry.path if match else None
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
# Prep
|
||||||
|
clear_screen()
|
||||||
|
terms = [re.sub(r'\s+', r'\s*', t) for t in sys.argv[1:]]
|
||||||
|
search = '({})'.format('|'.join(terms))
|
||||||
|
|
||||||
|
if len(sys.argv) == 1:
|
||||||
|
# Print usage
|
||||||
|
print_standard(USAGE)
|
||||||
|
else:
|
||||||
|
matches = []
|
||||||
|
for entry in scan_for_docs(SCANDIR):
|
||||||
|
matches.append(scan_file(entry.path, search))
|
||||||
|
# Strip None values (i.e. non-matching entries)
|
||||||
|
matches = [m for m in matches if m]
|
||||||
|
if matches:
|
||||||
|
print_success('Found {} {}:'.format(
|
||||||
|
len(matches),
|
||||||
|
'Matches' if len(matches) > 1 else 'Match'))
|
||||||
|
for match in matches:
|
||||||
|
print_standard(match)
|
||||||
|
else:
|
||||||
|
print_error('No matches found.')
|
||||||
|
|
||||||
|
# Done
|
||||||
|
print_standard('\nDone.')
|
||||||
|
#pause("Press Enter to exit...")
|
||||||
|
exit_script()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
major_exception()
|
||||||
|
|
||||||
23
.bin/Scripts/remount-rw
Executable file
23
.bin/Scripts/remount-rw
Executable file
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
## Wizard Kit: Volume remount tool
|
||||||
|
|
||||||
|
if ! mount | grep -q "$1"; then
|
||||||
|
echo "ERROR: Can't remount $1"
|
||||||
|
sleep 2s
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEVICE=$(mount | grep "$1" | cut -d' ' -f1)
|
||||||
|
|
||||||
|
# Remount read-write
|
||||||
|
echo "Remounting: $DEVICE"
|
||||||
|
udevil umount $DEVICE
|
||||||
|
if udevil mount $DEVICE; then
|
||||||
|
echo "Done"
|
||||||
|
else
|
||||||
|
echo "Failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 2s
|
||||||
|
exit 0
|
||||||
|
|
@ -3,15 +3,30 @@
|
||||||
# Features
|
# Features
|
||||||
ENABLED_UPLOAD_DATA = False
|
ENABLED_UPLOAD_DATA = False
|
||||||
|
|
||||||
# STATIC VARIABLES (also used by .cmd files)
|
# STATIC VARIABLES (also used by BASH and BATCH files)
|
||||||
## Not using spaces aroung '=' for easier .cmd substrings
|
## NOTE: There are no spaces around the = for easier parsing in BASH and BATCH
|
||||||
|
# Main Kit
|
||||||
ARCHIVE_PASSWORD='Abracadabra'
|
ARCHIVE_PASSWORD='Abracadabra'
|
||||||
KIT_NAME_FULL='Wizard Kit'
|
KIT_NAME_FULL='Wizard Kit'
|
||||||
KIT_NAME_SHORT='WK'
|
KIT_NAME_SHORT='WK'
|
||||||
|
SUPPORT_MESSAGE='Please let 2Shirt know by opening an issue on GitHub'
|
||||||
|
# Live Linux
|
||||||
|
DIAG_SHARE='/srv/ClientInfo'
|
||||||
|
DIAG_USER='wkdiag'
|
||||||
|
MPRIME_LIMIT='7' # of minutes to run Prime95 during hw-diags
|
||||||
|
ROOT_PASSWORD='Abracadabra'
|
||||||
|
SKIP_UPLOAD='False'
|
||||||
|
TECH_PASSWORD='Abracadabra'
|
||||||
|
# Server IP addresses
|
||||||
|
DIAG_SERVER='10.0.0.10'
|
||||||
OFFICE_SERVER_IP='10.0.0.10'
|
OFFICE_SERVER_IP='10.0.0.10'
|
||||||
QUICKBOOKS_SERVER_IP='10.0.0.10'
|
QUICKBOOKS_SERVER_IP='10.0.0.10'
|
||||||
SUPPORT_MESSAGE='Please let 2Shirt know by opening an issue on GitHub'
|
# Time Zones
|
||||||
TIME_ZONE='Pacific Standard Time' # Always use "Standard Time" (DST is applied correctly)
|
LINUX_TIME_ZONE='America/Los_Angeles' # See 'timedatectl list-timezones' for valid values
|
||||||
|
WINDOWS_TIME_ZONE='Pacific Standard Time' # See 'tzutil /l' for valid values
|
||||||
|
# WiFi
|
||||||
|
WIFI_SSID='SomeWifi'
|
||||||
|
WIFI_PASSWORD='Abracadabra'
|
||||||
|
|
||||||
# SERVER VARIABLES
|
# SERVER VARIABLES
|
||||||
## NOTE: Windows can only use one user per server. This means that if
|
## NOTE: Windows can only use one user per server. This means that if
|
||||||
|
|
|
||||||
4
.gitattributes
vendored
4
.gitattributes
vendored
|
|
@ -1,4 +0,0 @@
|
||||||
Images/ filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.jpg filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.png filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.xcf filter=lfs diff=lfs merge=lfs -text
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,6 +1,7 @@
|
||||||
**/__pycache__/*
|
**/__pycache__/*
|
||||||
*.bak
|
*.bak
|
||||||
*.exe
|
*.exe
|
||||||
|
*.swp
|
||||||
.bin/7-Zip/
|
.bin/7-Zip/
|
||||||
.bin/AIDA64/
|
.bin/AIDA64/
|
||||||
.bin/BleachBit/
|
.bin/BleachBit/
|
||||||
|
|
|
||||||
2
.linux_items/.gitignore
vendored
Normal file
2
.linux_items/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
wk_tmp
|
||||||
|
wk-repo
|
||||||
5
.linux_items/build_additions.txt
Normal file
5
.linux_items/build_additions.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
rsync -aI "${script_path}/${install_dir}/" "${work_dir}/iso/${install_dir}/"
|
||||||
|
rm "${work_dir}/iso/EFI" -R
|
||||||
|
rm "${work_dir}/iso/loader" -R
|
||||||
|
rsync -aI "${script_path}/EFI/" "${work_dir}/iso/EFI/"
|
||||||
|
|
||||||
BIN
.linux_items/include/EFI/boot/icons/wk_arch.png
Normal file
BIN
.linux_items/include/EFI/boot/icons/wk_arch.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
BIN
.linux_items/include/EFI/boot/icons/wk_memtest.png
Normal file
BIN
.linux_items/include/EFI/boot/icons/wk_memtest.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
BIN
.linux_items/include/EFI/boot/icons/wk_win.png
Normal file
BIN
.linux_items/include/EFI/boot/icons/wk_win.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2 KiB |
39
.linux_items/include/EFI/boot/refind.conf
Normal file
39
.linux_items/include/EFI/boot/refind.conf
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
# refind.conf
|
||||||
|
|
||||||
|
timeout 0
|
||||||
|
scanfor manual
|
||||||
|
showtools firmware,reboot,shutdown
|
||||||
|
default_selection MemTest86
|
||||||
|
csr_values 10,77
|
||||||
|
#use_graphics_for osx,linux,windows
|
||||||
|
|
||||||
|
# Theme
|
||||||
|
banner rEFInd.png
|
||||||
|
banner_scale fillscreen
|
||||||
|
selection_big selection_big.png
|
||||||
|
selection_small selection_small.png
|
||||||
|
hideui arrows,badges
|
||||||
|
|
||||||
|
# Entries
|
||||||
|
menuentry "MemTest86" {
|
||||||
|
icon /EFI/boot/icons/wk_memtest.png
|
||||||
|
loader /EFI/memtest86/memtestx64.efi
|
||||||
|
}
|
||||||
|
menuentry "Linux" {
|
||||||
|
icon /EFI/boot/icons/wk_arch.png
|
||||||
|
loader /arch/boot/x86_64/vmlinuz
|
||||||
|
initrd /arch/boot/intel_ucode.img
|
||||||
|
initrd /arch/boot/x86_64/archiso.img
|
||||||
|
options "archisobasedir=arch archisolabel=%ARCHISO_LABEL% quiet copytoram loglevel=3"
|
||||||
|
submenuentry "Linux (i3)" {
|
||||||
|
add_options "i3"
|
||||||
|
}
|
||||||
|
submenuentry "Linux (CLI)" {
|
||||||
|
add_options "nox"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menuentry "WindowsPE" {
|
||||||
|
ostype windows
|
||||||
|
icon /EFI/boot/icons/wk_win.png
|
||||||
|
loader /EFI/microsoft/bootx64.efi
|
||||||
|
}
|
||||||
BIN
.linux_items/include/EFI/boot/selection_big.png
Normal file
BIN
.linux_items/include/EFI/boot/selection_big.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 538 B |
BIN
.linux_items/include/EFI/boot/selection_small.png
Normal file
BIN
.linux_items/include/EFI/boot/selection_small.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 720 B |
45
.linux_items/include/airootfs/etc/default/ufw
Normal file
45
.linux_items/include/airootfs/etc/default/ufw
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
# /etc/default/ufw
|
||||||
|
#
|
||||||
|
|
||||||
|
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
|
||||||
|
# accepted). You will need to 'disable' and then 'enable' the firewall for
|
||||||
|
# the changes to take affect.
|
||||||
|
IPV6=yes
|
||||||
|
|
||||||
|
# Set the default input policy to ACCEPT, DROP, or REJECT. Please note that if
|
||||||
|
# you change this you will most likely want to adjust your rules.
|
||||||
|
DEFAULT_INPUT_POLICY="DROP"
|
||||||
|
|
||||||
|
# Set the default output policy to ACCEPT, DROP, or REJECT. Please note that if
|
||||||
|
# you change this you will most likely want to adjust your rules.
|
||||||
|
DEFAULT_OUTPUT_POLICY="ACCEPT"
|
||||||
|
|
||||||
|
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
|
||||||
|
# if you change this you will most likely want to adjust your rules
|
||||||
|
DEFAULT_FORWARD_POLICY="DROP"
|
||||||
|
|
||||||
|
# Set the default application policy to ACCEPT, DROP, REJECT or SKIP. Please
|
||||||
|
# note that setting this to ACCEPT may be a security risk. See 'man ufw' for
|
||||||
|
# details
|
||||||
|
DEFAULT_APPLICATION_POLICY="SKIP"
|
||||||
|
|
||||||
|
# By default, ufw only touches its own chains. Set this to 'yes' to have ufw
|
||||||
|
# manage the built-in chains too. Warning: setting this to 'yes' will break
|
||||||
|
# non-ufw managed firewall rules
|
||||||
|
MANAGE_BUILTINS=no
|
||||||
|
|
||||||
|
#
|
||||||
|
# IPT backend
|
||||||
|
#
|
||||||
|
# only enable if using iptables backend
|
||||||
|
IPT_SYSCTL=/etc/ufw/sysctl.conf
|
||||||
|
|
||||||
|
# Extra connection tracking modules to load. Complete list can be found in
|
||||||
|
# net/netfilter/Kconfig of your kernel source. Some common modules:
|
||||||
|
# nf_conntrack_irc, nf_nat_irc: DCC (Direct Client to Client) support
|
||||||
|
# nf_conntrack_netbios_ns: NetBIOS (samba) client support
|
||||||
|
# nf_conntrack_pptp, nf_nat_pptp: PPTP over stateful firewall/NAT
|
||||||
|
# nf_conntrack_ftp, nf_nat_ftp: active FTP support
|
||||||
|
# nf_conntrack_tftp, nf_nat_tftp: TFTP support (server side)
|
||||||
|
IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"
|
||||||
|
|
||||||
1
.linux_items/include/airootfs/etc/hostname
Normal file
1
.linux_items/include/airootfs/etc/hostname
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
wklinux
|
||||||
3
.linux_items/include/airootfs/etc/hosts
Normal file
3
.linux_items/include/airootfs/etc/hosts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
127.0.0.1 localhost.localdomain localhost
|
||||||
|
::1 localhost.localdomain localhost
|
||||||
|
|
||||||
1
.linux_items/include/airootfs/etc/locale.conf
Normal file
1
.linux_items/include/airootfs/etc/locale.conf
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
LANG=en_US.UTF-8
|
||||||
2
.linux_items/include/airootfs/etc/locale.gen
Normal file
2
.linux_items/include/airootfs/etc/locale.gen
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
en_US.UTF-8 UTF-8
|
||||||
|
|
||||||
9
.linux_items/include/airootfs/etc/motd
Normal file
9
.linux_items/include/airootfs/etc/motd
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
Welcome to the [32m______[0m
|
||||||
|
|
||||||
|
Some common commands:
|
||||||
|
[34m%[0m hw-diags
|
||||||
|
[34m%[0m hw-info
|
||||||
|
[34m%[0m mount-all-volumes
|
||||||
|
[34m%[0m mount-backup-shares
|
||||||
|
[34m%[0m connect-to-network
|
||||||
|
|
||||||
20
.linux_items/include/airootfs/etc/oblogout.conf
Normal file
20
.linux_items/include/airootfs/etc/oblogout.conf
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
[settings]
|
||||||
|
usehal = false
|
||||||
|
|
||||||
|
[looks]
|
||||||
|
opacity = 70
|
||||||
|
bgcolor = black
|
||||||
|
buttontheme = foom
|
||||||
|
#buttons = cancel, logout, restart, shutdown, suspend, hibernate, lock
|
||||||
|
buttons = restart, shutdown, logout
|
||||||
|
|
||||||
|
[shortcuts]
|
||||||
|
cancel = Escape
|
||||||
|
shutdown = S
|
||||||
|
restart = R
|
||||||
|
logout = L
|
||||||
|
|
||||||
|
[commands]
|
||||||
|
shutdown = systemctl poweroff
|
||||||
|
restart = systemctl reboot
|
||||||
|
logout = openbox --exit
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
polkit.addRule(function(action, subject) {
|
||||||
|
if (subject.isInGroup("wheel")) {
|
||||||
|
return polkit.Result.YES;
|
||||||
|
}
|
||||||
|
});
|
||||||
64
.linux_items/include/airootfs/etc/skel/.Xresources
Executable file
64
.linux_items/include/airootfs/etc/skel/.Xresources
Executable file
|
|
@ -0,0 +1,64 @@
|
||||||
|
! general settings
|
||||||
|
URxvt*saveline: 15000
|
||||||
|
URxvt*termName: rxvt-256color
|
||||||
|
URxvt*iso14755: false
|
||||||
|
|
||||||
|
! appearance
|
||||||
|
URxvt*depth: 32
|
||||||
|
!URxvt*background: rgba:0000/0000/0000/AAAA
|
||||||
|
!URxvt*background: [80]#404552
|
||||||
|
!URxvt*background: [100]#2f343f
|
||||||
|
!URxvt*foreground: #F8F8FF
|
||||||
|
!URxvt.underlineColor: #4682B4
|
||||||
|
!URxvt.highlightColor: #4682B4
|
||||||
|
!URxvt.throughColor: Blue
|
||||||
|
!URxvt*cursorColor: #dc8cc3
|
||||||
|
!URxvt*cursorColor2: Black
|
||||||
|
URxvt*scrollBar: false
|
||||||
|
URxvt*scrollBar_right: false
|
||||||
|
URxvt*internalBorder: 0
|
||||||
|
URxvt*externalBorder: 0
|
||||||
|
!URxvt.colorIT: #87af5f
|
||||||
|
!URxvt.colorBD: #c5c8c6
|
||||||
|
!URxvt.colorUL: #87afd7
|
||||||
|
URxvt.geometry: 92x16
|
||||||
|
URxvt.internalBorder: 8
|
||||||
|
URxvt.shading: 10
|
||||||
|
URxvt.transparent: true
|
||||||
|
|
||||||
|
! Base16 Isotope
|
||||||
|
! Scheme: Jan T. Sott
|
||||||
|
!! Modified by 2Shirt
|
||||||
|
|
||||||
|
*.foreground: #d0d0d0
|
||||||
|
*.background: #000000
|
||||||
|
*.cursorColor: #d0d0d0
|
||||||
|
|
||||||
|
*.color0: #000000
|
||||||
|
*.color1: #ff0000
|
||||||
|
*.color2: #33ff00
|
||||||
|
*.color3: #ffd000
|
||||||
|
*.color4: #0066ff
|
||||||
|
*.color5: #cc00ff
|
||||||
|
*.color6: #00ffff
|
||||||
|
*.color7: #d0d0d0
|
||||||
|
|
||||||
|
*.color8: #808080
|
||||||
|
*.color9: #ff9900
|
||||||
|
*.color10: #404040
|
||||||
|
*.color11: #606060
|
||||||
|
*.color12: #c0c0c0
|
||||||
|
*.color13: #e0e0e0
|
||||||
|
*.color14: #3300ff
|
||||||
|
*.color15: #ffffff
|
||||||
|
|
||||||
|
! fonts
|
||||||
|
Xft.autohint: 0
|
||||||
|
Xft.antialias: 1
|
||||||
|
Xft.hinting: true
|
||||||
|
Xft.hintstyle: hintslight
|
||||||
|
Xft.rgba: rgb
|
||||||
|
Xft.lcdfilter: lcddefault
|
||||||
|
URxvt.font: xft:Inconsolata:size=12
|
||||||
|
!URxvt.letterSpace: -3
|
||||||
|
|
||||||
35
.linux_items/include/airootfs/etc/skel/.aliases
Normal file
35
.linux_items/include/airootfs/etc/skel/.aliases
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
alias 7z0='7z a -t7z -mx=0'
|
||||||
|
alias 7z1='7z a -t7z -mx=1'
|
||||||
|
alias 7z3='7z a -t7z -mx=3'
|
||||||
|
alias 7z5='7z a -t7z -mx=5'
|
||||||
|
alias 7z7='7z a -t7z -mx=7'
|
||||||
|
alias 7z9='7z a -t7z -mx=9'
|
||||||
|
alias diff='colordiff -ur'
|
||||||
|
alias du='du -sch --apparent-size'
|
||||||
|
alias fix-perms='find -type d -exec chmod 755 "{}" \; && find -type f -exec chmod 644 "{}" \;'
|
||||||
|
alias hw-info='sudo inxi -ACDdGlMmNopRsxxc 25'
|
||||||
|
alias less='less -S'
|
||||||
|
alias ls='ls --color=auto'
|
||||||
|
alias mkdir='mkdir -p'
|
||||||
|
alias mount='sudo mount'
|
||||||
|
alias mv='mv -nv'
|
||||||
|
alias pacinit='sudo sed -i -r "s/^SigLevel.*/SigLevel = Never/" /etc/pacman.conf; sudo pacman -Sy'
|
||||||
|
alias photorec-sort='sudo photorec-sort'
|
||||||
|
alias photorec='sudo photorec'
|
||||||
|
alias q1='clear && ls -1'
|
||||||
|
alias q1a='clear && ls -1A'
|
||||||
|
alias q='clear && ls -lh'
|
||||||
|
alias qa='clear && ls -lAh'
|
||||||
|
alias qs='clear && ls'
|
||||||
|
alias qsa='clear && ls -A'
|
||||||
|
alias rm='rm -v'
|
||||||
|
alias rmdirs='find -depth -mindepth 1 -type d -exec rmdir "{}" --ignore-fail-on-non-empty \;'
|
||||||
|
alias rs='rsync -avhPS --stats --exclude-from="$HOME/.rsync_exclusions"'
|
||||||
|
alias rsz='rsync -avhzPS --stats --exclude-from="$HOME/.rsync_exclusions"'
|
||||||
|
alias sdu='sudo du -sch --apparent-size'
|
||||||
|
alias srmdirs='sudo find -depth -mindepth 1 -type d -exec rmdir "{}" --ignore-fail-on-non-empty \;'
|
||||||
|
alias srs='sudo rsync -avhPS --stats --exclude-from="$HOME/.rsync_exclusions"'
|
||||||
|
alias srsz='sudo rsync -avhzPS --stats --exclude-from="$HOME/.rsync_exclusions"'
|
||||||
|
alias testdisk='sudo testdisk'
|
||||||
|
alias umount='sudo umount'
|
||||||
|
alias unmount='sudo umount'
|
||||||
14
.linux_items/include/airootfs/etc/skel/.bashrc
Normal file
14
.linux_items/include/airootfs/etc/skel/.bashrc
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
#
|
||||||
|
# ~/.bashrc
|
||||||
|
#
|
||||||
|
|
||||||
|
# If not running interactively, don't do anything
|
||||||
|
[[ $- != *i* ]] && return
|
||||||
|
|
||||||
|
PS1='[\u@\h \W]\$ '
|
||||||
|
|
||||||
|
## Load aliases
|
||||||
|
. $HOME/.aliases
|
||||||
|
|
||||||
|
# Update LS_COLORS
|
||||||
|
eval $(dircolors ~/.dircolors)
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
; Thunar GtkAccelMap rc-file -*- scheme -*-
|
||||||
|
; this file is an automated accelerator map dump
|
||||||
|
;
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarLauncher/sendto-desktop" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/create-folder" "<Primary><Shift>n")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarShortcutsPane/sendto-shortcuts" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/paste-into-folder" "<Primary>v")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-home" "<Alt>Home")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarLauncher/open" "<Primary>o")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/go-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActions/uca-action-1462127723240094-1" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-file-system" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-out" "<Primary>minus")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/paste" "<Primary>v")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarLauncher/open-with-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/help-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/file-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarLauncher/open-with-other-in-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/detach-tab" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarLauncher/open-in-new-tab" "<Primary><Shift>p")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-menubar" "<Primary>m")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/back" "<Alt>Left")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/close-tab" "<Primary>w")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-compact-list" "<Primary>3")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-tree" "<Primary>e")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/restore" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-network" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActions/Tap::create-archive" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/new-tab" "<Primary>t")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/preferences" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/rename" "F2")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/sendto-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/edit-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarLauncher/open-with-other" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-toolbar" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/invert-selection" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/make-link" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-icons" "<Primary>1")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/new-window" "<Primary>n")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/forward" "<Alt>Right")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/move-to-trash" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/select-by-pattern" "<Primary>s")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/about" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/setup-columns" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/contents" "F1")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-desktop" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/close-all-windows" "<Primary><Shift>w")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in" "<Primary>plus")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/duplicate" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-parent" "<Alt>Up")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-shortcuts" "<Primary>b")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/reload" "<Primary>r")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-templates" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/copy" "<Primary>c")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-pathbar" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/properties" "<Alt>Return")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/delete" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActions/Twp::setwallpaper" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/empty-trash" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarLauncher/open-in-new-window" "<Primary><Shift>o")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/cut" "<Primary>x")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/close-window" "<Primary>q")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/select-all-files" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-location" "<Primary>l")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-reset" "<Primary>0")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-statusbar" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/show-hidden" "<Primary>h")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-detailed-list" "<Primary>2")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActions/uca-action-1497008558378216-3" "")
|
||||||
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml encoding="UTF-8" version="1.0"?>
|
||||||
|
<actions>
|
||||||
|
<action>
|
||||||
|
<icon>utilities-terminal</icon>
|
||||||
|
<name>Open Terminal Here</name>
|
||||||
|
<unique-id>1462127723240094-1</unique-id>
|
||||||
|
<command>exo-open --working-directory %f --launch TerminalEmulator</command>
|
||||||
|
<description>Example for a custom action</description>
|
||||||
|
<patterns>*</patterns>
|
||||||
|
<startup-notify/>
|
||||||
|
<directories/>
|
||||||
|
</action>
|
||||||
|
<action>
|
||||||
|
<icon>edit-redo-symbolic</icon>
|
||||||
|
<name>Remount Read-Write</name>
|
||||||
|
<unique-id>1497008558378216-3</unique-id>
|
||||||
|
<command>urxvt -T "Mount Tool" -e remount-rw %f</command>
|
||||||
|
<description>Remount Read-Write</description>
|
||||||
|
<patterns>*</patterns>
|
||||||
|
<startup-notify/>
|
||||||
|
<directories/>
|
||||||
|
</action>
|
||||||
|
</actions>
|
||||||
|
|
||||||
322
.linux_items/include/airootfs/etc/skel/.config/dunst/dunstrc
Normal file
322
.linux_items/include/airootfs/etc/skel/.config/dunst/dunstrc
Normal file
|
|
@ -0,0 +1,322 @@
|
||||||
|
[global]
|
||||||
|
### Display ###
|
||||||
|
|
||||||
|
# Which monitor should the notifications be displayed on.
|
||||||
|
monitor = 0
|
||||||
|
|
||||||
|
# Display notification on focused monitor. Possible modes are:
|
||||||
|
# mouse: follow mouse pointer
|
||||||
|
# keyboard: follow window with keyboard focus
|
||||||
|
# none: don't follow anything
|
||||||
|
#
|
||||||
|
# "keyboard" needs a window manager that exports the
|
||||||
|
# _NET_ACTIVE_WINDOW property.
|
||||||
|
# This should be the case for almost all modern window managers.
|
||||||
|
#
|
||||||
|
# If this option is set to mouse or keyboard, the monitor option
|
||||||
|
# will be ignored.
|
||||||
|
follow = mouse
|
||||||
|
|
||||||
|
# The geometry of the window:
|
||||||
|
# [{width}]x{height}[+/-{x}+/-{y}]
|
||||||
|
# The geometry of the message window.
|
||||||
|
# The height is measured in number of notifications everything else
|
||||||
|
# in pixels. If the width is omitted but the height is given
|
||||||
|
# ("-geometry x2"), the message window expands over the whole screen
|
||||||
|
# (dmenu-like). If width is 0, the window expands to the longest
|
||||||
|
# message displayed. A positive x is measured from the left, a
|
||||||
|
# negative from the right side of the screen. Y is measured from
|
||||||
|
# the top and down respectively.
|
||||||
|
# The width can be negative. In this case the actual width is the
|
||||||
|
# screen width minus the width defined in within the geometry option.
|
||||||
|
geometry = "300x5-220+40"
|
||||||
|
|
||||||
|
# Show how many messages are currently hidden (because of geometry).
|
||||||
|
indicate_hidden = yes
|
||||||
|
|
||||||
|
# Shrink window if it's smaller than the width. Will be ignored if
|
||||||
|
# width is 0.
|
||||||
|
shrink = 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 = 20
|
||||||
|
|
||||||
|
# The height of the entire notification. If the height is smaller
|
||||||
|
# than the font height and padding combined, it will be raised
|
||||||
|
# to the font height and padding.
|
||||||
|
notification_height = 0
|
||||||
|
|
||||||
|
# Draw a line of "separator_height" pixel height between two
|
||||||
|
# notifications.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
separator_height = 2
|
||||||
|
|
||||||
|
# Padding between text and separator.
|
||||||
|
padding = 8
|
||||||
|
|
||||||
|
# Horizontal padding.
|
||||||
|
horizontal_padding = 8
|
||||||
|
|
||||||
|
# Defines width in pixels of frame around the notification window.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
frame_width = 3
|
||||||
|
|
||||||
|
# Defines color of the frame around the notification window.
|
||||||
|
#frame_color = "#3300ff"
|
||||||
|
|
||||||
|
# Define a color for the separator.
|
||||||
|
# possible values are:
|
||||||
|
# * auto: dunst tries to find a color fitting to the background;
|
||||||
|
# * foreground: use the same color as the foreground;
|
||||||
|
# * frame: use the same color as the frame;
|
||||||
|
# * anything else will be interpreted as a X color.
|
||||||
|
separator_color = frame
|
||||||
|
|
||||||
|
# Sort messages by urgency.
|
||||||
|
sort = yes
|
||||||
|
|
||||||
|
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||||
|
# for longer than idle_threshold seconds.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
idle_threshold = 120
|
||||||
|
|
||||||
|
### Text ###
|
||||||
|
|
||||||
|
font = Inconsolata 8
|
||||||
|
|
||||||
|
# The spacing between lines. If the height is smaller than the
|
||||||
|
# font height, it will get raised to the font height.
|
||||||
|
line_height = 0
|
||||||
|
|
||||||
|
# Possible values are:
|
||||||
|
# full: Allow a small subset of html markup in notifications:
|
||||||
|
# <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>.
|
||||||
|
#
|
||||||
|
# strip: This setting is provided for compatibility with some broken
|
||||||
|
# clients that send markup even though it's not enabled on the
|
||||||
|
# server. Dunst will try to strip the markup but the parsing is
|
||||||
|
# simplistic so using this option outside of matching rules for
|
||||||
|
# specific applications *IS GREATLY DISCOURAGED*.
|
||||||
|
#
|
||||||
|
# no: Disable markup parsing, incoming notifications will be treated as
|
||||||
|
# plain text. Dunst will not advertise that it has the body-markup
|
||||||
|
# capability if this is set as a global setting.
|
||||||
|
#
|
||||||
|
# It's important to note that markup inside the format option will be parsed
|
||||||
|
# regardless of what this is set to.
|
||||||
|
markup = full
|
||||||
|
|
||||||
|
# The format of the message. Possible variables are:
|
||||||
|
# %a appname
|
||||||
|
# %s summary
|
||||||
|
# %b body
|
||||||
|
# %i iconname (including its path)
|
||||||
|
# %I iconname (without its path)
|
||||||
|
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||||
|
# %n progress value if set without any extra characters
|
||||||
|
# Markup is allowed
|
||||||
|
format = "<b>%s</b>\n%b"
|
||||||
|
|
||||||
|
# Alignment of message text.
|
||||||
|
# Possible values are "left", "center" and "right".
|
||||||
|
alignment = left
|
||||||
|
|
||||||
|
# Show age of message if message is older than show_age_threshold
|
||||||
|
# seconds.
|
||||||
|
# Set to -1 to disable.
|
||||||
|
show_age_threshold = 60
|
||||||
|
|
||||||
|
# Split notifications into multiple lines if they don't fit into
|
||||||
|
# geometry.
|
||||||
|
word_wrap = yes
|
||||||
|
|
||||||
|
# Ignore newlines '\n' in notifications.
|
||||||
|
ignore_newline = no
|
||||||
|
|
||||||
|
# Merge multiple notifications with the same content
|
||||||
|
stack_duplicates = true
|
||||||
|
|
||||||
|
# Hide the count of merged notifications with the same content
|
||||||
|
hide_duplicate_count = false
|
||||||
|
|
||||||
|
# Display indicators for URLs (U) and actions (A).
|
||||||
|
show_indicators = yes
|
||||||
|
|
||||||
|
### Icons ###
|
||||||
|
|
||||||
|
# Align icons left/right/off
|
||||||
|
icon_position = off
|
||||||
|
|
||||||
|
# Scale larger icons down to this size, set to 0 to disable
|
||||||
|
max_icon_size = 32
|
||||||
|
|
||||||
|
# Paths to default icons.
|
||||||
|
icon_folders = /usr/share/icons/Papirus-Dark/16x16/status/:/usr/share/icons/Papirus-Dark/16x16/devices/
|
||||||
|
|
||||||
|
### History ###
|
||||||
|
|
||||||
|
# Should a notification popped up from history be sticky or timeout
|
||||||
|
# as if it would normally do.
|
||||||
|
sticky_history = yes
|
||||||
|
|
||||||
|
# Maximum amount of notifications kept in history
|
||||||
|
history_length = 20
|
||||||
|
|
||||||
|
### Misc/Advanced ###
|
||||||
|
|
||||||
|
# dmenu path.
|
||||||
|
dmenu = /usr/bin/dmenu -p dunst:
|
||||||
|
|
||||||
|
# Browser for opening urls in context menu.
|
||||||
|
browser = /usr/bin/firefox -new-tab
|
||||||
|
|
||||||
|
# Always run rule-defined scripts, even if the notification is suppressed
|
||||||
|
always_run_script = true
|
||||||
|
|
||||||
|
# Define the title of the windows spawned by dunst
|
||||||
|
title = Dunst
|
||||||
|
|
||||||
|
# Define the class of the windows spawned by dunst
|
||||||
|
class = Dunst
|
||||||
|
|
||||||
|
# Print a notification on startup.
|
||||||
|
# This is mainly for error detection, since dbus (re-)starts dunst
|
||||||
|
# automatically after a crash.
|
||||||
|
startup_notification = false
|
||||||
|
|
||||||
|
### Legacy
|
||||||
|
|
||||||
|
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||||
|
# This setting is provided for compatibility with older nVidia drivers that
|
||||||
|
# do not support RandR and using it on systems that support RandR is highly
|
||||||
|
# discouraged.
|
||||||
|
#
|
||||||
|
# By enabling this setting dunst will not be able to detect when a monitor
|
||||||
|
# is connected or disconnected which might break follow mode if the screen
|
||||||
|
# layout changes.
|
||||||
|
force_xinerama = false
|
||||||
|
|
||||||
|
# Experimental features that may or may not work correctly. Do not expect them
|
||||||
|
# to have a consistent behaviour across releases.
|
||||||
|
[experimental]
|
||||||
|
# Calculate the dpi to use on a per-monitor basis.
|
||||||
|
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||||
|
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||||
|
# using the resolution and physical size. This might be useful in setups
|
||||||
|
# where there are multiple screens with very different dpi values.
|
||||||
|
per_monitor_dpi = false
|
||||||
|
|
||||||
|
[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". Make sure this key actually exists on your keyboard layout,
|
||||||
|
# e.g. check output of 'xmodmap -pke'
|
||||||
|
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.
|
||||||
|
frame_color = "#2d3036"
|
||||||
|
background = "#222222"
|
||||||
|
foreground = "#22ee22"
|
||||||
|
timeout = 5
|
||||||
|
# Icon for notifications with low urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_normal]
|
||||||
|
frame_color = "#2d3036"
|
||||||
|
background = "#222222"
|
||||||
|
foreground = "#e6d947"
|
||||||
|
timeout = 5
|
||||||
|
# Icon for notifications with normal urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_critical]
|
||||||
|
frame_color = "#2d3036"
|
||||||
|
background = "#800000"
|
||||||
|
foreground = "#ffffff"
|
||||||
|
timeout = 0
|
||||||
|
# Icon for notifications with critical urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
# Every section that isn't one of the above is interpreted as a rules to
|
||||||
|
# override settings for certain messages.
|
||||||
|
# Messages can be matched by "appname", "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 = ""
|
||||||
|
|
||||||
|
#[history-ignore]
|
||||||
|
# # This notification will not be saved in history
|
||||||
|
# summary = "foobar"
|
||||||
|
# history_ignore = yes
|
||||||
|
|
||||||
|
#[signed_on]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = "*signed on*"
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[signed_off]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *signed off*
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[says]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *says*
|
||||||
|
# urgency = critical
|
||||||
|
#
|
||||||
|
#[twitter]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *twitter.com*
|
||||||
|
# urgency = normal
|
||||||
|
#
|
||||||
|
# vim: ft=cfg
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
[Settings]
|
||||||
|
gtk-theme-name=Arc-Dark
|
||||||
|
gtk-icon-theme-name=Papirus-Dark
|
||||||
|
gtk-font-name=Noto Sans 11
|
||||||
|
gtk-cursor-theme-name=Adwaita
|
||||||
|
gtk-cursor-theme-size=0
|
||||||
|
gtk-toolbar-style=GTK_TOOLBAR_BOTH
|
||||||
|
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||||
|
gtk-button-images=1
|
||||||
|
gtk-menu-images=1
|
||||||
|
gtk-enable-event-sounds=1
|
||||||
|
gtk-enable-input-feedback-sounds=1
|
||||||
|
gtk-xft-antialias=1
|
||||||
|
gtk-xft-hinting=1
|
||||||
|
gtk-xft-hintstyle=hintslight
|
||||||
|
gtk-xft-rgba=rgb
|
||||||
321
.linux_items/include/airootfs/etc/skel/.config/i3/config
Normal file
321
.linux_items/include/airootfs/etc/skel/.config/i3/config
Normal file
|
|
@ -0,0 +1,321 @@
|
||||||
|
# This file has been auto-generated by i3-config-wizard(1).
|
||||||
|
# It will not be overwritten, so edit it as you like.
|
||||||
|
#
|
||||||
|
# Should you change your keyboard layout some time, delete
|
||||||
|
# this file and re-run i3-config-wizard(1).
|
||||||
|
#
|
||||||
|
|
||||||
|
# i3 config file (v4)
|
||||||
|
#
|
||||||
|
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
|
||||||
|
|
||||||
|
set $mod Mod4
|
||||||
|
|
||||||
|
# Configure border style <normal|1pixel|pixel xx|none|pixel>
|
||||||
|
new_window pixel 1
|
||||||
|
new_float normal
|
||||||
|
|
||||||
|
# Hide borders
|
||||||
|
hide_edge_borders none
|
||||||
|
|
||||||
|
# Pulse Audio controls
|
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume
|
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume
|
||||||
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound
|
||||||
|
|
||||||
|
# alt+tab navi
|
||||||
|
bindsym Mod1+Tab workspace next
|
||||||
|
bindsym Mod1+Shift+Tab workspace prev
|
||||||
|
|
||||||
|
# change borders
|
||||||
|
bindsym $mod+u border none
|
||||||
|
bindsym $mod+y border pixel 1
|
||||||
|
bindsym $mod+n border normal
|
||||||
|
|
||||||
|
# Font for window titles. Will also be used by the bar unless a different font
|
||||||
|
# is used in the bar {} block below.
|
||||||
|
#font Inconsolata:monospace 8
|
||||||
|
font pango:Noto Sans Mono 10, FontAwesome 10
|
||||||
|
|
||||||
|
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
||||||
|
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||||
|
#font pango:DejaVu Sans Mono 8
|
||||||
|
|
||||||
|
# Before i3 v4.8, we used to recommend this one as the default:
|
||||||
|
# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
||||||
|
# The font above is very space-efficient, that is, it looks good, sharp and
|
||||||
|
# clear in small sizes. However, its unicode glyph coverage is limited, the old
|
||||||
|
# X core fonts rendering does not support right-to-left and this being a bitmap
|
||||||
|
# font, it doesn’t scale on retina/hidpi displays.
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
bindsym $mod+Return exec i3-sensible-terminal
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
bindsym $mod+q kill
|
||||||
|
bindsym Mod1+F4 kill
|
||||||
|
|
||||||
|
# start dmenu (a program launcher)
|
||||||
|
#bindsym $mod+Shift+d exec dmenu_run
|
||||||
|
# There also is the (new) i3-dmenu-desktop which only displays applications
|
||||||
|
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
|
||||||
|
# installed.
|
||||||
|
#bindsym $mod+Shift+d exec --no-startup-id i3-dmenu-desktop
|
||||||
|
bindsym $mod+r exec "rofi -combi-modi window,drun,run -show combi -modi combi"
|
||||||
|
|
||||||
|
# misc app shortcuts
|
||||||
|
bindsym $mod+d exec "urxvt -title 'Hardware Diagnostics' -e hw-diags"
|
||||||
|
bindsym $mod+f exec "thunar ~"
|
||||||
|
bindsym $mod+i exec "hardinfo"
|
||||||
|
bindsym $mod+m exec "urxvt -title 'Mount All Volumes' -e mount-all-volumes gui"
|
||||||
|
bindsym $mod+s exec "urxvt -title 'Hardware Diagnostics' -e hw-diags quick"
|
||||||
|
bindsym $mod+t exec "urxvt"
|
||||||
|
bindsym $mod+v exec "urxvt -title 'Hardware Sensors' -e watch -c -n1 -t hw-sensors"
|
||||||
|
bindsym $mod+w exec "firefox"
|
||||||
|
|
||||||
|
focus_follows_mouse no
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+j focus left
|
||||||
|
bindsym $mod+k focus down
|
||||||
|
bindsym $mod+l focus up
|
||||||
|
bindsym $mod+semicolon focus right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+j move left
|
||||||
|
bindsym $mod+Shift+k move down
|
||||||
|
bindsym $mod+Shift+l move up
|
||||||
|
bindsym $mod+Shift+semicolon move right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# workspace back and forth (with/without active container)
|
||||||
|
workspace_auto_back_and_forth yes
|
||||||
|
bindsym $mod+b workspace back_and_forth
|
||||||
|
bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth
|
||||||
|
|
||||||
|
# split orientation
|
||||||
|
bindsym $mod+Shift+h split h
|
||||||
|
bindsym $mod+Shift+v split v
|
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container
|
||||||
|
bindsym $mod+Shift+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
bindsym $mod+Shift+s layout stacking
|
||||||
|
bindsym $mod+Shift+w layout tabbed
|
||||||
|
bindsym $mod+Shift+e layout toggle split
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
#bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# move the currently focused window to the scratchpad
|
||||||
|
bindsym $mod+Shift+minus move scratchpad
|
||||||
|
|
||||||
|
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||||
|
# If there are multiple scratchpad windows, this command cycles through them.
|
||||||
|
bindsym $mod+minus scratchpad show
|
||||||
|
|
||||||
|
# focus the child container
|
||||||
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
|
# Workspace names
|
||||||
|
set $ws1 "一"
|
||||||
|
set $ws2 "二"
|
||||||
|
set $ws3 "三"
|
||||||
|
set $ws4 "四"
|
||||||
|
set $ws5 "五"
|
||||||
|
set $ws6 "六"
|
||||||
|
set $ws7 "七"
|
||||||
|
set $ws8 "八"
|
||||||
|
set $ws9 "九"
|
||||||
|
set $ws10 "十"
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
bindsym $mod+1 workspace $ws1
|
||||||
|
bindsym $mod+2 workspace $ws2
|
||||||
|
bindsym $mod+3 workspace $ws3
|
||||||
|
bindsym $mod+4 workspace $ws4
|
||||||
|
bindsym $mod+5 workspace $ws5
|
||||||
|
bindsym $mod+6 workspace $ws6
|
||||||
|
bindsym $mod+7 workspace $ws7
|
||||||
|
bindsym $mod+8 workspace $ws8
|
||||||
|
bindsym $mod+9 workspace $ws9
|
||||||
|
bindsym $mod+0 workspace $ws10
|
||||||
|
|
||||||
|
# move focused container to workspace
|
||||||
|
bindsym $mod+Ctrl+1 move container to workspace $ws1
|
||||||
|
bindsym $mod+Ctrl+2 move container to workspace $ws2
|
||||||
|
bindsym $mod+Ctrl+3 move container to workspace $ws3
|
||||||
|
bindsym $mod+Ctrl+4 move container to workspace $ws4
|
||||||
|
bindsym $mod+Ctrl+5 move container to workspace $ws5
|
||||||
|
bindsym $mod+Ctrl+6 move container to workspace $ws6
|
||||||
|
bindsym $mod+Ctrl+7 move container to workspace $ws7
|
||||||
|
bindsym $mod+Ctrl+8 move container to workspace $ws8
|
||||||
|
bindsym $mod+Ctrl+9 move container to workspace $ws9
|
||||||
|
bindsym $mod+Ctrl+0 move container to workspace $ws10
|
||||||
|
|
||||||
|
# move focused container to workspace and follow
|
||||||
|
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace $ws9; workspace $ws9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace $ws10; workspace $ws10
|
||||||
|
|
||||||
|
# Open specific applications in floating mode
|
||||||
|
for_window [class="Galculator"] floating enable border normal 5
|
||||||
|
for_window [class="Nitrogen"] floating enable sticky enable border normal 5
|
||||||
|
for_window [class="Thunar"] floating enable border normal 5
|
||||||
|
for_window [class="mpv"] floating enable border normal 5
|
||||||
|
for_window [title="Event Tester"] floating enable border normal 5
|
||||||
|
for_window [title="Firefox"] floating enable border normal 5
|
||||||
|
for_window [title="Hardware Diagnostics"] floating enable
|
||||||
|
for_window [title="Hardware Sensors"] floating enable
|
||||||
|
for_window [title="Mount All Volumes"] floating enable border normal 5
|
||||||
|
for_window [title="Network Connections"] floating enable border normal 5
|
||||||
|
for_window [title="Screen Layout Editor"] floating enable border normal 5
|
||||||
|
for_window [title="Slack"] floating enable border normal 5
|
||||||
|
for_window [title="System Information"] floating enable border normal 5
|
||||||
|
for_window [title="Volume Control"] floating enable border normal 5
|
||||||
|
for_window [title="Zenmap"] floating enable border normal 5
|
||||||
|
|
||||||
|
# switch to workspace with urgent window automatically
|
||||||
|
for_window [urgent=latest] focus
|
||||||
|
|
||||||
|
# reload the configuration file
|
||||||
|
#bindsym $mod+Shift+c reload
|
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
|
#bindsym $mod+Shift+r restart
|
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that)
|
||||||
|
mode "resize" {
|
||||||
|
# These bindings trigger as soon as you enter the resize mode
|
||||||
|
|
||||||
|
# Pressing left will shrink the window’s width.
|
||||||
|
# Pressing right will grow the window’s width.
|
||||||
|
# Pressing up will shrink the window’s height.
|
||||||
|
# Pressing down will grow the window’s height.
|
||||||
|
bindsym j resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym k resize grow height 10 px or 10 ppt
|
||||||
|
bindsym l resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym semicolon resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# same bindings, but for the arrow keys
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
bindsym $mod+Shift+r mode "resize"
|
||||||
|
|
||||||
|
# "System" menu
|
||||||
|
bindsym $mod+x mode "$mode_system"
|
||||||
|
set $mode_system (l)ock, (e)xit, (r)eboot, (s)hutdown, (c)onfig, (i)3
|
||||||
|
mode "$mode_system" {
|
||||||
|
bindsym l exec --no-startup-id i3lock, mode "default"
|
||||||
|
bindsym e exit, mode "default"
|
||||||
|
bindsym r exec reboot, mode "default"
|
||||||
|
bindsym s exec poweroff, mode "default"
|
||||||
|
bindsym c reload, mode "default"
|
||||||
|
bindsym i restart, mode "default"
|
||||||
|
|
||||||
|
# exit system mode: "Enter" or "Escape"
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### settings for i3-gaps: ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# Set inner/outer gaps
|
||||||
|
gaps inner 10
|
||||||
|
gaps outer 4
|
||||||
|
|
||||||
|
# Additionally, you can issue commands with the following syntax. This is useful to bind keys to changing the gap size.
|
||||||
|
# gaps inner|outer current|all set|plus|minus <px>
|
||||||
|
# gaps inner all set 10
|
||||||
|
# gaps outer all plus 5
|
||||||
|
|
||||||
|
# Smart gaps (gaps used if only more than one container on the workspace)
|
||||||
|
smart_gaps on
|
||||||
|
|
||||||
|
# Smart borders (draw borders around container only if it is not the only container on this workspace)
|
||||||
|
# on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0)
|
||||||
|
smart_borders on
|
||||||
|
|
||||||
|
# Press $mod+Shift+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces.
|
||||||
|
set $mode_gaps Gaps: (o) outer, (i) inner
|
||||||
|
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||||
|
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||||
|
bindsym $mod+Shift+g mode "$mode_gaps"
|
||||||
|
|
||||||
|
mode "$mode_gaps" {
|
||||||
|
bindsym o mode "$mode_gaps_outer"
|
||||||
|
bindsym i mode "$mode_gaps_inner"
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
mode "$mode_gaps_inner" {
|
||||||
|
bindsym plus gaps inner current plus 5
|
||||||
|
bindsym minus gaps inner current minus 5
|
||||||
|
bindsym 0 gaps inner current set 0
|
||||||
|
|
||||||
|
bindsym Shift+plus gaps inner all plus 5
|
||||||
|
bindsym Shift+minus gaps inner all minus 5
|
||||||
|
bindsym Shift+0 gaps inner all set 0
|
||||||
|
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
mode "$mode_gaps_outer" {
|
||||||
|
bindsym plus gaps outer current plus 5
|
||||||
|
bindsym minus gaps outer current minus 5
|
||||||
|
bindsym 0 gaps outer current set 0
|
||||||
|
|
||||||
|
bindsym Shift+plus gaps outer all plus 5
|
||||||
|
bindsym Shift+minus gaps outer all minus 5
|
||||||
|
bindsym Shift+0 gaps outer all set 0
|
||||||
|
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Start i3bar to display a workspace bar (plus the system information i3status
|
||||||
|
# finds out, if available)
|
||||||
|
bar {
|
||||||
|
position bottom
|
||||||
|
separator_symbol " "
|
||||||
|
status_command i3status
|
||||||
|
height 26
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
# i3status configuration file.
|
||||||
|
# see "man i3status" for documentation.
|
||||||
|
|
||||||
|
# It is important that this file is edited as UTF-8.
|
||||||
|
# The following line should contain a sharp s:
|
||||||
|
# ß
|
||||||
|
# If the above line is not correctly displayed, fix your editor first!
|
||||||
|
|
||||||
|
general {
|
||||||
|
colors = true
|
||||||
|
interval = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
#order += "disk /"
|
||||||
|
order += "wireless _first_"
|
||||||
|
order += "ethernet _first_"
|
||||||
|
order += "cpu_usage"
|
||||||
|
order += "battery all"
|
||||||
|
order += "volume master"
|
||||||
|
order += "tztime local"
|
||||||
|
#order += "tztime utc"
|
||||||
|
|
||||||
|
cpu_usage {
|
||||||
|
format = " %usage"
|
||||||
|
max_threshold = 90
|
||||||
|
#format_above_threshold = " %usage"
|
||||||
|
degraded_threshold = 75
|
||||||
|
#format_above_degraded_threshold = " %usage"
|
||||||
|
}
|
||||||
|
|
||||||
|
wireless _first_ {
|
||||||
|
format_up = " (%quality at %essid) %ip"
|
||||||
|
format_down = " Down"
|
||||||
|
}
|
||||||
|
|
||||||
|
ethernet _first_ {
|
||||||
|
# if you use %speed, i3status requires root privileges
|
||||||
|
format_up = " %ip"
|
||||||
|
format_down = " Down"
|
||||||
|
}
|
||||||
|
|
||||||
|
battery all {
|
||||||
|
integer_battery_capacity = true
|
||||||
|
format = "%status %percentage"
|
||||||
|
format_down = ""
|
||||||
|
status_chr = ""
|
||||||
|
status_bat = ""
|
||||||
|
status_unk = ""
|
||||||
|
status_full = ""
|
||||||
|
path = "/sys/class/power_supply/BAT%d/uevent"
|
||||||
|
low_threshold = 25
|
||||||
|
threshold_type = percentage
|
||||||
|
}
|
||||||
|
|
||||||
|
volume master {
|
||||||
|
format = " %volume"
|
||||||
|
format_muted = " muted"
|
||||||
|
device = "pulse"
|
||||||
|
}
|
||||||
|
|
||||||
|
tztime local {
|
||||||
|
format = "%F %H:%M"
|
||||||
|
}
|
||||||
|
|
||||||
|
tztime utc {
|
||||||
|
format = "%H:%M"
|
||||||
|
timezone = "UTC"
|
||||||
|
}
|
||||||
|
|
||||||
|
load {
|
||||||
|
format = "%1min"
|
||||||
|
}
|
||||||
|
|
||||||
|
disk "/" {
|
||||||
|
format = "%avail"
|
||||||
|
}
|
||||||
25
.linux_items/include/airootfs/etc/skel/.config/mimeapps.list
Normal file
25
.linux_items/include/airootfs/etc/skel/.config/mimeapps.list
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
[Added Associations]
|
||||||
|
application/pdf=mupdf.desktop;
|
||||||
|
application/vnd.adobe.flash.movie=mpv.desktop;
|
||||||
|
application/vnd.ms-asf=mpv.desktop;
|
||||||
|
audio/flac=mpv.desktop;
|
||||||
|
audio/mp4=mpv.desktop;
|
||||||
|
audio/mpeg=mpv.desktop;
|
||||||
|
audio/x-vorbis+ogg=mpv.desktop;
|
||||||
|
image/bmp=ristretto.desktop;
|
||||||
|
image/gif=ristretto.desktop;
|
||||||
|
image/jpeg=ristretto.desktop;
|
||||||
|
image/png=ristretto.desktop;
|
||||||
|
image/vnd.microsoft.icon=ristretto.desktop;
|
||||||
|
inode/directory=exo-file-manager.desktop
|
||||||
|
text/plain=mousepad.desktop;
|
||||||
|
video/mp4=mpv.desktop;
|
||||||
|
video/mpeg=mpv.desktop;
|
||||||
|
video/quicktime=mpv.desktop;
|
||||||
|
video/x-flv=mpv.desktop;
|
||||||
|
video/x-matroska=mpv.desktop;
|
||||||
|
video/x-msvideo=mpv.desktop;
|
||||||
|
video/x-ms-wmv=mpv.desktop;
|
||||||
|
x-scheme-handler/http=exo-web-browser.desktop
|
||||||
|
x-scheme-handler/https=exo-web-browser.desktop
|
||||||
|
x-scheme-handler/trash=exo-file-manager.desktop
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#
|
||||||
|
# These things are run when an Openbox X Session is started.
|
||||||
|
# You may place a similar script in $HOME/.config/openbox/autostart
|
||||||
|
# to run user-specific things.
|
||||||
|
#
|
||||||
|
|
||||||
|
# If you want to use GNOME config tools...
|
||||||
|
#
|
||||||
|
#if test -x /usr/lib/openbox/gnome-settings-daemon >/dev/null; then
|
||||||
|
# /usr/lib/openbox/gnome-settings-daemon &
|
||||||
|
#elif which gnome-settings-daemon >/dev/null 2>&1; then
|
||||||
|
# gnome-settings-daemon &
|
||||||
|
#fi
|
||||||
|
|
||||||
|
# If you want to use XFCE config tools...
|
||||||
|
#
|
||||||
|
#xfce-mcs-manager &
|
||||||
|
|
||||||
|
tint2 &
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#
|
||||||
|
# Set system-wide environment variables here for Openbox
|
||||||
|
# User-specific variables should be placed in $HOME/.config/openbox/environment
|
||||||
|
#
|
||||||
|
|
||||||
|
# To set your language for displaying messages and time/date formats, use the following:
|
||||||
|
#LANG=en_CA.UTF8
|
||||||
|
|
||||||
|
# To set your keyboard layout, you need to modify your X config:
|
||||||
|
# http://www.google.com/search?q=how+to+set+keyboard+layout+xorg
|
||||||
240
.linux_items/include/airootfs/etc/skel/.config/openbox/menu.xml
Normal file
240
.linux_items/include/airootfs/etc/skel/.config/openbox/menu.xml
Normal file
|
|
@ -0,0 +1,240 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<openbox_menu>
|
||||||
|
<menu id="root-menu" label="OpenBox 3">
|
||||||
|
<item label="Arch Menu"></item>
|
||||||
|
<separator/>
|
||||||
|
<item label="Hardware Diagnostics"> <action name="Execute">
|
||||||
|
<execute>urxvt -t "Hardware Diagnostics" -e hw-diags</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Hardware Information"> <action name="Execute">
|
||||||
|
<execute>hardinfo</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="File Manager"> <action name="Execute">
|
||||||
|
<execute>Thunar</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="GParted"> <action name="Execute">
|
||||||
|
<execute>gparted</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="GSmartControl"> <action name="Execute">
|
||||||
|
<execute>gsmartcontrol</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Network Diagnostics"> <action name="Execute">
|
||||||
|
<execute>urxvt -title "Network Diagnostics" -hold -e hw-diags-network</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Web Browser"> <action name="Execute">
|
||||||
|
<execute>firefox</execute>
|
||||||
|
</action> </item>
|
||||||
|
<separator/>
|
||||||
|
<menu id="all-items-menu" label="All Programs">
|
||||||
|
<menu id="1" label="Development">
|
||||||
|
<item label="IDLE (Python IDE)"> <action name="Execute">
|
||||||
|
<execute>idle</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Python"> <action name="Execute">
|
||||||
|
<execute>urxvt -e python</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Python (v2.7)"> <action name="Execute">
|
||||||
|
<execute>urxvt -e python2.7</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Tclsh8.6"> <action name="Execute">
|
||||||
|
<execute>urxvt -e tclsh8.6</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<menu id="2" label="Editors">
|
||||||
|
<item label="hexedit"> <action name="Execute">
|
||||||
|
<execute>urxvt -e hexedit</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Nano"> <action name="Execute">
|
||||||
|
<execute>urxvt -e nano</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Vi"> <action name="Execute">
|
||||||
|
<execute>urxvt -e vi</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Vim"> <action name="Execute">
|
||||||
|
<execute>urxvt -e vim</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<menu id="7" label="Multimedia">
|
||||||
|
<item label="ALSA mixer"> <action name="Execute">
|
||||||
|
<execute>urxvt -e alsamixer</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="mpv Media Player"> <action name="Execute">
|
||||||
|
<execute>mpv</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="PulseAudio Volume Control"> <action name="Execute">
|
||||||
|
<execute>pavucontrol</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Qt V4L2 test Utility"> <action name="Execute">
|
||||||
|
<execute>qv4l2</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<menu id="5" label="Network">
|
||||||
|
<item label="Avahi SSH Server Browser"> <action name="Execute">
|
||||||
|
<execute>bssh</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Avahi VNC Server Browser"> <action name="Execute">
|
||||||
|
<execute>bvnc</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="ELinks"> <action name="Execute">
|
||||||
|
<execute>urxvt -e elinks</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="FireFox"> <action name="Execute">
|
||||||
|
<execute>firefox</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="FTP"> <action name="Execute">
|
||||||
|
<execute>urxvt -e ftp</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Irssi"> <action name="Execute">
|
||||||
|
<execute>urxvt -e irssi</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="LFTP"> <action name="Execute">
|
||||||
|
<execute>urxvt -e lftp</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Mail"> <action name="Execute">
|
||||||
|
<execute>urxvt -e mail</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Mail Reader"> <action name="Execute">
|
||||||
|
<execute>exo-open --launch MailReader</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Talk"> <action name="Execute">
|
||||||
|
<execute>urxvt -e talk</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Telnet"> <action name="Execute">
|
||||||
|
<execute>urxvt -e telnet</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="TkVNC"> <action name="Execute">
|
||||||
|
<execute>urxvt -e tkvnc</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Web Browser"> <action name="Execute">
|
||||||
|
<execute>exo-open --launch WebBrowser</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Zenmap"> <action name="Execute">
|
||||||
|
<execute>zenmap</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Zenmap (as root)"> <action name="Execute">
|
||||||
|
<execute>/usr/share/zenmap/su-to-zenmap.sh</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<menu id="4" label="Science">
|
||||||
|
<item label="bc"> <action name="Execute">
|
||||||
|
<execute>urxvt -e bc</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="dc"> <action name="Execute">
|
||||||
|
<execute>urxvt -e dc</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<menu id="19" label="Shells">
|
||||||
|
<item label="MC"> <action name="Execute">
|
||||||
|
<execute>urxvt -e mc</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Thunar File Manager"> <action name="Execute">
|
||||||
|
<execute>thunar</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="urxvt"> <action name="Execute">
|
||||||
|
<execute>urxvt</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="urxvt (client)"> <action name="Execute">
|
||||||
|
<execute>urxvtc</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="urxvt (tabbed)"> <action name="Execute">
|
||||||
|
<execute>urxvt-tabbed</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="UXTerm"> <action name="Execute">
|
||||||
|
<execute>uurxvt</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<menu id="37" label="System">
|
||||||
|
<menu id="36" label="Settings">
|
||||||
|
<menu id="21" label="GNOME">
|
||||||
|
<item label="Network Connections"> <action name="Execute">
|
||||||
|
<execute>nm-connection-editor</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<item label="File Manager"> <action name="Execute">
|
||||||
|
<execute>thunar-settings</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Preferred Applications"> <action name="Execute">
|
||||||
|
<execute>exo-preferred-applications</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Tint2 Settings"> <action name="Execute">
|
||||||
|
<execute>tint2conf</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<item label="Avahi Zeroconf Browser"> <action name="Execute">
|
||||||
|
<execute>avahi-discover</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Bulk Rename"> <action name="Execute">
|
||||||
|
<execute>/usr/lib/Thunar/ThunarBulkRename</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Conky"> <action name="Execute">
|
||||||
|
<execute>urxvt -e conky</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="GParted"> <action name="Execute">
|
||||||
|
<execute>gparted</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="GSmartControl"> <action name="Execute">
|
||||||
|
<execute>gsmartcontrol_polkit</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Htop"> <action name="Execute">
|
||||||
|
<execute>urxvt -e htop</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Openbox Menu Editor"> <action name="Execute">
|
||||||
|
<execute>obmenu</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="pstree"> <action name="Execute">
|
||||||
|
<execute>urxvt -e pstree</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="pstree"> <action name="Execute">
|
||||||
|
<execute>urxvt -e /usr/bin/pstree.x11</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Pstree"> <action name="Execute">
|
||||||
|
<execute>urxvt -e pstree.x11</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="System Profiler and Benchmark"> <action name="Execute">
|
||||||
|
<execute>hardinfo</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Tint2"> <action name="Execute">
|
||||||
|
<execute>tint2</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Top"> <action name="Execute">
|
||||||
|
<execute>urxvt -e top</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="VeraCrypt"> <action name="Execute">
|
||||||
|
<execute>veracrypt</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<menu id="38" label="Utilities">
|
||||||
|
<item label="About Xfce"> <action name="Execute">
|
||||||
|
<execute>xfce4-about</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="compton"> <action name="Execute">
|
||||||
|
<execute>compton --xrender-sync-fence</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Console Matrix (Text)"> <action name="Execute">
|
||||||
|
<execute>urxvt -e cmatrix</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="File Manager"> <action name="Execute">
|
||||||
|
<execute>exo-open --launch FileManager</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Info"> <action name="Execute">
|
||||||
|
<execute>urxvt -e info</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Terminal Emulator"> <action name="Execute">
|
||||||
|
<execute>exo-open --launch TerminalEmulator</execute>
|
||||||
|
</action> </item>
|
||||||
|
<item label="Xev"> <action name="Execute">
|
||||||
|
<execute>urxvt -e xev</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
<separator/>
|
||||||
|
<menu id="40" label="OpenBox">
|
||||||
|
<menu id="client-list-menu"/>
|
||||||
|
<item label="Reconfigure"> <action name="Reconfigure"/> </item>
|
||||||
|
</menu>
|
||||||
|
</menu>
|
||||||
|
<separator/>
|
||||||
|
<item label="Exit"> <action name="Execute">
|
||||||
|
<execute>oblogout</execute>
|
||||||
|
</action> </item>
|
||||||
|
</menu>
|
||||||
|
</openbox_menu>
|
||||||
806
.linux_items/include/airootfs/etc/skel/.config/openbox/rc.xml
Normal file
806
.linux_items/include/airootfs/etc/skel/.config/openbox/rc.xml
Normal file
|
|
@ -0,0 +1,806 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Do not edit this file, it will be overwritten on install.
|
||||||
|
Copy the file to $HOME/.config/openbox/ instead. -->
|
||||||
|
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||||
|
<resistance>
|
||||||
|
<strength>10</strength>
|
||||||
|
<screen_edge_strength>20</screen_edge_strength>
|
||||||
|
</resistance>
|
||||||
|
<focus>
|
||||||
|
<focusNew>yes</focusNew>
|
||||||
|
<!-- always try to focus new windows when they appear. other rules do
|
||||||
|
apply -->
|
||||||
|
<followMouse>no</followMouse>
|
||||||
|
<!-- move focus to a window when you move the mouse into it -->
|
||||||
|
<focusLast>yes</focusLast>
|
||||||
|
<!-- focus the last used window when changing desktops, instead of the one
|
||||||
|
under the mouse pointer. when followMouse is enabled -->
|
||||||
|
<underMouse>no</underMouse>
|
||||||
|
<!-- move focus under the mouse, even when the mouse is not moving -->
|
||||||
|
<focusDelay>200</focusDelay>
|
||||||
|
<!-- when followMouse is enabled, the mouse must be inside the window for
|
||||||
|
this many milliseconds (1000 = 1 sec) before moving focus to it -->
|
||||||
|
<raiseOnFocus>no</raiseOnFocus>
|
||||||
|
<!-- when followMouse is enabled, and a window is given focus by moving the
|
||||||
|
mouse into it, also raise the window -->
|
||||||
|
</focus>
|
||||||
|
<placement>
|
||||||
|
<policy>Smart</policy>
|
||||||
|
<!-- 'Smart' or 'UnderMouse' -->
|
||||||
|
<center>yes</center>
|
||||||
|
<!-- whether to place windows in the center of the free area found or
|
||||||
|
the top left corner -->
|
||||||
|
<monitor>Primary</monitor>
|
||||||
|
<!-- with Smart placement on a multi-monitor system, try to place new windows
|
||||||
|
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
|
||||||
|
the active window is, 'Primary' - only on the primary monitor -->
|
||||||
|
<primaryMonitor>1</primaryMonitor>
|
||||||
|
<!-- The monitor where Openbox should place popup dialogs such as the
|
||||||
|
focus cycling popup, or the desktop switch popup. It can be an index
|
||||||
|
from 1, specifying a particular monitor. Or it can be one of the
|
||||||
|
following: 'Mouse' - where the mouse is, or
|
||||||
|
'Active' - where the active window is -->
|
||||||
|
</placement>
|
||||||
|
<theme>
|
||||||
|
<!-- Enable openbox rounded edges -->
|
||||||
|
<cornerRadius menu="yes">4</cornerRadius>
|
||||||
|
<name>Triste-Orange</name>
|
||||||
|
<titleLayout>NLIMC</titleLayout>
|
||||||
|
<!--
|
||||||
|
available characters are NDSLIMC, each can occur at most once.
|
||||||
|
N: window icon
|
||||||
|
L: window label (AKA title).
|
||||||
|
I: iconify
|
||||||
|
M: maximize
|
||||||
|
C: close
|
||||||
|
S: shade (roll up/down)
|
||||||
|
D: omnipresent (on all desktops).
|
||||||
|
-->
|
||||||
|
<keepBorder>yes</keepBorder>
|
||||||
|
<animateIconify>yes</animateIconify>
|
||||||
|
<font place="ActiveWindow">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>8</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="InactiveWindow">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>8</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="MenuHeader">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>normal</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="MenuItem">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>normal</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="ActiveOnScreenDisplay">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
<font place="InactiveOnScreenDisplay">
|
||||||
|
<name>sans</name>
|
||||||
|
<size>9</size>
|
||||||
|
<!-- font size in points -->
|
||||||
|
<weight>bold</weight>
|
||||||
|
<!-- 'bold' or 'normal' -->
|
||||||
|
<slant>normal</slant>
|
||||||
|
<!-- 'italic' or 'normal' -->
|
||||||
|
</font>
|
||||||
|
</theme>
|
||||||
|
<desktops>
|
||||||
|
<!-- this stuff is only used at startup, pagers allow you to change them
|
||||||
|
during a session
|
||||||
|
|
||||||
|
these are default values to use when other ones are not already set
|
||||||
|
by other applications, or saved in your session
|
||||||
|
|
||||||
|
use obconf if you want to change these without having to log out
|
||||||
|
and back in -->
|
||||||
|
<number>1</number>
|
||||||
|
<firstdesk>1</firstdesk>
|
||||||
|
<names>
|
||||||
|
<name>Arch</name>
|
||||||
|
</names>
|
||||||
|
<popupTime>875</popupTime>
|
||||||
|
<!-- The number of milliseconds to show the popup for when switching
|
||||||
|
desktops. Set this to 0 to disable the popup. -->
|
||||||
|
</desktops>
|
||||||
|
<resize>
|
||||||
|
<drawContents>yes</drawContents>
|
||||||
|
<popupShow>Nonpixel</popupShow>
|
||||||
|
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
|
||||||
|
<popupPosition>Center</popupPosition>
|
||||||
|
<!-- 'Center', 'Top', or 'Fixed' -->
|
||||||
|
<popupFixedPosition>
|
||||||
|
<!-- these are used if popupPosition is set to 'Fixed' -->
|
||||||
|
<x>10</x>
|
||||||
|
<!-- positive number for distance from left edge, negative number for
|
||||||
|
distance from right edge, or 'Center' -->
|
||||||
|
<y>10</y>
|
||||||
|
<!-- positive number for distance from top edge, negative number for
|
||||||
|
distance from bottom edge, or 'Center' -->
|
||||||
|
</popupFixedPosition>
|
||||||
|
</resize>
|
||||||
|
<!-- You can reserve a portion of your screen where windows will not cover when
|
||||||
|
they are maximized, or when they are initially placed.
|
||||||
|
Many programs reserve space automatically, but you can use this in other
|
||||||
|
cases. -->
|
||||||
|
<margins>
|
||||||
|
<top>0</top>
|
||||||
|
<bottom>0</bottom>
|
||||||
|
<left>0</left>
|
||||||
|
<right>0</right>
|
||||||
|
</margins>
|
||||||
|
<dock>
|
||||||
|
<position>TopLeft</position>
|
||||||
|
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
|
||||||
|
<floatingX>0</floatingX>
|
||||||
|
<floatingY>0</floatingY>
|
||||||
|
<noStrut>no</noStrut>
|
||||||
|
<stacking>Above</stacking>
|
||||||
|
<!-- 'Above', 'Normal', or 'Below' -->
|
||||||
|
<direction>Vertical</direction>
|
||||||
|
<!-- 'Vertical' or 'Horizontal' -->
|
||||||
|
<autoHide>no</autoHide>
|
||||||
|
<hideDelay>300</hideDelay>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<showDelay>300</showDelay>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<moveButton>Middle</moveButton>
|
||||||
|
<!-- 'Left', 'Middle', 'Right' -->
|
||||||
|
</dock>
|
||||||
|
<keyboard>
|
||||||
|
<chainQuitKey>C-g</chainQuitKey>
|
||||||
|
<!-- Keybindings for desktop switching -->
|
||||||
|
<keybind key="C-A-Left">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>left</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Right">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>right</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Up">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>up</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Down">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>down</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Left">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>left</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Right">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>right</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Up">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>up</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="S-A-Down">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>down</to>
|
||||||
|
<wrap>no</wrap>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for windows -->
|
||||||
|
<keybind key="A-F4">
|
||||||
|
<action name="Close"/>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-Escape">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-space">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for window switching -->
|
||||||
|
<keybind key="A-Tab">
|
||||||
|
<action name="NextWindow">
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="A-S-Tab">
|
||||||
|
<action name="PreviousWindow">
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="C-A-Tab">
|
||||||
|
<action name="NextWindow">
|
||||||
|
<panels>yes</panels>
|
||||||
|
<desktop>yes</desktop>
|
||||||
|
<finalactions>
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</finalactions>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Keybindings for window switching with the arrow keys -->
|
||||||
|
<keybind key="W-S-Right">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>right</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Left">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>left</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Up">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>up</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-S-Down">
|
||||||
|
<action name="DirectionalCycleWindows">
|
||||||
|
<direction>down</direction>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<!-- Application Shortcuts (see conky) -->
|
||||||
|
<keybind key="C-Escape">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>root-menu</menu>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-d">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>urxvt -title "Hardware Diagnostics" -e hw-diags</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-f">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>thunar</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-i">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>hardinfo</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-m">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>urxvt -title "Mount all Volumes" -e mount-all-volumes gui</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-r">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>rofi -combi-modi window,drun,run -show combi -modi combi</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-s">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>urxvt -title "Hardware Diagnostics" -e hw-diags quick</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-t">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>urxvt</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-v">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>urxvt -title "Hardware Sensors" -e watch -c -n1 -t hw-sensors</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-w">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>firefox</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
<keybind key="W-x">
|
||||||
|
<action name="Execute">
|
||||||
|
<command>oblogout</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
</keyboard>
|
||||||
|
<mouse>
|
||||||
|
<dragThreshold>1</dragThreshold>
|
||||||
|
<!-- number of pixels the mouse must move before a drag begins -->
|
||||||
|
<doubleClickTime>500</doubleClickTime>
|
||||||
|
<!-- in milliseconds (1000 = 1 second) -->
|
||||||
|
<screenEdgeWarpTime>400</screenEdgeWarpTime>
|
||||||
|
<!-- Time before changing desktops when the pointer touches the edge of the
|
||||||
|
screen while moving a window, in milliseconds (1000 = 1 second).
|
||||||
|
Set this to 0 to disable warping -->
|
||||||
|
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
|
||||||
|
<!-- Set this to TRUE to move the mouse pointer across the desktop when
|
||||||
|
switching due to hitting the edge of the screen -->
|
||||||
|
<context name="Frame">
|
||||||
|
<mousebind button="A-Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Left" action="Click">
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Left" action="Drag">
|
||||||
|
<action name="Move"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Right" action="Drag">
|
||||||
|
<action name="Resize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Middle" action="Press">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-S-Up" action="Click">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-S-Down" action="Click">
|
||||||
|
<action name="SendToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Titlebar">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Move"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="DoubleClick">
|
||||||
|
<action name="ToggleMaximize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="if">
|
||||||
|
<shaded>no</shaded>
|
||||||
|
<then>
|
||||||
|
<action name="Shade"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
<action name="Lower"/>
|
||||||
|
</then>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="if">
|
||||||
|
<shaded>yes</shaded>
|
||||||
|
<then>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</then>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Lower"/>
|
||||||
|
<action name="FocusToBottom"/>
|
||||||
|
<action name="Unfocus"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Top">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>top</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Left">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>left</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Right">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>right</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Bottom">
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize">
|
||||||
|
<edge>bottom</edge>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="TRCorner BRCorner TLCorner BLCorner">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Drag">
|
||||||
|
<action name="Resize"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Client">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Icon">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="AllDesktops">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleOmnipresent"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Shade">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleShade"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Iconify">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="Iconify"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Maximize">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="ToggleMaximize"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Middle" action="Click">
|
||||||
|
<action name="ToggleMaximize">
|
||||||
|
<direction>vertical</direction>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Click">
|
||||||
|
<action name="ToggleMaximize">
|
||||||
|
<direction>horizontal</direction>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Close">
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
<action name="Unshade"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Click">
|
||||||
|
<action name="Close"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Desktop">
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="C-A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Left" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="Focus"/>
|
||||||
|
<action name="Raise"/>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="Root">
|
||||||
|
<!-- Menus -->
|
||||||
|
<mousebind button="Middle" action="Press">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>client-list-combined-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Right" action="Press">
|
||||||
|
<action name="ShowMenu">
|
||||||
|
<menu>root-menu</menu>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
<context name="MoveResize">
|
||||||
|
<mousebind button="Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Up" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>previous</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
<mousebind button="A-Down" action="Click">
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>next</to>
|
||||||
|
</action>
|
||||||
|
</mousebind>
|
||||||
|
</context>
|
||||||
|
</mouse>
|
||||||
|
<menu>
|
||||||
|
<!-- You can specify more than one menu file in here and they are all loaded,
|
||||||
|
just don't make menu ids clash or, well, it'll be kind of pointless -->
|
||||||
|
<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
|
||||||
|
<file>menu.xml</file>
|
||||||
|
<hideDelay>200</hideDelay>
|
||||||
|
<!-- if a press-release lasts longer than this setting (in milliseconds), the
|
||||||
|
menu is hidden again -->
|
||||||
|
<middle>no</middle>
|
||||||
|
<!-- center submenus vertically about the parent entry -->
|
||||||
|
<submenuShowDelay>100</submenuShowDelay>
|
||||||
|
<!-- time to delay before showing a submenu after hovering over the parent
|
||||||
|
entry.
|
||||||
|
if this is a negative value, then the delay is infinite and the
|
||||||
|
submenu will not be shown until it is clicked on -->
|
||||||
|
<submenuHideDelay>400</submenuHideDelay>
|
||||||
|
<!-- time to delay before hiding a submenu when selecting another
|
||||||
|
entry in parent menu
|
||||||
|
if this is a negative value, then the delay is infinite and the
|
||||||
|
submenu will not be hidden until a different submenu is opened -->
|
||||||
|
<showIcons>yes</showIcons>
|
||||||
|
<!-- controls if icons appear in the client-list-(combined-)menu -->
|
||||||
|
<manageDesktops>yes</manageDesktops>
|
||||||
|
<!-- show the manage desktops section in the client-list-(combined-)menu -->
|
||||||
|
</menu>
|
||||||
|
<applications>
|
||||||
|
<!--
|
||||||
|
# this is an example with comments through out. use these to make your
|
||||||
|
# own rules, but without the comments of course.
|
||||||
|
# you may use one or more of the name/class/role/title/type rules to specify
|
||||||
|
# windows to match
|
||||||
|
|
||||||
|
<application name="the window's _OB_APP_NAME property (see obxprop)"
|
||||||
|
class="the window's _OB_APP_CLASS property (see obxprop)"
|
||||||
|
groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
|
||||||
|
groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"
|
||||||
|
role="the window's _OB_APP_ROLE property (see obxprop)"
|
||||||
|
title="the window's _OB_APP_TITLE property (see obxprop)"
|
||||||
|
type="the window's _OB_APP_TYPE property (see obxprob)..
|
||||||
|
(if unspecified, then it is 'dialog' for child windows)">
|
||||||
|
# you may set only one of name/class/role/title/type, or you may use more
|
||||||
|
# than one together to restrict your matches.
|
||||||
|
|
||||||
|
# the name, class, role, and title use simple wildcard matching such as those
|
||||||
|
# used by a shell. you can use * to match any characters and ? to match
|
||||||
|
# any single character.
|
||||||
|
|
||||||
|
# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
|
||||||
|
# or desktop
|
||||||
|
|
||||||
|
# when multiple rules match a window, they will all be applied, in the
|
||||||
|
# order that they appear in this list
|
||||||
|
|
||||||
|
|
||||||
|
# each rule element can be left out or set to 'default' to specify to not
|
||||||
|
# change that attribute of the window
|
||||||
|
|
||||||
|
<decor>yes</decor>
|
||||||
|
# enable or disable window decorations
|
||||||
|
|
||||||
|
<shade>no</shade>
|
||||||
|
# make the window shaded when it appears, or not
|
||||||
|
|
||||||
|
<position force="no">
|
||||||
|
# the position is only used if both an x and y coordinate are provided
|
||||||
|
# (and not set to 'default')
|
||||||
|
# when force is "yes", then the window will be placed here even if it
|
||||||
|
# says you want it placed elsewhere. this is to override buggy
|
||||||
|
# applications who refuse to behave
|
||||||
|
<x>center</x>
|
||||||
|
# a number like 50, or 'center' to center on screen. use a negative number
|
||||||
|
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from
|
||||||
|
# the right edge (or bottom). use 'default' to specify using value
|
||||||
|
# provided by the application, or chosen by openbox, instead.
|
||||||
|
<y>200</y>
|
||||||
|
<monitor>1</monitor>
|
||||||
|
# specifies the monitor in a xinerama setup.
|
||||||
|
# 1 is the first head, or 'mouse' for wherever the mouse is
|
||||||
|
</position>
|
||||||
|
|
||||||
|
<size>
|
||||||
|
# the size to make the window.
|
||||||
|
<width>20</width>
|
||||||
|
# a number like 20, or 'default' to use the size given by the application.
|
||||||
|
# you can use fractions such as 1/2 or percentages such as 75% in which
|
||||||
|
# case the value is relative to the size of the monitor that the window
|
||||||
|
# appears on.
|
||||||
|
<height>30%</height>
|
||||||
|
</size>
|
||||||
|
|
||||||
|
<focus>yes</focus>
|
||||||
|
# if the window should try be given focus when it appears. if this is set
|
||||||
|
# to yes it doesn't guarantee the window will be given focus. some
|
||||||
|
# restrictions may apply, but Openbox will try to
|
||||||
|
|
||||||
|
<desktop>1</desktop>
|
||||||
|
# 1 is the first desktop, 'all' for all desktops
|
||||||
|
|
||||||
|
<layer>normal</layer>
|
||||||
|
# 'above', 'normal', or 'below'
|
||||||
|
|
||||||
|
<iconic>no</iconic>
|
||||||
|
# make the window iconified when it appears, or not
|
||||||
|
|
||||||
|
<skip_pager>no</skip_pager>
|
||||||
|
# asks to not be shown in pagers
|
||||||
|
|
||||||
|
<skip_taskbar>no</skip_taskbar>
|
||||||
|
# asks to not be shown in taskbars. window cycling actions will also
|
||||||
|
# skip past such windows
|
||||||
|
|
||||||
|
<fullscreen>yes</fullscreen>
|
||||||
|
# make the window in fullscreen mode when it appears
|
||||||
|
|
||||||
|
<maximized>true</maximized>
|
||||||
|
# 'Horizontal', 'Vertical' or boolean (yes/no)
|
||||||
|
</application>
|
||||||
|
|
||||||
|
# end of the example
|
||||||
|
-->
|
||||||
|
</applications>
|
||||||
|
</openbox_config>
|
||||||
11
.linux_items/include/airootfs/etc/skel/.config/rofi/config
Normal file
11
.linux_items/include/airootfs/etc/skel/.config/rofi/config
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
! rofi theme
|
||||||
|
rofi.color-enabled: true
|
||||||
|
! bg border separator
|
||||||
|
rofi.color-window: argb:d02d3036, #2d3036, #d64937
|
||||||
|
! bg fg bg-alt hl-bg hl-fg
|
||||||
|
rofi.color-normal: argb:d02d3036, #d8d8d8, argb:d02d3036, #2d3036, #d64937
|
||||||
|
rofi.color-active: argb:d0222222, #d64937, argb:d0222222, #d64937, #d8d8d8
|
||||||
|
rofi.color-urgent: argb:d0888888, #d8d8d8, argb:d0888888, #888888, #d64937
|
||||||
|
|
||||||
|
rofi.separator-style: solid
|
||||||
|
rofi.hide-scrollbar: true
|
||||||
250
.linux_items/include/airootfs/etc/skel/.config/tint2/tint2rc
Normal file
250
.linux_items/include/airootfs/etc/skel/.config/tint2/tint2rc
Normal file
|
|
@ -0,0 +1,250 @@
|
||||||
|
#---- Generated by tint2conf 2152 ----
|
||||||
|
# See https://gitlab.com/o9000/tint2/wikis/Configure for
|
||||||
|
# full documentation of the configuration options.
|
||||||
|
#-------------------------------------
|
||||||
|
# Gradients
|
||||||
|
#-------------------------------------
|
||||||
|
# Backgrounds
|
||||||
|
# Background 1: Active task, Active taskbar, Default task, Iconified task, Inactive desktop name, Inactive taskbar, Panel, Urgent task
|
||||||
|
rounded = 0
|
||||||
|
border_width = 0
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #2d3036 100
|
||||||
|
border_color = #2d3036 100
|
||||||
|
background_color_hover = #2d3036 100
|
||||||
|
border_color_hover = #2d3036 100
|
||||||
|
background_color_pressed = #2d3036 100
|
||||||
|
border_color_pressed = #2d3036 100
|
||||||
|
|
||||||
|
# Background 2:
|
||||||
|
rounded = 1
|
||||||
|
border_width = 0
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #d8d8d8 30
|
||||||
|
border_color = #d8d8d8 30
|
||||||
|
background_color_hover = #d8d8d8 30
|
||||||
|
border_color_hover = #d8d8d8 30
|
||||||
|
background_color_pressed = #d8d8d8 30
|
||||||
|
border_color_pressed = #d8d8d8 30
|
||||||
|
|
||||||
|
# Background 3:
|
||||||
|
rounded = 1
|
||||||
|
border_width = 0
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #000000 0
|
||||||
|
border_color = #000000 0
|
||||||
|
background_color_hover = #000000 0
|
||||||
|
border_color_hover = #000000 0
|
||||||
|
background_color_pressed = #000000 0
|
||||||
|
border_color_pressed = #000000 0
|
||||||
|
|
||||||
|
# Background 4:
|
||||||
|
rounded = 1
|
||||||
|
border_width = 1
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #888888 20
|
||||||
|
border_color = #ed2323 60
|
||||||
|
background_color_hover = #888888 20
|
||||||
|
border_color_hover = #ed2323 60
|
||||||
|
background_color_pressed = #888888 20
|
||||||
|
border_color_pressed = #ed2323 60
|
||||||
|
|
||||||
|
# Background 5:
|
||||||
|
rounded = 0
|
||||||
|
border_width = 1
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #000000 0
|
||||||
|
border_color = #000000 0
|
||||||
|
background_color_hover = #000000 0
|
||||||
|
border_color_hover = #000000 0
|
||||||
|
background_color_pressed = #000000 0
|
||||||
|
border_color_pressed = #000000 0
|
||||||
|
|
||||||
|
# Background 6:
|
||||||
|
rounded = 0
|
||||||
|
border_width = 1
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #d8d8d8 8
|
||||||
|
border_color = #d8d8d8 0
|
||||||
|
background_color_hover = #d8d8d8 8
|
||||||
|
border_color_hover = #d8d8d8 0
|
||||||
|
background_color_pressed = #d8d8d8 8
|
||||||
|
border_color_pressed = #d8d8d8 0
|
||||||
|
|
||||||
|
# Background 7: Tooltip
|
||||||
|
rounded = 3
|
||||||
|
border_width = 0
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #222222 90
|
||||||
|
border_color = #222222 90
|
||||||
|
background_color_hover = #222222 90
|
||||||
|
border_color_hover = #222222 90
|
||||||
|
background_color_pressed = #222222 90
|
||||||
|
border_color_pressed = #222222 90
|
||||||
|
|
||||||
|
# Background 8:
|
||||||
|
rounded = 1
|
||||||
|
border_width = 1
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #888888 20
|
||||||
|
border_color = #888888 20
|
||||||
|
background_color_hover = #888888 20
|
||||||
|
border_color_hover = #888888 20
|
||||||
|
background_color_pressed = #888888 20
|
||||||
|
border_color_pressed = #888888 20
|
||||||
|
|
||||||
|
# Background 9: Active desktop name, Clock
|
||||||
|
rounded = 1
|
||||||
|
border_width = 1
|
||||||
|
border_sides = TBLR
|
||||||
|
background_color = #d64937 100
|
||||||
|
border_color = #d64937 100
|
||||||
|
background_color_hover = #d64937 100
|
||||||
|
border_color_hover = #d64937 100
|
||||||
|
gradient_id_hover = 0
|
||||||
|
background_color_pressed = #d64937 100
|
||||||
|
border_color_pressed = #d64937 100
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# Panel
|
||||||
|
panel_items = TSC
|
||||||
|
panel_size = 100% 30
|
||||||
|
panel_margin = 0 0
|
||||||
|
panel_padding = 0 0 0
|
||||||
|
panel_background_id = 1
|
||||||
|
wm_menu = 1
|
||||||
|
panel_dock = 0
|
||||||
|
panel_position = bottom center horizontal
|
||||||
|
panel_layer = bottom
|
||||||
|
panel_monitor = all
|
||||||
|
primary_monitor_first = 0
|
||||||
|
panel_shrink = 0
|
||||||
|
autohide = 0
|
||||||
|
autohide_show_timeout = 0.3
|
||||||
|
autohide_hide_timeout = 1.5
|
||||||
|
autohide_height = 6
|
||||||
|
strut_policy = follow_size
|
||||||
|
panel_window_name = tint2
|
||||||
|
disable_transparency = 0
|
||||||
|
mouse_effects = 0
|
||||||
|
font_shadow = 0
|
||||||
|
mouse_hover_icon_asb = 100 0 10
|
||||||
|
mouse_pressed_icon_asb = 100 0 0
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# Taskbar
|
||||||
|
taskbar_mode = single_desktop
|
||||||
|
taskbar_hide_if_empty = 0
|
||||||
|
taskbar_padding = 2 2 0
|
||||||
|
taskbar_background_id = 1
|
||||||
|
taskbar_active_background_id = 1
|
||||||
|
taskbar_name = 1
|
||||||
|
taskbar_hide_inactive_tasks = 0
|
||||||
|
taskbar_hide_different_monitor = 0
|
||||||
|
taskbar_always_show_all_desktop_tasks = 1
|
||||||
|
taskbar_name_padding = 5 2
|
||||||
|
taskbar_name_background_id = 1
|
||||||
|
taskbar_name_active_background_id = 9
|
||||||
|
taskbar_name_font = Inconsolata 10
|
||||||
|
taskbar_name_font_color = #a9a9a9 100
|
||||||
|
taskbar_name_active_font_color = #ffffff 100
|
||||||
|
taskbar_distribute_size = 1
|
||||||
|
taskbar_sort_order = title
|
||||||
|
task_align = left
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# Task
|
||||||
|
task_text = 1
|
||||||
|
task_icon = 0
|
||||||
|
task_centered = 1
|
||||||
|
urgent_nb_of_blink = 20
|
||||||
|
task_maximum_size = 200 30
|
||||||
|
task_padding = 2 2 2
|
||||||
|
task_font = Inconsolata 10
|
||||||
|
task_tooltip = 1
|
||||||
|
task_font_color = #a8adb5 100
|
||||||
|
task_active_font_color = #ffffff 100
|
||||||
|
task_urgent_font_color = #a8adb5 100
|
||||||
|
task_iconified_font_color = #a8adb5 100
|
||||||
|
task_icon_asb = 100 0 0
|
||||||
|
task_active_icon_asb = 100 0 0
|
||||||
|
task_urgent_icon_asb = 100 0 0
|
||||||
|
task_iconified_icon_asb = 80 0 0
|
||||||
|
task_background_id = 1
|
||||||
|
task_active_background_id = 1
|
||||||
|
task_urgent_background_id = 1
|
||||||
|
task_iconified_background_id = 1
|
||||||
|
mouse_left = toggle_iconify
|
||||||
|
mouse_middle = none
|
||||||
|
mouse_right = close
|
||||||
|
mouse_scroll_up = toggle
|
||||||
|
mouse_scroll_down = iconify
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# System tray (notification area)
|
||||||
|
systray_padding = 4 2 3
|
||||||
|
systray_background_id = 0
|
||||||
|
systray_sort = right2left
|
||||||
|
systray_icon_size = 24
|
||||||
|
systray_icon_asb = 100 0 0
|
||||||
|
systray_monitor = 1
|
||||||
|
systray_name_filter =
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# Launcher
|
||||||
|
launcher_padding = 8 4 4
|
||||||
|
launcher_background_id = 0
|
||||||
|
launcher_icon_background_id = 0
|
||||||
|
launcher_icon_size = 0
|
||||||
|
launcher_icon_asb = 100 0 0
|
||||||
|
launcher_icon_theme_override = 0
|
||||||
|
startup_notifications = 0
|
||||||
|
launcher_tooltip = 1
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# Clock
|
||||||
|
#time1_format = %a, %d %B @ %H:%M
|
||||||
|
time1_format = %F %H:%M
|
||||||
|
time2_format =
|
||||||
|
time1_font = Inconsolata 10
|
||||||
|
time1_timezone =
|
||||||
|
time2_timezone =
|
||||||
|
clock_font_color = #ffffff 100
|
||||||
|
clock_padding = 4 4
|
||||||
|
clock_background_id = 9
|
||||||
|
clock_tooltip =
|
||||||
|
clock_tooltip_timezone =
|
||||||
|
clock_lclick_command =
|
||||||
|
clock_rclick_command =
|
||||||
|
clock_mclick_command =
|
||||||
|
clock_uwheel_command =
|
||||||
|
clock_dwheel_command =
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# Battery
|
||||||
|
battery_tooltip = 1
|
||||||
|
battery_low_status = 20
|
||||||
|
battery_low_cmd = notify-send "battery low"
|
||||||
|
bat1_font = Inconsolata 12
|
||||||
|
bat2_font = Inconsolata 12
|
||||||
|
battery_font_color = #b5b5b5 100
|
||||||
|
battery_padding = 2 0
|
||||||
|
battery_background_id = 0
|
||||||
|
battery_hide = 96
|
||||||
|
battery_lclick_command =
|
||||||
|
battery_rclick_command =
|
||||||
|
battery_mclick_command =
|
||||||
|
battery_uwheel_command =
|
||||||
|
battery_dwheel_command =
|
||||||
|
ac_connected_cmd =
|
||||||
|
ac_disconnected_cmd =
|
||||||
|
|
||||||
|
#-------------------------------------
|
||||||
|
# Tooltip
|
||||||
|
tooltip_show_timeout = 0
|
||||||
|
tooltip_hide_timeout = 0
|
||||||
|
tooltip_padding = 2 2
|
||||||
|
tooltip_background_id = 7
|
||||||
|
tooltip_font_color = #d8d8d8 100
|
||||||
|
tooltip_font = Inconsolata 12
|
||||||
|
|
||||||
10
.linux_items/include/airootfs/etc/skel/.conky_start
Executable file
10
.linux_items/include/airootfs/etc/skel/.conky_start
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
CONKY_RC="$HOME/.conkyrc"
|
||||||
|
if [[ -f "/run/archiso/bootmnt/arch/conky.rc" ]]; then
|
||||||
|
CONKY_RC="/run/archiso/bootmnt/arch/conky.rc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 2s && conky -c "${CONKY_RC}" -dq
|
||||||
|
sleep 5s && killall conky -c "${CONKY_RC}" -dq
|
||||||
|
|
||||||
166
.linux_items/include/airootfs/etc/skel/.conkyrc
Normal file
166
.linux_items/include/airootfs/etc/skel/.conkyrc
Normal file
|
|
@ -0,0 +1,166 @@
|
||||||
|
# For commands above TEXT check:
|
||||||
|
# http://conky.sourceforge.net/config_settings.html
|
||||||
|
#
|
||||||
|
# For commands available below TEXT check:
|
||||||
|
# http://conky.sourceforge.net/variables.html
|
||||||
|
|
||||||
|
# Bunsen Labs Conky help threads
|
||||||
|
# http://crunchbang.org/forums/viewtopic.php?pid=371424#p371424
|
||||||
|
|
||||||
|
# beta tested by: smacz
|
||||||
|
# Enjoy! :)
|
||||||
|
|
||||||
|
# pkill -xf "conky -q -c $HOME/.config/conky/BL-Default.conkyrc" &
|
||||||
|
### Begin Window Settings #####################
|
||||||
|
own_window yes
|
||||||
|
#own_window_type override
|
||||||
|
own_window_transparent no
|
||||||
|
own_window_hints undecorated,below,skip_taskbar,skip_pager,sticky
|
||||||
|
own_window_colour 000000
|
||||||
|
own_window_class Conky
|
||||||
|
#own_window_title Bunsen Labs Default Conky
|
||||||
|
own_window_title Default Conky
|
||||||
|
|
||||||
|
### ARGB can be used for real transparency
|
||||||
|
### NOTE that a composite manager is required for real transparency.
|
||||||
|
### This option will not work as desired (in most cases) in conjunction with
|
||||||
|
### own_window_type normal
|
||||||
|
own_window_argb_visual yes # Options: yes or no
|
||||||
|
|
||||||
|
### When ARGB visuals are enabled, this use this to modify the alpha value
|
||||||
|
### Use: own_window_type normal
|
||||||
|
### Use: own_window_transparent no
|
||||||
|
### Valid range is 0-255, where 0 is 0% opacity, and 255 is 100% opacity.
|
||||||
|
own_window_argb_value 224
|
||||||
|
|
||||||
|
minimum_size 180 0 ### width | height
|
||||||
|
maximum_width 180
|
||||||
|
|
||||||
|
gap_x 20 ### left | right
|
||||||
|
gap_y 45 ### up | down
|
||||||
|
|
||||||
|
alignment tr
|
||||||
|
####################### End Window Settings ###
|
||||||
|
### Font Settings #############################
|
||||||
|
# Use Xft (anti-aliased font and stuff)
|
||||||
|
use_xft yes
|
||||||
|
xftfont Inconsolata:bold:size=9
|
||||||
|
#xftfont Liberation Sans:size=9
|
||||||
|
|
||||||
|
# Alpha of Xft font. Must be a value at or between 1 and 0 ###
|
||||||
|
xftalpha 1
|
||||||
|
# Force UTF8? requires XFT ###
|
||||||
|
override_utf8_locale yes
|
||||||
|
|
||||||
|
uppercase no
|
||||||
|
######################### End Font Settings ###
|
||||||
|
### Colour Settings ###########################
|
||||||
|
draw_shades no #yes
|
||||||
|
default_shade_color 000000
|
||||||
|
|
||||||
|
draw_outline no # amplifies text if yes
|
||||||
|
default_outline_color 000000
|
||||||
|
|
||||||
|
#default_color 656667 # Waldorf original colour
|
||||||
|
#default_color 7a7a7a # Flame & Bunsen Grey
|
||||||
|
#default_color 929292 # Labs Grey
|
||||||
|
default_color C0C0C0 # Silver
|
||||||
|
color0 B0E0E6 # PowderBlue
|
||||||
|
color1 778899 # LightSlateGray
|
||||||
|
color2 D8BFD8 # Thistle
|
||||||
|
color3 9ACD32 # YellowGreen
|
||||||
|
color4 FFA07A # LightSalmon
|
||||||
|
color5 FFDEAD # NavajoWhite
|
||||||
|
color6 00BFFF # DeepSkyBlue
|
||||||
|
color7 5F9EA0 # CadetBlue
|
||||||
|
color8 BDB76B # DarkKhaki
|
||||||
|
color9 CD5C5C # IndianRed
|
||||||
|
####################### End Colour Settings ###
|
||||||
|
### Borders Section ###########################
|
||||||
|
draw_borders no
|
||||||
|
# Stippled borders?
|
||||||
|
stippled_borders 5
|
||||||
|
# border margins
|
||||||
|
border_inner_margin 5
|
||||||
|
border_outer_margin 0
|
||||||
|
# border width
|
||||||
|
border_width 2
|
||||||
|
# graph borders
|
||||||
|
draw_graph_borders yes #no
|
||||||
|
#default_graph_size 15 40
|
||||||
|
####################### End Borders Section ###
|
||||||
|
### Miscellaneous Section #####################
|
||||||
|
# Boolean value, if true, Conky will be forked to background when started.
|
||||||
|
background yes
|
||||||
|
|
||||||
|
# Adds spaces around certain objects to stop them from moving other things
|
||||||
|
# around, this only helps if you are using a mono font
|
||||||
|
# Options: right, left or none
|
||||||
|
use_spacer none
|
||||||
|
|
||||||
|
# Default and Minimum size is 256 - needs more for single commands that
|
||||||
|
# "call" a lot of text IE: bash scripts
|
||||||
|
text_buffer_size 6144
|
||||||
|
|
||||||
|
# Subtract (file system) buffers from used memory?
|
||||||
|
no_buffers yes
|
||||||
|
|
||||||
|
# change GiB to G and MiB to M
|
||||||
|
short_units yes
|
||||||
|
|
||||||
|
# Like it says, ot pads the decimals on % values
|
||||||
|
# doesn't seem to work since v1.7.1
|
||||||
|
pad_percents 2
|
||||||
|
|
||||||
|
# Imlib2 image cache size, in bytes. Default 4MiB Increase this value if you use
|
||||||
|
# $image lots. Set to 0 to disable the image cache.
|
||||||
|
imlib_cache_size 0
|
||||||
|
|
||||||
|
# Use the Xdbe extension? (eliminates flicker)
|
||||||
|
# It is highly recommended to use own window with this one
|
||||||
|
# so double buffer won't be so big.
|
||||||
|
double_buffer yes
|
||||||
|
|
||||||
|
# Maximum size of user text buffer, i.e. layout below TEXT line in config file
|
||||||
|
# (default is 16384 bytes)
|
||||||
|
# max_user_text 16384
|
||||||
|
|
||||||
|
# Desired output unit of all objects displaying a temperature. Parameters are
|
||||||
|
# either "fahrenheit" or "celsius". The default unit is degree Celsius.
|
||||||
|
# temperature_unit Fahrenheit
|
||||||
|
|
||||||
|
################# End Miscellaneous Section ###
|
||||||
|
#### ${font Monospace:bold:size=10}${alignc}${execpi 600 $HOME/.config/conky/scripts/bunsenweather.sh}
|
||||||
|
update_interval 1
|
||||||
|
|
||||||
|
TEXT
|
||||||
|
${color}${alignc}S Y S T E M I N F O
|
||||||
|
${hr}
|
||||||
|
Date:${alignr}${time %F}
|
||||||
|
Time:${alignr}${time %H:%M}
|
||||||
|
Uptime:${alignr}${uptime_short}
|
||||||
|
|
||||||
|
CPU: ${if_match ${cpu cpu0}<10} ${cpu cpu0}\
|
||||||
|
${else}${if_match ${cpu cpu0}<100} ${cpu cpu0}\
|
||||||
|
${else}${cpu cpu0}${endif}${endif}% Used${alignr}${freq_g} GHz
|
||||||
|
${cpugraph cpu0 20,180 ${color} ${color}}
|
||||||
|
RAM: ${mem} Used${alignr}${memmax}
|
||||||
|
${memgraph 20,180 ${color} ${color}}
|
||||||
|
Disk I/O:
|
||||||
|
${diskiograph 20,180 ${color} ${color}}
|
||||||
|
Down: ${downspeed}${goto 115}Up:${alignr}${upspeed}
|
||||||
|
|
||||||
|
#Network
|
||||||
|
|
||||||
|
${alignc}S H O R T C U T K E Y S
|
||||||
|
${hr}
|
||||||
|
[Super] + d${alignr}HW Diagnostics
|
||||||
|
[Super] + f${alignr}File Manager
|
||||||
|
[Super] + i${alignr}HW Information
|
||||||
|
[Super] + m${alignr}Mount Volumes
|
||||||
|
[Super] + r${alignr}Run Dialog
|
||||||
|
[Super] + s${alignr}SMART Check
|
||||||
|
[Super] + t${alignr}Terminal
|
||||||
|
[Super] + v${alignr}View Temps
|
||||||
|
[Super] + w${alignr}Web Browser
|
||||||
|
[Super] + x${alignr}Logout
|
||||||
193
.linux_items/include/airootfs/etc/skel/.dircolors
Normal file
193
.linux_items/include/airootfs/etc/skel/.dircolors
Normal file
|
|
@ -0,0 +1,193 @@
|
||||||
|
# Configuration file for dircolors, a utility to help you set the
|
||||||
|
# LS_COLORS environment variable used by GNU ls with the --color option.
|
||||||
|
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||||
|
# Copying and distribution of this file, with or without modification,
|
||||||
|
# are permitted provided the copyright notice and this notice are preserved.
|
||||||
|
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
|
||||||
|
# slackware version of dircolors) are recognized but ignored.
|
||||||
|
# Below are TERM entries, which can be a glob patterns, to match
|
||||||
|
# against the TERM environment variable to determine if it is colorizable.
|
||||||
|
TERM Eterm
|
||||||
|
TERM ansi
|
||||||
|
TERM *color*
|
||||||
|
TERM con[0-9]*x[0-9]*
|
||||||
|
TERM cons25
|
||||||
|
TERM console
|
||||||
|
TERM cygwin
|
||||||
|
TERM dtterm
|
||||||
|
TERM gnome
|
||||||
|
TERM hurd
|
||||||
|
TERM jfbterm
|
||||||
|
TERM konsole
|
||||||
|
TERM kterm
|
||||||
|
TERM linux
|
||||||
|
TERM linux-c
|
||||||
|
TERM mlterm
|
||||||
|
TERM putty
|
||||||
|
TERM rxvt*
|
||||||
|
TERM screen*
|
||||||
|
TERM st
|
||||||
|
TERM terminator
|
||||||
|
TERM tmux*
|
||||||
|
TERM vt100
|
||||||
|
TERM xterm*
|
||||||
|
# Below are the color init strings for the basic file types. A color init
|
||||||
|
# string consists of one or more of the following numeric codes:
|
||||||
|
# Attribute codes:
|
||||||
|
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||||
|
# Text color codes:
|
||||||
|
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||||
|
# Background color codes:
|
||||||
|
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||||
|
#NORMAL 00 # no color code at all
|
||||||
|
#FILE 00 # regular file: use no color at all
|
||||||
|
RESET 0 # reset to "normal" color
|
||||||
|
DIR 01;34 # directory
|
||||||
|
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
|
||||||
|
# numerical value, the color is as for the file pointed to.)
|
||||||
|
MULTIHARDLINK 00 # regular file with more than one link
|
||||||
|
FIFO 40;33 # pipe
|
||||||
|
SOCK 01;35 # socket
|
||||||
|
DOOR 01;35 # door
|
||||||
|
BLK 40;33;01 # block device driver
|
||||||
|
CHR 40;33;01 # character device driver
|
||||||
|
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
||||||
|
MISSING 00 # ... and the files they point to
|
||||||
|
SETUID 37;41 # file that is setuid (u+s)
|
||||||
|
SETGID 30;43 # file that is setgid (g+s)
|
||||||
|
CAPABILITY 30;41 # file with capability
|
||||||
|
STICKY_OTHER_WRITABLE 40;33;01 # dir that is sticky and other-writable (+t,o+w)
|
||||||
|
OTHER_WRITABLE 40;33 # dir that is other-writable (o+w) and not sticky
|
||||||
|
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
||||||
|
# This is for files with execute permission:
|
||||||
|
EXEC 01;32
|
||||||
|
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||||
|
# to colorize below. Put the extension, a space, and the color init string.
|
||||||
|
# (and any comments you want to add after a '#')
|
||||||
|
# If you use DOS-style suffixes, you may want to uncomment the following:
|
||||||
|
#.cmd 01;32 # executables (bright green)
|
||||||
|
#.exe 01;32
|
||||||
|
#.com 01;32
|
||||||
|
#.btm 01;32
|
||||||
|
#.bat 01;32
|
||||||
|
# Or if you want to colorize scripts even if they do not have the
|
||||||
|
# executable bit actually set.
|
||||||
|
#.sh 01;32
|
||||||
|
#.csh 01;32
|
||||||
|
# archives or compressed (bright red)
|
||||||
|
.tar 01;31
|
||||||
|
.tgz 01;31
|
||||||
|
.arc 01;31
|
||||||
|
.arj 01;31
|
||||||
|
.taz 01;31
|
||||||
|
.lha 01;31
|
||||||
|
.lz4 01;31
|
||||||
|
.lzh 01;31
|
||||||
|
.lzma 01;31
|
||||||
|
.tlz 01;31
|
||||||
|
.txz 01;31
|
||||||
|
.tzo 01;31
|
||||||
|
.t7z 01;31
|
||||||
|
.zip 01;31
|
||||||
|
.z 01;31
|
||||||
|
.Z 01;31
|
||||||
|
.dz 01;31
|
||||||
|
.gz 01;31
|
||||||
|
.lrz 01;31
|
||||||
|
.lz 01;31
|
||||||
|
.lzo 01;31
|
||||||
|
.xz 01;31
|
||||||
|
.zst 01;31
|
||||||
|
.tzst 01;31
|
||||||
|
.bz2 01;31
|
||||||
|
.bz 01;31
|
||||||
|
.tbz 01;31
|
||||||
|
.tbz2 01;31
|
||||||
|
.tz 01;31
|
||||||
|
.deb 01;31
|
||||||
|
.rpm 01;31
|
||||||
|
.jar 01;31
|
||||||
|
.war 01;31
|
||||||
|
.ear 01;31
|
||||||
|
.sar 01;31
|
||||||
|
.rar 01;31
|
||||||
|
.alz 01;31
|
||||||
|
.ace 01;31
|
||||||
|
.zoo 01;31
|
||||||
|
.cpio 01;31
|
||||||
|
.7z 01;31
|
||||||
|
.rz 01;31
|
||||||
|
.cab 01;31
|
||||||
|
.wim 01;31
|
||||||
|
.swm 01;31
|
||||||
|
.dwm 01;31
|
||||||
|
.esd 01;31
|
||||||
|
# image formats
|
||||||
|
.jpg 01;35
|
||||||
|
.jpeg 01;35
|
||||||
|
.mjpg 01;35
|
||||||
|
.mjpeg 01;35
|
||||||
|
.gif 01;35
|
||||||
|
.bmp 01;35
|
||||||
|
.pbm 01;35
|
||||||
|
.pgm 01;35
|
||||||
|
.ppm 01;35
|
||||||
|
.tga 01;35
|
||||||
|
.xbm 01;35
|
||||||
|
.xpm 01;35
|
||||||
|
.tif 01;35
|
||||||
|
.tiff 01;35
|
||||||
|
.png 01;35
|
||||||
|
.svg 01;35
|
||||||
|
.svgz 01;35
|
||||||
|
.mng 01;35
|
||||||
|
.pcx 01;35
|
||||||
|
.mov 01;35
|
||||||
|
.mpg 01;35
|
||||||
|
.mpeg 01;35
|
||||||
|
.m2v 01;35
|
||||||
|
.mkv 01;35
|
||||||
|
.webm 01;35
|
||||||
|
.ogm 01;35
|
||||||
|
.mp4 01;35
|
||||||
|
.m4v 01;35
|
||||||
|
.mp4v 01;35
|
||||||
|
.vob 01;35
|
||||||
|
.qt 01;35
|
||||||
|
.nuv 01;35
|
||||||
|
.wmv 01;35
|
||||||
|
.asf 01;35
|
||||||
|
.rm 01;35
|
||||||
|
.rmvb 01;35
|
||||||
|
.flc 01;35
|
||||||
|
.avi 01;35
|
||||||
|
.fli 01;35
|
||||||
|
.flv 01;35
|
||||||
|
.gl 01;35
|
||||||
|
.dl 01;35
|
||||||
|
.xcf 01;35
|
||||||
|
.xwd 01;35
|
||||||
|
.yuv 01;35
|
||||||
|
.cgm 01;35
|
||||||
|
.emf 01;35
|
||||||
|
# https://wiki.xiph.org/MIME_Types_and_File_Extensions
|
||||||
|
.ogv 01;35
|
||||||
|
.ogx 01;35
|
||||||
|
# audio formats
|
||||||
|
.aac 00;36
|
||||||
|
.au 00;36
|
||||||
|
.flac 00;36
|
||||||
|
.m4a 00;36
|
||||||
|
.mid 00;36
|
||||||
|
.midi 00;36
|
||||||
|
.mka 00;36
|
||||||
|
.mp3 00;36
|
||||||
|
.mpc 00;36
|
||||||
|
.ogg 00;36
|
||||||
|
.ra 00;36
|
||||||
|
.wav 00;36
|
||||||
|
# https://wiki.xiph.org/MIME_Types_and_File_Extensions
|
||||||
|
.oga 00;36
|
||||||
|
.opus 00;36
|
||||||
|
.spx 00;36
|
||||||
|
.xspf 00;36
|
||||||
19
.linux_items/include/airootfs/etc/skel/.gtkrc-2.0
Normal file
19
.linux_items/include/airootfs/etc/skel/.gtkrc-2.0
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# DO NOT EDIT! This file will be overwritten by LXAppearance.
|
||||||
|
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
|
||||||
|
|
||||||
|
include "/home/wktech/.gtkrc-2.0.mine"
|
||||||
|
gtk-theme-name="Arc-Dark"
|
||||||
|
gtk-icon-theme-name="Papirus-Dark"
|
||||||
|
gtk-font-name="Noto Sans 11"
|
||||||
|
gtk-cursor-theme-name="Adwaita"
|
||||||
|
gtk-cursor-theme-size=0
|
||||||
|
gtk-toolbar-style=GTK_TOOLBAR_BOTH
|
||||||
|
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||||
|
gtk-button-images=1
|
||||||
|
gtk-menu-images=1
|
||||||
|
gtk-enable-event-sounds=1
|
||||||
|
gtk-enable-input-feedback-sounds=1
|
||||||
|
gtk-xft-antialias=1
|
||||||
|
gtk-xft-hinting=1
|
||||||
|
gtk-xft-hintstyle="hintslight"
|
||||||
|
gtk-xft-rgba="rgb"
|
||||||
30
.linux_items/include/airootfs/etc/skel/.rsync_exclusions
Normal file
30
.linux_items/include/airootfs/etc/skel/.rsync_exclusions
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
$RECYCLE.BIN
|
||||||
|
$Recycle.Bin
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
.AppleDouble
|
||||||
|
.com.apple.timemachine.supported
|
||||||
|
.dbfseventsd
|
||||||
|
.DocumentRevisions-V100*
|
||||||
|
.DS_Store
|
||||||
|
.fseventsd
|
||||||
|
.PKInstallSandboxManager
|
||||||
|
.Spotlight*
|
||||||
|
.SymAV*
|
||||||
|
.symSchedScanLockxz
|
||||||
|
.TemporaryItems
|
||||||
|
.Trash*
|
||||||
|
.vol
|
||||||
|
.VolumeIcon.icns
|
||||||
|
desktop.ini
|
||||||
|
Desktop DB
|
||||||
|
Desktop DF
|
||||||
|
hiberfil.sys
|
||||||
|
lost+found
|
||||||
|
Network Trash Folder
|
||||||
|
pagefile.sys
|
||||||
|
Recycled
|
||||||
|
RECYCLER
|
||||||
|
System Volume Information
|
||||||
|
Temporary Items
|
||||||
|
Thumbs.db
|
||||||
7
.linux_items/include/airootfs/etc/skel/.tmux.conf
Normal file
7
.linux_items/include/airootfs/etc/skel/.tmux.conf
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
set -g status off
|
||||||
|
set -g pane-active-border-fg white
|
||||||
|
|
||||||
|
# Window names
|
||||||
|
set -g set-titles on
|
||||||
|
set -g set-titles-string '#W'
|
||||||
|
setw -g automatic-rename
|
||||||
16
.linux_items/include/airootfs/etc/skel/.update_conky
Executable file
16
.linux_items/include/airootfs/etc/skel/.update_conky
Executable file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
IF_LIST=($(ip l | egrep '^[0-9]+:\s+(eth|en|wl)' | sed -r 's/^[0-9]+:\s+(\w+):.*/\1/' | sort))
|
||||||
|
|
||||||
|
# Add interfaces to conkyrc
|
||||||
|
for i in "${IF_LIST[@]}"; do
|
||||||
|
if [[ "${i:0:1}" == "e" ]]; then
|
||||||
|
sed -i -r "s/#Network/Wired:\${alignr}\${addr $i}\n#Network/" ~/.conkyrc
|
||||||
|
else
|
||||||
|
sed -i -r "s/#Network/Wireless:\${alignr}\${addr $i}\n#Network/" ~/.conkyrc
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Remove '#Network' line to prevent duplicating lines if this script is re-run
|
||||||
|
sed -i -r "s/#Network//" ~/.conkyrc
|
||||||
|
|
||||||
21
.linux_items/include/airootfs/etc/skel/.update_wallpaper
Executable file
21
.linux_items/include/airootfs/etc/skel/.update_wallpaper
Executable file
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
BOOT_PATH="/run/archiso/bootmnt/arch/"
|
||||||
|
BURNED_IN="/usr/share/wallpaper/burned.in"
|
||||||
|
WALLPAPER="$HOME/.wallpaper.png"
|
||||||
|
|
||||||
|
function link_wall() {
|
||||||
|
sudo rm "$WALLPAPER"
|
||||||
|
sudo ln -s "$1" "$WALLPAPER"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check for wallpaper
|
||||||
|
## Checks BOOT_PATH and uses the BURNED_IN file if nothing is found
|
||||||
|
for f in "$BOOT_PATH"/{Arch,arch}.{jpg,png} "$BURNED_IN"; do
|
||||||
|
if [[ -f "$f" ]]; then
|
||||||
|
link_wall "$f"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
feh --bg-fill "$WALLPAPER"
|
||||||
10
.linux_items/include/airootfs/etc/skel/.urxvt_default_res
Executable file
10
.linux_items/include/airootfs/etc/skel/.urxvt_default_res
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
XWIDTH="$(xrandr 2>/dev/null | grep '*' | sed -r 's/^\s+([0-9]+)x.*/\1/')"
|
||||||
|
XHEIGHT="$(xrandr 2>/dev/null | grep '*' | sed -r 's/^\s+[0-9]+x([0-9]+).*/\1/')"
|
||||||
|
|
||||||
|
WIDTH="$(echo "${XWIDTH}*92/1024" | bc)"
|
||||||
|
HEIGHT="$(echo "${XHEIGHT}*32/768" | bc)"
|
||||||
|
|
||||||
|
sed -i -r "s/(URxvt.geometry:\s+).*/\1${WIDTH}x${HEIGHT}+24+24/" ~/.Xresources
|
||||||
|
xrdb -merge ~/.Xresources
|
||||||
64
.linux_items/include/airootfs/etc/skel/.vimrc
Normal file
64
.linux_items/include/airootfs/etc/skel/.vimrc
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
" All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
|
||||||
|
" /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
|
||||||
|
" you can find below. If you wish to change any of those settings, you should
|
||||||
|
" do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
|
||||||
|
" everytime an upgrade of the vim packages is performed. It is recommended to
|
||||||
|
" make changes after sourcing debian.vim since it alters the value of the
|
||||||
|
" 'compatible' option.
|
||||||
|
|
||||||
|
" This line should not be removed as it ensures that various options are
|
||||||
|
" properly set to work with the Vim-related packages available in Debian.
|
||||||
|
runtime! debian.vim
|
||||||
|
|
||||||
|
" Uncomment the next line to make Vim more Vi-compatible
|
||||||
|
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
|
||||||
|
" options, so any other options should be set AFTER setting 'compatible'.
|
||||||
|
"set compatible
|
||||||
|
|
||||||
|
" Vim5 and later versions support syntax highlighting. Uncommenting the next
|
||||||
|
" line enables syntax highlighting by default.
|
||||||
|
syntax on
|
||||||
|
|
||||||
|
" If using a dark background within the editing area and syntax highlighting
|
||||||
|
" turn on this option as well
|
||||||
|
set background=dark
|
||||||
|
|
||||||
|
" Uncomment the following to have Vim jump to the last position when
|
||||||
|
" reopening a file
|
||||||
|
"if has("autocmd")
|
||||||
|
" au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
|
||||||
|
"endif
|
||||||
|
|
||||||
|
" Uncomment the following to have Vim load indentation rules and plugins
|
||||||
|
" according to the detected filetype.
|
||||||
|
"if has("autocmd")
|
||||||
|
" filetype plugin indent on
|
||||||
|
"endif
|
||||||
|
|
||||||
|
" The following are commented out as they cause vim to behave a lot
|
||||||
|
" differently from regular Vi. They are highly recommended though.
|
||||||
|
"set showcmd " Show (partial) command in status line.
|
||||||
|
set showmatch " Show matching brackets.
|
||||||
|
"set ignorecase " Do case insensitive matching
|
||||||
|
"set smartcase " Do smart case matching
|
||||||
|
"set incsearch " Incremental search
|
||||||
|
"set autowrite " Automatically save before commands like :next and :make
|
||||||
|
"set hidden " Hide buffers when they are abandoned
|
||||||
|
"set mouse=a " Enable mouse usage (all modes)
|
||||||
|
|
||||||
|
" Source a global configuration file if available
|
||||||
|
if filereadable("/etc/vim/vimrc.local")
|
||||||
|
source /etc/vim/vimrc.local
|
||||||
|
endif
|
||||||
|
|
||||||
|
" 2Shirt Stuff
|
||||||
|
set autoindent " align the new line indent with the previous line
|
||||||
|
set expandtab " insert spaces when hitting TABs
|
||||||
|
set shiftround " round indent to multiple of 'shiftwidth'
|
||||||
|
set shiftwidth=4 " operation >> indents 4 columns; << unindents 4 columns
|
||||||
|
set softtabstop=4 " insert/delete 4 spaces when hitting a TAB/BACKSPACE
|
||||||
|
set tabstop=4 " an hard TAB displays as 4 columns
|
||||||
|
|
||||||
|
" Python Stuff.
|
||||||
|
au FileType python set textwidth=79 " lines longer than 79 columns will be broken
|
||||||
|
|
||||||
20
.linux_items/include/airootfs/etc/skel/.xinitrc
Executable file
20
.linux_items/include/airootfs/etc/skel/.xinitrc
Executable file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
dbus-update-activation-environment --systemd DISPLAY
|
||||||
|
xrdb -merge $HOME/.Xresources
|
||||||
|
xset s off
|
||||||
|
xset -dpms
|
||||||
|
eval $(ssh-agent)
|
||||||
|
export SSH_AUTH_SOCK
|
||||||
|
compton &
|
||||||
|
sleep 1s
|
||||||
|
conky -d
|
||||||
|
nm-applet &
|
||||||
|
cbatticon &
|
||||||
|
pasystray &
|
||||||
|
connect-to-network &
|
||||||
|
(sleep 5s && killall dunst) &
|
||||||
|
$HOME/.urxvt_default_res &
|
||||||
|
$HOME/.update_wallpaper &
|
||||||
|
$HOME/.update_conky &
|
||||||
|
exec openbox-session
|
||||||
13
.linux_items/include/airootfs/etc/skel/.zlogin
Normal file
13
.linux_items/include/airootfs/etc/skel/.zlogin
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
setterm -blank 0 -powerdown 0
|
||||||
|
if [ "$(fgconsole 2>/dev/null)" -eq "1" ]; then
|
||||||
|
if fgrep -q "i3" /proc/cmdline; then
|
||||||
|
sed -i -r 's/#(own_window_type override)/\1/' ~/.conkyrc
|
||||||
|
sed -i -r 's/openbox-session/i3/' ~/.xinitrc
|
||||||
|
fi
|
||||||
|
if ! fgrep -q "nox" /proc/cmdline; then
|
||||||
|
startx >/dev/null
|
||||||
|
else
|
||||||
|
hw-diags cli
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
11
.linux_items/include/airootfs/etc/skel/.zshrc
Normal file
11
.linux_items/include/airootfs/etc/skel/.zshrc
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
# Oh My ZSH
|
||||||
|
export ZSH=$HOME/.oh-my-zsh
|
||||||
|
ZSH_THEME="lean"
|
||||||
|
DISABLE_AUTO_UPDATE="true"
|
||||||
|
HIST_STAMPS="yyyy-mm-dd"
|
||||||
|
plugins=(archlinux git sudo systemd tmux)
|
||||||
|
source $ZSH/oh-my-zsh.sh
|
||||||
|
|
||||||
|
# Wizard Kit
|
||||||
|
. $HOME/.aliases
|
||||||
|
eval $(dircolors ~/.dircolors)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/lib/systemd/system/NetworkManager.service
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/lib/systemd/system/rngd.service
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/lib/systemd/system/sshd.service
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/lib/systemd/system/systemd-timesyncd.service
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/lib/systemd/system/ufw.service
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
# UDISKS_FILESYSTEM_SHARED
|
||||||
|
# ==1: mount filesystem to a shared directory (/media/VolumeName)
|
||||||
|
# ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName)
|
||||||
|
# See udisks(8)
|
||||||
|
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
|
||||||
336
.linux_items/include/airootfs/etc/udevil/udevil.conf
Normal file
336
.linux_items/include/airootfs/etc/udevil/udevil.conf
Normal file
|
|
@ -0,0 +1,336 @@
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# udevil configuration file /etc/udevil/udevil.conf
|
||||||
|
#
|
||||||
|
# This file controls what devices, networks, and files users may mount and
|
||||||
|
# unmount via udevil (set suid).
|
||||||
|
#
|
||||||
|
# IMPORTANT: IT IS POSSIBLE TO CREATE SERIOUS SECURITY PROBLEMS IF THIS FILE
|
||||||
|
# IS MISCONFIGURED - EDIT WITH CARE
|
||||||
|
#
|
||||||
|
# Note: For greater control for specific users, including root, copy this
|
||||||
|
# file to /etc/udevil/udevil-user-USERNAME.conf replacing USERNAME with the
|
||||||
|
# desired username (eg /etc/udevil/udevil-user-jim.conf).
|
||||||
|
#
|
||||||
|
# Format:
|
||||||
|
# OPTION = VALUE[, VALUE, ...]
|
||||||
|
#
|
||||||
|
# DO NOT USE QUOTES except literally
|
||||||
|
# Lines beginning with # are ignored
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
|
# To log all uses of udevil, set log_file to a file path:
|
||||||
|
# log_file = /var/log/udevil.log
|
||||||
|
|
||||||
|
# Approximate number of days to retain log entries (0=forever, max=60):
|
||||||
|
log_keep_days = 10
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_types determines what fstypes can be passed by a user to the u/mount
|
||||||
|
# program, what device filesystems may be un/mounted implicitly, and what
|
||||||
|
# network filesystems may be un/mounted.
|
||||||
|
# It may also include the 'file' keyword, indicating that the user is allowed
|
||||||
|
# to mount files (eg an ISO file). The $KNOWN_FILESYSTEMS variable may
|
||||||
|
# be included to include common local filesystems as well as those listed in
|
||||||
|
# /etc/filesystems and /proc/filesystems.
|
||||||
|
# allowed_types_USERNAME, if present, is used to override allowed_types for
|
||||||
|
# the specific user 'USERNAME'. For example, to allow user 'jim' to mount
|
||||||
|
# only vfat filesystems, add:
|
||||||
|
# allowed_types_jim = vfat
|
||||||
|
# Setting allowed_types = * does NOT allow all types, as this is a security
|
||||||
|
# risk, but does allow all recognized types.
|
||||||
|
# allowed_types = $KNOWN_FILESYSTEMS, file, cifs, smbfs, nfs, curlftpfs, ftpfs, sshfs, davfs, tmpfs, ramfs
|
||||||
|
allowed_types = $KNOWN_FILESYSTEMS, file, cifs, smbfs, nfs, hfsplus, tmpfs
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_users is a list of users permitted to mount and unmount with udevil.
|
||||||
|
# Wildcards (* or ?) may be used in the usernames. To allow all users,
|
||||||
|
# specify "allowed_users=*". UIDs may be included using the form UID=1000.
|
||||||
|
# For example: allowed_users = carl, UID=1000, pre*
|
||||||
|
# Also note that permission to execute udevil may be limited to users belonging
|
||||||
|
# to the group that owns /usr/bin/udevil, such as 'plugdev' or 'storage',
|
||||||
|
# depending on installation.
|
||||||
|
# allowed_users_FSTYPE, if present, is used to override allowed_users when
|
||||||
|
# mounting or unmounting a specific fstype (eg nfs, ext3, file).
|
||||||
|
# Note that when mounting a file, fstype will always be 'file' regardless of
|
||||||
|
# the internal fstype of the file.
|
||||||
|
# For example, to allow only user 'bob' to mount nfs shares, add:
|
||||||
|
# allowed_users_nfs = bob
|
||||||
|
# The root user is NOT automatically allowed to use udevil in some cases unless
|
||||||
|
# listed here (except for unmounting anything or mounting fstab devices).
|
||||||
|
allowed_users = *
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_groups is a list of groups permitted to mount and unmount with
|
||||||
|
# udevil. The user MUST belong to at least one of these groups. Wildcards
|
||||||
|
# or GIDs may NOT be used in group names, but a single * may be used to allow
|
||||||
|
# all groups.
|
||||||
|
# Also note that permission to execute udevil may be limited to users belonging
|
||||||
|
# to the group that owns /usr/bin/udevil, such as 'plugdev' or 'storage',
|
||||||
|
# depending on installation.
|
||||||
|
# allowed_groups_FSTYPE, if present, is used to override allowed_groups when
|
||||||
|
# mounting or unmounting a specific fstype (eg nfs, ext3, file). For example,
|
||||||
|
# to allow only members of the 'network' group to mount smb and nfs shares,
|
||||||
|
# use both of these lines:
|
||||||
|
# allowed_groups_smbfs = network
|
||||||
|
# allowed_groups_nfs = network
|
||||||
|
# The root user is NOT automatically allowed to use udevil in some cases unless
|
||||||
|
# listed here (except for unmounting anything or mounting fstab devices).
|
||||||
|
allowed_groups = *
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_media_dirs specifies the media directories in which user mount points
|
||||||
|
# may be located. The first directory which exists and does not contain a
|
||||||
|
# wildcard will be used as the default media directory (normally /media or
|
||||||
|
# /media/$USER).
|
||||||
|
# The $USER variable, if included, will be replaced with the username of the
|
||||||
|
# user running udevil. Wildcards may also be used in any directory EXCEPT the
|
||||||
|
# default. Wildcards will not match a /, except a /** suffix for recursion.
|
||||||
|
# allowed_media_dirs_FSTYPE, if present, is used to override allowed_media_dirs
|
||||||
|
# when mounting or unmounting a specific fstype (eg ext2, nfs). For example,
|
||||||
|
# to cause /media/network to be used as the default media directory for
|
||||||
|
# nfs and ftpfs mounts, use these two lines:
|
||||||
|
# allowed_media_dirs_nfs = /media/network, /media, /media/$USER
|
||||||
|
# allowed_media_dirs_ftpfs = /media/network, /media, /media/$USER
|
||||||
|
# NOTE: If you want only the user who mounted a device to have access to it
|
||||||
|
# and be allowed to unmount it, specify /media/$USER as the first
|
||||||
|
# allowed media directory (only /media/$USER is created on demand).
|
||||||
|
# IMPORTANT: If an allowed file is mounted to a media directory, the user may
|
||||||
|
# be permitted to unmount its associated loop device even though internal.
|
||||||
|
# INCLUDING /MNT HERE IS NOT RECOMMENDED. ALL ALLOWED MEDIA DIRECTORIES
|
||||||
|
# SHOULD BE OWNED AND WRITABLE ONLY BY ROOT.
|
||||||
|
allowed_media_dirs = /media
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_devices is the first criteria for what block devices users may mount
|
||||||
|
# or unmount. If a device is not listed in allowed_devices, it cannot be
|
||||||
|
# un/mounted (unless in fstab). However, even if a device is listed, other
|
||||||
|
# factors may prevent its use. For example, access to system internal devices
|
||||||
|
# will be denied to normal users even if they are included in allowed_devices.
|
||||||
|
# allowed_devices_FSTYPE, if present, is used to override allowed_devices when
|
||||||
|
# mounting or unmounting a specific fstype (eg ext3, ntfs). For example, to
|
||||||
|
# prevent all block devices containing an ext4 filesystem from being
|
||||||
|
# un/mounted use:
|
||||||
|
# allowed_devices_ext4 =
|
||||||
|
# Note: Wildcards may be used, but a wildcard will never match a /, except
|
||||||
|
# for "allowed_devices=*" which allows any device. The recommended setting is
|
||||||
|
# allowed_devices = /dev/*
|
||||||
|
# WARNING: ALLOWING USERS TO MOUNT DEVICES OUTSIDE OF /dev CAN CAUSE SERIOUS
|
||||||
|
# SECURITY PROBLEMS. DO NOT ALLOW DEVICES IN /dev/shm
|
||||||
|
allowed_devices = /dev/*
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_internal_devices causes udevil to treat any listed block devices as
|
||||||
|
# removable, thus allowing normal users to un/mount them (providing they are
|
||||||
|
# also listed in allowed_devices).
|
||||||
|
# allowed_internal_devices_FSTYPE, if present, is used to override
|
||||||
|
# allowed_internal_devices when mounting or unmounting a specific fstype
|
||||||
|
# (eg ext3, ntfs). For example, to allow block devices containing a vfat
|
||||||
|
# filesystem to be un/mounted even if they are system internal devices, use:
|
||||||
|
# allowed_internal_devices_vfat = /dev/sdb*
|
||||||
|
# Some removable esata drives look like internal drives to udevil. To avoid
|
||||||
|
# this problem, they can be treated as removable with this setting.
|
||||||
|
# WARNING: SETTING A SYSTEM DEVICE HERE CAN CAUSE SERIOUS SECURITY PROBLEMS.
|
||||||
|
allowed_internal_devices = /dev/*
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_internal_uuids and allowed_internal_uuids_FSTYPE work similarly to
|
||||||
|
# allowed_internal_devices, except that UUIDs are specified instead of devices.
|
||||||
|
# For example, to allow un/mounting of an internal filesystem based on UUID:
|
||||||
|
# allowed_internal_uuids = cc0c4489-8def-1e5b-a304-ab87c3cb626c0
|
||||||
|
# WARNING: SETTING A SYSTEM DEVICE HERE CAN CAUSE SERIOUS SECURITY PROBLEMS.
|
||||||
|
# allowed_internal_uuids =
|
||||||
|
|
||||||
|
|
||||||
|
# forbidden_devices is used to prevent block devices from being un/mounted
|
||||||
|
# even if other settings would allow them (except devices in fstab).
|
||||||
|
# forbidden_devices_FSTYPE, if present, is used to override
|
||||||
|
# forbidden_devices when mounting or unmounting a specific fstype
|
||||||
|
# (eg ext3, ntfs). For example, to prevent device /dev/sdd1 from being
|
||||||
|
# mounted when it contains an ntfs filesystem, use:
|
||||||
|
# forbidden_devices_ntfs = /dev/sdd1
|
||||||
|
# NOTE: device node paths are canonicalized before being tested, so forbidding
|
||||||
|
# a link to a device will have no effect.
|
||||||
|
forbidden_devices =
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_networks determines what hosts may be un/mounted by udevil users when
|
||||||
|
# using nfs, cifs, smbfs, curlftpfs, ftpfs, or sshfs. Hosts may be specified
|
||||||
|
# using a hostname (eg myserver.com) or IP address (192.168.1.100).
|
||||||
|
# Wildcards may be used in hostnames and IP addresses, but CIDR notation
|
||||||
|
# (192.168.1.0/16) is NOT supported. IP v6 is supported. For example:
|
||||||
|
# allowed_networks = 127.0.0.1, 192.168.1.*, 10.0.0.*, localmachine, *.okay.com
|
||||||
|
# Or, to prevent un/mounting of any network shares, set:
|
||||||
|
# allowed_networks =
|
||||||
|
# allowed_networks_FSTYPE, if present, is used to override allowed_networks
|
||||||
|
# when mounting or unmounting a specific network fstype (eg nfs, cifs, sshfs,
|
||||||
|
# curlftpfs). For example, to limit nfs and samba shares to only local
|
||||||
|
# networks, use these two lines:
|
||||||
|
# allowed_networks_nfs = 192.168.1.*, 10.0.0.*
|
||||||
|
# allowed_networks_cifs = 192.168.1.*, 10.0.0.*
|
||||||
|
allowed_networks = *
|
||||||
|
|
||||||
|
|
||||||
|
# forbidden_networks and forbidden_networks_FSTYPE are used to specify networks
|
||||||
|
# that are never allowed, even if other settings allow them (except fstab).
|
||||||
|
# NO REVERSE LOOKUP IS PERFORMED, so including bad.com will only have an effect
|
||||||
|
# if the user uses that hostname. IP lookup is always performed, so forbidding
|
||||||
|
# an IP address will also forbid all corresponding hostnames.
|
||||||
|
forbidden_networks =
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_files is used to determine what files in what directories may be
|
||||||
|
# un/mounted. A user must also have read permission on a file to mount it.
|
||||||
|
# Note: Wildcards may be used, but a wildcard will never match a /, except
|
||||||
|
# for "allowed_files=*" which allows any file, and a /** suffix, which matches
|
||||||
|
# all files recursively.
|
||||||
|
# For example, to allow only files in the /share directory to be mounted, use:
|
||||||
|
# allowed_files = /share/*
|
||||||
|
# To allow all files in the /share directory AND all subdirectories use:
|
||||||
|
# allowed_files = /share/**
|
||||||
|
# NOTE: Specifying allowed_files_FSTYPE will NOT work because the fstype of
|
||||||
|
# files is always 'file'.
|
||||||
|
allowed_files = *
|
||||||
|
|
||||||
|
|
||||||
|
# forbidden_files is used to specify files that are never allowed, even if
|
||||||
|
# other settings allow them (except fstab). Specify a full path.
|
||||||
|
# Note: Wildcards may be used, but a wildcard will never match a /, except
|
||||||
|
# for "forbidden_files = *", or a /** suffix, which matches all recursively.
|
||||||
|
# NOTE: file paths are canonicalized before being tested, so forbidding
|
||||||
|
# a link to a file will have no effect.
|
||||||
|
forbidden_files =
|
||||||
|
|
||||||
|
|
||||||
|
# default_options specifies what options are always included when performing
|
||||||
|
# a mount, in addition to any options the user may specify.
|
||||||
|
# Note: When a device is present in /etc/fstab, and the user does not specify
|
||||||
|
# a mount point, the device is mounted with normal user permissions using
|
||||||
|
# the fstab entry, without these options.
|
||||||
|
# default_options_FSTYPE, if present, is used to override default_options
|
||||||
|
# when mounting a specific fstype (eg ext2, nfs).
|
||||||
|
# The variables $USER, $UID, and $GID are changed to the user's username, UID,
|
||||||
|
# and GID.
|
||||||
|
# FOR GOOD SECURITY, default_options SHOULD ALWAYS INCLUDE: nosuid,noexec,nodev
|
||||||
|
# WARNING: OPTIONS PRESENT OR MISSING CAN CAUSE SERIOUS SECURITY PROBLEMS.
|
||||||
|
default_options = nosuid, noexec, nodev, noatime
|
||||||
|
default_options_file = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, ro
|
||||||
|
# mount iso9660 with 'ro' to prevent mount read-only warning
|
||||||
|
default_options_iso9660 = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, ro, utf8
|
||||||
|
default_options_udf = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID
|
||||||
|
default_options_vfat = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID, utf8
|
||||||
|
default_options_exfat = nosuid, noexec, nodev, noatime, umask=0077, uid=$UID, gid=$GID, iocharset=utf8, namecase=0, nonempty
|
||||||
|
default_options_hfsplus = nosuid, noexec, nodev, ro, uid=$UID, gid=$GID
|
||||||
|
default_options_msdos = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID
|
||||||
|
default_options_umsdos = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID
|
||||||
|
default_options_ntfs = nosuid, noexec, nodev, noatime, fmask=0133, uid=$UID, gid=$GID, utf8
|
||||||
|
default_options_cifs = nosuid, noexec, nodev, uid=$UID, gid=$GID
|
||||||
|
default_options_smbfs = nosuid, noexec, nodev, uid=$UID, gid=$GID
|
||||||
|
default_options_sshfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, nonempty, allow_other
|
||||||
|
default_options_curlftpfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, nonempty, allow_other
|
||||||
|
default_options_ftpfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID
|
||||||
|
default_options_davfs = nosuid, noexec, nodev, uid=$UID, gid=$GID
|
||||||
|
default_options_tmpfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID
|
||||||
|
default_options_ramfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID
|
||||||
|
|
||||||
|
|
||||||
|
# allowed_options determines all options that a user may specify when mounting.
|
||||||
|
# All the options used in default_options above must be included here too, or
|
||||||
|
# they will be rejected. If the user attempts to use an option not included
|
||||||
|
# here, an error will result. Wildcards may be used.
|
||||||
|
# allowed_options_FSTYPE, if present, is used to override allowed_options
|
||||||
|
# when mounting a specific fstype (eg ext2, nfs).
|
||||||
|
# The variables $USER, $UID, and $GID are changed to the user's username, UID,
|
||||||
|
# and GID.
|
||||||
|
# If you want to forbid remounts, remove 'remount' from here.
|
||||||
|
# WARNING: OPTIONS HERE CAN CAUSE SERIOUS SECURITY PROBLEMS - CHOOSE CAREFULLY
|
||||||
|
allowed_options = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID, ro, rw, sync, flush, iocharset=*, utf8, remount
|
||||||
|
allowed_options_nfs = nosuid, noexec, nodev, noatime, ro, rw, sync, remount, port=*, rsize=*, wsize=*, hard, proto=*, timeo=*, retrans=*
|
||||||
|
allowed_options_cifs = nosuid, noexec, nodev, ro, rw, remount, port=*, user=*, username=*, pass=*, password=*, guest, domain=*, uid=$UID, gid=$GID, credentials=*
|
||||||
|
allowed_options_smbfs = nosuid, noexec, nodev, ro, rw, remount, port=*, user=*, username=*, pass=*, password=*, guest, domain=*, uid=$UID, gid=$GID, credentials=*
|
||||||
|
allowed_options_sshfs = nosuid, noexec, nodev, noatime, ro, rw, uid=$UID, gid=$GID, nonempty, allow_other, idmap=user, BatchMode=yes, port=*
|
||||||
|
allowed_options_curlftpfs = nosuid, noexec, nodev, noatime, ro, rw, uid=$UID, gid=$GID, nonempty, allow_other, user=*
|
||||||
|
allowed_options_ftpfs = nosuid, noexec, nodev, noatime, ro, rw, port=*, user=*, pass=*, root=*, uid=$UID, gid=$GID
|
||||||
|
allowed_options_exfat = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID, umask=0077, namecase=*, ro, rw, sync, flush, iocharset=*, remount, nonempty
|
||||||
|
|
||||||
|
|
||||||
|
# mount_point_mode, if present and set to a non-empty value, will cause udevil
|
||||||
|
# to set the mode (permissions) on the moint point after mounting If not
|
||||||
|
# specified or if left empty, the mode is not changed. Mode must be octal
|
||||||
|
# starting with a zero (0755).
|
||||||
|
# mount_point_mode_FSTYPE, if present, is used to override mount_point_mode
|
||||||
|
# when mounting a specific fstype (eg ext2, nfs).
|
||||||
|
# NOT SETTING A MODE CAN HAVE SECURITY IMPLICATIONS FOR SOME FSTYPES
|
||||||
|
mount_point_mode = 0755
|
||||||
|
# don't set a mode for some types:
|
||||||
|
mount_point_mode_sshfs =
|
||||||
|
mount_point_mode_curlftpfs =
|
||||||
|
mount_point_mode_ftpfs =
|
||||||
|
|
||||||
|
|
||||||
|
# Use the settings below to change the default locations of programs used by
|
||||||
|
# udevil, or (advanced topic) to redirect commands to your scripts.
|
||||||
|
# When substituting scripts, make sure they are root-owned and accept the
|
||||||
|
# options used by udevil (for example, the mount_program must accept --fake,
|
||||||
|
# -o, -v, and other options valid to mount.)
|
||||||
|
# Be sure to specify the full path and include NO OPTIONS or other arguments.
|
||||||
|
# These programs may also be specified as configure options when building
|
||||||
|
# udevil.
|
||||||
|
# THESE PROGRAMS ARE RUN AS ROOT
|
||||||
|
# mount_program = /bin/mount
|
||||||
|
# umount_program = /bin/umount
|
||||||
|
# losetup_program = /sbin/losetup
|
||||||
|
# setfacl_program = /usr/bin/setfacl
|
||||||
|
|
||||||
|
|
||||||
|
# validate_exec specifies a program or script which provides additional
|
||||||
|
# validation of a mount or unmount command, beyond the checks performed by
|
||||||
|
# udevil. The program is run as a normal user (if root runs udevil,
|
||||||
|
# validate_exec will NOT be run). The program is NOT run if the user is
|
||||||
|
# mounting a device without root priviledges (a device in fstab).
|
||||||
|
# The program is passed the username, a printable description of what is
|
||||||
|
# happening, and the entire udevil command line as the first three arguments.
|
||||||
|
# The program must return an exit status of 0 to allow the mount or unmount
|
||||||
|
# to proceed. If it returns non-zero, the user will be denied permission.
|
||||||
|
# For example, validate_exec might specify a script which notifies you
|
||||||
|
# of the command being run, or performs additional steps to authenticate the
|
||||||
|
# user.
|
||||||
|
# Specify a full path to the program, with NO options or arguments.
|
||||||
|
# validate_exec =
|
||||||
|
|
||||||
|
|
||||||
|
# validate_rootexec works similarly to validate_exec, except that the program
|
||||||
|
# is run as root. validate_rootexec will also be run if the root user runs
|
||||||
|
# udevil. If both validate_exec and validate_rootexec are specified,
|
||||||
|
# validate_rootexec will run first, followed by validate_exec.
|
||||||
|
# The program must return an exit status of 0 to allow the mount or unmount
|
||||||
|
# to proceed. If it returns non-zero, the user will be denied permission.
|
||||||
|
# Unless you are familiar with writing root scripts, it is recommended that
|
||||||
|
# rootexec settings NOT be used, as it is easy to inadvertently open exploits.
|
||||||
|
# THIS PROGRAM IS ALWAYS RUN AS ROOT, even if the user running udevil is not.
|
||||||
|
# validate_rootexec =
|
||||||
|
|
||||||
|
|
||||||
|
# success_exec is run after a successful mount, remount, or unmount. The
|
||||||
|
# program is run as a normal user (if root runs udevil, success_exec
|
||||||
|
# will NOT be run).
|
||||||
|
# The program is passed the username, a printable description of what action
|
||||||
|
# was taken, and the entire udevil command line as the first three arguments.
|
||||||
|
# The program's exit status is ignored.
|
||||||
|
# For example, success_exec might run a script which informs you of what action
|
||||||
|
# was taken, and might perform further actions.
|
||||||
|
# Specify a full path to the program, with NO options or arguments.
|
||||||
|
# success_exec =
|
||||||
|
|
||||||
|
|
||||||
|
# success_rootexec works similarly to success_exec, except that the program is
|
||||||
|
# run as root. success_rootexec will also be run if the root user runs udevil.
|
||||||
|
# If both success_exec and success_rootexec are specified, success_rootexec
|
||||||
|
# will run first, followed by success_exec.
|
||||||
|
# Unless you are familiar with writing root scripts, it is recommended that
|
||||||
|
# rootexec settings NOT be used, as it is easy to inadvertently open exploits.
|
||||||
|
# THIS PROGRAM IS ALWAYS RUN AS ROOT, even if the user running udevil is not.
|
||||||
|
# success_rootexec =
|
||||||
|
|
||||||
10
.linux_items/include/airootfs/etc/ufw/ufw.conf
Normal file
10
.linux_items/include/airootfs/etc/ufw/ufw.conf
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
# /etc/ufw/ufw.conf
|
||||||
|
#
|
||||||
|
|
||||||
|
# Set to yes to start on boot. If setting this remotely, be sure to add a rule
|
||||||
|
# to allow your remote connection before starting ufw. Eg: 'ufw allow 22/tcp'
|
||||||
|
ENABLED=yes
|
||||||
|
|
||||||
|
# Please use the 'ufw' command to set the loglevel. Eg: 'ufw logging medium'.
|
||||||
|
# See 'man ufw' for details.
|
||||||
|
LOGLEVEL=low
|
||||||
39
.linux_items/include/airootfs/etc/ufw/user.rules
Normal file
39
.linux_items/include/airootfs/etc/ufw/user.rules
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
*filter
|
||||||
|
:ufw-user-input - [0:0]
|
||||||
|
:ufw-user-output - [0:0]
|
||||||
|
:ufw-user-forward - [0:0]
|
||||||
|
:ufw-before-logging-input - [0:0]
|
||||||
|
:ufw-before-logging-output - [0:0]
|
||||||
|
:ufw-before-logging-forward - [0:0]
|
||||||
|
:ufw-user-logging-input - [0:0]
|
||||||
|
:ufw-user-logging-output - [0:0]
|
||||||
|
:ufw-user-logging-forward - [0:0]
|
||||||
|
:ufw-after-logging-input - [0:0]
|
||||||
|
:ufw-after-logging-output - [0:0]
|
||||||
|
:ufw-after-logging-forward - [0:0]
|
||||||
|
:ufw-logging-deny - [0:0]
|
||||||
|
:ufw-logging-allow - [0:0]
|
||||||
|
:ufw-user-limit - [0:0]
|
||||||
|
:ufw-user-limit-accept - [0:0]
|
||||||
|
### RULES ###
|
||||||
|
|
||||||
|
### tuple ### allow any 22 0.0.0.0/0 any 0.0.0.0/0 in
|
||||||
|
-A ufw-user-input -p tcp --dport 22 -j ACCEPT
|
||||||
|
-A ufw-user-input -p udp --dport 22 -j ACCEPT
|
||||||
|
|
||||||
|
### END RULES ###
|
||||||
|
|
||||||
|
### LOGGING ###
|
||||||
|
-A ufw-after-logging-input -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
-A ufw-after-logging-forward -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
-I ufw-logging-deny -m conntrack --ctstate INVALID -j RETURN -m limit --limit 3/min --limit-burst 10
|
||||||
|
-A ufw-logging-deny -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
-A ufw-logging-allow -j LOG --log-prefix "[UFW ALLOW] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
### END LOGGING ###
|
||||||
|
|
||||||
|
### RATE LIMITING ###
|
||||||
|
-A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT BLOCK] "
|
||||||
|
-A ufw-user-limit -j REJECT
|
||||||
|
-A ufw-user-limit-accept -j ACCEPT
|
||||||
|
### END RATE LIMITING ###
|
||||||
|
COMMIT
|
||||||
39
.linux_items/include/airootfs/etc/ufw/user6.rules
Normal file
39
.linux_items/include/airootfs/etc/ufw/user6.rules
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
*filter
|
||||||
|
:ufw6-user-input - [0:0]
|
||||||
|
:ufw6-user-output - [0:0]
|
||||||
|
:ufw6-user-forward - [0:0]
|
||||||
|
:ufw6-before-logging-input - [0:0]
|
||||||
|
:ufw6-before-logging-output - [0:0]
|
||||||
|
:ufw6-before-logging-forward - [0:0]
|
||||||
|
:ufw6-user-logging-input - [0:0]
|
||||||
|
:ufw6-user-logging-output - [0:0]
|
||||||
|
:ufw6-user-logging-forward - [0:0]
|
||||||
|
:ufw6-after-logging-input - [0:0]
|
||||||
|
:ufw6-after-logging-output - [0:0]
|
||||||
|
:ufw6-after-logging-forward - [0:0]
|
||||||
|
:ufw6-logging-deny - [0:0]
|
||||||
|
:ufw6-logging-allow - [0:0]
|
||||||
|
:ufw6-user-limit - [0:0]
|
||||||
|
:ufw6-user-limit-accept - [0:0]
|
||||||
|
### RULES ###
|
||||||
|
|
||||||
|
### tuple ### allow any 22 ::/0 any ::/0 in
|
||||||
|
-A ufw6-user-input -p tcp --dport 22 -j ACCEPT
|
||||||
|
-A ufw6-user-input -p udp --dport 22 -j ACCEPT
|
||||||
|
|
||||||
|
### END RULES ###
|
||||||
|
|
||||||
|
### LOGGING ###
|
||||||
|
-A ufw6-after-logging-input -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
-A ufw6-after-logging-forward -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
-I ufw6-logging-deny -m conntrack --ctstate INVALID -j RETURN -m limit --limit 3/min --limit-burst 10
|
||||||
|
-A ufw6-logging-deny -j LOG --log-prefix "[UFW BLOCK] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
-A ufw6-logging-allow -j LOG --log-prefix "[UFW ALLOW] " -m limit --limit 3/min --limit-burst 10
|
||||||
|
### END LOGGING ###
|
||||||
|
|
||||||
|
### RATE LIMITING ###
|
||||||
|
-A ufw6-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT BLOCK] "
|
||||||
|
-A ufw6-user-limit -j REJECT
|
||||||
|
-A ufw6-user-limit-accept -j ACCEPT
|
||||||
|
### END RATE LIMITING ###
|
||||||
|
COMMIT
|
||||||
2
.linux_items/include/airootfs/etc/vconsole.conf
Normal file
2
.linux_items/include/airootfs/etc/vconsole.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
KEYMAP=us
|
||||||
|
FONT=ter-u16n
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=Hardware Diagnostics
|
||||||
|
Comment=Hardware Diagnostics
|
||||||
|
Exec=urxvt -title "Hardware Diagnostics" -e hw-diags
|
||||||
|
Icon=utilities-system-monitor
|
||||||
|
Path=/usr/local/bin
|
||||||
|
Terminal=false
|
||||||
|
StartupNotify=false
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=Hardware Information
|
||||||
|
Comment=Hardware Information
|
||||||
|
Exec=hardinfo
|
||||||
|
Icon=hardinfo
|
||||||
|
Path=/usr/local/bin
|
||||||
|
Terminal=false
|
||||||
|
StartupNotify=false
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=NetworkTest
|
||||||
|
Comment=Diagnose network connectivity
|
||||||
|
Exec=urxvt -title "Network Diagnostics" -hold -e hw-diags-network
|
||||||
|
Icon=network-workgroup
|
||||||
|
Path=/usr/local/bin
|
||||||
|
Terminal=false
|
||||||
|
StartupNotify=false
|
||||||
6
.linux_items/include/isolinux/isolinux.cfg
Normal file
6
.linux_items/include/isolinux/isolinux.cfg
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
PATH /%INSTALL_DIR%/boot/syslinux/
|
||||||
|
DEFAULT loadconfig
|
||||||
|
|
||||||
|
LABEL loadconfig
|
||||||
|
CONFIG /%INSTALL_DIR%/boot/syslinux/wk.cfg
|
||||||
|
APPEND /%INSTALL_DIR%/
|
||||||
0
.linux_items/include/syslinux/splash.png
Normal file
0
.linux_items/include/syslinux/splash.png
Normal file
5
.linux_items/include/syslinux/syslinux.cfg
Normal file
5
.linux_items/include/syslinux/syslinux.cfg
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
DEFAULT loadconfig
|
||||||
|
|
||||||
|
LABEL loadconfig
|
||||||
|
CONFIG wk.cfg
|
||||||
|
APPEND ../../
|
||||||
11
.linux_items/include/syslinux/wk.cfg
Normal file
11
.linux_items/include/syslinux/wk.cfg
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
DEFAULT select
|
||||||
|
|
||||||
|
LABEL select
|
||||||
|
COM32 boot/syslinux/whichsys.c32
|
||||||
|
APPEND -pxe- pxe -sys- sys -iso- sys
|
||||||
|
|
||||||
|
LABEL pxe
|
||||||
|
CONFIG boot/syslinux/wk_pxe.cfg
|
||||||
|
|
||||||
|
LABEL sys
|
||||||
|
CONFIG boot/syslinux/wk_sys.cfg
|
||||||
5
.linux_items/include/syslinux/wk_hdt.cfg
Normal file
5
.linux_items/include/syslinux/wk_hdt.cfg
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
# http://hdt-project.org/
|
||||||
|
LABEL hdt
|
||||||
|
MENU LABEL Hardware Information (HDT)
|
||||||
|
COM32 boot/syslinux/hdt.c32
|
||||||
|
APPEND modules_alias=boot/syslinux/hdt/modalias.gz pciids=boot/syslinux/hdt/pciids.gz
|
||||||
43
.linux_items/include/syslinux/wk_head.cfg
Normal file
43
.linux_items/include/syslinux/wk_head.cfg
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
SERIAL 0 38400
|
||||||
|
UI boot/syslinux/vesamenu.c32
|
||||||
|
MENU TITLE _______
|
||||||
|
MENU BACKGROUND syslinux.png
|
||||||
|
|
||||||
|
MENU WIDTH 80
|
||||||
|
MENU MARGIN 10
|
||||||
|
MENU ROWS 15
|
||||||
|
MENU VSHIFT 2
|
||||||
|
MENU TABMSGROW 22
|
||||||
|
MENU CMDLINEROW 22
|
||||||
|
MENU HELPMSGROW 24
|
||||||
|
MENU HELPMSGENDROW -1
|
||||||
|
MENU TABMSG
|
||||||
|
|
||||||
|
# Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu
|
||||||
|
|
||||||
|
MENU COLOR screen 30;44 #a0000000 #a0000000 none
|
||||||
|
MENU COLOR border 30;44 #a0000000 #a0000000 none
|
||||||
|
MENU COLOR title 1;36;44 #9033ccff #a0000000 none
|
||||||
|
MENU COLOR sel 7;37;40 #e0ffffff #a0000000 std
|
||||||
|
MENU COLOR disabled 37;44 #50ffffff #a0000000 none
|
||||||
|
MENU COLOR unsel 37;44 #50ffffff #a0000000 none
|
||||||
|
MENU COLOR help 37;40 #c0ffffff #a0000000 none
|
||||||
|
MENU COLOR tabmsg 30;44 #a0000000 #a0000000 none
|
||||||
|
menu color cmdmark 1;36;44 #9033ccff #a0000000 none
|
||||||
|
menu color cmdline 37;40 #c0ffffff #a0000000 none
|
||||||
|
MENU COLOR timeout_msg 37;40 #80ffffff #a0000000 none
|
||||||
|
MENU COLOR timeout 1;37;40 #c0ffffff #a0000000 none
|
||||||
|
MENU COLOR msg07 37;40 #90ffffff #a0000000 none
|
||||||
|
MENU COLOR tabmsg 31;40 #30ffffff #a0000000 none
|
||||||
|
|
||||||
|
# Start entries
|
||||||
|
MENU SEPARATOR
|
||||||
|
|
||||||
|
# http://www.memtest.org/
|
||||||
|
LABEL memtest
|
||||||
|
MENU LABEL Memtest86+
|
||||||
|
TEXT HELP
|
||||||
|
Perform RAM diagnostics
|
||||||
|
* This utility is not recommended for testing DDR4 RAM
|
||||||
|
ENDTEXT
|
||||||
|
LINUX boot/memtest
|
||||||
8
.linux_items/include/syslinux/wk_pxe.cfg
Normal file
8
.linux_items/include/syslinux/wk_pxe.cfg
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
INCLUDE boot/syslinux/wk_head.cfg
|
||||||
|
MENU BACKGROUND pxelinux.png
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_pxe_linux.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_pxe_winpe.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_pxe_extras_entry.cfg
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_tail.cfg
|
||||||
9
.linux_items/include/syslinux/wk_pxe_extras.cfg
Normal file
9
.linux_items/include/syslinux/wk_pxe_extras.cfg
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
INCLUDE boot/syslinux/wk_head.cfg
|
||||||
|
MENU BACKGROUND pxelinux.png
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_pxe_linux.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_pxe_linux_extras.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_pxe_winpe.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_hdt.cfg
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_tail.cfg
|
||||||
7
.linux_items/include/syslinux/wk_pxe_extras_entry.cfg
Normal file
7
.linux_items/include/syslinux/wk_pxe_extras_entry.cfg
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
LABEL wk_pxe_extras
|
||||||
|
TEXT HELP
|
||||||
|
Show extra boot options
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Extras
|
||||||
|
KERNEL vesamenu.c32
|
||||||
|
APPEND boot/syslinux/wk_pxe_extras.cfg
|
||||||
10
.linux_items/include/syslinux/wk_pxe_linux.cfg
Normal file
10
.linux_items/include/syslinux/wk_pxe_linux.cfg
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
LABEL wk_http_linux
|
||||||
|
TEXT HELP
|
||||||
|
A live Linux environment
|
||||||
|
* HW diagnostics, file-based backups, data recovery, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Linux
|
||||||
|
LINUX boot/x86_64/vmlinuz
|
||||||
|
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
|
||||||
|
APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ quiet
|
||||||
|
SYSAPPEND 3
|
||||||
21
.linux_items/include/syslinux/wk_pxe_linux_extras.cfg
Normal file
21
.linux_items/include/syslinux/wk_pxe_linux_extras.cfg
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
LABEL wk_http_linux_i3
|
||||||
|
TEXT HELP
|
||||||
|
A live Linux environment (i3)
|
||||||
|
* HW diagnostics, file-based backups, data recovery, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Linux (i3)
|
||||||
|
LINUX boot/x86_64/vmlinuz
|
||||||
|
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
|
||||||
|
APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ quiet i3
|
||||||
|
SYSAPPEND 3
|
||||||
|
|
||||||
|
LABEL wk_http_linux_cli
|
||||||
|
TEXT HELP
|
||||||
|
A live Linux environment (CLI)
|
||||||
|
* HW diagnostics, file-based backups, data recovery, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Linux (CLI)
|
||||||
|
LINUX boot/x86_64/vmlinuz
|
||||||
|
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
|
||||||
|
APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ nox nomodeset
|
||||||
|
SYSAPPEND 3
|
||||||
8
.linux_items/include/syslinux/wk_pxe_winpe.cfg
Normal file
8
.linux_items/include/syslinux/wk_pxe_winpe.cfg
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
LABEL wk_http_winpe
|
||||||
|
TEXT HELP
|
||||||
|
A live Windows environment
|
||||||
|
* Create partition backups, Install Windows, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Windows PE
|
||||||
|
COM32 boot/syslinux/linux.c32
|
||||||
|
APPEND boot/wimboot gui initrdfile=winpe/x86_64/bootmgr,winpe/x86_64/BCD,winpe/x86_64/boot.sdi,winpe/x86_64/boot.wim
|
||||||
7
.linux_items/include/syslinux/wk_sys.cfg
Normal file
7
.linux_items/include/syslinux/wk_sys.cfg
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
INCLUDE boot/syslinux/wk_head.cfg
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_sys_linux.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_sys_winpe.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_sys_extras_entry.cfg
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_tail.cfg
|
||||||
8
.linux_items/include/syslinux/wk_sys_extras.cfg
Normal file
8
.linux_items/include/syslinux/wk_sys_extras.cfg
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
INCLUDE boot/syslinux/wk_head.cfg
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_sys_linux.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_sys_linux_extras.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_sys_winpe.cfg
|
||||||
|
INCLUDE boot/syslinux/wk_hdt.cfg
|
||||||
|
|
||||||
|
INCLUDE boot/syslinux/wk_tail.cfg
|
||||||
7
.linux_items/include/syslinux/wk_sys_extras_entry.cfg
Normal file
7
.linux_items/include/syslinux/wk_sys_extras_entry.cfg
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
LABEL wk_sys_extras
|
||||||
|
TEXT HELP
|
||||||
|
Show extra boot options
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Extras
|
||||||
|
KERNEL vesamenu.c32
|
||||||
|
APPEND boot/syslinux/wk_sys_extras.cfg
|
||||||
9
.linux_items/include/syslinux/wk_sys_linux.cfg
Normal file
9
.linux_items/include/syslinux/wk_sys_linux.cfg
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
LABEL wk_linux
|
||||||
|
TEXT HELP
|
||||||
|
A live Linux environment
|
||||||
|
* HW diagnostics, file-based backups, data recovery, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Linux
|
||||||
|
LINUX boot/x86_64/vmlinuz
|
||||||
|
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
|
||||||
|
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% quiet copytoram loglevel=3
|
||||||
21
.linux_items/include/syslinux/wk_sys_linux_extras.cfg
Normal file
21
.linux_items/include/syslinux/wk_sys_linux_extras.cfg
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
LABEL wk_linux_i3
|
||||||
|
TEXT HELP
|
||||||
|
A live Linux environment (i3)
|
||||||
|
* HW diagnostics, file-based backups, data recovery, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Linux (i3)
|
||||||
|
LINUX boot/x86_64/vmlinuz
|
||||||
|
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
|
||||||
|
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% quiet copytoram loglevel=3 i3
|
||||||
|
SYSAPPEND 3
|
||||||
|
|
||||||
|
LABEL wk_linux_cli
|
||||||
|
TEXT HELP
|
||||||
|
A live Linux environment (CLI)
|
||||||
|
* HW diagnostics, file-based backups, data recovery, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Linux (CLI)
|
||||||
|
LINUX boot/x86_64/vmlinuz
|
||||||
|
INITRD boot/intel_ucode.img,boot/x86_64/archiso.img
|
||||||
|
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% copytoram nox nomodeset
|
||||||
|
SYSAPPEND 3
|
||||||
8
.linux_items/include/syslinux/wk_sys_winpe.cfg
Normal file
8
.linux_items/include/syslinux/wk_sys_winpe.cfg
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
LABEL wk_winpe
|
||||||
|
TEXT HELP
|
||||||
|
A live Windows environment
|
||||||
|
* Create partition backups, Install Windows, etc
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Windows PE
|
||||||
|
COM32 boot/syslinux/linux.c32
|
||||||
|
APPEND boot/wimboot gui initrdfile=../sources/bootmgr,../sources/BCD,../sources/boot.sdi,../sources/boot.wim
|
||||||
9
.linux_items/include/syslinux/wk_tail.cfg
Normal file
9
.linux_items/include/syslinux/wk_tail.cfg
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
MENU SEPARATOR
|
||||||
|
|
||||||
|
LABEL reboot
|
||||||
|
MENU LABEL Reboot
|
||||||
|
COM32 boot/syslinux/reboot.c32
|
||||||
|
|
||||||
|
LABEL poweroff
|
||||||
|
MENU LABEL Power Off
|
||||||
|
COM32 boot/syslinux/poweroff.c32
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue