Compare commits
3
Commits
main
..
f394df154a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f394df154a | ||
|
|
50cece0533 | ||
|
|
093a60a261 |
No files matched your search
@@ -19,8 +19,6 @@ home-manager switch --flake .#work
|
||||
|
||||
### virtual machines
|
||||
|
||||
With a Niri desktop (requires host OpenGL support):
|
||||
|
||||
```
|
||||
nix build -L '.#nixosConfigurations.vm.config.system.build.vmWithDisko'
|
||||
./result/bin/disko-vm
|
||||
|
||||
+7
-5
@@ -5,20 +5,20 @@
|
||||
|
||||
let
|
||||
inherit (inputs.nixpkgs) lib;
|
||||
lib' = import ../lib { inherit lib; };
|
||||
utils = import ../utils { inherit lib; };
|
||||
# exclude hosts that need auto rollback (until `colmena` supports it) for
|
||||
# now, we use `deploy-rs` (which has magic rollback) for those (also see ./deploy-rs.nix)
|
||||
#
|
||||
# see <https://github.com/nix-community/colmena/issues/38>
|
||||
# <https://github.com/nix-community/colmena/issues/344>
|
||||
hostnames = lib.filter (
|
||||
hostname: !((lib'.hostMeta hostname).deploy.autoRollback or false)
|
||||
) lib'.nixosHosts;
|
||||
hostname: !((utils.hostMeta ../hosts/${hostname}).deploy.autoRollback or false)
|
||||
) (utils.dirNames ../hosts);
|
||||
|
||||
mkNode =
|
||||
hostname:
|
||||
let
|
||||
meta = lib'.hostMeta hostname;
|
||||
meta = utils.hostMeta ../hosts/${hostname};
|
||||
isArm = meta.system == "aarch64-linux";
|
||||
in
|
||||
{
|
||||
@@ -40,8 +40,10 @@ inputs.colmena.lib.makeHive (
|
||||
meta = {
|
||||
nixpkgs = import inputs.nixpkgs { localSystem = "x86_64-linux"; };
|
||||
specialArgs = {
|
||||
inherit inputs lib';
|
||||
inherit inputs;
|
||||
outputs = self;
|
||||
dotsPath = ../dots;
|
||||
myUtils = utils;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -5,18 +5,18 @@
|
||||
|
||||
let
|
||||
inherit (inputs.nixpkgs) lib;
|
||||
lib' = import ../lib { inherit lib; };
|
||||
utils = import ../utils { inherit lib; };
|
||||
|
||||
# only include hosts that need auto rollback (until `colmena` supports it)
|
||||
# `colmena` is used for other hosts (see ./colmena.nix)
|
||||
hostnames = lib.filter (
|
||||
hostname: (lib'.hostMeta hostname).deploy.autoRollback or false
|
||||
) lib'.nixosHosts;
|
||||
hostname: (utils.hostMeta ../hosts/${hostname}).deploy.autoRollback or false
|
||||
) (utils.dirNames ../hosts);
|
||||
|
||||
mkNode =
|
||||
hostname:
|
||||
let
|
||||
meta = lib'.hostMeta hostname;
|
||||
meta = utils.hostMeta ../hosts/${hostname};
|
||||
in
|
||||
{
|
||||
inherit hostname;
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# Scripts
|
||||
|
||||
Mostly tiny helper scripts \& experiments, some more useful than others.
|
||||
|
||||
## Setup
|
||||
|
||||
Make sure the scripts are in your `$PATH` and executable.
|
||||
|
||||
To add the complete directory of scripts to your `$PATH`:
|
||||
|
||||
```bash
|
||||
export PATH=~/.bin:$PATH
|
||||
```
|
||||
|
||||
To make a any script `<script>` executable:
|
||||
```bash
|
||||
chmod +x <script>
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
Statusbar scripts are prefixed with `sb` under the assumption you're using
|
||||
`polybar` (scripts my need changes to be used with different statusbars).
|
||||
|
||||
Some scripts have dependencies (e.g. `fzf`, `jq`, `xclip`, ...), make sure you
|
||||
have them installed.
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Tiny AUR clone helper
|
||||
# aurpac <package-name>
|
||||
|
||||
git clone "https://aur.archlinux.org/$1.git"
|
||||
@@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# back up a file by copying it to a new file with a .bak extension
|
||||
# reference: https://askubuntu.com/questions/962489/is-there-any-way-to-create-backup-copy-of-a-file-without-type-its-name-twice
|
||||
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
ipython -i /home/h/.bin/calc.py
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Open webcam window
|
||||
|
||||
ffplay -f v4l2 -x 640 -y 480 -i /dev/video0 >/dev/null 2>&1 & disown
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs')
|
||||
|
||||
const objLength = obj => Object.keys(obj).length
|
||||
|
||||
fs.readFile(process.argv[2], (err, data) => (err ? console.error(err) : console.log(objLength(JSON.parse(data)))))
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
xdg-open https://devdocs.io/offline
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
options="Mouse\nHeadphones"
|
||||
|
||||
selected="$(echo -e "$options" | fzf)"
|
||||
|
||||
case "$selected" in
|
||||
"Mouse") toggle-bt-device E4:19:21:56:C8:70;;
|
||||
"Headphones") toggle-bt-device 38:18:4C:D4:74:42;;
|
||||
esac
|
||||
@@ -1,8 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Generate menu of book filenames and save paths
|
||||
# Preview window contains metadata
|
||||
|
||||
function get_book_paths {
|
||||
find "$HOME/doc/books/" -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort
|
||||
find /home/h/doc/books/ -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort
|
||||
}
|
||||
|
||||
function select_file {
|
||||
@@ -19,8 +21,10 @@ function open {
|
||||
fi
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
case "$1" in
|
||||
--open) open "$(select_file)" ;;
|
||||
--help) printf "open \n" >&2 ;;
|
||||
*) open "$(select_file)" ;;
|
||||
esac
|
||||
|
||||
[[ -n "$selected" ]] && xdg-open "$selected" &> /dev/null & disown
|
||||
@@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
fn="/tmp/fontnames.txt"
|
||||
|
||||
contains_dash() {
|
||||
@@ -5,16 +7,16 @@ contains_dash() {
|
||||
}
|
||||
|
||||
update() {
|
||||
: > "$fn"
|
||||
echo "" > "$fn"
|
||||
|
||||
font_list=$(fc-list -f "%{fullname}\n")
|
||||
|
||||
echo "$font_list" | while read -r line ; do
|
||||
echo "$font_list" | while read line ; do
|
||||
|
||||
first="$(echo "$line" | cut -d',' -f1)"
|
||||
last="$(echo "$line" | cut -d',' -f2)"
|
||||
|
||||
if contains_dash "$first"; then
|
||||
if $(contains_dash "$first"); then
|
||||
echo "$last" >> "$fn"
|
||||
else
|
||||
echo "$first" >> "$fn"
|
||||
@@ -22,7 +24,7 @@ update() {
|
||||
done
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
case "$1" in
|
||||
--update) update;;
|
||||
*) sort -u "$fn" | awk 'NF' | fzf;;
|
||||
*) cat "$fn" | sort | uniq | awk 'NF' | fzf;;
|
||||
esac
|
||||
@@ -1 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
ssh "$(ssh-hosts | fzf)"
|
||||
@@ -1 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
curl 127.0.0.1:8765 -X POST -d '{"action": "deckNames", "version": 6}' | jq '.result[]' -r
|
||||
+3
-1
@@ -1,6 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Get Anki review status from exit code
|
||||
|
||||
num_reviews="$(cat "$ANKI_REVIEWS")"
|
||||
num_reviews="$(cat /tmp/anki-reviews)"
|
||||
|
||||
if [ "$num_reviews" -ge "400" ]
|
||||
then
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
pactl load-module module-jack-source connect=0
|
||||
pactl load-module module-loopback source=jack_in
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import yaml, json, sys
|
||||
|
||||
print(yaml.dump(json.load(open(sys.argv[1])), allow_unicode=True), end='')
|
||||
@@ -1,6 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Pipe into notify-send
|
||||
#
|
||||
# e.g. `echo "Hello world" | notify`
|
||||
|
||||
read -r msg || true
|
||||
read -r msg
|
||||
notify-send "$msg" "$@"
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sudo pacman -Qtdq | sudo pacman -Rns -
|
||||
@@ -1 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
pdfinfo "$1" | head -n 1 | awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}'
|
||||
@@ -10,11 +10,11 @@ Pomodoro timer
|
||||
|
||||
import atexit
|
||||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
from argparse import ArgumentParser
|
||||
from time import sleep
|
||||
|
||||
from plyer import notification
|
||||
|
||||
POMO_PATH = os.path.join(
|
||||
os.getenv("XDG_DATA_HOME", os.path.expanduser("~/.local/share")), "pomo"
|
||||
)
|
||||
@@ -30,14 +30,17 @@ def format_mins_secs(mins, secs):
|
||||
return f"{mins:02d}:{secs:02d}"
|
||||
|
||||
|
||||
def countdown(duration):
|
||||
while duration != 0:
|
||||
mins = duration // 60
|
||||
secs = duration % 60
|
||||
with open(POMO_PATH, "w") as f:
|
||||
f.write(format_mins_secs(mins, secs))
|
||||
sleep(1)
|
||||
duration -= 1
|
||||
def make_countdown():
|
||||
def countdown(duration):
|
||||
while duration != 0:
|
||||
mins = duration // 60
|
||||
secs = duration % 60
|
||||
time_str = format_mins_secs(mins, secs)
|
||||
os.system(f'echo -n "{time_str}" > {POMO_PATH}')
|
||||
sleep(1)
|
||||
duration -= 1
|
||||
|
||||
return countdown
|
||||
|
||||
|
||||
def main(args):
|
||||
@@ -45,13 +48,16 @@ def main(args):
|
||||
break_duration = args.break_duration * 60
|
||||
repeats = args.repeats
|
||||
|
||||
work_countdown = make_countdown()
|
||||
break_countdown = make_countdown()
|
||||
|
||||
while repeats != 0:
|
||||
subprocess.run(["notify-send", "Get started"])
|
||||
countdown(work_duration)
|
||||
notification.notify(title="Get started")
|
||||
work_countdown(work_duration)
|
||||
if break_duration != 0:
|
||||
subprocess.run(["notify-send", "Time for a break"])
|
||||
countdown(break_duration)
|
||||
subprocess.run(["notify-send", "Break is over, back to work"])
|
||||
notification.notify(title="Time for a break")
|
||||
break_countdown(break_duration)
|
||||
notification.notify(title="Break is over, back to work")
|
||||
repeats -= 1
|
||||
|
||||
|
||||
@@ -78,10 +84,4 @@ if __name__ == "__main__":
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
signal.signal(signal.SIGINT, handle_signal)
|
||||
signal.signal(signal.SIGTERM, handle_signal)
|
||||
|
||||
if args.clear:
|
||||
clear()
|
||||
else:
|
||||
main(args)
|
||||
main(args)
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
session="r5rs"
|
||||
|
||||
tmux attach-session -t "$session" || tmux new-session -s "$session" \; \
|
||||
split-window -h -t $session \; \
|
||||
send-keys -t 1 "nvim -c \"set ft=scheme\"" C-m \; \
|
||||
send-keys -t 2 "plt-r5rs --no-prim" C-m \; \
|
||||
select-pane -t 1
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i -r 's/\[*\]\(\.\/([A-z-]*.md)/\]\(\1/g' *.md
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Backup existing password databases and
|
||||
# database keys (using date in filename date -u
|
||||
# +%Y-%m-%d_%H-%M-%S)
|
||||
|
||||
RCLONE_REMOTE="proton-drive"
|
||||
|
||||
for f in "$HOME/doc"/*.{kdbx,kdbx.key}; do
|
||||
[ -e "$f" ] || continue
|
||||
echo "Backing up $f to $f-$(date -u +%Y-%m-%d_%H-%M-%S)"
|
||||
cp "$f" "$f-$(date -u +%Y-%m-%d_%H-%M-%S)"
|
||||
done
|
||||
|
||||
echo "Restoring KeePassXC databases and database keys"
|
||||
rclone copyto \
|
||||
"$RCLONE_REMOTE:doc"/ "$HOME/doc/" \
|
||||
--progress \
|
||||
--include "/*.{kdbx,kdbx.key}"
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
function start() {
|
||||
adb start-server
|
||||
nohup gnirehtet autorun &> /dev/null &
|
||||
printf "Started reverse tethering \n"
|
||||
}
|
||||
|
||||
function stop() {
|
||||
adb kill-server
|
||||
gnirehtet stop
|
||||
pkill gnirehtet
|
||||
printf "Stopped reverse tethering \n"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start) start ;;
|
||||
stop) stop ;;
|
||||
restart) stop; start ;;
|
||||
*) printf "start | stop | restart \n" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
options="nl:en\nen:nl\nnl:fr\nfr:nl\nen:fr\nfr:en\nnl:de\nde:nl"
|
||||
|
||||
selected=$(echo -en "$options" | rofi -dmenu -p "source?:target?" -i)
|
||||
|
||||
# notify-send --app-name= -t 3000 "$(trans "$selected" -b "$(rofi -dmenu -p "$selected" &)" \
|
||||
# | tr -d '\n' \
|
||||
# | xclip -sel clip -f)"
|
||||
|
||||
translation="$(trans "$selected" -b "$(rofi -dmenu -p "$selected" &)" | tr -d '\n')"
|
||||
|
||||
echo -e "Copy" | rofi -p "translation" -dmenu -i -mesg "$translation" | xargs -I{} echo -n "$translation" | xclip -selection clipboard
|
||||
Executable
+75
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Save (encrypted) password database to cloud storage
|
||||
#
|
||||
# Usage:
|
||||
# save-passwddb - Save databases to cloud
|
||||
# save-passwddb init - Restore databases from cloud (with single backup archive)
|
||||
|
||||
RCLONE_REMOTE="proton"
|
||||
SOURCE_DIR="$HOME/doc"
|
||||
TARGET_DIR="$RCLONE_REMOTE:doc"
|
||||
BACKUP_DIR="$HOME/doc/bak"
|
||||
|
||||
function save_databases() {
|
||||
if [ 0 -lt "$(ls $SOURCE_DIR/*.kdbx 2>/dev/null | wc -w)" ]; then
|
||||
echo "[save] Saving KeePassXC databases and database keys"
|
||||
rclone copy "$SOURCE_DIR" "$TARGET_DIR" \
|
||||
--include "/*.{kdbx,kdbx.key}" \
|
||||
--progress
|
||||
echo "[save] Done"
|
||||
else
|
||||
echo "[save] No password database found, restore with:"
|
||||
echo ""
|
||||
echo " $0 init"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function backup_existing() {
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
local timestamp=$(date +%Y%m%d-%H%M%S)
|
||||
local backup_file="$BACKUP_DIR/passwddb_backup_${timestamp}.tar.gz"
|
||||
|
||||
echo "[backup] Creating backup archive: ${backup_file}"
|
||||
tar -czf "$backup_file" -C "$SOURCE_DIR" $(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -printf "%f ")
|
||||
echo "[backup] Backup complete"
|
||||
}
|
||||
|
||||
function restore_databases() {
|
||||
echo "[init] Checking for existing files..."
|
||||
|
||||
local existing_files=$(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -print)
|
||||
|
||||
if [ -n "$existing_files" ]; then
|
||||
echo "[init] Found existing database files:"
|
||||
echo "$existing_files" | while read -r file; do
|
||||
echo " - $file"
|
||||
done
|
||||
read -p "[init] Create backup archive of existing files? [y/N] " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
backup_existing
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "[init] Restoring KeePassXC databases and database keys"
|
||||
mkdir -p "$SOURCE_DIR"
|
||||
rclone copy "$TARGET_DIR" "$SOURCE_DIR" \
|
||||
--include "*.{kdbx,kdbx.key}" \
|
||||
--progress
|
||||
echo "[init] Done"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
""|save)
|
||||
save_databases
|
||||
;;
|
||||
init)
|
||||
restore_databases
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 [init|save]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
selected_hosts="$(ssh-hosts | fzf -m)"
|
||||
|
||||
for host in $selected_hosts; do
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Anki review percentage for statusbar
|
||||
|
||||
num_to_review=200
|
||||
|
||||
# Get current card count from Anki
|
||||
count=$(curl -s 127.0.0.1:8765 -X POST -d '{"action": "getNumCardsReviewedToday", "version": 6}' | jq '.result')
|
||||
|
||||
if [ -z "$count" ]
|
||||
then
|
||||
if [ -s /tmp/anki-reviews ]; then
|
||||
true
|
||||
else
|
||||
echo "-1" > /tmp/anki-reviews
|
||||
fi
|
||||
else
|
||||
echo "$count" > /tmp/anki-reviews
|
||||
fi
|
||||
|
||||
num_reviews=$(cat /tmp/anki-reviews)
|
||||
echo -n -e " Reviews: $(python3 -c "print('{:.2%}'.format($num_reviews/$num_to_review))") "
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cap="$(cat /sys/class/power_supply/BAT0/capacity)"
|
||||
|
||||
if [ "$cap" -ge 33 ];then
|
||||
color="\x01"
|
||||
elif [ "$cap" -ge 10 ]; then
|
||||
color="\x03"
|
||||
else
|
||||
color="\x04"
|
||||
fi
|
||||
|
||||
echo -n -e "$color $cap% \x01"
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
echo -n -e "Week $(date '+%V') $(date '+%a %d %b %H:%M') "
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
if grep -xq 'up' /sys/class/net/w*/operstate 2>/dev/null ; then
|
||||
wifiicon="$(awk '/^\s*w/ { print "WiFi", int($3 * 100 / 70) "% " }' /proc/net/wireless)"
|
||||
fi
|
||||
|
||||
printf " %s%s%s" "$wifiicon" "$(sed "s/down//;s/up/Ethernet/" /sys/class/net/e*/operstate 2>/dev/null)"
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
[ -f "/home/h/.local/share/pomo" ] && cat /home/h/.local/share/pomo || echo ""
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Render contents of $HOME/.project if present
|
||||
[ -f "$HOME/.project" ] && cat "$HOME/.project" || echo ""
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
num_done="$(task end.after:today status:completed count)"
|
||||
num_pending="$(($(task count status:pending) + $num_done))"
|
||||
num_waiting="$(($(task count status:waiting)))"
|
||||
|
||||
echo -e "Tasks: $num_done/$num_pending+$num_waiting"
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Reference: https://github.com/mil-ad/polybar-wireguard
|
||||
|
||||
connected_interfaces=$(networkctl | grep -P "\d+ .* wireguard routable" -o | cut -d" " -f2)
|
||||
|
||||
if [ -n "$connected_interfaces" ];
|
||||
then
|
||||
for interface in $connected_interfaces; do echo "$interface"; done
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
DEFAULT_TEMPERATURE = 3500
|
||||
|
||||
try:
|
||||
with open("/tmp/temperature", "r") as temp_file:
|
||||
current_temperature = int(temp_file.read())
|
||||
except FileNotFoundError:
|
||||
current_temperature = DEFAULT_TEMPERATURE
|
||||
|
||||
# If no argument is given print the current temperature
|
||||
if len(sys.argv) == 1:
|
||||
print(current_temperature)
|
||||
sys.exit(0)
|
||||
elif len(sys.argv) != 2:
|
||||
print(
|
||||
"""
|
||||
Usage:
|
||||
|
||||
screen-temperature
|
||||
print current temperature
|
||||
|
||||
screen-temperature <temperature>
|
||||
set screen temperature to <temperature>
|
||||
|
||||
screen-temperature <+|-><temperature>
|
||||
increase or decrease screen temperature by <temperature>
|
||||
"""
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
temperature_change = sys.argv[1]
|
||||
|
||||
if temperature_change.startswith("+"):
|
||||
new_temperature = current_temperature + int(temperature_change[1:])
|
||||
elif temperature_change.startswith("-"):
|
||||
new_temperature = current_temperature - int(temperature_change[1:])
|
||||
else:
|
||||
new_temperature = int(temperature_change)
|
||||
|
||||
try:
|
||||
subprocess.run(["redshift", "-O", str(new_temperature), "-P"], check=True)
|
||||
with open("/tmp/temperature", "w") as temp_file:
|
||||
temp_file.write(str(new_temperature) + "\n")
|
||||
# Send notification
|
||||
subprocess.run(["notify-send", str(new_temperature) + "K"])
|
||||
except subprocess.CalledProcessError:
|
||||
print("Error: could not set screen temperature.")
|
||||
sys.exit(1)
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Script to create script
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: script <scriptname>"
|
||||
exit
|
||||
fi
|
||||
|
||||
path="$HOME/.bin/$1"
|
||||
|
||||
# Prevent overwriting existing script
|
||||
set -o noclobber
|
||||
|
||||
# Create script
|
||||
cat > "$path" << EOF
|
||||
#!/usr/bin/env bash
|
||||
|
||||
|
||||
EOF
|
||||
|
||||
chmod +x "$path"
|
||||
|
||||
# Open script in editor on line 3
|
||||
"$EDITOR" +3 "$path"
|
||||
Executable
+208
@@ -0,0 +1,208 @@
|
||||
#!/bin/bash
|
||||
|
||||
pac_list=(
|
||||
at
|
||||
automake
|
||||
autopep8
|
||||
base
|
||||
base-devel
|
||||
bash-completion
|
||||
bash-language-server
|
||||
bc
|
||||
brightnessctl
|
||||
chromium
|
||||
dmidecode
|
||||
entr
|
||||
eslint_d
|
||||
feh
|
||||
firefox-developer-edition
|
||||
firefox-tridactyl
|
||||
firefox-tridactyl-native
|
||||
firefox-tridactyl-native-debug
|
||||
fzf
|
||||
gcc
|
||||
git
|
||||
haskell-language-server
|
||||
haskell-ormolu
|
||||
hsetroot
|
||||
htop
|
||||
httpie
|
||||
jq
|
||||
keepassxc
|
||||
kitty
|
||||
lua-language-server
|
||||
make
|
||||
man-db
|
||||
man-pages
|
||||
neovim
|
||||
nmap
|
||||
nodejs-lts-jod
|
||||
pacman-contrib
|
||||
pandoc-cli
|
||||
pandoc-crossref
|
||||
parallel
|
||||
pass
|
||||
pkgbuild-language-server
|
||||
pnpm
|
||||
ripgrep
|
||||
sshfs
|
||||
stylelint
|
||||
svelte-language-server
|
||||
tailwindcss-language-server
|
||||
task
|
||||
tldr
|
||||
tmux
|
||||
tmuxp
|
||||
tree
|
||||
tree-sitter-cli
|
||||
ts-node
|
||||
typescript-language-server
|
||||
unzip
|
||||
vim-language-server
|
||||
wget
|
||||
xclip
|
||||
yaml-language-server
|
||||
)
|
||||
|
||||
aurpac_list=(
|
||||
hadolint-bin
|
||||
nvm
|
||||
nvimpager
|
||||
paru
|
||||
tmux-bash-completion-git
|
||||
ttf-iosevka-term-ss08
|
||||
vim-plug
|
||||
vtsls
|
||||
xbanish
|
||||
)
|
||||
|
||||
install() {
|
||||
local package="$1"
|
||||
if pacman -Qi "$package" &> /dev/null; then
|
||||
echo "$package is already installed"
|
||||
else
|
||||
echo "Installing " "$package"
|
||||
sudo pacman -S --noconfirm --needed "$package"
|
||||
fi
|
||||
}
|
||||
|
||||
aurpac() {
|
||||
git clone "https://aur.archlinux.org/$1.git" "$HOME/.build/$1"
|
||||
}
|
||||
|
||||
install_packages() {
|
||||
announce "Installing packages"
|
||||
local count
|
||||
for pac in "${pac_list[@]}" ; do
|
||||
count=$((count+1))
|
||||
install "$pac";
|
||||
done
|
||||
echo "$count packages installed"
|
||||
}
|
||||
|
||||
install_dotfiles() {
|
||||
announce "Installing dotfiles"
|
||||
origin="https://git.hektormisplon.xyz/hektor/dots"
|
||||
git clone "$origin" "$HOME/dots"
|
||||
cp -r "$HOME/dots/.git" "$HOME/.git"
|
||||
git --git-dir="$HOME/.git" config --local status.showUntrackedFiles no
|
||||
git --git-dir="$HOME/.git" stash -m "[dots]"
|
||||
git --git-dir="$HOME/.git" stash apply
|
||||
git --git-dir="$HOME/.git" restore "$HOME"
|
||||
}
|
||||
|
||||
install_aur_packages() {
|
||||
announce "Installing AUR packages"
|
||||
local count
|
||||
for package in "${aurpac_list[@]}" ; do
|
||||
if pacman -Qi "$1" &> /dev/null; then
|
||||
echo "$1 is already installed"
|
||||
else
|
||||
count=$((count+1))
|
||||
aurpac "$package" && makepkg -si -D "$HOME/.build/$package"
|
||||
fi
|
||||
done
|
||||
echo "$count AUR packages installed"
|
||||
}
|
||||
|
||||
setup_neovim() {
|
||||
announce "Setting up NeoVim"
|
||||
git clone --depth=1 https://github.com/savq/paq-nvim.git \
|
||||
"${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/pack/paqs/start/paq-nvim
|
||||
}
|
||||
|
||||
setup_keyboard() {
|
||||
announce "Setting up keyboard"
|
||||
install "interception-tools"
|
||||
install "interception-caps2esc"
|
||||
udevmon_config_contents="\
|
||||
- JOB: intercept -g \$DEVNODE | caps2esc -m 1 | uinput -d \$DEVNODE
|
||||
DEVICE:
|
||||
EVENTS:
|
||||
EV_KEY: [KEY_CAPSLOCK]"
|
||||
if [ -f /etc/interception/udevmon.yaml ] && diff -q <(echo "$udevmon_config_contents") /etc/interception/udevmon.yaml; then
|
||||
echo "udevmon config already exists"
|
||||
echo "$udevmon_config_contents"
|
||||
elif [ -f /etc/interception/udevmon.yaml ]; then
|
||||
echo "interception udevmon.yaml already exists"
|
||||
cat /etc/interception/udevmon.yaml
|
||||
echo "verify if this config matches the one below"
|
||||
echo "$udevmon_config_contents"
|
||||
else
|
||||
echo "interception udevmon.yaml does not exist, creating one"
|
||||
sudo bash -c "echo '$udevmon_config_contents' > /etc/interception/udevmon.yaml"
|
||||
fi
|
||||
|
||||
sudo systemctl enable --now udevmon.service
|
||||
|
||||
if pgrep -x caps2esc > /dev/null; then
|
||||
echo "caps2esc is already running"
|
||||
else
|
||||
caps2esc -m 1
|
||||
fi
|
||||
}
|
||||
|
||||
configure_gnome() {
|
||||
announce "Configuring Gnome"; setup-gnome
|
||||
}
|
||||
|
||||
setup_firewall() {
|
||||
announce "Configuring firewalld"
|
||||
install firewalld
|
||||
sudo systemctl enable --now firewalld
|
||||
}
|
||||
|
||||
setup_docker() {
|
||||
announce "Setting up Docker"
|
||||
install docker
|
||||
install docker-compose
|
||||
sudo systemctl enable --now docker.socket
|
||||
sudo usermod -aG docker "$USER"
|
||||
echo "User added to docker group, please restart your session"
|
||||
}
|
||||
|
||||
announce() {
|
||||
local message="$1"
|
||||
echo " "
|
||||
echo "[dots] $message"
|
||||
echo " "
|
||||
}
|
||||
|
||||
confirm() {
|
||||
local question="$1"
|
||||
read -r -p "[dots] $question? [y/N]" -n 1
|
||||
case "$REPLY" in y|Y ) "$2";; * ) echo "Skipping"; esac
|
||||
}
|
||||
|
||||
printf '%s\n' "${pac_list[@]}"
|
||||
confirm "Install these packages? " install_packages
|
||||
printf '%s\n' "${aurpac_list[@]}"
|
||||
confirm "Install these AUR packages? " install_aur_packages
|
||||
confirm "Setup NeoVim? " setup_neovim
|
||||
confirm "Install dotfiles? " install_dotfiles
|
||||
confirm "Setup keyboard? " setup_keyboard
|
||||
if pacman -Qi "gdm" &> /dev/null; then
|
||||
confirm "Configure Gnome? " configure_gnome
|
||||
fi
|
||||
confirm "Setup firewall? " setup_firewall
|
||||
confirm "Setup Docker? " setup_docker
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
ssh_hosts="$(grep -E 'Host [a-z0-9\-]*$' ~/.ssh/config | awk '{print $2}')"
|
||||
|
||||
echo "$ssh_hosts"
|
||||
@@ -7,8 +7,12 @@ from collections import defaultdict
|
||||
|
||||
|
||||
def get_task_data():
|
||||
command = ["task", "+PENDING", "or", "+WAITING", "-COMPLETED", "-DELETED", "export"]
|
||||
return json.loads(subprocess.check_output(command))
|
||||
command = (
|
||||
"task +PENDING or +WAITING -COMPLETED -DELETED export | "
|
||||
"jq '[.[] | {uuid: .uuid, id, depends: .depends, description: .description, status: .status }]'"
|
||||
)
|
||||
output = subprocess.check_output(command, shell=True)
|
||||
return json.loads(output)
|
||||
|
||||
|
||||
def parse_task_data(data):
|
||||
@@ -23,14 +27,61 @@ def parse_task_data(data):
|
||||
"description": task.get("description", "No description"),
|
||||
"status": task.get("status", "Unknown status"),
|
||||
}
|
||||
for dependency in task.get("depends", []):
|
||||
dependency_graph[dependency].append(task_id)
|
||||
dependent_tasks.add(task_id)
|
||||
if task["depends"]:
|
||||
for dependency in task["depends"]:
|
||||
dependency_graph[dependency].append(task_id)
|
||||
dependent_tasks.add(task_id)
|
||||
|
||||
root_tasks = set(task_details.keys()) - dependent_tasks
|
||||
return task_details, dependency_graph, root_tasks
|
||||
|
||||
|
||||
def get_all_parents(task_id, dependency_graph):
|
||||
return [
|
||||
parent for parent, children in dependency_graph.items() if task_id in children
|
||||
]
|
||||
|
||||
|
||||
def build_ascii_dag(
|
||||
task_id,
|
||||
task_details,
|
||||
dependency_graph,
|
||||
prefix="",
|
||||
is_last=True,
|
||||
show_id=True,
|
||||
visited=None,
|
||||
):
|
||||
if visited is None:
|
||||
visited = set()
|
||||
|
||||
if task_id in visited:
|
||||
return [f"{prefix}{'└── ' if is_last else '├── '}... (cycle detected)"]
|
||||
|
||||
visited.add(task_id)
|
||||
|
||||
task_info = task_details[task_id]
|
||||
task_line = f"{prefix}{'└── ' if is_last else '├── '}{task_info['id'] + ': ' if show_id else ''}{task_info['description']} ({task_info['status']})"
|
||||
lines = [task_line]
|
||||
|
||||
children = dependency_graph.get(task_id, [])
|
||||
for idx, child in enumerate(children):
|
||||
child_is_last = idx == len(children) - 1
|
||||
child_prefix = prefix + (" " if is_last else "│ ")
|
||||
lines.extend(
|
||||
build_ascii_dag(
|
||||
child,
|
||||
task_details,
|
||||
dependency_graph,
|
||||
child_prefix,
|
||||
child_is_last,
|
||||
show_id,
|
||||
visited.copy(),
|
||||
)
|
||||
)
|
||||
|
||||
return lines
|
||||
|
||||
|
||||
def render_dependency_dag(task_details, dependency_graph, root_tasks, show_id):
|
||||
dag_lines = []
|
||||
global_visited = set()
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euf -o pipefail
|
||||
|
||||
VIM=${VIM:-"vim"}
|
||||
TMUX=${TMUX:-"tmux"}
|
||||
|
||||
FILE=${FILE:-"$(date +%F).tidal"}
|
||||
SESSION=${SESSION:-"tidal"}
|
||||
|
||||
TIDAL_BOOT_PATH=${TIDAL_BOOT_PATH:-""}
|
||||
GHCI=${GHCI:-""}
|
||||
|
||||
args=${*:-$FILE}
|
||||
|
||||
# attach if session else create
|
||||
$TMUX attach-session -t "$SESSION" || $TMUX new-session -s "$SESSION" \; \
|
||||
split-window -h -t "$SESSION" \; \
|
||||
send-keys -t 0 "$VIM $args" C-m \; \
|
||||
send-keys -t 1 "TIDAL_BOOT_PATH=$TIDAL_BOOT_PATH GHCI=$GHCI tidal" C-m \; \
|
||||
new-window -t "$SESSION":2 -n SuperDirt \; \
|
||||
send-keys -t 0 "jack_control start && sclang ~/dev/live/scripts/start.scd" C-m \; \
|
||||
select-window -t 1 \; \
|
||||
resize-pane -t 1 -x 100 \; \
|
||||
resize-pane -t 0 -x 125 \; \
|
||||
select-pane -t 0
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
session="main"
|
||||
|
||||
tmux attach-session -t $session || tmux new-session -s $session \; \
|
||||
rename-window task \; \
|
||||
send-keys -t 1 "task" C-m \; \
|
||||
new-window -n zk \; \
|
||||
send-keys -t 2 "nvim $ZK_PATH/index.md" C-m \; \
|
||||
new-window -n term \; \
|
||||
new-window -n music \; \
|
||||
send-keys -t 4 "echo 'TODO: open music player'" C-m \; \
|
||||
select-window -t 1 \;
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
status="$(bluetoothctl info "$1" | grep Connected | cut -f 2 -d ':' | cut -f 2 -d ' ')"
|
||||
|
||||
if [ "$status" == "yes" ]
|
||||
then
|
||||
bluetoothctl disconnect "$1"
|
||||
else
|
||||
trust "$1"
|
||||
bluetoothctl connect "$1"
|
||||
fi
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sudo pacman -Syu
|
||||
@@ -0,0 +1 @@
|
||||
[{ "key": "ctrl+b", "command": "workbench.action.toggleSidebarVisibility" }]
|
||||
@@ -0,0 +1,114 @@
|
||||
{
|
||||
/* view */
|
||||
"workbench.statusBar.visible": true,
|
||||
"workbench.activityBar.visible": false,
|
||||
"breadcrumbs.enabled": false,
|
||||
"editor.minimap.enabled": false,
|
||||
"window.menuBarVisibility": "hidden",
|
||||
"workbench.editor.showTabs": false,
|
||||
"workbench.editor.showIcons": false,
|
||||
|
||||
/* font */
|
||||
"editor.fontSize": 20,
|
||||
"editor.fontLigatures": true,
|
||||
"editor.fontFamily": "Iosevka",
|
||||
"terminal.integrated.fontSize": 20,
|
||||
|
||||
/* editor */
|
||||
"editor.lineNumbers": "relative",
|
||||
"editor.glyphMargin": false,
|
||||
"terminal.integrated.allowMnemonics": false,
|
||||
"workbench.colorCustomizations": {
|
||||
"editorGroup.emptyBackground": "#0c0c0c",
|
||||
"scrollbar.shadow": "#000",
|
||||
"widget.shadow": "#000",
|
||||
"editorWidget.background": "#0c0c0c",
|
||||
"editor.background": "#0c0c0c",
|
||||
"sideBar.background": "#0c0c0c",
|
||||
"editorGroupHeader.noTabsBackground": "#0c0c0c",
|
||||
"scrollbarSlider.background": "#222",
|
||||
"scrollbarSlider.activeBackground": "#222",
|
||||
"scrollbarSlider.hoverBackground": "#333",
|
||||
"statusBar.noFolderBackground": "#0c0c0c",
|
||||
"statusBar.border": "#0c0c0c",
|
||||
"statusBar.background": "#0c0c0c",
|
||||
"statusBar.foreground": "#555"
|
||||
},
|
||||
|
||||
"editor.tokenColorCustomizations": {
|
||||
"comments": "#555",
|
||||
"functions": "#aaa",
|
||||
"numbers": "#fff",
|
||||
"strings": "#fff",
|
||||
"types": "#aaa",
|
||||
"variables": "#aaa",
|
||||
"keywords": "#aaa"
|
||||
},
|
||||
|
||||
/* vim keybindings */
|
||||
"vim.incsearch": true,
|
||||
"vim.hlsearch": true,
|
||||
"vim.leader": "<space>",
|
||||
"vim.normalModeKeyBindingsNonRecursive": [
|
||||
/* quick quit */
|
||||
{
|
||||
"before": ["<leader>", "q"],
|
||||
"commands": [":q"]
|
||||
},
|
||||
{
|
||||
"before": ["<leader>", "w"],
|
||||
"commands": [":w"]
|
||||
},
|
||||
{
|
||||
"before": ["<leader>", "Q"],
|
||||
"commands": [":q!"]
|
||||
},
|
||||
{
|
||||
"before": ["<leader>", "W"],
|
||||
"commands": [":w!"]
|
||||
},
|
||||
/* split */
|
||||
{
|
||||
"before": ["<leader>", "s", "s"],
|
||||
"commands": [":sp"]
|
||||
},
|
||||
{
|
||||
"before": ["<leader>", "s", "v"],
|
||||
"commands": [":vs"]
|
||||
},
|
||||
/* clear search highlight */
|
||||
{
|
||||
"before": ["<leader>", "<leader>"],
|
||||
"commands": [":nohl"]
|
||||
}
|
||||
],
|
||||
|
||||
"vim.insertModeKeyBindings": [
|
||||
/* quick exit insert */
|
||||
{
|
||||
"before": ["j", "j"],
|
||||
"after": ["<Esc>"]
|
||||
}
|
||||
],
|
||||
|
||||
"vim.handleKeys": {
|
||||
"<C-a>": false,
|
||||
"<C-f>": false
|
||||
},
|
||||
|
||||
/* eslint & prettier */
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true,
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll": true
|
||||
},
|
||||
|
||||
"workbench.colorTheme": "Absolute Black",
|
||||
"window.zoomLevel": 1,
|
||||
"javascript.updateImportsOnFileMove.enabled": "always"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Xcursor.size: 16
|
||||
@@ -0,0 +1,57 @@
|
||||
#!/bin/sh
|
||||
|
||||
userresources=$HOME/.config/X11/Xresources
|
||||
usermodmap=$HOME/.config/X11/Xmodmap
|
||||
sysresources=/etc/X11/xinit/.Xresources
|
||||
sysmodmap=/etc/X11/xinit/.Xmodmap
|
||||
|
||||
if [ -f $sysresources ]; then xrdb -merge $sysresources; fi
|
||||
if [ -f $sysmodmap ]; then xmodmap $sysmodmap; fi
|
||||
if [ -f "$userresources" ]; then xrdb -merge "$userresources"; fi
|
||||
if [ -f "$usermodmap" ]; then xmodmap "$usermodmap"; fi
|
||||
|
||||
# start some nice programs
|
||||
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
|
||||
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
|
||||
[ -x "$f" ] && . "$f"
|
||||
done
|
||||
unset f
|
||||
fi
|
||||
|
||||
# ______________________________
|
||||
|
||||
xset -b # disable bell
|
||||
xset r rate 200 30 # adjust typematic delay & rate
|
||||
|
||||
# Shared
|
||||
xbindkeys -f "$HOME"/.config/xbindkeys/config
|
||||
xbanish &
|
||||
redshift -o -O "$(cat /tmp/temperature)" & # Run redshift in one shot mode
|
||||
|
||||
# DWM
|
||||
# dwmblocks &
|
||||
# udiskie &
|
||||
# # No compositor
|
||||
# # xsetroot -solid "#0a0a0a"
|
||||
# # With compositor
|
||||
# # hsetroot -solid "#0a0a0a"
|
||||
# # picom &
|
||||
# # execute dwm in a loop
|
||||
# while true; do
|
||||
# dwm 2> ~/.dwm.log
|
||||
# done
|
||||
|
||||
# Openbox
|
||||
# # udiskie --tray &
|
||||
# # plank &
|
||||
# # picom &
|
||||
# # hsetroot -solid "#555555"
|
||||
# # openbox
|
||||
|
||||
# Xmonad
|
||||
xsetroot -solid "#0a0a0a"
|
||||
xsetroot -cursor_name left_ptr
|
||||
picom &
|
||||
trayer --edge top --align right --SetDockType true --SetPartialStrut true \
|
||||
--expand true --width 10 --transparent true --tint 0x111111 --height 25 &
|
||||
exec xmonad
|
||||
@@ -0,0 +1,34 @@
|
||||
[global]
|
||||
geometry="0-0+24"
|
||||
monitor=0
|
||||
follow=keyboard
|
||||
indicate_hidden=yes
|
||||
notification_height=0
|
||||
padding=8
|
||||
horizontal_padding=8
|
||||
frame_width=1
|
||||
frame_color="#333"
|
||||
separator_height=1
|
||||
idle_threshold=120
|
||||
font=Iosevka Term SS08 12
|
||||
markup=full
|
||||
format="%s\n%b"
|
||||
dmenu=/usr/bin/dmenu -p dunst:
|
||||
browser=/usr/bin/brave -new-tab
|
||||
verbosity=info
|
||||
|
||||
[urgency_low]
|
||||
background="#111"
|
||||
foreground="#aaa"
|
||||
timeout=10
|
||||
|
||||
[urgency_normal]
|
||||
background="#111"
|
||||
foreground="#aaa"
|
||||
timeout=10
|
||||
|
||||
[urgency_critical]
|
||||
background="#111"
|
||||
foreground="#fff"
|
||||
frame_color="#f00"
|
||||
timeout=0
|
||||
@@ -0,0 +1,12 @@
|
||||
prev_img h
|
||||
next_img l
|
||||
scroll_left L
|
||||
scroll_right H
|
||||
scroll_up J
|
||||
scroll_down K
|
||||
zoom_in j
|
||||
zoom_out k
|
||||
zoom_fit z
|
||||
zoom_default =
|
||||
mirror bar
|
||||
close q Q
|
||||
@@ -0,0 +1,3 @@
|
||||
feh \
|
||||
-B black \
|
||||
--auto-zoom
|
||||
@@ -0,0 +1,36 @@
|
||||
[General]
|
||||
checkForUpdates=false
|
||||
disabledTrayIcon=true
|
||||
uiColor=#cccccc
|
||||
fontFamily=Inter
|
||||
drawColor=#ffffff
|
||||
savePath=/home/h/doc/clips
|
||||
copyPathAfterSave=true
|
||||
saveLastRegion=true
|
||||
saveAsFileExtension=png
|
||||
userColors=picker, #800000, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ffffff, #000000
|
||||
|
||||
[Shortcuts]
|
||||
TYPE_ARROW=a
|
||||
TYPE_CIRCLE=o
|
||||
TYPE_CIRCLECOUNT=Shift+o
|
||||
TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return
|
||||
TYPE_COPY=y
|
||||
TYPE_DELETE_CURRENT_TOOL=
|
||||
TYPE_DRAWER=l
|
||||
TYPE_EXIT=q
|
||||
TYPE_IMAGEUPLOADER=
|
||||
TYPE_MARKER=m
|
||||
TYPE_MOVESELECTION=Ctrl+M
|
||||
TYPE_MOVE_DOWN=j
|
||||
TYPE_MOVE_LEFT=h
|
||||
TYPE_MOVE_RIGHT=l
|
||||
TYPE_MOVE_UP=k
|
||||
TYPE_OPEN_APP=o
|
||||
TYPE_PENCIL=d
|
||||
TYPE_PIN=Enter
|
||||
TYPE_PIXELATE=p
|
||||
TYPE_RECTANGLE=r
|
||||
TYPE_REDO=Ctrl+r
|
||||
TYPE_RESIZE_DOWN=Shift+j
|
||||
TYPE_RESIZE_LEFT=Shift+h
|
||||
@@ -0,0 +1,16 @@
|
||||
git_protocol: ssh
|
||||
prompt: enabled
|
||||
aliases:
|
||||
co: pr checkout
|
||||
c: repo clone
|
||||
f: repo fork
|
||||
rc: repo create
|
||||
rv: repo view
|
||||
re: repo edit
|
||||
rm: repo remove
|
||||
rn: repo rename
|
||||
lr: repo list
|
||||
li: issue list
|
||||
al: alias
|
||||
al-: alias delete
|
||||
version: "1"
|
||||
@@ -0,0 +1,5 @@
|
||||
[Settings]
|
||||
gtk-font-name=Inter 12
|
||||
gtk-application-prefer-dark-theme=true
|
||||
gtk-icon-theme-name=Adwaita
|
||||
gtk-theme-name=Adwaita
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,32 @@
|
||||
[General]
|
||||
ConfigVersion=2
|
||||
|
||||
[Browser]
|
||||
CustomProxyLocation=
|
||||
Enabled=true
|
||||
|
||||
[GUI]
|
||||
ApplicationTheme=dark
|
||||
CompactMode=false
|
||||
HidePreviewPanel=false
|
||||
HideToolbar=false
|
||||
MinimizeOnClose=true
|
||||
MinimizeToTray=true
|
||||
ShowTrayIcon=true
|
||||
TrayIconAppearance=colorful
|
||||
|
||||
[KeeShare]
|
||||
Active="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n"
|
||||
Foreign="<?xml version=\"1.0\"?>\n<KeeShare xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n <Foreign/>\n</KeeShare>\n"
|
||||
Own="<?xml version=\"1.0\"?><KeeShare><PrivateKey>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9Ji74dnjo0qzbUFKEoNnMHsdX7mBXuJcu8zsl7vfkKLiAGIQiP9BQc/JnFr28W92fQz8uXVtm7NgnKJQkT7wzFyBdspmNDzosS58EIQVKe5p+uMaaGZ5z6j1DtLCFo7PLCnhasBluC0W1+37s7NtRD6bFo1r6QHupY63mBsSvJhAcmS+6bM7xS7PcK0WTVTsK1MWYZLOkYMWQ0AW/t4PZfqeKvalqheiR8oUIDeY7+7fqvQr5SAhL0yinbtaqWmPqcd5QWyPqVkbKclw4Uecw+JW+yR9uEOP9butP74r36LUUfsTJHE2/sB2KJFRN/aUm2ZEYhzexMYSfgnrq0KCLAgMBAAECggEACV8N7rN39BkUBV2qaPXLNKjFuZ6O2WnE28ejQ5LeZ0h5M6eDTGsa+BF2jhL7XYyzo0NiqvpnH+dWIkKJbG8i5OkdamcB4pJBkJZCj6LPL0yGcAbZmCLyzc1qMaOPJ1/f9YxUQDH/YItgbc7DEBwAFbkPyzT3ufRd7BuLLx1gu0iypHhBok9kXA4WgkUihLNXXVvSIGcVy+q9wpgOiw5jLC79qwqIp39Tlt6PKryODulqWIeoeSIgAu5tgUy4O3He6AZwqBprIfJSiJOwfdBd8FchQJQDgl0fyDR10VIUNbjgm+kxWssq4oNJ7+2n14Gdfwpy2K7oO9DYeqjBrv2p4QKBgQDqY8/5ufsJ9hKhQRX3vju+FEDLKvjjKH7/6puDwcvC1GgvshQSvCo9ZVIajwSmEoWq2LTDiPlUPFINKnALQiHCbRfNeS1Tws4cK4AAZnR+CGKkox9J5MWCDVzI2/82R9/9ZX4OO+As5+Od503Grmy+Zi0Redm+r4aK04gm3LfqGwKBgQDOlpOXFyYbb473TFkf9ZfyETZGkjlCzf4uPwPuJ3njWZfwPE2Gb+quZDLSmYp9JhzIFoapnQrjSFCVyzBYIIuz3jipb5MbQxc6FPSjw0pPowWdPkEL1CT5mpZFojop+I/TnEEG+Lv039O3cGlL2zagiBHRw0ediD6z0vnoOBeKUQKBgQDjlJBuKC9gp6XFHp4G05XMZHvZCNtqLHrLX28qSjPe80BJ9z1YR4032bYThYP9AAT7MripFskICh2dHPR3afm/fw9aeWsSZhab8XyyZsh7SwcEVkJeDBvdv720ZS9y8+y/bBkuFuL+lxVBz0GMRPXfFPRzgH10kZcwGl2bZjnIuwKBgQCVabQu95AZEbM9yps/ERom+ineGo2Ncnyep/bIvQZb1wWbu5F6ZOE/5boYNPJDl1gDor8cVzdzsG6QGBfL9SX1HgivCsJDWl+nI1bYRjsto8NAubDDxFhFqnd6v1z/1AT50C37w9P0xBlUt9mAAnjc2+y/YFQgbFSlLDaQrFjiMQKBgFJrLF21Uk6ALZa4R0eOyLKhuagw3uxmNvccNG8VL5DwYVCUS7/8SkPhO5yvbcA87Y1VnM20tUr047K4U83uFNxBnPMmxlhMsxtqjw+VV6Us6uh2ASaLZ9iP9iwkn5e37WLWX+XsewoGrW/YsONwIT0dnZDPRbxhPdJn8azSJqQr</PrivateKey><PublicKey><Signer>h</Signer><Key>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9Ji74dnjo0qzbUFKEoNnMHsdX7mBXuJcu8zsl7vfkKLiAGIQiP9BQc/JnFr28W92fQz8uXVtm7NgnKJQkT7wzFyBdspmNDzosS58EIQVKe5p+uMaaGZ5z6j1DtLCFo7PLCnhasBluC0W1+37s7NtRD6bFo1r6QHupY63mBsSvJhAcmS+6bM7xS7PcK0WTVTsK1MWYZLOkYMWQ0AW/t4PZfqeKvalqheiR8oUIDeY7+7fqvQr5SAhL0yinbtaqWmPqcd5QWyPqVkbKclw4Uecw+JW+yR9uEOP9butP74r36LUUfsTJHE2/sB2KJFRN/aUm2ZEYhzexMYSfgnrq0KCLAgMBAAECggEACV8N7rN39BkUBV2qaPXLNKjFuZ6O2WnE28ejQ5LeZ0h5M6eDTGsa+BF2jhL7XYyzo0NiqvpnH+dWIkKJbG8i5OkdamcB4pJBkJZCj6LPL0yGcAbZmCLyzc1qMaOPJ1/f9YxUQDH/YItgbc7DEBwAFbkPyzT3ufRd7BuLLx1gu0iypHhBok9kXA4WgkUihLNXXVvSIGcVy+q9wpgOiw5jLC79qwqIp39Tlt6PKryODulqWIeoeSIgAu5tgUy4O3He6AZwqBprIfJSiJOwfdBd8FchQJQDgl0fyDR10VIUNbjgm+kxWssq4oNJ7+2n14Gdfwpy2K7oO9DYeqjBrv2p4QKBgQDqY8/5ufsJ9hKhQRX3vju+FEDLKvjjKH7/6puDwcvC1GgvshQSvCo9ZVIajwSmEoWq2LTDiPlUPFINKnALQiHCbRfNeS1Tws4cK4AAZnR+CGKkox9J5MWCDVzI2/82R9/9ZX4OO+As5+Od503Grmy+Zi0Redm+r4aK04gm3LfqGwKBgQDOlpOXFyYbb473TFkf9ZfyETZGkjlCzf4uPwPuJ3njWZfwPE2Gb+quZDLSmYp9JhzIFoapnQrjSFCVyzBYIIuz3jipb5MbQxc6FPSjw0pPowWdPkEL1CT5mpZFojop+I/TnEEG+Lv039O3cGlL2zagiBHRw0ediD6z0vnoOBeKUQKBgQDjlJBuKC9gp6XFHp4G05XMZHvZCNtqLHrLX28qSjPe80BJ9z1YR4032bYThYP9AAT7MripFskICh2dHPR3afm/fw9aeWsSZhab8XyyZsh7SwcEVkJeDBvdv720ZS9y8+y/bBkuFuL+lxVBz0GMRPXfFPRzgH10kZcwGl2bZjnIuwKBgQCVabQu95AZEbM9yps/ERom+ineGo2Ncnyep/bIvQZb1wWbu5F6ZOE/5boYNPJDl1gDor8cVzdzsG6QGBfL9SX1HgivCsJDWl+nI1bYRjsto8NAubDDxFhFqnd6v1z/1AT50C37w9P0xBlUt9mAAnjc2+y/YFQgbFSlLDaQrFjiMQKBgFJrLF21Uk6ALZa4R0eOyLKhuagw3uxmNvccNG8VL5DwYVCUS7/8SkPhO5yvbcA87Y1VnM20tUr047K4U83uFNxBnPMmxlhMsxtqjw+VV6Us6uh2ASaLZ9iP9iwkn5e37WLWX+XsewoGrW/YsONwIT0dnZDPRbxhPdJn8azSJqQr</Key></PublicKey></KeeShare>\n"
|
||||
QuietSuccess=true
|
||||
|
||||
[PasswordGenerator]
|
||||
AdditionalChars=
|
||||
ExcludedChars=
|
||||
Length=40
|
||||
Logograms=true
|
||||
WordCount=9
|
||||
|
||||
[SSHAgent]
|
||||
Enabled=true
|
||||
@@ -0,0 +1,147 @@
|
||||
#: Fonts {{{
|
||||
|
||||
font_family Iosevka Term SS08
|
||||
bold_font auto
|
||||
italic_font auto
|
||||
bold_italic_font auto
|
||||
font_size 12.0
|
||||
disable_ligatures never
|
||||
|
||||
# }}}
|
||||
|
||||
#: Cursor {{{
|
||||
|
||||
cursor_shape block
|
||||
cursor_blink_interval 0
|
||||
|
||||
#: }}}
|
||||
|
||||
#: Scrollback {{{
|
||||
|
||||
scrollback_lines 8192
|
||||
scrollbar scrolled
|
||||
scrollback_pager_history_size 1024
|
||||
|
||||
#: }}}
|
||||
|
||||
#: Mouse {{{
|
||||
|
||||
mouse_hide_wait 0.0
|
||||
paste_actions quote-urls-at-prompt
|
||||
|
||||
#: }}}
|
||||
|
||||
#: Performance tuning {{{
|
||||
|
||||
repaint_delay 8
|
||||
input_delay 2
|
||||
|
||||
#: }}}
|
||||
|
||||
#: Terminal bell {{{
|
||||
|
||||
enable_audio_bell yes
|
||||
window_alert_on_bell yes
|
||||
|
||||
#: }}}
|
||||
|
||||
#: Window layout {{{
|
||||
|
||||
remember_window_size no
|
||||
remember_window_position no
|
||||
enabled_layouts *
|
||||
hide_window_decorations yes
|
||||
|
||||
#: }}}
|
||||
|
||||
#: Advanced {{{
|
||||
|
||||
notify_on_cmd_finish unfocused
|
||||
|
||||
#: }}}
|
||||
|
||||
#: OS specific tweaks {{{
|
||||
|
||||
linux_display_server auto
|
||||
wayland_enable_ime no
|
||||
|
||||
#: }}}
|
||||
|
||||
#: Keyboard shortcuts {{{
|
||||
|
||||
kitty_mod ctrl+shift
|
||||
map kitty_mod+c copy_to_clipboard
|
||||
map kitty_mod+v paste_from_clipboard
|
||||
map cmd+v
|
||||
# map kitty_mod+o pass_selection_to_program
|
||||
# map kitty_mod+o pass_selection_to_program firefox
|
||||
# map kitty_mod+y new_window less @selection
|
||||
map kitty_mod+z scroll_to_prompt -1
|
||||
map kitty_mod+x scroll_to_prompt 1
|
||||
map kitty_mod+h show_scrollback
|
||||
# map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
|
||||
#:: For more details on piping screen and buffer contents to external
|
||||
#:: programs, see launch <https://sw.kovidgoyal.net/kitty/launch/>.
|
||||
# map kitty_mod+g show_last_command_output
|
||||
# map kitty_mod+enter launch --cwd=current
|
||||
# map cmd+enter
|
||||
# map ctrl+n launch --location=neighbor
|
||||
# map ctrl+f launch --location=first
|
||||
map kitty_mod+n
|
||||
map cmd+n
|
||||
map kitty_mod+w
|
||||
map shift+cmd+d
|
||||
map kitty_mod+]
|
||||
map kitty_mod+[
|
||||
map kitty_mod+f
|
||||
map kitty_mod+b
|
||||
map kitty_mod+`
|
||||
map kitty_mod+r
|
||||
map cmd+r
|
||||
map kitty_mod+1
|
||||
map cmd+1
|
||||
map kitty_mod+2
|
||||
map cmd+2
|
||||
map kitty_mod+3
|
||||
map cmd+3
|
||||
map kitty_mod+4
|
||||
map cmd+4
|
||||
map kitty_mod+5
|
||||
map cmd+5
|
||||
map kitty_mod+6
|
||||
map cmd+6
|
||||
map kitty_mod+7
|
||||
map cmd+7
|
||||
map kitty_mod+8
|
||||
map cmd+8
|
||||
map kitty_mod+9
|
||||
map cmd+9
|
||||
map kitty_mod+0
|
||||
# map kitty_mod+c new_tab # FIXME: conflict with 'copy'
|
||||
map cmd+t
|
||||
map kitty_mod+q
|
||||
map cmd+w
|
||||
map kitty_mod+.
|
||||
map kitty_mod+,
|
||||
map kitty_mod+alt+t
|
||||
map shift+cmd+i
|
||||
map kitty_mod+f1
|
||||
map kitty_mod+f11
|
||||
map ctrl+cmd+f
|
||||
map kitty_mod+f10
|
||||
map opt+cmd+s
|
||||
map kitty_mod+u kitten unicode_input
|
||||
map ctrl+cmd+space
|
||||
map kitty_mod+/ kitty_shell window
|
||||
map kitty_mod+f5
|
||||
map kitty_mod+r load_config_file
|
||||
|
||||
map shift+cmd+/
|
||||
map cmd+h
|
||||
map opt+cmd+
|
||||
map cmd+m
|
||||
map cmd+q
|
||||
|
||||
#: }}}
|
||||
|
||||
include ./nvim.conf
|
||||
@@ -0,0 +1,8 @@
|
||||
allow_remote_control socket-only
|
||||
listen_on unix:/tmp/kitty
|
||||
shell_integration enabled
|
||||
|
||||
action_alias kitty_scrollback_nvim kitten ~/.local/share/kitty-scrollback.nvim/python/kitty_scrollback_nvim.py
|
||||
map kitty_mod+h kitty_scrollback_nvim
|
||||
map kitty_mod+g kitty_scrollback_nvim --config ksb_builtin_last_cmd_output
|
||||
mouse_map ctrl+shift+right press ungrabbed combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output
|
||||
@@ -0,0 +1,20 @@
|
||||
[Default Applications]
|
||||
inode/x-empty=nvim.desktop
|
||||
inode/directory=nvim.desktop
|
||||
text/plain=nvim.desktop
|
||||
text/html=firefoxdeveloperedition.desktop
|
||||
image/gif=feh.desktop
|
||||
image/jpeg=feh.desktop
|
||||
image/png=feh.desktop
|
||||
video/mp4=mpv.desktop
|
||||
video/webm=mpv.desktop
|
||||
model/stl=com.ultimaker.cura.desktop
|
||||
application/pdf=org.pwmt.zathura.desktop
|
||||
x-scheme-handler/msteams=teams-for-linux.desktop
|
||||
x-scheme-handler/web+stremio=firefox.desktop
|
||||
x-scheme-handler/http=firefoxdeveloperedition.desktop
|
||||
x-scheme-handler/https=firefoxdeveloperedition.desktop
|
||||
x-scheme-handler/chrome=firefoxdeveloperedition.desktop
|
||||
x-scheme-handler/sidequest=SideQuest.desktop
|
||||
x-scheme-handler/mailto=firefox.desktop
|
||||
x-scheme-handler/webcal=firefox.desktop
|
||||
Binary file not shown.
@@ -0,0 +1,15 @@
|
||||
l seek +5
|
||||
h seek -5
|
||||
k seek +30
|
||||
j seek -30
|
||||
|
||||
+ add video-zoom 0.1
|
||||
- add video-zoom -0.1
|
||||
= set video-zoom 0; set video-pan-x 0; set video-pan-y 0
|
||||
|
||||
H add video-pan-x 0.01
|
||||
L add video-pan-x -0.01
|
||||
K add video-pan-y 0.01
|
||||
J add video-pan-y -0.01
|
||||
|
||||
m cycle mute
|
||||
@@ -0,0 +1,16 @@
|
||||
vo=gpu
|
||||
profile=gpu-hq
|
||||
hwdec=auto
|
||||
|
||||
msg-color=yes
|
||||
|
||||
cursor-autohide=300
|
||||
cursor-autohide-fs-only=yes
|
||||
save-position-on-quit=yes
|
||||
keep-open=yes
|
||||
|
||||
# Custom osc
|
||||
osc=no
|
||||
cursor-autohide=3500
|
||||
osd-bar=no
|
||||
osc-vidscale=no
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,45 @@
|
||||
default_keybindings = false
|
||||
flip_status_indicators = true
|
||||
library_tabs = ["tracks", "albums", "artists", "playlists", "browse"] # remove podcasts tab
|
||||
|
||||
[keybindings]
|
||||
"Enter" = "play"
|
||||
" " = "playpause"
|
||||
"S" = "stop"
|
||||
"<" = "seek -10000"
|
||||
">" = "seek +10000"
|
||||
"H" = "previous"
|
||||
"L" = "next"
|
||||
"r" = "repeat"
|
||||
"z" = "shuffle"
|
||||
"d" = "delete"
|
||||
"s" = "save"
|
||||
"O" = "open current"
|
||||
"o" = "open selected"
|
||||
"Backspace" = "back"
|
||||
"A" = "goto artist"
|
||||
"a" = "goto album"
|
||||
"q" = "queue"
|
||||
"J" = "shift down 1"
|
||||
"K" = "shift up 1"
|
||||
"c" = "clear"
|
||||
"=" = "volup 1"
|
||||
"-" = "voldown 1"
|
||||
"1" = "focus queue"
|
||||
"2" = "focus search"
|
||||
"3" = "focus library"
|
||||
"4" = "focus cover"
|
||||
"h" = "move left 1"
|
||||
"j" = "move down 1"
|
||||
"k" = "move up 1"
|
||||
"l" = "move right 1"
|
||||
"g" = "move top"
|
||||
"G" = "move bottom"
|
||||
"t" = "sort added d"
|
||||
"T" = "sort title a"
|
||||
"y" = "share current"
|
||||
"Y" = "share selected"
|
||||
"U" = "update"
|
||||
|
||||
backend="pipe"
|
||||
notify="false"
|
||||
@@ -0,0 +1,39 @@
|
||||
auto-reload yes
|
||||
reload-threads 100
|
||||
|
||||
# color background color240 black
|
||||
# color listnormal color238 black
|
||||
# color listfocus white black
|
||||
# color listnormal_unread color240 black bold
|
||||
# color listfocus_unread default black bold
|
||||
# color info default black
|
||||
# color article default black
|
||||
|
||||
bind-key h quit articlelist
|
||||
bind-key h quit article
|
||||
bind-key h quit tagselection
|
||||
bind-key h quit feedlist
|
||||
bind-key j down feedlist
|
||||
bind-key j down tagselection
|
||||
bind-key j next articlelist
|
||||
bind-key j down article
|
||||
bind-key J next-feed articlelist
|
||||
bind-key k up feedlist
|
||||
bind-key k prev articlelist
|
||||
bind-key k up tagselection
|
||||
bind-key K prev-feed articlelist
|
||||
bind-key k up article
|
||||
bind-key l open articlelist
|
||||
bind-key l open feedlist
|
||||
bind-key l open tagselection
|
||||
|
||||
bind-key G end
|
||||
bind-key g home
|
||||
|
||||
text-width 80
|
||||
|
||||
browser "brave"
|
||||
macro m set browser "mpv %u"; open-in-browser ; set browser "brave"
|
||||
|
||||
show-title-bar false
|
||||
show-keymap-hint false
|
||||
@@ -0,0 +1 @@
|
||||
experimental-features = nix-command flakes
|
||||
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,3 @@
|
||||
require("auto-session").setup({
|
||||
auto_session_enabled = vim.env.KITTY_SCROLLBACK_NVIM ~= "true", -- See kitty-scrollback.nvim
|
||||
})
|
||||
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,30 @@
|
||||
require("conform").setup({
|
||||
format_after_save = {
|
||||
lsp_fallback = false,
|
||||
async = false,
|
||||
timeout_ms = 500,
|
||||
},
|
||||
formatters_by_ft = {
|
||||
awk = { "awk" },
|
||||
bash = { "shellcheck" },
|
||||
c = { "clang-format" },
|
||||
cpp = { "clang-format" },
|
||||
css = { "prettierd", "prettier", stop_after_first = true },
|
||||
gdscript = { "gdformat" },
|
||||
haskell = { "ormolu" },
|
||||
html = { "prettierd", "prettier", stop_after_first = true },
|
||||
javascript = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||
javascriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||
json = { "prettierd", "prettier", stop_after_first = true },
|
||||
jsonc = { "prettierd", "prettier", stop_after_first = true },
|
||||
lua = { "stylua" }, -- configured in stylua.toml
|
||||
markdown = { "prettierd", "prettier", stop_after_first = true },
|
||||
nix = { "nixfmt" },
|
||||
python = { "isort", "black" },
|
||||
rust = { "rustfmt", lsp_fallback = "fallback" },
|
||||
svelte = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
|
||||
typescript = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
|
||||
typescriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||
-- yaml = { "prettierd", "prettier", stop_after_first = true },
|
||||
},
|
||||
})
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,7 @@
|
||||
require("lsp_lines").setup()
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_text = false,
|
||||
})
|
||||
|
||||
vim.keymap.set("", "<leader>dd", require("lsp_lines").toggle, { desc = "Toggle lsp_lines" })
|
||||
@@ -0,0 +1,196 @@
|
||||
require("neodev").setup() -- should setup before lspconfig
|
||||
|
||||
local cmp_nvim_lsp = require("cmp_nvim_lsp")
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities()
|
||||
|
||||
local servers = {
|
||||
bashls = {},
|
||||
eslint = {
|
||||
settings = {
|
||||
--Assuming prettier/prettierd will handle formatting, we don't need to see these errors
|
||||
rulesCustomizations = {
|
||||
{ rule = "prettier/prettier", severity = "off" },
|
||||
},
|
||||
format = false,
|
||||
},
|
||||
},
|
||||
emmet_language_server = {},
|
||||
gdscript = {},
|
||||
helm_ls = {
|
||||
filetypes = { "yaml", "helm", "yaml.helm-values" },
|
||||
},
|
||||
hls = { filetypes = { "haskell", "lhaskell", "cabal" } },
|
||||
html = {},
|
||||
jsonls = {
|
||||
settings = {
|
||||
json = {
|
||||
schemas = require("schemastore").json.schemas(),
|
||||
validate = { enable = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
lua_ls = {
|
||||
on_init = function(client)
|
||||
if client.workspace_folders then
|
||||
local path = client.workspace_folders[1].name
|
||||
if
|
||||
path ~= vim.fn.stdpath("config")
|
||||
and (vim.uv.fs_stat(path .. "/.luarc.json") or vim.uv.fs_stat(path .. "/.luarc.jsonc"))
|
||||
then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
|
||||
runtime = {
|
||||
version = "LuaJIT",
|
||||
path = {
|
||||
"lua/?.lua",
|
||||
"lua/?/init.lua",
|
||||
},
|
||||
},
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
library = {
|
||||
vim.env.VIMRUNTIME,
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
settings = {
|
||||
Lua = {},
|
||||
},
|
||||
},
|
||||
nixd = {
|
||||
settings = {
|
||||
nixd = {
|
||||
nixpkgs = {
|
||||
expr = "import <nixpkgs> { }",
|
||||
expr = 'import (builtins.getFlake ("git+file://" + toString ../../../../../.)).inputs.nixpkgs { }',
|
||||
},
|
||||
},
|
||||
options = {
|
||||
nixos = {
|
||||
expr = '(builtins.getFlake ("git+file://" + toString ../../../../../.)).nixosConfigurations."'
|
||||
.. vim.fn.hostname()
|
||||
.. '".options',
|
||||
},
|
||||
home_manager = {
|
||||
expr = '(builtins.getFlake ("git+file://" + toString ../../../../../.)).homeConfigurations."'
|
||||
.. vim.fn.expand("$USER")
|
||||
.. "@"
|
||||
.. vim.fn.hostname()
|
||||
.. '".options',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
openscad_ls = {},
|
||||
pyright = {},
|
||||
svelte = {
|
||||
plugin = {
|
||||
svelte = {
|
||||
defaultScriptLanguage = "ts",
|
||||
},
|
||||
},
|
||||
},
|
||||
tailwindcss = {},
|
||||
ts_ls = {},
|
||||
-- vtsls = {
|
||||
-- maxTsServerMemory = 16384,
|
||||
-- filetypes = {
|
||||
-- "javascript",
|
||||
-- "javascriptreact",
|
||||
-- "javascript.jsx",
|
||||
-- "typescript",
|
||||
-- "typescriptreact",
|
||||
-- "typescript.tsx",
|
||||
-- },
|
||||
-- settings = {
|
||||
-- complete_function_calls = true,
|
||||
-- vtsls = {
|
||||
-- enableMoveToFileCodeAction = true,
|
||||
-- autoUseWorkspaceTsdk = true,
|
||||
-- experimental = {
|
||||
-- completion = {
|
||||
-- enableServerSideFuzzyMatch = true,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- typescript = {
|
||||
-- updateImportsOnFileMove = { enabled = "always" },
|
||||
-- suggest = {
|
||||
-- completeFunctionCalls = true,
|
||||
-- },
|
||||
-- inlayHints = {
|
||||
-- enumMemberValues = { enabled = true },
|
||||
-- functionLikeReturnTypes = { enabled = true },
|
||||
-- parameterNames = { enabled = "literals" },
|
||||
-- parameterTypes = { enabled = true },
|
||||
-- propertyDeclarationTypes = { enabled = true },
|
||||
-- variableTypes = { enabled = false },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
yamlls = {
|
||||
settings = {
|
||||
yaml = {
|
||||
schemaStore = {
|
||||
-- You must disable built-in schemaStore support if you want to use
|
||||
-- this plugin and its advanced options like `ignore`.
|
||||
enable = false,
|
||||
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
|
||||
url = "",
|
||||
},
|
||||
schemas = require("schemastore").yaml.schemas(),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for server, config in pairs(servers) do
|
||||
config.capabilities = capabilities
|
||||
vim.lsp.config(server, config)
|
||||
end
|
||||
|
||||
vim.lsp.enable(vim.tbl_keys(servers))
|
||||
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(e)
|
||||
local opts = { buffer = e.bufnr }
|
||||
local set = vim.keymap.set
|
||||
local lsp_buf = vim.lsp.buf
|
||||
set("n", "gD", lsp_buf.declaration, opts)
|
||||
set("n", "gd", lsp_buf.definition, opts)
|
||||
set("n", "K", lsp_buf.hover, opts)
|
||||
set("n", "gi", lsp_buf.implementation, opts)
|
||||
set("n", "<C-k>", lsp_buf.signature_help, opts)
|
||||
set("n", "<space>wa", lsp_buf.add_workspace_folder, opts)
|
||||
set("n", "<space>wr", lsp_buf.remove_workspace_folder, opts)
|
||||
set("n", "<space>wl", function()
|
||||
print(vim.inspect(lsp_buf.list_workspace_folders()))
|
||||
end, opts)
|
||||
set("n", "<space>D", lsp_buf.type_definition, opts)
|
||||
set("n", "<space>rn", lsp_buf.rename, opts)
|
||||
set({ "n", "v" }, "<space>ca", lsp_buf.code_action, opts)
|
||||
set("n", "gr", lsp_buf.references, opts)
|
||||
|
||||
-- Taken from https://blog.viktomas.com/graph/neovim-lsp-rename-normal-mode-keymaps/
|
||||
set("n", "<leader>r", vim.lsp.buf.rename)
|
||||
-- function()
|
||||
-- -- Automatically switch to `cmdwin` for normal mode renaming
|
||||
-- -- (normally you would have to press <C-f> to open the `cmdwin`)
|
||||
-- vim.api.nvim_create_autocmd({ "CmdlineEnter" }, {
|
||||
-- callback = function()
|
||||
-- local key = vim.api.nvim_replace_termcodes("<C-f>", true, false, true)
|
||||
-- vim.api.nvim_feedkeys(key, "c", false)
|
||||
-- vim.api.nvim_feedkeys("0", "n", false)
|
||||
-- return true
|
||||
-- end,
|
||||
-- })
|
||||
-- vim.lsp.buf.rename()
|
||||
-- end, bufoptsWithDesc("Rename symbol")
|
||||
-- )
|
||||
end,
|
||||
})
|
||||
+2
-1
@@ -9,4 +9,5 @@ ls.config.set_config({
|
||||
store_selection_keys = "<Tab>",
|
||||
})
|
||||
|
||||
require("luasnip.loaders.from_lua").lazy_load({ paths = { require("nixCats").configDir .. "/snips" } })
|
||||
require("luasnip.loaders.from_lua").lazy_load({ paths = { "~/.config/nvim/snips" } })
|
||||
require("luasnip.loaders.from_vscode").lazy_load({ paths = { "~/.config/Code - Insiders/User/snippets" } })
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,35 @@
|
||||
vim.env.ESLINT_D_PPID = vim.fn.getpid()
|
||||
|
||||
local eslint_linter = "eslint_d"
|
||||
|
||||
require("lint").linters_by_ft = {
|
||||
bash = { "shellcheck" },
|
||||
c = { "clangtidy", "flawfinder" },
|
||||
cmake = { "cmakelint" },
|
||||
cpp = { "clangtidy", "flawfinder" }, -- "cpplint", "cppcheck", "flawfinder"
|
||||
css = { "stylelint" },
|
||||
dockerfile = { "hadolint" },
|
||||
editorconfig = { "editorconfig-checker" },
|
||||
haskell = { "hlint" },
|
||||
-- html = { "htmlhint" },
|
||||
-- javascript = { eslint_linter },
|
||||
-- javascriptreact = { eslint_linter },
|
||||
gdscript = { "gdlint" },
|
||||
latex = { "chktex" },
|
||||
-- lua = { "luacheck", "selene" },
|
||||
make = { "checkmake" },
|
||||
-- pandoc = { "proselint", "woke" },
|
||||
-- python = { "pylint" },
|
||||
sh = { "shellcheck" },
|
||||
svelte = { eslint_linter },
|
||||
systemd = { "systemdlint" },
|
||||
-- typescript = { eslint_linter },
|
||||
-- typescriptreact = { eslint_linter },
|
||||
yaml = { "yamllint" },
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, {
|
||||
callback = function()
|
||||
require("lint").try_lint()
|
||||
end,
|
||||
})
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1 @@
|
||||
require("tailwind-fold").setup({ ft = { "html", "svelte", "tsx" } })
|
||||
+1
@@ -92,6 +92,7 @@ api.nvim_create_autocmd("FileType", {
|
||||
vim.treesitter.start(buf, language)
|
||||
-- indent
|
||||
vim.bo[buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||
vim.bo[buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||
end,
|
||||
})
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 302 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user