diff --git a/.config/foot/foot.ini##hostname.dbox b/.config/foot/foot.ini##hostname.dbox index c940a97b..a6601994 100644 --- a/.config/foot/foot.ini##hostname.dbox +++ b/.config/foot/foot.ini##hostname.dbox @@ -78,8 +78,8 @@ label-letters=tnserigmdhcao [cursor] style=beam -blink=yes -blink-rate=600 +# blink=yes +# blink-rate=600 beam-thickness=0.5 # underline-thickness= # color=121212 f5f5f5 diff --git a/.config/ghostty/config b/.config/ghostty/config index cb232026..64315017 120000 --- a/.config/ghostty/config +++ b/.config/ghostty/config @@ -1 +1 @@ -config##hostname.dpad \ No newline at end of file +config##hostname.dbox \ No newline at end of file diff --git a/.config/harper-ls/dictionary.txt b/.config/harper-ls/dictionary.txt deleted file mode 100644 index 4f34a980..00000000 --- a/.config/harper-ls/dictionary.txt +++ /dev/null @@ -1,3 +0,0 @@ -CSE -ADHD -HackerRank diff --git a/.config/helix/config.toml b/.config/helix/config.toml index 23c0a178..beb522c5 100644 --- a/.config/helix/config.toml +++ b/.config/helix/config.toml @@ -32,7 +32,7 @@ tabpad = " " [editor.cursor-shape] insert = "bar" normal = "block" -select = "underline" +# select = "underline" [editor.statusline] mode.normal = "NRM" @@ -76,6 +76,7 @@ A-i = "select_next_sibling" "A-{" = "rotate_selection_contents_backward" "A-}" = "rotate_selection_contents_forward" +C-f = "jump_forward" a = "append_mode_same_line" tab = "trim_selections" C-k = "signature_help" diff --git a/.config/helix/languages.toml b/.config/helix/languages.toml index de0bed95..997c998f 100644 --- a/.config/helix/languages.toml +++ b/.config/helix/languages.toml @@ -97,12 +97,13 @@ language-servers = ["harper-ls"] [[grammar]] name = "ini" + +source.path = "/home/fic/dev/tree-sitter-ini" +[[language]] scope = "source.ini" injection-regex = "ini" comment-token = "#" indent = { tab-width = 4, unit = "\t" } -source.path = "/home/fic/dev/tree-sitter-ini" -[[language]] name = "ini" file-types = [ "ini", @@ -131,7 +132,7 @@ file-types = [ "conf", "properties", "cfg", - "directory" + "directory", ] # [[grammar]] # name = "mail" @@ -170,7 +171,7 @@ source = { git = "https://github.com/ficcdaf/tree-sitter-mail", rev = "8e60f38ef [[language]] name = "python" -language-servers = [ "basedpyright" ] +language-servers = ["basedpyright"] [[language]] name = "kdl" diff --git a/.config/helix/themes/ashen.toml b/.config/helix/themes/ashen.toml index dd51c771..b41bb9e5 120000 --- a/.config/helix/themes/ashen.toml +++ b/.config/helix/themes/ashen.toml @@ -1 +1 @@ -/home/fic/dev/ashen/monorepo/helix/ashen.toml \ No newline at end of file +../../../dev/ashen/monorepo/helix/ashen.toml \ No newline at end of file diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf index 067de165..3f04ff08 120000 --- a/.config/kitty/kitty.conf +++ b/.config/kitty/kitty.conf @@ -1 +1 @@ -kitty.conf##hostname.dpad \ No newline at end of file +kitty.conf##hostname.dbox \ No newline at end of file diff --git a/.config/ncspot/.gitignore b/.config/ncspot/.gitignore new file mode 100644 index 00000000..f605e336 --- /dev/null +++ b/.config/ncspot/.gitignore @@ -0,0 +1 @@ +userstate.cbor diff --git a/.config/ncspot/config.toml b/.config/ncspot/config.toml new file mode 100644 index 00000000..754b69da --- /dev/null +++ b/.config/ncspot/config.toml @@ -0,0 +1,29 @@ +# [MODIFIER+] +# where: +# MODIFIER: Shift|Alt|Ctrl +# CHAR: Any printable character +# NAMED_KEY: Enter|Space|Tab|Backspace|Esc|Left|Right|Up|Down +# |Ins|Del|Home|End|PageUp|PageDown|PauseBreak|NumpadCenter +# |F0|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12 +# "Shift+i" = "seek +10s" + +[keybindings] +"m" = "move left" +"n" = "move down" +"e" = "move up" +"i" = "move right" +"Ctrl+q" = "quit" +"Ctrl+u" = "move up 5" +"Ctrl+d" = "move down 5" +"Shift+n" = "shift down" +"Shift+e" = "shift up" +"Shift+m" = "seek +10s" +"Shift+i" = "seek -10s" +"Ctrl+n" = "voldown 1" +"Ctrl+e" = "volup 1" +"Shift+q" = "queue; move down 1" +"q" = "focus queue" +# "s" = "focus search" +"l" = "focus library" +"space" = "playpause" +"Shift+r" = "similar current" diff --git a/.config/niri/config.kdl##hostname.dbox b/.config/niri/config.kdl##hostname.dbox index 70dd6ce2..a904cf74 100644 --- a/.config/niri/config.kdl##hostname.dbox +++ b/.config/niri/config.kdl##hostname.dbox @@ -1,3 +1,6 @@ +workspace "music" { + open-on-output "Dell" +} // This config is in the KDL format: https://kdl.dev // "/-" comments out the following node. // Check the wiki for a full description of the configuration: @@ -59,6 +62,9 @@ output "HDMI-A-1" { // Settings that influence how windows are positioned and sized. // Find more information on the wiki: // https://github.com/YaLTeR/niri/wiki/Configuration:-Layout +// Settings that influence how windows are positioned and sized. +// Find more information on the wiki: +// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout layout { // Set gaps around windows in logical pixels. gaps 16 @@ -69,6 +75,7 @@ layout { // - "on-overflow", focusing a column will center it if it doesn't fit // together with the previously focused column. center-focused-column "never" + // /-always-center-single-column // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. preset-column-widths { // Proportion sets the width as a fraction of the output width, taking gaps into account. @@ -160,6 +167,7 @@ layout { // See the binds section below for more spawn examples. // spawn-at-startup "alacritty" "-e" "fish" spawn-at-startup "dunst" "&" +spawn-at-startup "xwayland-satellite" // Uncomment this line to ask the clients to omit their client-side decorations if possible. // If the client will specifically ask for CSD, the request will be honored. // Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. @@ -187,6 +195,10 @@ animations { // https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules // Work around WezTerm's initial configure bug // by setting an empty default-column-width. +window-rule { + match app-id="^spotify$" + open-on-workspace "music" +} window-rule { // This regular expression is intentionally made as specific as possible, // since this is the default config, and we want no false positives. @@ -197,7 +209,7 @@ window-rule { } } window-rule { - match app-id="thunderbird$" + match app-id="thunderbird$|Betterbird$" default-column-width { proportion 0.75 } @@ -233,15 +245,22 @@ window-rule { // Use this instead if you want them visible on third-party screenshot tools. // block-out-from "screencast" } -// Example: enable rounded corners for all windows. -// (This example rule is commented out with a "/-" in front.) +layer-rule { + match namespace="^launcher$" + shadow { + on + } + // Fuzzel defaults to 10 px rounded corners. + // geometry-corner-radius 10 +} +// Example: enable rounded corners for all windows.// (This example rule is commented out with a "/-" in front.) /-window-rule { geometry-corner-radius 12 clip-to-geometry true } environment { QT_QPA_PLATFORM "wayland" - DISPLAY null + DISPLAY ":0" ELECTRON_OZONE_PLATFORM_HINT "auto" OZONE_PLATFORM "wayland" QT_QPA_PLATFORM "wayland" @@ -252,6 +271,9 @@ environment { cursor { hide-when-typing } +hotkey-overlay { + skip-at-startup +} binds { // Keys consist of modifiers separated by + signs, followed by an XKB key name // in the end. To find an XKB name for a particular key, you may use a program @@ -321,12 +343,12 @@ binds { focus-column-right } Mod+M { - focus-column-left + focus-column-or-monitor-left } // Mod+N { focus-window-down; } // Mod+E { focus-window-up; } Mod+I { - focus-column-right + focus-column-or-monitor-right } Mod+Shift+Left { move-column-left @@ -376,11 +398,11 @@ binds { } // don't love these honestly // TODO: Change smart-mouse to LGUI on keyboard? - Mod+Ctrl+Left { + Mod+Comma { focus-monitor-left } - Mod+Ctrl+Down { - focus-monitor-down + Mod+Period { + focus-monitor-right } Mod+Ctrl+Up { focus-monitor-up @@ -409,10 +431,10 @@ binds { Mod+Shift+Ctrl+Up { move-column-to-monitor-up } - Mod+Shift+Ctrl+Right { + Mod+Shift+Period { move-column-to-monitor-right } - Mod+Shift+Ctrl+M { + Mod+Shift+Comma { move-column-to-monitor-left } Mod+Shift+Ctrl+N { @@ -437,10 +459,16 @@ binds { focus-workspace-up } Mod+L { - focus-workspace-down + move-workspace-down } Mod+U { - focus-workspace-up + move-workspace-up + } + Mod+J { + move-workspace-to-monitor-left + } + Mod+Y { + move-workspace-to-monitor-right } Mod+Ctrl+Page_Down { move-column-to-workspace-down @@ -475,6 +503,12 @@ binds { // To avoid scrolling through workspaces really fast, you can use // the cooldown-ms property. The bind will be rate-limited to this value. // You can set a cooldown on any bind, but it's most useful for the wheel. + Mod+MouseForward { + focus-column-right + } + Mod+MouseBack { + focus-column-left + } Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down } @@ -586,7 +620,7 @@ binds { // Alternatively, there are commands to move just a single window: // Mod+Ctrl+1 { move-window-to-workspace 1; } // Switches focus between the current and the previous workspace. - Mod+Shift+Tab { + Alt+Tab { focus-workspace-previous } // Adapt the sway-window-switcher and bind it here @@ -600,11 +634,11 @@ binds { consume-or-expel-window-right } // Consume one window from the right to the bottom of the focused column. - Mod+Comma { + Mod+BraceLeft { consume-window-into-column } // Expel the bottom window from the focused column to the right. - Mod+Period { + Mod+BraceRight { expel-window-from-column } Mod+R { @@ -671,6 +705,10 @@ binds { // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). // Mod+Space { switch-layout "next"; } // Mod+Shift+Space { switch-layout "prev"; } + // reload waybar + Mod+Shift+W { + spawn "systemctl" "--user" "restart" "waybar" + } Mod+S { screenshot } @@ -681,7 +719,13 @@ binds { screenshot-window } Mod+Alt+S { - spawn "~/scripts/recorder.sh" + spawn "~/scripts/recorder.sh" "screen" + } + Mod+Shift+Alt+S { + spawn "~/scripts/recorder.sh" "region" + } + Mod+Tab { + spawn "~/scripts/niri/window-picker.py" } // Applications such as remote-desktop clients and software KVM switches may // request that niri stops processing the keyboard shortcuts defined here diff --git a/.config/sway/config b/.config/sway/config index cb232026..64315017 120000 --- a/.config/sway/config +++ b/.config/sway/config @@ -1 +1 @@ -config##hostname.dpad \ No newline at end of file +config##hostname.dbox \ No newline at end of file diff --git a/.config/waybar/config b/.config/waybar/config index c5f024a0..240ecef3 100644 --- a/.config/waybar/config +++ b/.config/waybar/config @@ -8,28 +8,70 @@ "niri/window" ], "modules-right": [ + "cava", "cpu", "memory", "pulseaudio", "battery", + "custom/recorder", "tray", "clock" ], "niri/window": { - "max-length": 50 + "max-length": 50, + "separate-outputs": true + }, + "custom/recorder": { + "exec": "~/dev/niri-recorder/recorder.py", + "return-type": "json", + "restart-interval": "never", + "on-click": "~/dev/niri-recorder/recorder.sh screen", + "on-click-right": "~/dev/niri-recorder/recorder.sh region" + }, + "cava": { + "cava_config": "$XDG_CONFIG_HOME/cava/cava.conf", + // "framerate": 30, + // "autosens": 1, + // "sensitivity": 100, + // "bars": 14, + // "lower_cutoff_freq": 50, + // "higher_cutoff_freq": 10000, + // "method": "pulse", + // "source": "auto", + // "stereo": true, + // "reverse": false, + // "bar_delimiter": 0, + // "monstercat": false, + // "waves": false, + // "noise_reduction": 0.77, + // "input_delay": 2, + "format-icons": [ + "▁", + "▂", + "▃", + "▄", + "▅", + "▆", + "▇", + "█" + ], + "actions": { + "on-click-right": "mode" + } }, "niri/workspaces": { - // "format": "{icon}", - // "format-icons": { - // // Named workspaces - // // (you need to configure them in niri) - // "browser": "", - // "discord": "", - // "chat": "", - // // Icons by state - // "active": "", - // "default": "" - // } + "format": "{icon}", + "format-icons": { + // Named workspaces + // (you need to configure them in niri) + // "browser": "", + // "discord": "", + // "chat": "", + // Icons by state + "music": "󰎇", + "active": "", + "default": "" + } }, // "sway/workspaces": { // "disable-scroll" : false, diff --git a/.config/waybar/custom/recorder.py b/.config/waybar/custom/recorder.py new file mode 100755 index 00000000..81b7386a --- /dev/null +++ b/.config/waybar/custom/recorder.py @@ -0,0 +1,93 @@ +#!/bin/env python + +import os +import socket +import json +import asyncio + +def p(obj): + print(json.dumps(obj), flush=True) + +SOCKET = "/tmp/recorder-sock.sock" +DEF_TT = "Click to record screen. Right-click to record region." +DEF_TEXT = "rec" + +# Remove if already exists +try: + os.unlink(SOCKET) +except OSError: + # doesn't exist, we're good + pass + +delayed_task = None + +async def delayed_msg(delay, message): + # print(f"[DEBUG] Starting delayed message task, waiting {delay} seconds...", flush=True) + try: + await asyncio.sleep(delay) + # print(f"[DEBUG] Delayed message task executed! Sending message: {message}", flush=True) + p(message) + except asyncio.CancelledError: + # print("[DEBUG] Delayed message task was cancelled!", flush=True) + pass +def handle_message(data: str, loop): + global delayed_task + if delayed_task: + delayed_task.cancel() + out = {} + out_s = "" + out_t = "" + if data: + if data == "REC": + out_s = "on" + out_t = "Recording in progress. Click to stop." + elif data == "CMP": + out_s = "compressing" + out_t = "Recording is being compressed." + elif data == "CPD": + out_s = "copied" + out_t = "Recording has been copied to clipboard." + elif data == "STP": + out_s = "done" + out_t = "Recording has been stopped." + elif data == "ERR": + out_s = "error" + out_t = "Recording has encountered an error." + else: + # print("this runs a", flush=True) + out_s = "" + out_t = "" + else: + # print("this runs b", flush=True) + out_s = "" + out_t = "" + out["text"] = f"rec: {out_s}" if out_s != "" else DEF_TEXT + out["tooltip"] = out_t if out_t != "" else DEF_TT + p(out) + + if data in ["ERR", "CPD", "STP"]: + if delayed_task: + # print("canceled delayed task", flush=True) + delayed_task.cancel() + delayed_out = {"text": DEF_TEXT, "tooltip": DEF_TT} + # print("debug: creating delayed task", flush=True) + delayed_task = loop.create_task(delayed_msg(5, delayed_out)) + +async def server(): + loop = asyncio.get_running_loop() + + with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as server: + server.bind(SOCKET) + server.setblocking(False) + server.listen(1) + + while True: + conn, _ = await loop.sock_accept(server) + with conn: + data = (await loop.sock_recv(conn, 1024)).decode().strip() + handle_message(data, loop) + +async def main(): + p({"text": DEF_TEXT, "tooltip": DEF_TT}) + await server() +asyncio.run(main()) diff --git a/.config/waybar/custom/test.sh b/.config/waybar/custom/test.sh new file mode 100755 index 00000000..44f681bb --- /dev/null +++ b/.config/waybar/custom/test.sh @@ -0,0 +1,14 @@ +#!/bin/env bash + +echo "REC" | socat - UNIX-CONNECT:/tmp/recorder-sock.sock; \ +sleep 2; \ +echo "ERR" | socat - UNIX-CONNECT:/tmp/recorder-sock.sock; \ +sleep 2; \ +echo "REC" | socat - UNIX-CONNECT:/tmp/recorder-sock.sock; \ +sleep 2; \ +echo "STP" | socat - UNIX-CONNECT:/tmp/recorder-sock.sock; \ +sleep 2; \ +echo "CMP" | socat - UNIX-CONNECT:/tmp/recorder-sock.sock; \ +sleep 2; \ +echo "CPD" | socat - UNIX-CONNECT:/tmp/recorder-sock.sock; \ +sleep 2; diff --git a/.config/waybar/modules b/.config/waybar/modules.bak similarity index 100% rename from .config/waybar/modules rename to .config/waybar/modules.bak diff --git a/.config/yadm/README.md b/.config/yadm/README.md index 58929b1a..4b502acc 100644 --- a/.config/yadm/README.md +++ b/.config/yadm/README.md @@ -6,6 +6,15 @@ I use Arch btw. The root of this repo is equivalent to my $HOME directory. +## Note on this repository + +**Important**: I'm migrating this repository from GitHub to [Codeberg](https://codeberg.org/ficcdaf/dotfiles). If you're reading this on GitHub, the repo is likely out-of-date and will be removed sometime in the future. + +I use this repository to sync and backup my dotfiles. This is done automatically on a timer. Therefore, these configs are: + +- Always up-to-date. +- Potentially broken on any given commit. + ## Note On Keybindings A note on keybindings: I use Colemak-DH, which is a non-qwerty keyboard layout. I use either `MNEI` or the arrow keys (which is a mod key + `MNEI` on my keyboard) for navigation, depending on a few different factors. diff --git a/.config/yadm/tracked b/.config/yadm/tracked index 7d456384..c8a0f153 100644 --- a/.config/yadm/tracked +++ b/.config/yadm/tracked @@ -41,3 +41,4 @@ .config/niri .config/fish .config/yadm/tracked +.config/ncspot diff --git a/.config/yazi/package.toml b/.config/yazi/package.toml index b783ec20..c386c8ab 100644 --- a/.config/yazi/package.toml +++ b/.config/yazi/package.toml @@ -10,8 +10,8 @@ hash = "43019cca17a4d7b41746c2e0a6b8f33f" [[plugin.deps]] use = "Reledia/glow" -rev = "5ce76dc" -hash = "52e5f5c602962e7cbf874da28f52ba45" +rev = "c76bf4f" +hash = "a6b78bf9af5390e3a85a6951fbb7b93" [[plugin.deps]] use = "Reledia/miller" @@ -20,12 +20,12 @@ hash = "2d6d77583162aaf0a599e7a3091b5878" [[plugin.deps]] use = "Reledia/hexyl" -rev = "39d3d4e" -hash = "dd624cbaff94af65f39fd86bc57b340" +rev = "228a9ef" +hash = "cdc65cfe4e60e1bf5afe5769d074fa9c" [[plugin.deps]] use = "Sonico98/exifaudio" -rev = "d794614" +rev = "4379fcf" hash = "a8e15d3c21c02a5af41d46ed04778a02" [[plugin.deps]] @@ -50,5 +50,5 @@ hash = "ada10d1213f2117878e0fd90df708619" [[flavor.deps]] use = "ashen-org/ashen:ashen" -rev = "42ed408" +rev = "ee0708d" hash = "a6f097910912721681300869a94d1fd8" diff --git a/.zshrc b/.zshrc index bb4f2fbd..975216d3 100644 --- a/.zshrc +++ b/.zshrc @@ -130,21 +130,21 @@ function cat() { } # . /opt/asdf-vm/asdf.sh # Need this to fix the cursor in tmux -print -n '\033[5 q' -function zle-keymap-select zle-line-init zle-line-finish -{ - case $KEYMAP in - vicmd) print -n '\033[1 q' ;; # block cursor - viins | main) print -n '\033[5 q' ;; # line cursor - esac -} +# print -n '\033[5 q' +# function zle-keymap-select zle-line-init zle-line-finish +# { +# case $KEYMAP in +# vicmd) print -n '\033[1 q' ;; # block cursor +# viins | main) print -n '\033[5 q' ;; # line cursor +# esac +# } # DISABLE_AUTO_TITLE="true" -function set_win_title() { - echo -ne "\033]0; ${PWD/#$HOME/~} \007" -} -function viewport_osc() { - print -Pn "\e]133;A\e\\" -} +# function set_win_title() { +# echo -ne "\033]0; ${PWD/#$HOME/~} \007" +# } +# function viewport_osc() { +# print -Pn "\e]133;A\e\\" +# } function mksh() { local filepath="$1.sh" @@ -162,7 +162,7 @@ function mksh() { } # precmd_functions+=(set_win_title viewport_osc) -precmd_functions+=(viewport_osc) +# precmd_functions+=(viewport_osc) zle -N zle-line-init zle -N zle-line-finish zle -N zle-keymap-select @@ -177,4 +177,4 @@ export GPG_TTY=$(tty) # gpg-connect-agent /bye > /dev/null eval "$(direnv hook zsh)" # colorscript -e 36 -source ~/scripts/obsidian-bridge.sh +# source ~/scripts/obsidian-bridge.sh