Add 'dots/' from commit 'f64b634dd8fbb2c8a2898c3b9d0acc9452e4d966'

git-subtree-dir: dots
git-subtree-mainline: 2ad98cde17
git-subtree-split: f64b634dd8
This commit is contained in:
2025-10-04 18:28:04 +02:00
232 changed files with 11175 additions and 0 deletions

View File

@@ -0,0 +1 @@
[{ "key": "ctrl+b", "command": "workbench.action.toggleSidebarVisibility" }]

View File

@@ -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"
}

View File

@@ -0,0 +1 @@
Xcursor.size: 16

57
dots/.config/X11/xinitrc Normal file
View File

@@ -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

View File

@@ -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

12
dots/.config/feh/keys Normal file
View File

@@ -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

3
dots/.config/feh/themes Normal file
View File

@@ -0,0 +1,3 @@
feh \
-B black \
--auto-zoom

5
dots/.config/firefox/setup Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
for i in ~/.mozilla/firefox/*.*default*
do ln -s "$XDG_CONFIG_HOME"/firefox/user.js "$i/user.js"
done

View File

@@ -0,0 +1,15 @@
/*
* Note: has to be symlinked to profile directories for your
* firefox release
*
* E.g.
*
* ```sh
* ln -s user.js ~/.mozilla/firefox/*.default-release/user.js
* ```
* Or check out the `setup` script
*
*/
// Set default download directory
user_pref("browser.download.dir", "/home/h/dl");

View File

@@ -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

View File

@@ -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"

View File

@@ -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

48
dots/.config/home-manager/flake.lock generated Normal file
View File

@@ -0,0 +1,48 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1756991914,
"narHash": "sha256-4ve/3ah5H/SpL2m3qmZ9GU+VinQYp2MN1G7GamimTds=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "b08f8737776f10920c330657bee8b95834b7a70f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1756787288,
"narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View File

@@ -0,0 +1,30 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nixgl.url = "github:nix-community/nixGL";
};
outputs = { nixpkgs, home-manager, nixgl, ... }:
let
lib = nixpkgs.lib;
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
overlays = [ nixgl.overlay ];
config.allowUnfree = true;
};
in {
homeConfigurations = {
work = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = {
inherit nixgl;
};
modules = [ ./hosts/work ];
};
};
};
}

View File

@@ -0,0 +1,17 @@
{ pkgs, config, nixgl, ... }:
{
nixGL = {
packages = nixgl.packages;
defaultWrapper = "mesa";
};
home.username = "hektor";
home.homeDirectory = "/home/hektor";
home.stateVersion = "25.05";
home.packages = import ./packages.nix {
inherit pkgs;
inherit config;
};
}

View File

@@ -0,0 +1,3 @@
{ pkgs, config, ... }:
with pkgs; [ ]

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -0,0 +1,27 @@
# Fonts
font_family Iosevka Term SS08
font_size 24.0
# Cursor
cursor_shape block
cursor_blink_interval 0
shell_integration no-cursor
# Performance tuning
repaint_delay 8
# Transparency
# dynamic_background_opacity yes
# background_opacity 0.0
enable_audio_bell no
# Scrollback
scrollback_lines 16384
scrollback_pager nvimpager
include ./themes/zenwritten_light.conf

View File

@@ -0,0 +1,49 @@
# This file is auto-generated by shipwright.nvim
# vim:ft=kitty
## name: zenwritten_dark
## author: Michael Chris Lopez
## license: MIT
## upstream: https://github.com/mcchrish/zenbones.nvim/raw/main/extras/kitty/zenwritten_dark.conf
## blurb: A zenbones variant with zero hue and saturation.
foreground #BBBBBB
background #191919
selection_foreground #BBBBBB
selection_background #404040
# Cursor colors
cursor #C9C9C9
cursor_text_color #191919
# URL underline color when hovering with mouse
# kitty window border colors
# OS Window titlebar colors
# Tab bar colors
active_tab_foreground #BBBBBB
active_tab_background #65435E
inactive_tab_foreground #BBBBBB
inactive_tab_background #303030
# Colors for marks (marked text in the terminal)
# The basic 16 colors
# black
color0 #191919
color8 #3D3839
# red
color1 #DE6E7C
color9 #E8838F
# green
color2 #819B69
color10 #8BAE68
# yellow
color3 #B77E64
color11 #D68C67
# blue
color4 #6099C0
color12 #61ABDA
# magenta
color5 #B279A7
color13 #CF86C1
# cyan
color6 #66A5AD
color14 #65B8C1
# white
color7 #BBBBBB
color15 #8E8E8E
# You can set the remaining 240 colors as color16 to color255.

View File

@@ -0,0 +1,49 @@
# This file is auto-generated by shipwright.nvim
# vim:ft=kitty
## name: zenwritten_light
## author: Michael Chris Lopez
## license: MIT
## upstream: https://github.com/mcchrish/zenbones.nvim/raw/main/extras/kitty/zenwritten_light.conf
## blurb: A zenbones variant with zero hue and saturation.
foreground #353535
background #EEEEEE
selection_foreground #353535
selection_background #D7D7D7
# Cursor colors
cursor #353535
cursor_text_color #EEEEEE
# URL underline color when hovering with mouse
# kitty window border colors
# OS Window titlebar colors
# Tab bar colors
active_tab_foreground #353535
active_tab_background #DEB9D6
inactive_tab_foreground #353535
inactive_tab_background #CFCFCF
# Colors for marks (marked text in the terminal)
# The basic 16 colors
# black
color0 #EEEEEE
color8 #C6C3C3
# red
color1 #A8334C
color9 #94253E
# green
color2 #4F6C31
color10 #3F5A22
# yellow
color3 #944927
color11 #803D1C
# blue
color4 #286486
color12 #1D5573
# magenta
color5 #88507D
color13 #7B3B70
# cyan
color6 #3B8992
color14 #2B747C
# white
color7 #353535
color15 #5C5C5C
# You can set the remaining 240 colors as color16 to color255.

View File

@@ -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.

View File

@@ -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

16
dots/.config/mpv/mpv.conf Normal file
View File

@@ -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

View File

@@ -0,0 +1,66 @@
default_keybindings = false
flip_status_indicators = true
[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"
"/" = "focus search"
"Q" = "focus queue"
"L" = "focus library"
"1" = "focus queue"
"2" = "focus library"
"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"
[theme]
primary="#aaaaaa"
secondary="#555555"
background="1a1a1a"
title="#cccccc"
title_secondary="#aaaaaa"
playing="#ffffff"
playing_bg="1a1a1a"
playing_selected="#ffffff"
highlight="#cccccc"
highlight_bg="#333333"
error="#ffffff"
error_bg="#333333"
statusbar="#cccccc"
statusbar_bg="#1a1a1a"
statusbar_progress="#cccccc"
statusbar_progress_bg="#1a1a1a"
cmdline="#cccccc"
cmdline_bg="#1a1a1a"
search_match="#ffffff"
backend="pipe"
notify="false"

View File

@@ -0,0 +1,3 @@
username = 'hektor.misplon@gmail.com'
auth_type = 0
auth_data = 'KDEzMzc9PXRydTMpPzo='

View File

@@ -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

View File

@@ -0,0 +1 @@
experimental-features = nix-command flakes

View File

@@ -0,0 +1,16 @@
require("codecompanion").setup({
extensions = {
mcphub = {
callback = "mcphub.extensions.codecompanion",
opts = {
make_vars = true,
make_slash_commands = true,
show_result_in_chat = true
}
}
},
strategies = {
chat = { adapter = "openai" },
inline = { adapter = "openai" },
},
})

View File

@@ -0,0 +1,28 @@
require("conform").setup({
format_on_save = {
lsp_fallback = true,
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 },
lua = { "stylua" }, -- configured in stylua.toml
markdown = { "prettierd", "prettier", stop_after_first = true },
javascript = { "prettierd", "prettier", stop_after_first = true },
javascriptreact = { "prettierd", "prettier", stop_after_first = true },
json = { "prettierd", "prettier", stop_after_first = true },
jsonc = { "prettierd", "prettier", stop_after_first = true },
python = { "isort", "black" },
svelte = { "prettierd", "prettier", stop_after_first = true },
typescript = { "prettierd", "prettier", stop_after_first = true },
typescriptreact = { "prettierd", "prettier", stop_after_first = true },
yaml = { "prettierd", "prettier", stop_after_first = true },
},
})

