init
This commit is contained in:
commit
90f92d4c66
20 changed files with 425 additions and 0 deletions
1
.bashrc
Normal file
1
.bashrc
Normal file
|
@ -0,0 +1 @@
|
|||
source ~/.shrc
|
33
.config/sxhkd/sxhkdrc
Normal file
33
.config/sxhkd/sxhkdrc
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Reload functions
|
||||
super + o
|
||||
bookmarks
|
||||
super + i
|
||||
web https://duckduckgo.com
|
||||
super + alt + n
|
||||
setxkbmap no
|
||||
super + alt + f
|
||||
setxkbmap fi
|
||||
super + ctrl + t
|
||||
transset 0.7
|
||||
super + alt + k
|
||||
xdotool mousemove_relative -- 0 -10
|
||||
super + alt + j
|
||||
xdotool mousemove_relative 0 10
|
||||
super + alt + h
|
||||
xdotool mousemove_relative -- -10 0
|
||||
super + alt + l
|
||||
xdotool mousemove_relative 10 0
|
||||
super + alt + y
|
||||
xdotool click 1
|
||||
super + alt + u
|
||||
xdotool click 2
|
||||
super + alt + i
|
||||
xdotool click 3
|
||||
super + alt + w
|
||||
selplumb
|
||||
super + ctrl + r
|
||||
record-start
|
||||
super + ctrl + x
|
||||
record-stop
|
||||
super + alt + g
|
||||
grab
|
27
.profile
Normal file
27
.profile
Normal file
|
@ -0,0 +1,27 @@
|
|||
# ~/.profile: executed by the command interpreter for login shells.
|
||||
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
|
||||
# exists.
|
||||
# see /usr/share/doc/bash/examples/startup-files for examples.
|
||||
# the files are located in the bash-doc package.
|
||||
|
||||
# the default umask is set in /etc/profile; for setting the umask
|
||||
# for ssh logins, install and configure the libpam-umask package.
|
||||
#umask 022
|
||||
|
||||
# if running bash
|
||||
if [ -n "$BASH_VERSION" ]; then
|
||||
# include .bashrc if it exists
|
||||
if [ -f "$HOME/.bashrc" ]; then
|
||||
. "$HOME/.bashrc"
|
||||
fi
|
||||
fi
|
||||
|
||||
# set PATH so it includes user's private bin if it exists
|
||||
if [ -d "$HOME/bin" ] ; then
|
||||
PATH="$HOME/bin:$PATH"
|
||||
fi
|
||||
|
||||
# set PATH so it includes user's private bin if it exists
|
||||
if [ -d "$HOME/.local/bin" ] ; then
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
fi
|
22
.shrc
Normal file
22
.shrc
Normal file
|
@ -0,0 +1,22 @@
|
|||
alias ls="ls --color=auto"
|
||||
alias python="python3"
|
||||
alias pip="pip3"
|
||||
alias c="rlwrap clojure"
|
||||
alias x=startx
|
||||
alias fd=fdfind
|
||||
alias ↓=vil
|
||||
alias dmenu="dmenu -nf '#BBBBBB' -nb '#222222' -sb '#A02C4E' -sf '#EEEEEE' -fn terminus"
|
||||
alias f="fzf --layout=reverse --height=40% --color=dark | xargs -r plumb"
|
||||
alias a="fd | fzf --reverse --height 40% | xargs -r acme"
|
||||
alias xterm="st"
|
||||
alias dc="docker-compose"
|
||||
alias w3m="w3m -o auto_image=FALSE"
|
||||
alias less="less -R"
|
||||
alias vi=vis
|
||||
alias ll="ls -alG"
|
||||
|
||||
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
||||
export OPENER=plumb
|
||||
export PLAN9=~/bin/`uname -m`/plan9port
|
||||
export PATH=~/bin/`uname -m`:~/.local/bin:~/bin:$PATH:$PLAN9/bin
|
||||
|
9
.xinitrc
Normal file
9
.xinitrc
Normal file
|
@ -0,0 +1,9 @@
|
|||
setxkbmap -layout no
|
||||
sxhkd &
|
||||
plumber &
|
||||
feh --bg-tile ~/img/bg.png
|
||||
while true; do
|
||||
xsetroot -name "`date`"
|
||||
sleep 60
|
||||
done &
|
||||
exec dwm
|
32
.zshrc
Normal file
32
.zshrc
Normal file
|
@ -0,0 +1,32 @@
|
|||
autoload -Uz promptinit
|
||||
promptinit
|
||||
prompt redhat
|
||||
|
||||
setopt histignorealldups sharehistory
|
||||
|
||||
HISTSIZE=5000
|
||||
SAVEHIST=5000
|
||||
HISTFILE=~/.zsh_history
|
||||
|
||||
autoload -Uz compinit
|
||||
compinit
|
||||
|
||||
zstyle ':completion:*' auto-description 'specify: %d'
|
||||
zstyle ':completion:*' completer _expand _complete _correct _approximate
|
||||
zstyle ':completion:*' format 'Completing %d'
|
||||
zstyle ':completion:*' group-name ''
|
||||
zstyle ':completion:*' menu select=2
|
||||
eval "$(dircolors -b)"
|
||||
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
|
||||
zstyle ':completion:*' list-colors ''
|
||||
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
|
||||
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
|
||||
zstyle ':completion:*' menu select=long
|
||||
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
|
||||
zstyle ':completion:*' use-compctl false
|
||||
zstyle ':completion:*' verbose true
|
||||
|
||||
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
|
||||
zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'
|
||||
|
||||
source ~/.shrc
|
14
README.md
Normal file
14
README.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
Files and suggestions to make life a bit easier.
|
||||
|
||||
# deps
|
||||
|
||||
For Debian GNU/Linux based systems:
|
||||
|
||||
apt install fzf dwm dmenu stterm python3 python3-webview tesseract-ocr tesseract-ocr-eng scrot xserver-xephyr ffmpeg xdotool podman redshift feh rlwrap w3m vis
|
||||
|
||||
Additional deps not in Debian GNU/Linux stable:
|
||||
|
||||
* [bb](https://babashka.org)
|
||||
* [p9p](https://9fans.github.io/plan9port/)
|
||||
* [nrepl-python-client](https://pypi.org/project/nrepl-python-client/)
|
||||
|
16
bin/bbrep
Executable file
16
bin/bbrep
Executable file
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env bb
|
||||
;; Based on:
|
||||
;; https://book.babashka.org/#_interacting_with_an_nrepl_server
|
||||
(ns nrepl-client
|
||||
(:require [bencode.core :as b]))
|
||||
|
||||
(defn nrepl-eval [port expr]
|
||||
(println (clojure.string/trim expr))
|
||||
(let [s (java.net.Socket. "localhost" port)
|
||||
out (.getOutputStream s)
|
||||
in (java.io.PushbackInputStream. (.getInputStream s))
|
||||
_ (b/write-bencode out {"op" "eval" "code" expr})
|
||||
bytes (get (b/read-bencode in) "value")]
|
||||
(println ";;" (String. bytes))))
|
||||
|
||||
(nrepl-eval 1667 (slurp *in*))
|
2
bin/bookmarks
Executable file
2
bin/bookmarks
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
cat ~/bookmarks* | sort | uniq | dmenu -i -l 30 -sb "#303030" -fn terminus | awk -F ' | ' '{print $1}' | xargs -r plumb
|
6
bin/grab
Executable file
6
bin/grab
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
FILE=/tmp/`dbus-uuidgen`.png
|
||||
scrot -s $FILE
|
||||
tesseract $FILE - --dpi 150 | xclip -i
|
||||
rm $FILE
|
||||
|
7
bin/journal
Executable file
7
bin/journal
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
ENTRY=$@
|
||||
if [ -n "$ENTRY" ]; then
|
||||
echo "`date -Is`\t$@" >> journal
|
||||
fi
|
||||
cat journal
|
||||
|
2
bin/nest.sh
Executable file
2
bin/nest.sh
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
startx -- /usr/bin/Xephyr :1
|
20
bin/pyrep
Executable file
20
bin/pyrep
Executable file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# Requirements: nrepl-python-client
|
||||
#
|
||||
|
||||
import sys
|
||||
import nrepl
|
||||
|
||||
code = sys.stdin.read().strip()
|
||||
print(code)
|
||||
c = nrepl.connect("nrepl://localhost:1667")
|
||||
c.write({"op": "eval", "code": code})
|
||||
response = c.read()
|
||||
try:
|
||||
print(";; " + response['value'])
|
||||
except KeyError:
|
||||
try:
|
||||
print(";; ERROR: " + response['err'])
|
||||
except KeyError:
|
||||
pass
|
2
bin/record-start
Executable file
2
bin/record-start
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
ffmpeg -video_size 1920x1080 -framerate 60 -f x11grab -i :0 out-$(date +%s).mp4
|
2
bin/record-stop
Executable file
2
bin/record-stop
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
ps aux | grep ffmpeg | grep x11 | awk '{print $2}' | xargs kill
|
9
bin/selplumb
Executable file
9
bin/selplumb
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/bin/sh
|
||||
TXT=$(xclip -o)
|
||||
CWD=$(readlink /proc/$(pgrep -P $(xdotool getactivewindow getwindowpid))/cwd)
|
||||
if [ -f "$CWD/$TXT" ]; then
|
||||
plumb "$CWD/$TXT"
|
||||
else
|
||||
plumb "$TXT"
|
||||
fi
|
||||
|
182
bin/vil
Executable file
182
bin/vil
Executable file
|
@ -0,0 +1,182 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# List System
|
||||
# Copyright (C) 2011 Øyvind Jensen
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import cmd
|
||||
import shelve
|
||||
import os
|
||||
|
||||
class CLI(cmd.Cmd):
|
||||
|
||||
|
||||
header = 'Virtual Inventory Logger'
|
||||
prompt = '> '
|
||||
storage = None
|
||||
snd = None
|
||||
filename = 'registry'
|
||||
unablemsg = 'Unable to complete operation'
|
||||
|
||||
def complete_most(self, text, line):
|
||||
col = []
|
||||
for key in self.storage.keys():
|
||||
col.append(key)
|
||||
for item in self.storage[key]:
|
||||
col.append(item)
|
||||
if text:
|
||||
return [
|
||||
key for key in col
|
||||
if key.startswith(text)
|
||||
]
|
||||
else:
|
||||
return col
|
||||
|
||||
def log(self, line):
|
||||
os.system('journal ' + line)
|
||||
|
||||
def do_place(self, op):
|
||||
'USAGE: place <name> <location>'
|
||||
thinglocation = op.split()
|
||||
thinglocation = self.strip(thinglocation)
|
||||
if len(thinglocation) == 2:
|
||||
location = thinglocation[1]
|
||||
name = thinglocation[0]
|
||||
try:
|
||||
self.storage[location]
|
||||
except KeyError:
|
||||
self.storage[location] = []
|
||||
self.storage[location].append(name)
|
||||
response = name + ' placed in ' + location
|
||||
self.log(response)
|
||||
else:
|
||||
print(self.unablemsg)
|
||||
|
||||
def complete_place(self, text, line, start_index, end_index):
|
||||
return self.complete_most(text, line)
|
||||
|
||||
def do_search(self, phrase):
|
||||
'USAGE: search <name>'
|
||||
found = False
|
||||
if len(phrase) > 0:
|
||||
for location in self.storage:
|
||||
for item in self.storage[location]:
|
||||
if phrase in item or item in phrase:
|
||||
print(item + ' is located in ' + location)
|
||||
found = True
|
||||
if not found:
|
||||
print(phrase + ' is nowhere to be found')
|
||||
print('Please get one and put it somewhere')
|
||||
else:
|
||||
print(self.unablemsg)
|
||||
|
||||
def do_remove(self, op):
|
||||
'USAGE: remove <name> <location>'
|
||||
thinglocation = op.split()
|
||||
thinglocation = self.strip(thinglocation)
|
||||
if len(thinglocation) == 2:
|
||||
location = thinglocation[1]
|
||||
name = thinglocation[0]
|
||||
try:
|
||||
self.storage[location].remove(name)
|
||||
if len(self.storage[location]) == 0:
|
||||
self.storage.pop(location)
|
||||
response = name + ' removed from ' + location
|
||||
self.log(response)
|
||||
except:
|
||||
print(name + ' not found in ' + location)
|
||||
else:
|
||||
print(self.unablemsg)
|
||||
|
||||
def complete_remove(self, text, line, start_index, end_index):
|
||||
return self.complete_most(text, line)
|
||||
|
||||
def do_move(self, op):
|
||||
'USAGE: move <name> <from location> <to location>'
|
||||
moveop = op.split()
|
||||
moveop = self.strip(moveop)
|
||||
if len(moveop) == 3:
|
||||
name = moveop[0]
|
||||
fromloc = moveop[1]
|
||||
toloc = moveop[2]
|
||||
self.do_remove(name + ' ' + fromloc)
|
||||
self.do_place(name + ' ' + toloc)
|
||||
#print(name + ' moved from ' + fromloc + ' to ' + toloc)
|
||||
else:
|
||||
print(self.unablemsg)
|
||||
|
||||
def complete_move(self, text, line, start_index, end_index):
|
||||
return self.complete_most(text, line)
|
||||
|
||||
def do_list(self, location):
|
||||
'USAGE: list <location>'
|
||||
if len(location) > 0:
|
||||
self.list_location(location)
|
||||
else:
|
||||
for onelocation in self.storage:
|
||||
self.list_location(onelocation)
|
||||
|
||||
def complete_list(self, text, line, start_index, end_index):
|
||||
return self.complete_most(text, line)
|
||||
|
||||
def do_journal(self, line):
|
||||
'USAGE: journal <journal entry>'
|
||||
os.system('journal ' + line)
|
||||
|
||||
def strip(self, tostrip):
|
||||
words = ['in', 'from', 'inside', 'into']
|
||||
for word in words:
|
||||
if word in tostrip:
|
||||
tostrip.remove(word)
|
||||
return tostrip
|
||||
|
||||
def list_location(self, location):
|
||||
print(location)
|
||||
try:
|
||||
if self.storage[location] is not None:
|
||||
for item in self.storage[location]:
|
||||
print('\t' + item)
|
||||
except KeyError:
|
||||
print('There is no place like ' + location)
|
||||
|
||||
def do_copyright(self, line):
|
||||
print("Copyright (C) 2011- Øyvind Jensen")
|
||||
|
||||
def do_credits(self, line):
|
||||
print("Author:")
|
||||
print("Øyvind Jensen")
|
||||
print("oyvind.jensen@protonmail.com")
|
||||
|
||||
def do_exit(self, line):
|
||||
print('Be well..')
|
||||
return True
|
||||
|
||||
def __init__(self):
|
||||
cmd.Cmd.__init__(self)
|
||||
self.storage = shelve.open(self.filename, writeback = True)
|
||||
|
||||
def do_EOF(self, line):
|
||||
print()
|
||||
return self.do_exit('')
|
||||
|
||||
def complete(self, text, state):
|
||||
"""Add a whitespace after word completion"""
|
||||
return cmd.Cmd.complete(self, text, state) + ' '
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
CLI().cmdloop()
|
||||
|
36
bin/web
Executable file
36
bin/web
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Minimal web browser
|
||||
# Copyright (C) 2020 Øyvind Jensen
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import sys
|
||||
import webview
|
||||
|
||||
evaluate = lambda window: window.evaluate_js(script)
|
||||
window = webview.create_window('Web', sys.argv[1], text_select=True)
|
||||
window.loaded += lambda: window.evaluate_js("""
|
||||
document.addEventListener("keydown", event => {
|
||||
event.keyCode == 8?
|
||||
history.back()
|
||||
:
|
||||
event.keyCode == 18?
|
||||
location.reload()
|
||||
:
|
||||
null
|
||||
})
|
||||
""")
|
||||
webview.start(evaluate, window, http_server=True)
|
3
bin/xalpine
Executable file
3
bin/xalpine
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
xhost +"local:podman@"
|
||||
podman run -it --rm -u 0 -e DISPLAY="$DISPLAY" -v /tmp/.X11-unix:/tmp/.X11-unix:rw alpine sh
|
BIN
img/bg.png
Normal file
BIN
img/bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 232 B |
Loading…
Add table
Add a link
Reference in a new issue