Compare commits
No commits in common. "723c5b66776db1e651c6c6b219685bc0125e2812" and "b12395621d4c0b778574086a6f9c7c4c6052d333" have entirely different histories.
723c5b6677
...
b12395621d
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1,2 +0,0 @@
|
|||||||
releases/tar/** filter=lfs diff=lfs merge=lfs -text
|
|
||||||
releases/whl/** filter=lfs diff=lfs merge=lfs -text
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -13,5 +13,3 @@ d2/book1/books
|
|||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/launch.json
|
!.vscode/launch.json
|
||||||
python/build
|
python/build
|
||||||
.*.kate-swp
|
|
||||||
!releases/whl/*.whl
|
|
||||||
|
22
Makefile
22
Makefile
@ -1,13 +1,10 @@
|
|||||||
.PHONY: python_clean_online_fxreader_vpn
|
.PHONY: python_clean_online_fxreader_vpn
|
||||||
|
|
||||||
host_deps:
|
host_deps:
|
||||||
./m.py host_deps
|
./m host_deps
|
||||||
|
|
||||||
python_lint:
|
python_lint:
|
||||||
./m.py mypy -- -f vscode 2>&1 | less
|
./m mypy -- -f vscode 2>&1 | less
|
||||||
|
|
||||||
python_tests:
|
|
||||||
./m.py tests
|
|
||||||
|
|
||||||
#python_clean_online_fxreader_vpn:
|
#python_clean_online_fxreader_vpn:
|
||||||
# rm -fr \
|
# rm -fr \
|
||||||
@ -51,12 +48,6 @@ python_put_dist:
|
|||||||
done
|
done
|
||||||
ln -sf $(INSTALL_ROOT)/env3/bin/online-fxreader-pr34-commands $(INSTALL_ROOT)/commands
|
ln -sf $(INSTALL_ROOT)/env3/bin/online-fxreader-pr34-commands $(INSTALL_ROOT)/commands
|
||||||
|
|
||||||
PYTHON_PROJECTS_NAMES ?= online.fxreader.pr34
|
|
||||||
python_whl:
|
|
||||||
for f in $(PYTHON_PROJECTS_NAMES); do \
|
|
||||||
./m.py deploy:wheel -o releases/whl -p $$f; \
|
|
||||||
done
|
|
||||||
|
|
||||||
python_put: python_put_dist python_put_env
|
python_put: python_put_dist python_put_env
|
||||||
|
|
||||||
dotfiles_put:
|
dotfiles_put:
|
||||||
@ -86,12 +77,3 @@ dotfiles_fetch:
|
|||||||
commands install -f -p ~ -s ~/.config/katerc -t dotfiles
|
commands install -f -p ~ -s ~/.config/katerc -t dotfiles
|
||||||
commands install -f -p ~ -s ~/.config/Code\ -\ OSS/User/keybindings.json -t dotfiles
|
commands install -f -p ~ -s ~/.config/Code\ -\ OSS/User/keybindings.json -t dotfiles
|
||||||
commands install -f -p ~ -s ~/.config/Code\ -\ OSS/User/settings.json -t dotfiles
|
commands install -f -p ~ -s ~/.config/Code\ -\ OSS/User/settings.json -t dotfiles
|
||||||
|
|
||||||
DOTFILES_VERSION ?= 0.1
|
|
||||||
|
|
||||||
dotfiles_deploy:
|
|
||||||
mkdir -p releases/tar
|
|
||||||
tar -cvf - \
|
|
||||||
dotfiles \
|
|
||||||
| xz --compress -9 --stdout > \
|
|
||||||
releases/tar/dotfiles-$(DOTFILES_VERSION).tar.xz
|
|
||||||
|
2
deps/com.github.aiortc.aiortc
vendored
2
deps/com.github.aiortc.aiortc
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 41fb87dc48ca2b0710e8489fc2de64f1fc82cf15
|
Subproject commit 7552bcde773823c51c82daa5d9b23ea045df9ec2
|
@ -19,8 +19,7 @@ set $term weston-terminal
|
|||||||
# on the original workspace that the command was run on.
|
# on the original workspace that the command was run on.
|
||||||
#for_window [app_id="^launcher$"] floating enable, sticky enable, resize set 30 ppt 60 ppt, border pixel 10
|
#for_window [app_id="^launcher$"] floating enable, sticky enable, resize set 30 ppt 60 ppt, border pixel 10
|
||||||
#set $menu exec $term --class=launcher -e /usr/bin/sway-launcher-desktop
|
#set $menu exec $term --class=launcher -e /usr/bin/sway-launcher-desktop
|
||||||
#set $dmenu_path /usr/bin/bemenu-run
|
set $dmenu_path /usr/bin/bemenu-run
|
||||||
set $dmenu_path rofi -modes run -show run
|
|
||||||
set $menu $dmenu_path | xargs swaymsg exec --
|
set $menu $dmenu_path | xargs swaymsg exec --
|
||||||
|
|
||||||
|
|
||||||
@ -65,12 +64,10 @@ bindgesture swipe:4:right workspace prev
|
|||||||
|
|
||||||
for_window [shell="xwayland"] title_format "[XWayland] %title"
|
for_window [shell="xwayland"] title_format "[XWayland] %title"
|
||||||
|
|
||||||
#set $lock_cmd \
|
|
||||||
# loginctl list-sessions | \
|
|
||||||
# tail '-n' +2 | head -n -2 | awk '{print $1}' | \
|
|
||||||
# xargs loginctl lock-session
|
|
||||||
set $lock_cmd \
|
set $lock_cmd \
|
||||||
zsh -c "commands loginctl --action lock-session"
|
loginctl list-sessions | \
|
||||||
|
tail '-n' +2 | head -n -2 | awk '{print $1}' | \
|
||||||
|
xargs loginctl lock-session
|
||||||
|
|
||||||
bindgesture swipe:4:up exec $lock_cmd
|
bindgesture swipe:4:up exec $lock_cmd
|
||||||
|
|
||||||
@ -79,14 +76,14 @@ bindgesture swipe:4:up exec $lock_cmd
|
|||||||
#
|
#
|
||||||
# Basics:
|
# Basics:
|
||||||
#
|
#
|
||||||
bindsym Shift+$mod+l exec $lock_cmd
|
bindsym $mod+Shift+l exec $lock_cmd
|
||||||
|
|
||||||
bindsym --locked Shift+mod1+1 \
|
bindsym Shift+mod1+1 \
|
||||||
exec ~/.local/bin/commands \
|
exec ~/.local/bin/commands \
|
||||||
desktop-services \
|
desktop-services \
|
||||||
--cpufreq-action performance
|
--cpufreq-action performance
|
||||||
|
|
||||||
bindsym --locked Shift+mod1+2 \
|
bindsym Shift+mod1+2 \
|
||||||
exec ~/.local/bin/commands \
|
exec ~/.local/bin/commands \
|
||||||
desktop-services \
|
desktop-services \
|
||||||
--cpufreq-action powersave
|
--cpufreq-action powersave
|
||||||
@ -143,11 +140,7 @@ floating_modifier $mod normal
|
|||||||
bindsym $mod+Shift+c reload
|
bindsym $mod+Shift+c reload
|
||||||
|
|
||||||
# Exit sway (logs you out of your Wayland session)
|
# Exit sway (logs you out of your Wayland session)
|
||||||
bindsym $mod+Shift+e \
|
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
|
||||||
exec swaynag -t warning \
|
|
||||||
-m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' \
|
|
||||||
-b 'Yes, exit sway' \
|
|
||||||
'swaymsg exit'
|
|
||||||
#
|
#
|
||||||
# Moving around:
|
# Moving around:
|
||||||
#
|
#
|
||||||
@ -231,8 +224,7 @@ bindsym $mod+p floating toggle
|
|||||||
## Swap focus between the tiling area and the floating area
|
## Swap focus between the tiling area and the floating area
|
||||||
#bindsym $mod+space focus mode_toggle
|
#bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
bindsym --release Print exec zsh -c "commands wl-screenshot"
|
bindsym --release Print exec bash -c "commands wl-screenshot"
|
||||||
bindsym --release $mod+s exec zsh -c "commands wl-screenshot"
|
|
||||||
|
|
||||||
# Move focus to the parent container
|
# Move focus to the parent container
|
||||||
#bindsym $mod+a focus parent
|
#bindsym $mod+a focus parent
|
||||||
@ -273,40 +265,6 @@ mode "resize" {
|
|||||||
}
|
}
|
||||||
bindsym $mod+r mode "resize"
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
set $black #000000
|
|
||||||
set $red #ff0000
|
|
||||||
set $green #00ff00
|
|
||||||
set $blue #0000ff
|
|
||||||
set $white #ffffff
|
|
||||||
set $grey #757575
|
|
||||||
set $pale_green #9df882
|
|
||||||
set $pale_green2 #6baf54
|
|
||||||
set $dark_green #1a7000
|
|
||||||
set $pale_blue #7da9f9
|
|
||||||
set $dark_blue #005ba6
|
|
||||||
set $pale_greenblue #2da078
|
|
||||||
set $pale_greenblue2 #66c473
|
|
||||||
set $yellow #fffd0d
|
|
||||||
set $dark_yellow #908f00
|
|
||||||
|
|
||||||
set $color1 #18ff00
|
|
||||||
set $color2 #000000
|
|
||||||
set $color3 #ff00ff
|
|
||||||
set $color4 #ff0000
|
|
||||||
set $color5 #00000000
|
|
||||||
set $color6 #00000000
|
|
||||||
set $color7 #00000000
|
|
||||||
|
|
||||||
set $border_focused $pale_green
|
|
||||||
set $border_unfocused $color2
|
|
||||||
set $background_focused $pale_greenblue2
|
|
||||||
set $background_unfocused $grey
|
|
||||||
set $child_border_focused $white
|
|
||||||
set $child_border_unfocused $color2
|
|
||||||
|
|
||||||
set $bright_text $white
|
|
||||||
set $dark_text $black
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Status Bar:
|
# Status Bar:
|
||||||
#
|
#
|
||||||
@ -326,34 +284,27 @@ bar {
|
|||||||
height 16
|
height 16
|
||||||
|
|
||||||
colors {
|
colors {
|
||||||
statusline $bright_text
|
statusline #565656
|
||||||
background $pale_green2
|
background #dfdfdf
|
||||||
inactive_workspace $black $white $dark_text
|
inactive_workspace #dfdfdf #dfdfdf #000000
|
||||||
active_workspace $black $white $bright_text
|
active_workspace #dfdfdf #efefef #000000
|
||||||
focused_workspace $dark_yellow $yellow $dark_text
|
focused_workspace #dfdfdf #efefef #000000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
client.focused #f3f3f3 #dfdfdf #565656 #f3f3f3 #f3f3f3
|
||||||
#client.focused #f3f3f3 #dfdfdfdd #565656 #f3f3f3 #f3f3f3
|
client.unfocused #f3f3f3 #dfdfdf #565656 #f3f3f3 #f3f3f3
|
||||||
client.focused $border_focused $background_focused $white $white $child_border_focused
|
|
||||||
client.unfocused $border_unfocused $background_unfocused $white $white $child_border_unfocused
|
|
||||||
|
|
||||||
for_window [all] border 1
|
|
||||||
|
|
||||||
#font pango:Helvetica Neue 10
|
#font pango:Helvetica Neue 10
|
||||||
font pango:Terminus 12
|
font pango:Terminus 10
|
||||||
|
|
||||||
titlebar_padding 32 1
|
titlebar_padding 1 4
|
||||||
titlebar_border_thickness 1
|
|
||||||
title_align center
|
title_align center
|
||||||
|
|
||||||
#for_window [class=".*"] title_format "<b>%title</b>"
|
#for_window [class=".*"] title_format "<b>%title</b>"
|
||||||
|
|
||||||
for_window [class="^firefox$"] floating enable
|
for_window [class="^firefox$"] floating enable
|
||||||
|
|
||||||
for_window [all] opacity set 0.95
|
|
||||||
|
|
||||||
input * {
|
input * {
|
||||||
xkb_layout "us,ru"
|
xkb_layout "us,ru"
|
||||||
xkb_options "grp:win_space_toggle"
|
xkb_options "grp:win_space_toggle"
|
||||||
@ -362,3 +313,4 @@ input type:keyboard xkb_model "pc101"
|
|||||||
|
|
||||||
include /etc/sway/config.d/*
|
include /etc/sway/config.d/*
|
||||||
include ~/.sway/config.d/*
|
include ~/.sway/config.d/*
|
||||||
|
|
||||||
|
75
m.py
75
m.py
@ -17,9 +17,6 @@ logger = logging.getLogger(__name__)
|
|||||||
class PyProject:
|
class PyProject:
|
||||||
dependencies: dict[str, list[str]]
|
dependencies: dict[str, list[str]]
|
||||||
early_features: Optional[list[str]] = None
|
early_features: Optional[list[str]] = None
|
||||||
pip_find_links: Optional[list[pathlib.Path]] = None
|
|
||||||
runtime_libdirs: Optional[list[pathlib.Path]] = None
|
|
||||||
runtime_preload: Optional[list[pathlib.Path]] = None
|
|
||||||
|
|
||||||
def pyproject_load(
|
def pyproject_load(
|
||||||
d: pathlib.Path,
|
d: pathlib.Path,
|
||||||
@ -45,7 +42,7 @@ def pyproject_load(
|
|||||||
assert isinstance(v, list)
|
assert isinstance(v, list)
|
||||||
assert isinstance(k, str)
|
assert isinstance(k, str)
|
||||||
|
|
||||||
dependencies[k] = v
|
dependencies[k] = v
|
||||||
|
|
||||||
|
|
||||||
res = PyProject(
|
res = PyProject(
|
||||||
@ -68,26 +65,6 @@ def pyproject_load(
|
|||||||
if 'early_features' in content['tool'][tool_name]:
|
if 'early_features' in content['tool'][tool_name]:
|
||||||
res.early_features = content['tool'][tool_name]['early_features']
|
res.early_features = content['tool'][tool_name]['early_features']
|
||||||
|
|
||||||
if 'pip_find_links' in content['tool'][tool_name]:
|
|
||||||
res.pip_find_links = [
|
|
||||||
d.parent / pathlib.Path(o)
|
|
||||||
for o in content['tool'][tool_name]['pip_find_links']
|
|
||||||
]
|
|
||||||
|
|
||||||
if 'runtime_libdirs' in content['tool'][tool_name]:
|
|
||||||
res.runtime_libdirs = [
|
|
||||||
d.parent / pathlib.Path(o)
|
|
||||||
# pathlib.Path(o)
|
|
||||||
for o in content['tool'][tool_name]['runtime_libdirs']
|
|
||||||
]
|
|
||||||
|
|
||||||
if 'runtime_preload' in content['tool'][tool_name]:
|
|
||||||
res.runtime_preload = [
|
|
||||||
d.parent / pathlib.Path(o)
|
|
||||||
# pathlib.Path(o)
|
|
||||||
for o in content['tool'][tool_name]['runtime_preload']
|
|
||||||
]
|
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
@ -115,21 +92,8 @@ def env_bootstrap(
|
|||||||
bootstrap_settings: BootstrapSettings,
|
bootstrap_settings: BootstrapSettings,
|
||||||
pyproject: PyProject,
|
pyproject: PyProject,
|
||||||
) -> None:
|
) -> None:
|
||||||
pip_find_links : list[pathlib.Path] = []
|
|
||||||
|
|
||||||
if not pyproject.pip_find_links is None:
|
|
||||||
pip_find_links.extend(pyproject.pip_find_links)
|
|
||||||
|
|
||||||
pip_find_links_args = sum([
|
|
||||||
['-f', str(o),]
|
|
||||||
for o in pip_find_links
|
|
||||||
], [])
|
|
||||||
|
|
||||||
subprocess.check_call([
|
subprocess.check_call([
|
||||||
'uv', 'venv',
|
'uv', 'venv', '--seed',
|
||||||
*pip_find_links_args,
|
|
||||||
# '--seed',
|
|
||||||
'--offline',
|
|
||||||
str(bootstrap_settings.env_path)
|
str(bootstrap_settings.env_path)
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -137,36 +101,31 @@ def env_bootstrap(
|
|||||||
'uv',
|
'uv',
|
||||||
'pip',
|
'pip',
|
||||||
'install',
|
'install',
|
||||||
*pip_find_links_args,
|
|
||||||
'-p',
|
'-p',
|
||||||
bootstrap_settings.python_path,
|
bootstrap_settings.python_path,
|
||||||
'--offline',
|
'uv',
|
||||||
'uv', 'pip',
|
|
||||||
])
|
])
|
||||||
|
|
||||||
subprocess.check_call([
|
subprocess.check_call([
|
||||||
bootstrap_settings.python_path,
|
bootstrap_settings.python_path,
|
||||||
'-m',
|
'-m',
|
||||||
'uv', 'pip', 'install',
|
'uv', 'pip', 'install',
|
||||||
*pip_find_links_args,
|
|
||||||
'--offline',
|
|
||||||
'build', 'setuptools', 'meson-python', 'pybind11',
|
'build', 'setuptools', 'meson-python', 'pybind11',
|
||||||
])
|
])
|
||||||
|
|
||||||
# early_wheels = glob.glob(
|
early_wheels = glob.glob(
|
||||||
# str(
|
str(
|
||||||
# pathlib.Path(__file__).parent / 'deps' / 'dist' / 'early' / '*.whl'
|
pathlib.Path(__file__).parent / 'deps' / 'dist' / 'early' / '*.whl'
|
||||||
# )
|
)
|
||||||
# )
|
)
|
||||||
|
|
||||||
# if len(early_wheels) > 0:
|
if len(early_wheels) > 0:
|
||||||
# subprocess.check_call([
|
subprocess.check_call([
|
||||||
# bootstrap_settings.python_path,
|
bootstrap_settings.python_path,
|
||||||
# '-m',
|
'-m',
|
||||||
# 'uv', 'pip', 'install',
|
'uv', 'pip', 'install',
|
||||||
# '--offline',
|
*early_wheels,
|
||||||
# *early_wheels,
|
])
|
||||||
# ])
|
|
||||||
|
|
||||||
if pyproject.early_features:
|
if pyproject.early_features:
|
||||||
early_dependencies = sum([
|
early_dependencies = sum([
|
||||||
@ -177,15 +136,11 @@ def env_bootstrap(
|
|||||||
logger.info(dict(
|
logger.info(dict(
|
||||||
early_dependencies=early_dependencies,
|
early_dependencies=early_dependencies,
|
||||||
))
|
))
|
||||||
|
|
||||||
if len(early_dependencies) > 0:
|
if len(early_dependencies) > 0:
|
||||||
subprocess.check_call([
|
subprocess.check_call([
|
||||||
bootstrap_settings.python_path,
|
bootstrap_settings.python_path,
|
||||||
'-m',
|
'-m',
|
||||||
'uv', 'pip', 'install',
|
'uv', 'pip', 'install',
|
||||||
*pip_find_links_args,
|
|
||||||
# '-f', str(pathlib.Path(__file__).parent / 'deps' / 'dist'),
|
|
||||||
'--offline',
|
|
||||||
*early_dependencies,
|
*early_dependencies,
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@ logger = logging.getLogger(__name__)
|
|||||||
class Command(enum.StrEnum):
|
class Command(enum.StrEnum):
|
||||||
mypy = 'mypy'
|
mypy = 'mypy'
|
||||||
deploy_wheel = 'deploy:wheel'
|
deploy_wheel = 'deploy:wheel'
|
||||||
tests = 'tests'
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
class Settings(
|
class Settings(
|
||||||
@ -146,15 +145,6 @@ class CLI(_cli.CLI):
|
|||||||
self.mypy(
|
self.mypy(
|
||||||
argv=args,
|
argv=args,
|
||||||
)
|
)
|
||||||
elif options.command is Command.tests:
|
|
||||||
for k, v in self.projects.items():
|
|
||||||
subprocess.check_call([
|
|
||||||
sys.executable,
|
|
||||||
'-m',
|
|
||||||
'unittest',
|
|
||||||
'online.fxreader.pr34.tests.test_crypto',
|
|
||||||
*args,
|
|
||||||
], cwd=str(v.source_dir))
|
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@ -971,34 +971,23 @@ def resilient_vlc(stream=None):
|
|||||||
pass
|
pass
|
||||||
time.sleep(1.0)
|
time.sleep(1.0)
|
||||||
|
|
||||||
def sway_sock(
|
def sway_sock():
|
||||||
wait: bool = False,
|
import glob
|
||||||
) -> Optional[str]:
|
uid = os.stat(os.environ['HOME']).st_uid
|
||||||
while True:
|
t1 = glob.glob(
|
||||||
import glob
|
os.path.join(
|
||||||
uid = os.stat(os.environ['HOME']).st_uid
|
'/run',
|
||||||
t1 = glob.glob(
|
'user',
|
||||||
os.path.join(
|
'%d' % uid,
|
||||||
'/run',
|
'sway-ipc.%d*.sock' % uid,
|
||||||
'user',
|
|
||||||
'%d' % uid,
|
|
||||||
'sway-ipc.%d*.sock' % uid,
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
t2 = [
|
)
|
||||||
os.stat(o).st_mtime
|
t2 = [
|
||||||
for o in t1
|
os.stat(o).st_mtime
|
||||||
]
|
for o in t1
|
||||||
sorted_entries = sorted(enumerate(t1), key=lambda x: t2[x[0]])
|
]
|
||||||
if len(sorted_entries) > 0:
|
t3 = sorted(enumerate(t1), key=lambda x: t2[x[0]])[-1][0]
|
||||||
t3 = sorted_entries[-1][0]
|
return t1[t3]
|
||||||
return t1[t3]
|
|
||||||
else:
|
|
||||||
if wait:
|
|
||||||
time.sleep(0.1)
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def eternal_firefox(
|
def eternal_firefox(
|
||||||
tabs=None,
|
tabs=None,
|
||||||
@ -2095,25 +2084,6 @@ def scrap_yt_music(argv: list[str]) -> None:
|
|||||||
for o in context['workers']:
|
for o in context['workers']:
|
||||||
o.join()
|
o.join()
|
||||||
|
|
||||||
def loginctl(argv: list[str]) -> None:
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument(
|
|
||||||
'--action',
|
|
||||||
choices=[
|
|
||||||
'lock-session',
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
options = parser.parse_args(argv)
|
|
||||||
|
|
||||||
if options.action == 'lock-session':
|
|
||||||
subprocess.check_call(r'''
|
|
||||||
loginctl list-sessions -j | jq -r ".[] | select(.uid==$UID) | \
|
|
||||||
.session" | loginctl lock-session
|
|
||||||
''', shell=True, timeout=1)
|
|
||||||
else:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def desktop_services(argv):
|
def desktop_services(argv):
|
||||||
parser = optparse.OptionParser()
|
parser = optparse.OptionParser()
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
@ -2636,15 +2606,7 @@ echo 6500 > /sys/bus/platform/devices/applesmc.768/fan1_output;
|
|||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
#logger.info(dict(
|
os.environ['SWAYSOCK'] = sway_sock()
|
||||||
# environ=os.environ,
|
|
||||||
# #session=subprocess.check_output(['loginctl', 'show-session'], timeout=1,),
|
|
||||||
#))
|
|
||||||
|
|
||||||
sway_sock_res = sway_sock(True)
|
|
||||||
|
|
||||||
if sway_sock_res:
|
|
||||||
os.environ['SWAYSOCK'] = sway_sock_res
|
|
||||||
|
|
||||||
assert all([
|
assert all([
|
||||||
env_name in os.environ
|
env_name in os.environ
|
||||||
@ -2652,8 +2614,7 @@ echo 6500 > /sys/bus/platform/devices/applesmc.768/fan1_output;
|
|||||||
'GTK_IM_MODULE',
|
'GTK_IM_MODULE',
|
||||||
'XMODIFIERS',
|
'XMODIFIERS',
|
||||||
'QT_IM_MODULE',
|
'QT_IM_MODULE',
|
||||||
#'I3SOCK',
|
'I3SOCK',
|
||||||
#'XDG_SEAT',
|
|
||||||
'SWAYSOCK',
|
'SWAYSOCK',
|
||||||
'WAYLAND_DISPLAY',
|
'WAYLAND_DISPLAY',
|
||||||
]
|
]
|
||||||
@ -2723,8 +2684,7 @@ echo 6500 > /sys/bus/platform/devices/applesmc.768/fan1_output;
|
|||||||
unlock='echo unlock; pkill --signal SIGINT swaylock; swaymsg "output * dpms on";',
|
unlock='echo unlock; pkill --signal SIGINT swaylock; swaymsg "output * dpms on";',
|
||||||
unlock2='pkill --signal SIGINT swaylock;',
|
unlock2='pkill --signal SIGINT swaylock;',
|
||||||
resume='echo resume; swaymsg "output * dpms on";',
|
resume='echo resume; swaymsg "output * dpms on";',
|
||||||
before_sleep='echo before_sleep; commands loginctl lock-session;',
|
before_sleep='echo before_sleep; loginctl lock-session;',
|
||||||
#before_sleep='echo blah;',
|
|
||||||
after_resume='echo after_resume; pkill --signal SIGUSR1 swayidle;',
|
after_resume='echo after_resume; pkill --signal SIGUSR1 swayidle;',
|
||||||
)
|
)
|
||||||
self.last_force_idle = None
|
self.last_force_idle = None
|
||||||
@ -3926,7 +3886,6 @@ class Command(enum.StrEnum):
|
|||||||
socat_ssh = 'socat-ssh'
|
socat_ssh = 'socat-ssh'
|
||||||
gnome_shortcuts = 'gnome-shortcuts'
|
gnome_shortcuts = 'gnome-shortcuts'
|
||||||
sway_sock = 'sway_sock'
|
sway_sock = 'sway_sock'
|
||||||
loginctl = 'loginctl'
|
|
||||||
suspend_timer = 'suspend-timer'
|
suspend_timer = 'suspend-timer'
|
||||||
desktop_services = 'desktop-services'
|
desktop_services = 'desktop-services'
|
||||||
pm_service = 'pm-service'
|
pm_service = 'pm-service'
|
||||||
@ -4068,8 +4027,6 @@ def commands_cli(
|
|||||||
gnome_shortcuts(args)
|
gnome_shortcuts(args)
|
||||||
elif options.command is Command.sway_sock:
|
elif options.command is Command.sway_sock:
|
||||||
print(sway_sock())
|
print(sway_sock())
|
||||||
elif options.command is Command.loginctl:
|
|
||||||
loginctl(args)
|
|
||||||
elif options.command is Command.suspend_timer:
|
elif options.command is Command.suspend_timer:
|
||||||
suspend_timer(args)
|
suspend_timer(args)
|
||||||
elif options.command is Command.desktop_services:
|
elif options.command is Command.desktop_services:
|
||||||
|
@ -1,90 +0,0 @@
|
|||||||
import base64
|
|
||||||
import os
|
|
||||||
|
|
||||||
import cryptography.hazmat.primitives.kdf.scrypt
|
|
||||||
|
|
||||||
from typing import (Literal, overload, Optional,)
|
|
||||||
|
|
||||||
class PasswordUtils:
|
|
||||||
@overload
|
|
||||||
@classmethod
|
|
||||||
def secret_hash(
|
|
||||||
cls,
|
|
||||||
secret: str | bytes,
|
|
||||||
mode: Literal['base64'],
|
|
||||||
salt: Optional[bytes] = None,
|
|
||||||
) -> tuple[str, str]: ...
|
|
||||||
|
|
||||||
@overload
|
|
||||||
@classmethod
|
|
||||||
def secret_hash(
|
|
||||||
cls,
|
|
||||||
secret: str | bytes,
|
|
||||||
mode: Literal['bytes'],
|
|
||||||
salt: Optional[bytes] = None,
|
|
||||||
) -> tuple[bytes, bytes]: ...
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def secret_hash(
|
|
||||||
cls,
|
|
||||||
secret: str | bytes,
|
|
||||||
mode: Literal['bytes', 'base64'],
|
|
||||||
salt: Optional[bytes] = None,
|
|
||||||
) -> tuple[str, str] | tuple[bytes, bytes]:
|
|
||||||
if salt is None:
|
|
||||||
salt = os.urandom(16)
|
|
||||||
|
|
||||||
if isinstance(secret, str):
|
|
||||||
secret = secret.encode('utf-8')
|
|
||||||
# derive
|
|
||||||
kdf = cls._scrypt_init(salt=salt)
|
|
||||||
|
|
||||||
hashed_secret = kdf.derive(secret)
|
|
||||||
|
|
||||||
if mode == 'bytes':
|
|
||||||
return (salt, hashed_secret)
|
|
||||||
elif mode == 'base64':
|
|
||||||
res_tuple = tuple((
|
|
||||||
base64.b64encode(o).decode('utf-8')
|
|
||||||
for o in (salt, hashed_secret,)
|
|
||||||
))
|
|
||||||
return (res_tuple[0], res_tuple[1])
|
|
||||||
else:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _scrypt_init(
|
|
||||||
cls,
|
|
||||||
salt: bytes
|
|
||||||
) -> cryptography.hazmat.primitives.kdf.scrypt.Scrypt:
|
|
||||||
return cryptography.hazmat.primitives.kdf.scrypt.Scrypt(
|
|
||||||
salt=salt,
|
|
||||||
length=32,
|
|
||||||
n=2**14,
|
|
||||||
r=8,
|
|
||||||
p=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def secret_check(
|
|
||||||
cls,
|
|
||||||
secret: str | bytes,
|
|
||||||
salt: str | bytes,
|
|
||||||
hashed_secret: str | bytes,
|
|
||||||
) -> bool:
|
|
||||||
if isinstance(salt, str):
|
|
||||||
salt = base64.b64decode(salt)
|
|
||||||
|
|
||||||
if isinstance(secret, str):
|
|
||||||
secret = secret.encode('utf-8')
|
|
||||||
|
|
||||||
if isinstance(hashed_secret, str):
|
|
||||||
hashed_secret = base64.b64decode(hashed_secret)
|
|
||||||
|
|
||||||
kdf = cls._scrypt_init(salt=salt)
|
|
||||||
|
|
||||||
try:
|
|
||||||
kdf.verify(secret, hashed_secret)
|
|
||||||
return True
|
|
||||||
except cryptography.exceptions.InvalidKey:
|
|
||||||
return False
|
|
@ -1,36 +0,0 @@
|
|||||||
from online.fxreader.pr34.commands_typed import crypto
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
|
|
||||||
class TestCrypto(unittest.TestCase):
|
|
||||||
def test_password_utils(self) -> None:
|
|
||||||
salt = b'asdfasdfasdf'
|
|
||||||
|
|
||||||
secret = 'blah'
|
|
||||||
|
|
||||||
hash_res = crypto.PasswordUtils.secret_hash(
|
|
||||||
secret,
|
|
||||||
mode='bytes',
|
|
||||||
salt=salt,
|
|
||||||
)
|
|
||||||
self.assertEqual(
|
|
||||||
hash_res,
|
|
||||||
(
|
|
||||||
salt,
|
|
||||||
b'\xdak\xd15\xfa\x8e\xc8\r\xc3\xd2c\xf1m\xb0\xbf\xe6\x98\x01$!j\xc8\xc0Hh\x84\xea,\x91\x8b\x08\xce',
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
check_res = crypto.PasswordUtils.secret_check(
|
|
||||||
secret,
|
|
||||||
*hash_res,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.assertTrue(check_res)
|
|
||||||
|
|
||||||
self.assertFalse(
|
|
||||||
crypto.PasswordUtils.secret_check(
|
|
||||||
secret + 'asdfasdfsdf',
|
|
||||||
*hash_res,
|
|
||||||
)
|
|
||||||
)
|
|
@ -11,13 +11,8 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
crypto = [
|
|
||||||
'cryptography',
|
|
||||||
]
|
|
||||||
|
|
||||||
early = [
|
early = [
|
||||||
'numpy',
|
'numpy'
|
||||||
'cryptography',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.online-fxreader-pr34]
|
[tool.online-fxreader-pr34]
|
||||||
|
BIN
releases/tar/dotfiles-0.1.tar.xz
(Stored with Git LFS)
BIN
releases/tar/dotfiles-0.1.tar.xz
(Stored with Git LFS)
Binary file not shown.
BIN
releases/whl/online_fxreader_pr34-0.1.4.13-py3-none-any.whl
(Stored with Git LFS)
BIN
releases/whl/online_fxreader_pr34-0.1.4.13-py3-none-any.whl
(Stored with Git LFS)
Binary file not shown.
Loading…
Reference in New Issue
Block a user