View File

@@ -0,0 +1 @@
require("copilot_cmp").setup()

View File

@@ -0,0 +1 @@
require("copilot").setup({})

View File

@@ -0,0 +1,7 @@
require("eyeliner").setup({
highlight_on_key = true,
dim = true,
})
vim.api.nvim_set_hl(0, "EyelinerPrimary", { bold = true, underline = true })
vim.api.nvim_set_hl(0, "EyelinerSecondary", { underline = true })

View File

@@ -0,0 +1,16 @@
local fzf = require("fzf-lua")
fzf.setup({ "max-perf" })
vim.keymap.set("n", "<leader>f<leader>", fzf.builtin) -- Help
vim.keymap.set("n", "<leader>fc", fzf.commands)
vim.keymap.set("n", "<leader>ff", fzf.files)
vim.keymap.set("n", "<leader>fg", fzf.live_grep_native)
vim.keymap.set("n", "<leader>fb", fzf.buffers)
vim.keymap.set("n", "<leader>fd", fzf.diagnostics_workspace)
vim.keymap.set("n", "<leader>fhe", fzf.help_tags)
vim.keymap.set("n", "<leader>fhi", fzf.search_history)
vim.keymap.set("n", "<leader>fma", fzf.marks)
vim.keymap.set("n", "<leader>fma", fzf.man_pages)
vim.keymap.set("i", "<c-f>", fzf.complete_path)

View File

@@ -0,0 +1,8 @@
local gitsigns = require("gitsigns")
gitsigns.setup({
current_line_blame_opts = { delay = 0 },
current_line_blame_formatter = "<author>, <author_time:%R> - <summary>",
})
vim.api.nvim_create_user_command("Blame", gitsigns.toggle_current_line_blame, { nargs = "?" })

View File

@@ -0,0 +1,10 @@
require("image").setup({
backend = "kitty",
kitty_method = "normal",
processor = "magick_cli",
integrations = {
markdown = {
filetypes = { "markdown", "pandoc" },
},
},
})

View File

@@ -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" })

View File

@@ -0,0 +1,146 @@
require("neodev").setup() -- should setup before lspconfig
local lspconfig = require("lspconfig")
-- vim.g.coq_settings = { auto_start = 'shut-up' }
-- local capabilities = coq.lsp_ensure_capabilities()
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 = {},
-- marksman = {},
pyright = {},
-- tsserver = {},
svelte = {
plugin = {
svelte = {
defaultScriptLanguage = "ts",
},
},
},
tailwindcss = {},
-- vtsls = {},
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
lspconfig[server].setup(config)
end
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,
})

View File

@@ -0,0 +1,313 @@
local ls = require("luasnip")
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local c = ls.choice_node
local d = ls.dynamic_node
local r = ls.restore_node
local l = require("luasnip.extras").lambda
local rep = require("luasnip.extras").rep
local p = require("luasnip.extras").partial
local m = require("luasnip.extras").match
local n = require("luasnip.extras").nonempty
local dl = require("luasnip.extras").dynamic_lambda
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local conds = require("luasnip.extras.expand_conditions")
ls.config.set_config({
history = true,
update_events = "TextChanged,TextChangedI",
delete_check_events = "TextChanged",
ext_prio_increase = 1,
enable_autosnippets = true,
store_selection_keys = "<Tab>",
})
local function copy(args)
return args[1]
end
local function bash(_, _, command)
local file = io.popen(command, "r")
local res = {}
if file then
for line in file:lines() do
table.insert(res, line)
end
end
return res
end
local date_input = function(args, snip, old_state, date_format)
print(args, snip, old_state)
return sn(nil, i(1, os.date(date_format or "%Y-%m-%d")))
end
-- -- FIXME: EXAMPLE
-- ls.add_snippets("all", {
-- -- arg1: trigger `fn`,
-- -- arg2: nodes to insert into buffer on expansion.
-- s("fn", {
-- t("//Parameters: "), -- Text.
-- f(copy, 2), -- 1: function, 2: placeholders to copy text from
-- t({ "", "function " }), -- placeholder/insert.
-- i(1),
-- t("("), -- placeholder with initial text.
-- i(2, "int foo"), -- linebreak
-- t({ ") {", "\t" }), -- last placeholder, snippet exit point
-- i(0),
-- t({ "", "}" }),
-- }),
-- s("class", {
-- -- Choice: Switch between two different Nodes, first parameter is its position, second a list of nodes.
-- c(1, {
-- t("public "),
-- t("private "),
-- }),
-- t("class "),
-- i(2),
-- t(" "),
-- c(3, {
-- t("{"),
-- -- sn: Nested Snippet. Instead of a trigger, it has a position, just like insert-nodes. !!! These don't expect a 0-node!!!!
-- -- Inside Choices, Nodes don't need a position as the choice node is the one being jumped to.
-- sn(nil, {
-- t("extends "),
-- -- restoreNode: stores and restores nodes.
-- -- pass position, store-key and nodes.
-- r(1, "other_class", i(1)),
-- t(" {"),
-- }),
-- sn(nil, {
-- t("implements "),
-- -- no need to define the nodes for a given key a second time.
-- r(1, "other_class"),
-- t(" {"),
-- }),
-- }),
-- t({ "", "\t" }),
-- i(0),
-- t({ "", "}" }),
-- }),
-- -- Alternative printf-like notation for defining snippets. It uses format
-- -- string with placeholders similar to the ones used with Python's .format().
-- s(
-- "fmt1",
-- fmt("To {title} {} {}.", {
-- i(2, "Name"),
-- i(3, "Surname"),
-- title = c(1, { t("Mr."), t("Ms.") }),
-- })
-- ),
-- -- To escape delimiters use double them, e.g. `{}` -> `{{}}`.
-- -- Multi-line format strings by default have empty first/last line removed.
-- -- Indent common to all lines is also removed. Use the third `opts` argument
-- -- to control this behaviour.
-- s(
-- "fmt2",
-- fmt(
-- [[
-- foo({1}, {3}) {{
-- return {2} * {4}
-- }}
-- ]],
-- {
-- i(1, "x"),
-- rep(1),
-- i(2, "y"),
-- rep(2),
-- }
-- )
-- ),
-- -- Empty placeholders are numbered automatically starting from 1 or the last
-- -- value of a numbered placeholder. Named placeholders do not affect numbering.
-- s(
-- "fmt3",
-- fmt("{} {a} {} {1} {}", {
-- t("1"),
-- t("2"),
-- a = t("A"),
-- })
-- ),
-- -- The delimiters can be changed from the default `{}` to something else.
-- s("fmt4", fmt("foo() { return []; }", i(1, "x"), { delimiters = "[]" })),
-- -- `fmta` is a convenient wrapper that uses `<>` instead of `{}`.
-- s("fmt5", fmta("foo() { return <>; }", i(1, "x"))),
-- -- By default all args must be used. Use strict=false to disable the check
-- s(
-- "fmt6",
-- fmt("use {} only", { t("this"), t("not this") }, { strict = false })
-- ),
-- -- Use a dynamic_node to interpolate the output of a
-- -- function (see date_input above) into the initial
-- -- value of an insert_node.
-- s("novel", {
-- t("It was a dark and stormy night on "),
-- d(1, date_input, {}, { user_args = { "%A, %B %d of %Y" } }),
-- t(" and the clocks were striking thirteen."),
-- }),
-- -- Parsing snippets: First parameter: Snippet-Trigger, Second: Snippet body.
-- -- Placeholders are parsed into choices with 1. the placeholder text(as a snippet) and 2. an empty string.
-- -- This means they are not SELECTed like in other editors/Snippet engines.
-- ls.parser.parse_snippet(
-- "lspsyn",
-- "Wow! This ${1:Stuff} really ${2:works. ${3:Well, a bit.}}"
-- ),
-- -- When wordTrig is set to false, snippets may also expand inside other words.
-- ls.parser.parse_snippet(
-- { trig = "te", wordTrig = false },
-- "${1:cond} ? ${2:true} : ${3:false}"
-- ),
-- -- When regTrig is set, trig is treated like a pattern, this snippet will expand after any number.
-- ls.parser.parse_snippet({ trig = "%d", regTrig = true }, "A Number!!"),
-- -- Using the condition, it's possible to allow expansion only in specific cases.
-- s("cond", {
-- t("will only expand in c-style comments"),
-- }, {
-- condition = function(line_to_cursor, matched_trigger, captures)
-- -- optional whitespace followed by //
-- return line_to_cursor:match("%s*//")
-- end,
-- }),
-- -- there's some built-in conditions in "luasnip.extras.expand_conditions".
-- s("cond2", {
-- t("will only expand at the beginning of the line"),
-- }, {
-- condition = conds.line_begin,
-- }),
-- -- The last entry of args passed to the user-function is the surrounding snippet.
-- s(
-- { trig = "a%d", regTrig = true },
-- f(function(_, snip)
-- return "Triggered with " .. snip.trigger .. "."
-- end, {})
-- ),
-- -- It's possible to use capture-groups inside regex-triggers.
-- s(
-- { trig = "b(%d)", regTrig = true },
-- f(function(_, snip)
-- return "Captured Text: " .. snip.captures[1] .. "."
-- end, {})
-- ),
-- s({ trig = "c(%d+)", regTrig = true }, {
-- t("will only expand for even numbers"),
-- }, {
-- condition = function(line_to_cursor, matched_trigger, captures)
-- return tonumber(captures[1]) % 2 == 0
-- end,
-- }),
-- -- Use a function to execute any shell command and print its text.
-- s("bash", f(bash, {}, "ls")),
-- -- Short version for applying String transformations using function nodes.
-- s("transform", {
-- i(1, "initial text"),
-- t({ "", "" }),
-- -- lambda nodes accept an l._1,2,3,4,5, which in turn accept any string transformations.
-- -- This list will be applied in order to the first node given in the second argument.
-- l(l._1:match("[^i]*$"):gsub("i", "o"):gsub(" ", "_"):upper(), 1),
-- }),
-- s("transform2", {
-- i(1, "initial text"),
-- t("::"),
-- i(2, "replacement for e"),
-- t({ "", "" }),
-- -- Lambdas can also apply transforms USING the text of other nodes:
-- l(l._1:gsub("e", l._2), { 1, 2 }),
-- }),
-- s({ trig = "trafo(%d+)", regTrig = true }, {
-- -- env-variables and captures can also be used:
-- l(l.CAPTURE1:gsub("1", l.TM_FILENAME), {}),
-- }),
-- -- Set store_selection_keys = "<Tab>" (for example) in your
-- -- luasnip.config.setup() call to populate
-- -- TM_SELECTED_TEXT/SELECT_RAW/SELECT_DEDENT.
-- -- In this case: select a URL, hit Tab, then expand this snippet.
-- s("link_url", {
-- t('<a href="'),
-- f(function(_, snip)
-- -- TM_SELECTED_TEXT is a table to account for multiline-selections.
-- -- In this case only the first line is inserted.
-- return snip.env.TM_SELECTED_TEXT[1] or {}
-- end, {}),
-- t('">'),
-- i(1),
-- t("</a>"),
-- i(0),
-- }),
-- -- Shorthand for repeating the text in a given node.
-- s("repeat", { i(1, "text"), t({ "", "" }), rep(1) }),
-- -- Directly insert the ouput from a function evaluated at runtime.
-- s("part", p(os.date, "%Y")),
-- -- use matchNodes (`m(argnode, condition, then, else)`) to insert text
-- -- based on a pattern/function/lambda-evaluation.
-- -- It's basically a shortcut for simple functionNodes:
-- s("mat", {
-- i(1, { "sample_text" }),
-- t(": "),
-- m(1, "%d", "contains a number", "no number :("),
-- }),
-- -- The `then`-text defaults to the first capture group/the entire
-- -- match if there are none.
-- s("mat2", {
-- i(1, { "sample_text" }),
-- t(": "),
-- m(1, "[abc][abc][abc]"),
-- }),
-- -- It is even possible to apply gsubs' or other transformations
-- -- before matching.
-- s("mat3", {
-- i(1, { "sample_text" }),
-- t(": "),
-- m(
-- 1,
-- l._1:gsub("[123]", ""):match("%d"),
-- "contains a number that isn't 1, 2 or 3!"
-- ),
-- }),
-- -- `match` also accepts a function in place of the condition, which in
-- -- turn accepts the usual functionNode-args.
-- -- The condition is considered true if the function returns any
-- -- non-nil/false-value.
-- -- If that value is a string, it is used as the `if`-text if no if is explicitly given.
-- s("mat4", {
-- i(1, { "sample_text" }),
-- t(": "),
-- m(1, function(args)
-- -- args is a table of multiline-strings (as usual).
-- return (#args[1][1] % 2 == 0 and args[1]) or nil
-- end),
-- }),
-- -- The nonempty-node inserts text depending on whether the arg-node is
-- -- empty.
-- s("nempty", {
-- i(1, "sample_text"),
-- n(1, "i(1) is not empty!"),
-- }),
-- -- dynamic lambdas work exactly like regular lambdas, except that they
-- -- don't return a textNode, but a dynamicNode containing one insertNode.
-- -- This makes it easier to dynamically set preset-text for insertNodes.
-- s("dl1", {
-- i(1, "sample_text"),
-- t({ ":", "" }),
-- dl(2, l._1, 1),
-- }),
-- -- Obviously, it's also possible to apply transformations, just like lambdas.
-- s("dl2", {
-- i(1, "sample_text"),
-- i(2, "sample_text_2"),
-- t({ "", "" }),
-- dl(3, l._1:gsub("\n", " linebreak ") .. l._2, { 1, 2 }),
-- }),
-- }, {
-- key = "all",
-- })
require("luasnip.loaders.from_lua").lazy_load({ paths = { "~/.config/nvim/snips" } })
require("luasnip.loaders.from_vscode").lazy_load({ paths = { "~/.config/Code - Insiders/User/snippets" } })

View File

@@ -0,0 +1 @@
require("mcphub").setup({})

View File

@@ -0,0 +1,94 @@
local cmp = require("cmp")
local luasnip = require("luasnip")
-- TODO: Fix command mode completion (should behave similar to insert mode)
local c_j = cmp.mapping(function()
if cmp.visible() then
cmp.select_next_item()
else
cmp.complete()
cmp.select_next_item()
end
end, { "i", "s" })
local c_k = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
-- NOTE: Keep <C-k> fallback for digraphs
-- ```lua
-- cmp.complete()
-- cmp.select_prev_item()
-- ```
fallback()
end
end, { "i", "s" })
local c_h = cmp.mapping(function(fallback)
if luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" })
local c_l = cmp.mapping(function(fallback)
if cmp.visible() and cmp.get_active_entry() then
cmp.confirm()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { "i", "s" })
cmp.setup({
completion = {
autocomplete = false,
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
-- See `:h luasnip` for the commands
-- Note: have not added choice note mappings yet
mapping = cmp.mapping.preset.insert({
["<C-j>"] = c_j,
["<C-k>"] = c_k,
["<C-h>"] = c_h,
["<C-l>"] = c_l,
["<CR>"] = c_l,
}),
sources = {
{ name = "copilot", group_index = 2 },
{ name = "nvim_lsp", keyword_length = 8 },
{ name = "luasnip", max_item_count = 16 },
{ name = "path" },
{ name = "buffer", max_item_count = 8 },
},
window = {
completion = cmp.config.window.bordered({ border = { "", "", "", "", "", "", "", "" } }),
documentation = cmp.config.window.bordered({ border = { "", "", "", "", "", "", "", "" } }),
},
formatting = {
fields = {
"abbr",
"menu",
"kind",
},
format = function(entry, item)
-- Rename kind to shorthand
item.menu = ({
nvim_lsp = "[lsp]",
luasnip = "[snip]",
path = "[path]",
buffer = "[buf]",
})[entry.source.name]
return item
end,
expandable_indicator = true,
},
})

View File

@@ -0,0 +1 @@
require("dbee").setup()

View File

@@ -0,0 +1,3 @@
vim.opt.termguicolors = true
require("nvim-highlight-colors").setup({})

View File

@@ -0,0 +1,36 @@
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" },
}
-- TODO: Wouldn't it be possible / nice to only try to load the linters when they are
-- actually needed?
vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, {
callback = function()
require("lint").try_lint()
end,
})

View File

@@ -0,0 +1,4 @@
require("sniprun").setup({
selected_interpreters = { "JS_TS_deno" },
repl_enable = { "JS_TS_deno" },
})

View File

@@ -0,0 +1 @@
require("tailwind-fold").setup({ ft = { "html", "svelte", "tsx" } })

View File

@@ -0,0 +1,131 @@
local ts = require("treesj")
local vim = vim
local keymap = vim.keymap
local opt = vim.opt
local treesitter_configs = require("nvim-treesitter.configs")
treesitter_configs.setup({
-- Basically added what I might need from the docs
-- <https://github.com/nvim-treesitter/nvim-treesitter?tab=readme-ov-file#supported-languages>
ensure_installed = {
"awk",
"bash",
"bibtex",
"c",
"cmake",
"comment",
"cpp",
"css",
"csv",
"diff",
"dockerfile",
"dot",
"gdscript",
"gdshader",
"git_config",
"git_rebase",
"gitattributes",
"gitcommit",
"gitignore",
"glsl",
"gnuplot",
"go",
"godot_resource",
"gpg",
"graphql",
"haskell",
"html",
"java",
"javascript",
"jq",
"jsdoc",
"json",
"jsonc",
"latex",
"lua",
"luadoc",
"make",
"python",
"query",
"r",
"racket",
"readline",
"regex",
"requirements",
"scheme",
"scss",
"sql",
"ssh_config",
"supercollider",
"svelte",
"tmux",
"toml",
"tsv",
"tsx",
"typescript",
"udev",
"vim",
"vimdoc",
"xml",
"yaml",
"zathurarc",
},
highlight = {
enable = true,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "vv",
node_incremental = "vv",
scope_incremental = "VV",
node_decremental = "vd",
},
},
indent = {
enable = true,
},
sync_install = false,
auto_install = true,
ignore_install = {},
modules = {},
textobjects = {
select = {
enable = true,
lookahead = true,
keymaps = {
-- Functions
["if"] = "@function.inner",
["af"] = "@function.outer",
["ip"] = "@parameter.inner",
["ap"] = "@parameter.outer",
},
},
},
node_movement = {
enable = true,
keymaps = {
move_up = "vk",
move_down = "vj",
move_left = "vh",
move_right = "vl",
swap_left = "vH",
swap_right = "vL",
select_current_node = "vi",
},
swappable_textobjects = { "@function.outer", "@parameter.inner", "@statement.outer" },
allow_switch_parents = true,
allow_next_parent = true,
},
})
opt.foldmethod = "expr"
opt.foldexpr = "nvim_treesitter#foldexpr()"
opt.foldenable = false
-- TreeSJ
require("treesj").setup({
use_default_keymaps = false,
})
keymap.set("n", ";", ts.toggle, { desc = "Toggle join/split (TreeTSJ)" })

View File

@@ -0,0 +1 @@
require("trouble").setup()

View File

@@ -0,0 +1 @@
vim.cmd("colorscheme zenwritten")

View File

@@ -0,0 +1,19 @@
local json_newline = function()
local line = vim.api.nvim_get_current_line()
if line == "" then
print("line is empty")
return "o"
elseif string.byte(line, -1) == string.byte(",") then
return "o"
elseif string.byte(line, -1) == string.byte("{") then
print("line ends with '{'")
return "o"
elseif string.byte(line, -1) == string.byte("}") then
print("line ends with '}'")
return "o"
else
return "A,<CR>"
end
end
vim.keymap.set("n", "o", json_newline, { buffer = true, expr = true })

View File

@@ -0,0 +1,15 @@
-- NOTE: May want to move this, as it is more specific to wiki than to pandoc
vim.api.nvim_create_user_command("AnkiDeck", function()
local handle = io.popen("get-anki-decks")
local decks = {}
for line in handle:lines() do
table.insert(decks, line)
end
handle:close()
vim.ui.select(decks, { prompt = "Select Anki deck" }, function(choice)
if choice then
vim.api.nvim_put({ choice }, "", true, true)
end
end)
end, {})

View File

@@ -0,0 +1,9 @@
require("vim")
require("ftdetect")
require("keymaps")
require("highlight")
require("paq-setup")
require("diagnostic")
-- vim.opt.background = "dark"
-- vim.opt.laststatus = 3

View File

@@ -0,0 +1,10 @@
-- Source: <https://vonheikemen.github.io/devlog/tools/neovim-lsp-client-guide/>
vim.diagnostic.config({
signs = true,
underline = false,
severity_sort = true,
})
vim.keymap.set("n", "<leader>dl", vim.diagnostic.open_float)
vim.keymap.set("n", "<leader>dj", vim.diagnostic.goto_prev)
vim.keymap.set("n", "<leader>dk", vim.diagnostic.goto_next)

View File

@@ -0,0 +1,11 @@
vim.filetype.add({
filename = {
[".lintstagedrc"] = "json",
},
pattern = {
["tsconfig.*.json"] = "jsonc",
[".*/%.vscode/.*%.json"] = "jsonc",
[".*/%.ssh/config%.d/.*"] = "sshconfig",
["%.env.*"] = "dotenv",
},
})

View File

@@ -0,0 +1,14 @@
local autocmd = vim.api.nvim_create_autocmd
local augroup = vim.api.nvim_create_augroup
local function yank_highlight()
vim.highlight.on_yank({ higroup = "Visual", timeout = 150 })
end
-- Yanked text highlight feedback (source: https://github.com/nvim-lua/kickstart.nvim/blob/master/init.lua)
augroup("YankHighlight", { clear = true })
autocmd("TextYankPost", {
desc = "Highlight when yanking (copying) text",
group = "YankHighlight",
callback = yank_highlight,
})

View File

@@ -0,0 +1,13 @@
local set = vim.keymap.set
set("n", "<leader>cx", "<cmd>!chmod +x %<CR>", { silent = true, desc = "Run `chmod +x` on current file" })
set("n", "yp", "<cmd>let @+ = expand('%r')<CR>:p<CR>", { silent = true, desc = "Yank path" })
-- Remap native NeoVim comment keymaps
set({ "n", "x" }, "<leader>c", "gc", { remap = true, desc = "Toggle comment" })
set("n", "<leader>cc", "gcc", { remap = true, desc = "Toggle comment line" })
set("o", "<leader>c", "gc", { remap = true, desc = "Comment textobject" })
-- Move lines
set("v", "K", ": '<,'>move '<-2<cr>gv")
set("v", "J", ": '<,'>move '>+1<cr>gv")

View File

@@ -0,0 +1,80 @@
-- Automate paq installation {{{
local function clone_paq()
local path = vim.fn.stdpath("data") .. "/site/pack/paqs/start/paq-nvim"
local is_installed = vim.fn.empty(vim.fn.glob(path)) == 0
if not is_installed then
vim.fn.system({ "git", "clone", "--depth=1", "https://github.com/savq/paq-nvim.git", path })
return true
end
end
local function bootstrap_paq(packages)
local first_install = clone_paq()
vim.cmd.packadd("paq-nvim")
local paq = require("paq")
if first_install then
vim.notify("Installing plugins... If prompted, hit Enter to continue.")
end
paq(packages)
paq.install()
end
vim.api.nvim_create_autocmd("VimEnter", {
once = true,
callback = function()
local pkgs_count = #require("paq").query("to_install")
if pkgs_count < 1 then
return
end
vim.notify(string.format("There are %d to install", pkgs_count))
end,
})
-- }}}
-- Set up paq plugins {{{
bootstrap_paq({
{ "savq/paq-nvim" },
{ "jinh0/eyeliner.nvim" },
{ "ibhagwan/fzf-lua" },
{ "barreiroleo/ltex_extra.nvim" },
{ "neovim/nvim-lspconfig" },
{ "https://git.sr.ht/~whynothugo/lsp_lines.nvim" },
{ "linrongbin16/lsp-progress.nvim" },
{ "folke/neodev.nvim" }, -- Nvim
{ "b0o/schemastore.nvim" }, -- JSON Schemas
{ "mfussenegger/nvim-lint" },
{ "stevearc/conform.nvim" },
{ "L3MON4D3/LuaSnip" },
{ "saadparwaiz1/cmp_luasnip" },
{ "hrsh7th/nvim-cmp" },
{ "hrsh7th/cmp-nvim-lsp" },
{ "hrsh7th/cmp-buffer" },
{ "hrsh7th/cmp-path" },
{ "nvim-lua/plenary.nvim" },
{ "MunifTanjim/nui.nvim" },
{ "folke/trouble.nvim" },
{ "rktjmp/shipwright.nvim" }, -- For building themes based on lush (e.g. terminal)
{ "rktjmp/lush.nvim" },
{ "mcchrish/zenbones.nvim" }, -- Zenbones themes (contains zenwritten)
{ "theHamsta/crazy-node-movement" },
{ "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" },
{ "nvim-treesitter/nvim-treesitter-textobjects" },
-- { "nvim-treesitter/nvim-treesitter-context" },
{ "JoosepAlviste/nvim-ts-context-commentstring" }, -- commentstring based on cursor position (e.g. for Svelte)
{ "Wansmer/treesj" },
{ "michaelb/sniprun", build = "sh install.sh" },
{ "lewis6991/gitsigns.nvim" },
{ "brenoprata10/nvim-highlight-colors" },
{ "razak17/tailwind-fold.nvim" },
{ "rmagatti/auto-session" },
{ "kndndrj/nvim-dbee" },
{ "3rd/image.nvim", build = false },
{ "polarmutex/beancount.nvim" },
{ "jamesblckwell/nvimkit.nvim" },
{ 'olimorris/codecompanion.nvim' },
{ "ravitemer/mcphub.nvim", build = "pnpm install -g mcp-hub@latest" },
{ "zbirenbaum/copilot.lua" },
{ "zbirenbaum/copilot-cmp" },
{ "qvalentin/helm-ls.nvim", ft = "helm" },
})
-- }}}

View File

@@ -0,0 +1,5 @@
vim.cmd([[
set runtimepath^=~/.vim runtimepath+=~/.vim/after
let &packpath = &runtimepath
source ~/.vimrc"
]])

View File

@@ -0,0 +1,27 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local f = ls.function_node
local TM_FILENAME = function(_, snip)
return snip.env.TM_FILENAME
end
local TM_FILENAME_BASE = function(_, snip)
return snip.env.TM_FILENAME_BASE
end
local NAME = "Hektor Misplon"
local LOCALHOST = "localhost"
local LOCALHOST_IP = "127.0.0.1"
return {
s({ trig = "fn", desc = "Filename" }, { f(TM_FILENAME_BASE) }),
s({ trig = "fne", dscr = "Filename (+extension)" }, { f(TM_FILENAME) }),
s({ trig = "hm" }, { t(NAME) }),
s({ trig = "loho" }, { t(LOCALHOST) }),
s({ trig = "lohoi" }, { t(LOCALHOST_IP) }),
s({ trig = "date" }, { f(function()
return os.date("%Y-%m-%d")
end) }),
}

View File

@@ -0,0 +1,119 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
return {
-- Flex
s({ trig = "b1", dscr = "Add 'border: 1px <color>;'" }, {
t("border: 1px solid "),
i(1),
t(";"),
i(0),
}),
s({ trig = "dfl", dscr = "Add 'display: flex;'" }, {
t("display: flex;"),
i(0),
}),
s({ trig = "flr", dscr = "Add 'flex-direction: row;'" }, {
t("flex-direction: row;"),
i(0),
}),
s({ trig = "flc", dscr = "Add 'flex-direction: column;'" }, {
t("flex-direction: column;"),
i(0),
}),
s({ trig = "flw", dscr = "Add 'flex-wrap: wrap;'" }, {
t("flex-wrap: wrap;"),
i(0),
}),
s({ trig = "dfc", dscr = "Display flex column" }, {
t("display: flex;"),
t("flex-direction: column;"),
i(0),
}),
-- Grid
s({ trig = "dg", dscr = "Add 'display: grid;'" }, {
t("display: grid;"),
i(0),
}),
-- Block
s({ trig = "db", dscr = "Add 'display: block;'" }, {
t("display: block;"),
i(0),
}),
-- None
s({ trig = "dn", dscr = "Add 'display: none;'" }, {
t("display: none;"),
i(0),
}),
-- CSS Variables
s({ trig = "v", dscr = "Add CSS variable" }, {
t("var(--"),
i(1),
t(")"),
i(0),
}),
-- Margin
s({ trig = "m", dscr = "Add 'margin: ;'" }, {
t("margin: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "mt", dscr = "Add 'margin-top: ;'" }, {
t("margin-top: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "mr", dscr = "Add 'margin-right: ;'" }, {
t("margin-right: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "mb", dscr = "Add 'margin-bottom: ;'" }, {
t("margin-bottom: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "ml", dscr = "Add 'margin-left: ;'" }, {
t("margin-left: "),
i(1),
t(";"),
i(0),
}),
-- Padding
s({ trig = "p", dscr = "Add 'padding: ;'" }, {
t("padding: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "pt", dscr = "Add 'padding-top: ;'" }, {
t("padding-top: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "pr", dscr = "Add 'padding-right: ;'" }, {
t("padding-right: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "pb", dscr = "Add 'padding-bottom: ;'" }, {
t("padding-bottom: "),
i(1),
t(";"),
i(0),
}),
s({ trig = "pl", dscr = "Add 'padding-left: ;'" }, {
t("padding-left: "),
i(1),
t(";"),
i(0),
}),
}

View File

@@ -0,0 +1,67 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
return {
s({ trig = "ifdef" }, {
t("#ifdef GL_ES"),
t("precision mediump float;"),
i(1),
t("#endif"),
}),
s({ trig = "defpi" }, {
t("#define PI 3.14159265359"),
}),
s({ trig = "main" }, {
t("void main() {"),
i(1),
t("}"),
}),
s({ trig = "uni" }, {
t("uniform "),
i(1),
t(";"),
}),
s({ trig = "unif" }, {
t("uniform float "),
i(1),
t(";"),
}),
s({ trig = "univ" }, {
t("uniform vec"),
i(1),
t(" float "),
i(2),
t(";"),
}),
s({ trig = "univ2" }, {
t("uniform vec2 float "),
i(1),
t(";"),
}),
s({ trig = "univ3" }, {
t("uniform vec3 float "),
i(1),
t(";"),
}),
s({ trig = "univ4" }, {
t("uniform vec4 float "),
i(1),
t(";"),
}),
s({ trig = "f" }, {
t("float "),
i(1),
t(";"),
}),
s({ trig = "v" }, {
t("vec"),
}),
s({ trig = "ss" }, {
t("smoothstep("),
i(1),
t(")"),
i(2),
}),
}

View File

@@ -0,0 +1,25 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
return {
s({ trig = "clg", dscr = "console.log" }, {
t("console.log("),
i(1),
t(")"),
i(0),
}),
s({ trig = "Js", dscr = "JSON.stringify" }, {
t("JSON.stringify("),
i(1),
t(")"),
i(0),
}),
s({ trig = "Jsf", dscr = "JSON.stringify (formatted)" }, {
t("JSON.stringify("),
i(1),
t(", 0, 2)"),
i(0),
}),
}

View File

@@ -0,0 +1,39 @@
local ls = require("luasnip")
local s = ls.snippet
local i = ls.insert_node
local d = ls.dynamic_node
local sn = ls.snippet_node
local fmta = require("luasnip.extras.fmt").fmta
-- Taken from https://ejmastnak.com/tutorials/vim-latex/luasnip/#anatomy
local get_visual = function(_, parent)
if #parent.snippet.env.LS_SELECT_RAW > 0 then
return sn(nil, i(1, parent.snippet.env.LS_SELECT_RAW))
else
return sn(nil, i(1))
end
end
return {
s(
{ trig = "^h", regTrig = true, dscr = "Markdown header" },
fmta("# <><>", {
d(1, get_visual),
i(0),
})
),
s(
{ trig = "^sec", regTrig = true, dscr = "Markdown header" },
fmta("## <><>", {
d(1, get_visual),
i(0),
})
),
s(
{ trig = "^ssec", regTrig = true, dscr = "Markdown header" },
fmta("### <><>", {
d(1, get_visual),
i(0),
})
),
}

View File

@@ -0,0 +1,15 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
return {
s("host", {
t("Host "),
i(1, "alias"),
t({ "", "\tHostName " }),
i(2, "name"),
t({ "", "\tUser " }),
i(3, "user"),
}),
}

View File

@@ -0,0 +1,30 @@
local ls = require("luasnip")
local s = ls.snippet
local t = ls.text_node
local i = ls.insert_node
-- TODO: extends html, javascript, css
return {
s("oM", {
t({ "onMount(() => {" }),
i(0),
t({ "})" }),
}),
s("oD", {
t({ "onDestroy(() => {" }),
i(0),
t({ "})" }),
}),
s("preJsf", {
t({ "<pre>" }),
i(0),
t({ "{JSON.stringify($0, 0, 2)}" }),
t({ "</pre>" }),
}),
s(":g", {
t({ ":global(" }),
i(0),
t({ ")" }),
}),
}

View File

@@ -0,0 +1,2 @@
indent_type = "Spaces"
indent_width = 2

View File

@@ -0,0 +1,15 @@
local cmd = vim.cmd
local map = vim.keymap.set
cmd([[
source ~/.vim/init/base.vim
source ~/.vim/init/mappings.vim
]])
require("keymaps")
map({ "n", "v" }, "<leader>p", '<cmd>call VSCodeNotify("workbench.action.quickOpen")<cr>')
map({ "n", "v" }, "<leader>f", '<cmd>call VSCodeNotify("workbench.action.findInFiles")<cr>')
map({ "n", "v" }, "<leader>b", '<cmd>call VSCodeNotify("workbench.action.toggleSidebarVisibility")<cr>')
map({ "n", "v" }, "<leader>t", '<cmd>call VSCodeNotify("workbench.action.togglePanel")<cr>')
map({ "n", "v" }, "<leader>ca", "<cmd>call VSCodeNotify('editor.action.quickFix')<cr>")

View File

@@ -0,0 +1,44 @@
backend = "glx";
glx-no-stencil = false;
glx-copy-from-font = false;
glx-no-rebind-pixmap = true;
shadow = true;
shadow-radius = 16;
shadow-opacity = 0.5;
shadow-offset-x = -16;
shadow-offset-y = -16;
shadow-color = "#000000"
active-opacity = 1;
inactive-opacity = 0.62;
frame-opacity = 1;
inactive-opacity-override = false;
fading = true;
fade-in-step = 0.02;
fade-out-step = 0.02;
fade-delta = 4
shadow-exclude = ["class_g = 'Rofi'", "class_g = 'trayer'"];
focus-exclude = ["class_g = 'Rofi'", "class_g = 'albert'", "class_g = 'trayer'"];
blur-background-exclude = ["class_g = 'Rofi'", "class_g = 'albert'", "class_g = 'trayer'"];
blur: {
method = "dual_kawase";
strength = 8;
background = true;
background-frame = true;
background-fixed = false;
}
wintypes:
{
dock = { shadow = false; };
dnd = { shadow = false; };
tooltip = { shadow = false; };
menu = { opacity = false; };
dropdown_menu = { opacity = false; };
popup_menu = { opacity = false; };
utility = { opacity = false; };
};

View File

@@ -0,0 +1,60 @@
context.properties = {}
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
{ name = libpipewire-module-rt
args = { nice.level = -11 }
flags = [ ifexists nofail ]
}
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-metadata }
{ name = libpipewire-module-protocol-pulse
args = { }
}
]
context.exec = [
{ path = "pactl" args = "load-module module-always-sink" }
# Automatically switch to (bluetooth) headphones
{ path = "pactl" args = "load-module module-switch-on-connect" }
]
stream.properties = { }
pulse.properties = {
server.address = [ "unix:native" ]
vm.overrides = { pulse.min.quantum = 1024/48000 }
}
pulse.rules = [
{
matches = [ { } ]
actions = { update-props = { } }
}
{
matches = [
{ application.process.binary = "teams" }
{ application.process.binary = "teams-insiders" }
{ application.process.binary = "skypeforlinux" }
]
actions = { quirks = [ force-s16-info ] }
}
{
matches = [ { application.process.binary = "firefox" } ]
actions = { quirks = [ remove-capture-dont-move ] }
}
{
matches = [ { application.name = "~speech-dispatcher*" } ]
actions = {
update-props = {
pulse.min.req = 1024/48000 # 21ms
pulse.min.quantum = 1024/48000 # 21ms
}
}
}
]

View File

@@ -0,0 +1,159 @@
[colors]
background = #cccccc
background-alt = #aaaaaa
foreground = #111111
primary = #111111
secondary = #555555
disabled = #888888
[bar/example]
height = 16pt
radius = 0
background = ${colors.background}
foreground = ${colors.foreground}
padding-left = 0pt
module-margin = 1
separator = " "
separator-foreground = ${colors.disabled}
font-0 = Iosevka Term SS08:size=12;4
modules-left = xworkspaces xwindow
modules-center = project pomo
modules-right = filesystem pulseaudio memory cpu wlan eth date dunst-snooze xkeyboard battery
cursor-click = pointer
cursor-scroll = ns-resize
enable-ipc = true
[module/xworkspaces]
type = internal/xworkspaces
label-active = %name%
label-active-background = ${colors.background-alt}
label-active-underline= ${colors.primary}
label-active-padding = 4pt
label-occupied = %name%
label-occupied-padding = 4pt
label-urgent = %name%
label-urgent-background = ${colors.alert}
label-urgent-padding = 4pt
label-empty = %name%
label-empty-foreground = ${colors.disabled}
label-empty-padding = 4pt
[module/xwindow]
type = internal/xwindow
label = %title:0:60:...%
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
label-mounted = %mountpoint% %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.disabled}
[module/pulseaudio]
type = internal/pulseaudio
format-volume-prefix = "VOL "
format-volume-prefix-foreground = ${colors.primary}
format-volume = <label-volume>
label-volume = %percentage%%
label-muted = muted
label-muted-foreground = ${colors.disabled}
[module/memory]
type = internal/memory
interval = 2
format-prefix = "RAM "
format-prefix-foreground = ${colors.primary}
label = %percentage_used:2%%
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = "CPU "
format-prefix-foreground = ${colors.primary}
label = %percentage:2%%
[network-base]
type = internal/network
interval = 5
format-connected = <label-connected>
format-disconnected = <label-disconnected>
label-disconnected = %ifname% disconnected
[module/wlan]
inherit = network-base
interface-type = wireless
label-connected = %ifname% %local_ip% %essid%
[module/eth]
inherit = network-base
interface-type = wired
label-connected = %ifname% %local_ip%
[module/date]
type = internal/date
interval = 1
date = W%V %d %b %H:%M
date-alt = %Y-%m-%d %H:%M:%S
label = %date%
label-foreground = ${colors.primary}
[module/pomo]
type = custom/script
exec = ~/.bin/sb-pomo
label-background = #fff
interval = 1
[module/focus-mode]
type = custom/script
exec = [[ -f /tmp/focus-mode ]] && echo "Focus"
label-background = #af0
interval = 1
[module/project]
type = custom/script
exec = cat ~/.project
label-background = #fa0
interval = 1000
[module/xkeyboard]
type = internal/xkeyboard
label-layout = %name% %variant%
blacklist-0 = num lock
blacklist-1 = scroll lock
[module/battery]
type = internal/battery
full-at = 99
low-at = 20
battery = BAT0
adapter = ADP1
poll-interval = 5
label-charging = .%percentage%++
format-low = <label-low><animation-low>
label-discharging = .%percentage%-- %time% %consumption%W
animation-low-0 = !
animation-low-1 = .
animation-low-framerate = 200
[settings]
screenchange-reload = true
pseudo-transparency = true
; vim:ft=dosini

View File

@@ -0,0 +1,188 @@
[colors]
background = #cccccc
background-alt = #aaaaaa
foreground = #111111
primary = #111111
secondary = #555555
alert = #A54242
disabled = #888888
[bar/example]
height = 16pt
radius = 0
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 0pt
border-size = 0pt
border-color = #00000000
padding-left = 0pt
padding-right = 4pt
module-margin = 1
separator = " "
separator-foreground = ${colors.disabled}
font-0 = Iosevka Term SS08:size=12;4
modules-left = xworkspaces xwindow
modules-center = project pomo
modules-right = filesystem pulseaudio memory cpu wlan eth date dunst-snooze xkeyboard battery
cursor-click = pointer
cursor-scroll = ns-resize
enable-ipc = true
[module/xworkspaces]
type = internal/xworkspaces
label-active = %name%
label-active-background = ${colors.background-alt}
label-active-underline= ${colors.primary}
label-active-padding = 4pt
label-occupied = %name%
label-occupied-padding = 4pt
label-urgent = %name%
label-urgent-background = ${colors.alert}
label-urgent-padding = 4pt
label-empty = %name%
label-empty-foreground = ${colors.disabled}
label-empty-padding = 4pt
enable-scroll = false
enable-click = false
[module/xwindow]
type = internal/xwindow
label = %title:0:60:...%
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
label-mounted = %mountpoint% %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.disabled}
[module/pulseaudio]
type = internal/pulseaudio
format-volume-prefix = "VOL "
format-volume-prefix-foreground = ${colors.primary}
format-volume = <label-volume>
label-volume = %percentage%%
label-muted = muted
label-muted-foreground = ${colors.disabled}
[module/memory]
type = internal/memory
interval = 2
format-prefix = "RAM "
format-prefix-foreground = ${colors.primary}
label = %percentage_used:2%%
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = "CPU "
format-prefix-foreground = ${colors.primary}
label = %percentage:2%%
[network-base]
type = internal/network
interval = 5
format-connected = <label-connected>
format-disconnected = <label-disconnected>
label-disconnected = %ifname% disconnected
[module/wlan]
inherit = network-base
interface-type = wireless
label-connected = %ifname% %local_ip% %essid%
[module/eth]
inherit = network-base
interface-type = wired
label-connected = %ifname% %local_ip%
[module/date]
type = internal/date
interval = 1
date = W%V %d %b %H:%M
date-alt = %Y-%m-%d %H:%M:%S
label = %date%
label-foreground = ${colors.primary}
; [module/dunst-snooze]
; type = custom/script
; exec = ~/.bin/polybar/polybar-scripts/dunst-snooze/dunst-snooze.sh
; interval = 1
; click-left = ~/.bin/polybar/polybar-scripts/dunst-snooze/dunst-snooze.sh --toggle &
; [module/info-camera-mic]
; type = custom/script
; exec = ~.bin/polybar/polybar-scripts/info-camera-mic/info-camera-mic.sh
; interval = 1
[module/player-mpris]
type = custom/script
exec = ~/.bin/polybar/polybar-scripts/player-mpris-simple/player-mpris-simple.sh
interval = 1
click-left = playerctl previous &
click-right = playerctl next &
click-middle = playerctl play-pause &
[module/pomo]
type = custom/script
exec = ~/.bin/sb-pomo
label-background = #fa0
interval = 1
[module/focus-mode]
type = custom/script
exec = [[ -f /tmp/focus-mode ]] && echo "Focus"
label-background = #af0
interval = 1
[module/project]
type = custom/script
exec = cat ~/.project
label-background = #fa0
interval = 1000
[module/xkeyboard]
type = internal/xkeyboard
label-layout = %name% %variant%
blacklist-0 = num lock
blacklist-1 = scroll lock
[module/battery]
type = internal/battery
full-at = 99
low-at = 20
battery = BAT0
adapter = ADP1
poll-interval = 5
label-charging = .%percentage%++
format-low = <label-low><animation-low>
label-discharging = .%percentage%-- %time% %consumption%W
animation-low-0 = !
animation-low-1 = .
animation-low-framerate = 200
[settings]
screenchange-reload = true
pseudo-transparency = true
; vim:ft=dosini

View File

@@ -0,0 +1,11 @@
[google-drive]
type = drive
scope = drive
token =
[onedrive-vub]
type = webdav
url =
vendor = sharepoint
user =
pass =

View File

@@ -0,0 +1,71 @@
{
"101B:E2D1E989": {
"_name": "Marathon Mouse M705 (M-R0009)",
"side-scroll": true,
"smooth-scroll": true
},
"405E:C347528E": {
"_absent": [
"hi-res-scroll",
"lowres-smooth-scroll",
"smart-shift",
"thumb-scroll-mode",
"thumb-scroll-invert",
"onboard_profiles",
"report_rate",
"dpi",
"dpi-sliding",
"speed-change",
"backlight",
"backlight-timed",
"fn-swap",
"disable-keyboard-keys",
"divert-crown",
"crown-smooth",
"divert-gkeys",
"m-key-leds",
"mr-key-led",
"multiplatform",
"gesture2-gestures",
"gesture2-divert",
"gesture2-params"
],
"_modelId": "B015405E0000",
"_name": "M720 Triathlon Multi-Device Mouse",
"_sensitive": {
"change-host": true,
"divert-keys": true,
"hires-smooth-invert": false,
"hires-smooth-resolution": false,
"mouse-gestures": false,
"pointer_speed": false,
"reprogrammable-keys": true
},
"_serial": "C347528E",
"_unitId": "F204EB17",
"divert-keys": {
"208": 0,
"215": 0,
"82": 0,
"83": 0,
"86": 0,
"91": 0,
"93": 0
},
"hires-smooth-invert": false,
"hires-smooth-resolution": false,
"mouse-gestures": 0,
"pointer_speed": 195,
"reprogrammable-keys": {
"208": 208,
"80": 80,
"81": 81,
"82": 82,
"83": 83,
"86": 86,
"91": 91,
"93": 93
}
},
"_version": "1.1.2"
}

View File

@@ -0,0 +1,4 @@
# Spotify cache size
The contents of `prefs.example` can be added to the `prefs` file in this
directory to change the cache size to 1GB.

View File

@@ -0,0 +1 @@
storage.size=1024

View File

@@ -0,0 +1,8 @@
[Unit]
Description=redshift needs to get a (geo)clue
[Service]
ExecStart=/usr/lib/geoclue-2.0/demos/agent
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,11 @@
[Unit]
Description=Save KeypassXC password database to cloud
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/home/h/.bin/save-passwddb
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,10 @@
[Unit]
Description=Save Keepass password database to cloud daily
[Timer]
OnCalendar=daily
RandomizedDelaySec=12h
Persistent=true
[Install]
WantedBy=timers.target

View File

@@ -0,0 +1,10 @@
[Unit]
Description=SSH Key agent
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
[Install]
WantedBy=default.target

2
dots/.config/task/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
taskrc.d/sync
taskrc.d/private

18
dots/.config/task/taskrc Normal file
View File

@@ -0,0 +1,18 @@
data.location=$XDG_DATA_HOME/task/
hooks.location=$XDG_DATA_HOME/task/hooks
include /usr/share/doc/task/rc/light-256.theme
include ./taskrc.d/$HOSTNAME
include ./taskrc.d/aliases
include ./taskrc.d/sync
include ./taskrc.d/urgency
include ./taskrc.d/reports
include ./taskrc.d/contexts
include ./taskrc.d/colors
include ./taskrc.d/udas
search.case.sensitive=no
rc.json.array=on
rc.verbose=nothing
news.version=3.1.0

View File

@@ -0,0 +1,4 @@
alias.burndown=burndown.daily
alias.a=add
alias.rm=delete
alias.e=modify

View File

@@ -0,0 +1,12 @@
color.active=bold white on black
color.alternate=
color.scheduled=
color.until=
color.blocking=bold
color.blocked=gray15
color.uda.priority.H=bold
color.uda.priority.M=
color.uda.priority.L=
color.due=
color.due.today=
color.overdue=

View File

@@ -0,0 +1,5 @@
context.home.read=project:home
context.work.read=tags:work
context.home.write=project:home
context.studies.read=project:studies
context.studies.write=project:studies

View File

@@ -0,0 +1 @@
recurrence=off

View File

@@ -0,0 +1,23 @@
# The default report is `next`, to obtain details on a report
# (e.g. the columns used), the following command can be used:
#
# `task _get rc.report.<report_name>.columns`
report.next.columns=id,start.age,entry.age,depends,project,tags,scheduled.countdown,due.relative,until.remaining,description
report.next.labels=ID,Active,Age,Deps,Project,Tag,S,Due,Until,Description
report.next.filter=status:pending -WAITING -BLOCKED limit:page
report.in.columns=id,description
report.in.labels=ID,Description
report.in.description=Inbox (tasks with no project)
report.in.filter=status:pending and project:
report.recent.columns=id,description,entry
report.recent.labels=ID,Description,Age
report.recent.description=Recently added
report.recent.sort=entry+
report.minimal.columns=id,description
report.minimal.labels=,
# verbose=blank,header,footnote,label,new-id,affected,edit,special,project,unwait

View File

@@ -0,0 +1,3 @@
sync.server.url=
sync.server.client_id=
sync.encryption_secret=

View File

View File

@@ -0,0 +1,9 @@
urgency.uda.priority.L.coefficient=-1.0
urgency.user.project.studies.coefficient=1.0
urgency.user.project.admin.coefficient=1.0
urgency.user.project.personal.coefficient=0.5
urgency.user.project.groceries.coefficient=0.5
urgency.user.project.home.coefficient=0.2
urgency.user.project.creative.coefficient=0.0
urgency.user.project.side.coefficient=0.0

View File

@@ -0,0 +1 @@
recurrence=off

View File

@@ -0,0 +1 @@
set -g status-style bg=default

View File

@@ -0,0 +1 @@
set -g status-style bg=blue,fg=black;

View File

@@ -0,0 +1,22 @@
# This file is based on the one provided by shipwright.nvim
set -g @FG '#dddddd'
set -g @BG '#111111'
set -g status-left ' #[fg=#{@FG},bold]#{s/root//:client_key_table} '
set -g status-right '#[fg=#{@FG},bold] [#S]#[fg=#{@FG},bold] [%d/%m] #[fg=#{@FG},bold][%I:%M%p] '
set -g status-style fg='#{@FG}',bg='#{@BG}'
set -g window-status-current-style fg='#{@FG}',bg='#{@BG}',bold
set -g pane-border-style fg='#{@FG}'
set -g pane-active-border-style fg='#{@FG}'
set -g message-style fg='#{@FG}',bg='#{@FG}'
set -g display-panes-active-colour '#{@FG}'
set -g display-panes-colour '#{@FG}'
set -g clock-mode-colour '#{@FG}'
set -g mode-style fg='#{@FG}',bg='#{@FG}'

View File

@@ -0,0 +1,22 @@
# This file is based on the one provided by shipwright.nvim
set -g @FG '#111111'
set -g @BG '#dddddd'
set -g status-left ' #[fg=#{@FG},bold]#{s/root//:client_key_table} '
set -g status-right '#[fg=#{@FG},bold] [#S]#[fg=#{@FG},bold] [%d/%m] #[fg=#{@FG},bold][%I:%M%p] '
set -g status-style fg='#{@FG}',bg='#{@BG}'
set -g window-status-current-style fg='#{@FG}',bg='#{@BG}',bold
set -g pane-border-style fg='#{@FG}'
set -g pane-active-border-style fg='#{@FG}'
set -g message-style fg='#{@FG}',bg='#{@FG}'
set -g display-panes-active-colour '#{@FG}'
set -g display-panes-colour '#{@FG}'
set -g clock-mode-colour '#{@FG}'
set -g mode-style fg='#{@FG}',bg='#{@FG}'

View File

@@ -0,0 +1,77 @@
# statusbar
setw -g monitor-activity on
set -g visual-activity on
set -g history-limit 100000
set -g default-command "${SHELL}"
setw -g aggressive-resize on
set -sg escape-time 0
# keybindings
# NOTE: I intend to use defaults whenever feasible
# - my prefix key is still C-b
# - however, I do use vi mode
setw -g mode-keys vi
set -g status-keys vi
bind r source-file ~/.config/tmux/tmux.conf # reload tmux conf
# Splits
unbind v
unbind s
unbind % # vsplit
unbind '"' # hsplit
bind v split-window -h -c "#{pane_current_path}"
bind s split-window -v -c "#{pane_current_path}"
bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R
bind -r H resize-pane -L 4
bind -r J resize-pane -D 4
bind -r K resize-pane -U 4
bind -r L resize-pane -R 4
bind-key -T root F1 select-window -t 1
bind-key -T root F2 select-window -t 2
bind-key -T root F3 select-window -t 3
bind-key -T root F4 select-window -t 4
bind-key -T root F5 select-window -t 5
bind-key -T root F6 select-window -t 6
bind-key -T root F7 select-window -t 7
bind-key -T root F8 select-window -t 8
bind-key -T root F9 select-window -t 9
# 1-based indexing makes most sense for keyboard layouts (where number row start at 1)
set -g base-index 1
set -g pane-base-index 1
setw -g automatic-rename
# statusbar
set -g status-position top
set -g status-left-length 20
set -g window-status-separator ""
%if "#{==:#{host},desktop-arch}"
set -g status-left "#[bg=colour235,fg=colour255] #S #[fg=colour235,bg=default] "
set -g status-right ""
%else
set -g status-left '#h '
set -g status-right '#(uptime | cut -f 4-5 -d " " | cut -f 1 -d ",") %a%l:%M:%S %p %Y-%m-%d'
%endif
# theming
%if "#{==:#{host},desktop-arch}"
set -g default-terminal "tmux-256color"
setw -g window-status-style fg=colour244,bg=default
setw -g window-status-current-style fg=colour232,bg=default,bold
set -g message-style fg=colour232,bg=default
setw -g clock-mode-colour colour235
set -g status-style bg=default
set -g pane-border-style fg=#cccccc
set -g pane-active-border-style fg=#555555
set -g message-style bg=#cccccc,fg=#000000
%endif
set-hook -g after-new-session 'if -F "#{==:#{session_name},ssh}" "source ${XDG_CONFIG_HOME}/tmux/hooks/tmux.ssh.conf" "source ${XDG_CONFIG_HOME}/tmux/hooks/tmux.regular.conf"'
# Vi copypaste mode
if-shell "test '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -ge 4 \)'" 'bind-key -Tcopy-mode-vi v send -X begin-selection; bind-key -Tcopy-mode-vi y send -X copy-selection-and-cancel'
if-shell '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -lt 4\) -o #{$TMUX_VERSION_MAJOR} -le 1' 'bind-key -t vi-copy v begin-selection; bind-key -t vi-copy y copy-selection'
if-shell '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -lt 2\) -o #{$TMUX_VERSION_MAJOR} -le 1' 'set-option -g status-utf8 on'

View File

@@ -0,0 +1 @@
set -g status-style bg=default

View File

@@ -0,0 +1,22 @@
set searchengine d
set newtab about:blank
set smoothscroll true
# Yank bindings
bind ym clipboard yankmd
bind yg composite js "git clone " + document.location.href.replace(/https?:\/\//,"git@").replace("/",":").replace(/$/,".git") | clipboard yank
# Search bindings
unbind <C-f>
bind / fillcmdline find
bind ? fillcmdline find -?
bind n findnext 1
bind N findnext -1
bind j scrollline 4
bind k scrollline -4
# Containerize facebook (source: https://github.com/tridactyl/tridactyl/blob/master/.tridactylrc)
set auconcreatecontainer true
autocontain facebook\.com facebook

Some files were not shown because too many files have changed in this diff Show More