diff --git a/desktop/.config/river/init b/desktop/.config/river/init index d7b86d1..dcf40a2 100755 --- a/desktop/.config/river/init +++ b/desktop/.config/river/init @@ -8,6 +8,23 @@ time_to_lockscreen=300 time_to_screendim=600 time_to_suspend=900 +NO_RESTART="$1" +should_start() { # 1=program binary name + # not running, start + if ! pidof "$1"; then + return 0 + fi + + # only reload, no restarting + if [ "$NO_RESTART" = "no-restart" ]; then + return 1 + else + # kill then it can restart + killall "$1" + return 0 + fi +} + ## OPTIONS riverctl spawn "dbus-update-activation-environment SEATD_SOCK DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river" riverctl focus-follows-cursor normal @@ -31,7 +48,8 @@ riverctl rule-add -app-id "org.pwmt.zathura" csd ## DEBUG # Reload river configuration -riverctl map normal $mod+Shift F12 spawn "$HOME/.config/river/init" +riverctl map normal $mod+Shift F12 spawn "$HOME/.config/river/init no-restart" +riverctl map normal $mod+Shift+Control F12 spawn "$HOME/.config/river/init" ## HOTKEYS # close focused view @@ -125,7 +143,7 @@ riverctl map normal $mod+Control L snap right # Mod+F to toggle fullscreen riverctl map normal $mod F toggle-fullscreen # if we are running filtile we also have access to monocle mode -if [ "$layout" = "filtile" ]; then +if [ "$layout" = "filtile" ]; then riverctl map normal $mod+Shift F spawn "riverctl send-layout-cmd $layout monocle" fi @@ -267,52 +285,57 @@ done setxkbmap -option "compose:menu" # start dynamic display configuration -[ "$(pidof kanshi)" -eq 0 ] || riverctl spawn kanshi +should_start kanshi && riverctl spawn kanshi # set a nice wallpaper -if exist swww; then - riverctl spawn "swww init" +if exist swaybg; then + killall swaybg + riverctl spawn "swaybg \ + -o 'LG Electronics W2442 0x000574E1' -i pictures/wall_l.jpg \ + -o 'LG Electronics W2442 0x000574FD' -i pictures/wall_r.jpg \ + " +elif exist swww; then + riverctl spawn "swww-daemon" outputs=$(swww query | cut -d':' -f1) if [ "$(echo "$outputs" | grep -c -e '^DP')" -eq 2 ] && [ -e "$HOME/pictures/wall_r.jpg" ]; then - swww img -o "$(echo "$outputs" | head -n1)" "$HOME/pictures/wall_r.jpg" - swww img -o "$(echo "$outputs" | tail -n1)" "$HOME/pictures/wall_l.jpg" + swww img -o "$(echo "$outputs" | head -n1)" "$HOME/pictures/wall_l.jpg" + swww img -o "$(echo "$outputs" | tail -n1)" "$HOME/pictures/wall_r.jpg" elif [ -e "$HOME/pictures/wall.jpg" ]; then swww img "$HOME/pictures/wall.jpg" fi fi # start status bar -killall waybar -riverctl spawn waybar +should_start waybar && riverctl spawn waybar # start redshift-like sundown warming using current location or standard values -killall wlsunset -loc=$(curl ipinfo.io | grep -e '"loc": ' | sed -e 's/^.*"loc": "\(.*\)",$/\1/') -if [ -n "$loc" ]; then - riverctl spawn "wlsunset -l \"$(echo "$loc" | cut -d, -f1)\" -L \"$(echo "$loc" | cut -d, -f2)\"" -else - riverctl spawn "wlsunset -S \"09:00\" -s \"21:00\" -d \"3600\"" +if should_start wlsunset; then + loc=$(curl ipinfo.io | grep -e '"loc": ' | sed -e 's/^.*"loc": "\(.*\)",$/\1/') + if [ -n "$loc" ]; then + riverctl spawn "wlsunset -l \"$(echo "$loc" | cut -d, -f1)\" -L \"$(echo "$loc" | cut -d, -f2)\"" + else + riverctl spawn "wlsunset -S \"09:00\" -s \"21:00\" -d \"3600\"" + fi + unset loc fi -unset loc # start screen idle locking/dimming/sleep tool -killall swayidle -riverctl spawn "swayidle \ +should_start swayidle && riverctl spawn "swayidle \ timeout ${time_to_suspend} \"[ $(cat /sys/class/power_supply/AC/online) -eq 0 ] && systemctl suspend-then-hibernate\" timeout ${time_to_screendim} \"wlopm --off '*'\" \ resume \"wlopm --on '*'\" \ timeout ${time_to_lockscreen} \"pidof waylock || lockscreen\" \ after-resume \"wlopm --on '*'\" \ before-sleep \"pidof waylock || lockscreen\" &" -killall clipman -riverctl spawn "wl-paste -t text --watch clipman store" + +should_start wl-paste && riverctl spawn "wl-paste -t text --watch clipman store" + # bash ~/.config/bin/gtktheme # setting our gtk variables # killall polkit-gnome-authentication-agent-1 # /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & # start layouting engine killall $layout -riverctl spawn "$layout\ - --tags all --output all main-ratio 0.65,\ +riverctl spawn "$layout --tags all --output all main-ratio 0.65,\ --tags all --output all view-padding 6,\ --tags all --output all outer-padding 0,\ --tags all --output all smart-padding on,\ diff --git a/nvim/.config/nvim/lua/plugins/pickers.lua b/nvim/.config/nvim/lua/plugins/pickers.lua index fdd415c..8072d32 100644 --- a/nvim/.config/nvim/lua/plugins/pickers.lua +++ b/nvim/.config/nvim/lua/plugins/pickers.lua @@ -71,7 +71,9 @@ return { -- file/item pickers and managers previewers = { builtin = { extensions = { - ["png"] = { "viu" }, + ["png"] = { "chafa", "--format=symbols", "{file}" }, + ["jpg"] = { "chafa", "--format=symbols", "{file}" }, + ["gif"] = { "chafa", "--format=symbols", "{file}" }, ["svg"] = { "chafa", "--format=symbols", "{file}" }, }, }, diff --git a/terminal/.config/starship.toml b/terminal/.config/starship.toml index 16a4bce..a7b888f 100644 --- a/terminal/.config/starship.toml +++ b/terminal/.config/starship.toml @@ -1,5 +1,4 @@ format = """ -$custom\ $sudo\ $username\ $directory\ @@ -77,3 +76,7 @@ disabled = false symbol = " 󱍔 " style = 'bold yellow' format = "[$symbol]($style)" + +# TODO: Would be lovely to have jujutsu support here +# An example implementation: https://github.com/jj-vcs/jj/wiki/Starship +# But currently very slow. Can be added with e.g. '${custom.jj}\' in format above diff --git a/vcs/git/config/git/config b/vcs/git/config/git/config index c73b86d..6164279 100644 --- a/vcs/git/config/git/config +++ b/vcs/git/config/git/config @@ -30,12 +30,14 @@ delta = "![ $TERM_DARK = false ] && delta --light || delta" # Take care that we always display right color scheme # check out a github PR directly on the commandline, creates pr/4 or pr/ branch locally - pr = "!f() { git fetch -fu ${2:-$(git remote |grep ^github || echo origin)} refs/pull/$1/head:pr/$1 }; f" + pr = "!f() { git fetch -fu ${2:-$(git remote |grep ^github || echo origin)} refs/pull/$1/head:pr/$1 }; f" # remove all pr/ local branches - pr-clean = "!git for-each-ref refs/heads/pr/* --format='%(refname)' | while read ref ; do branch=${ref#refs/heads/} ; git branch -D $branch ; done" + pr-clean = "!git for-each-ref refs/heads/pr/* --format = '%(refname)' | while read ref ; do branch = ${ref#refs/heads/} ; git branch -D $branch ; done" [commit] gpgsign = true # sign commits as me verbose = true # Always show diff when preparing commit message +[tag] + gpgsign = true [fetch] prune = true # remove references to non-existent remote branches [pull] @@ -45,7 +47,7 @@ [difftool] prompt = false [difftool "difftastic"] - cmd = difft "$LOCAL" "$REMOTE" + cmd = difft "$LOCAL" "$REMOTE" [color "diff"] meta = "9" frag = "magenta bold" diff --git a/vcs/jj/config/jj/config.toml b/vcs/jj/config/jj/config.toml index 84b0f0f..e3d2f2b 100644 --- a/vcs/jj/config/jj/config.toml +++ b/vcs/jj/config/jj/config.toml @@ -3,14 +3,39 @@ email = "marty.oehme@gmail.com" name = "Marty Oehme" [signing] -sign-all = false backend = "gpg" key = "73BA40D5AFAF49C9" +[git] +sign-on-push = true +subprocess = true +private-commits = "description(glob:'wip:*')" # refuse to push WIP commits + [ui] -default-command = "log" diff-editor = ["nvim", "-c", "DiffEditor $left $right $output"] pager = "delta" [ui.diff] format = "git" # for the time being to use delta well + +[templates] +draft_commit_description = ''' +concat( + description, + surround( + "\nJJ: This commit contains the following changes:\n", "", + indent("JJ: ", diff.stat(72)), + ), + "\nJJ: ignore-rest\n", + diff.git(), +) +''' + +[revsets] +log = "@ | ancestors(trunk()..(visible_heads() & mine()), 2) | trunk()" + +[revset-aliases] +"bases" = "dev" +"downstream(x,y)" = "(x::y) & y" +"branches" = "downstream(trunk(), bookmarks()) & mine()" +"curbranch" = "latest(branches::@- & branches)" diff --git a/vcs/jj/config/sh/alias.d/jj.sh b/vcs/jj/config/sh/alias.d/jj.sh index a68adf2..2e51bfa 100644 --- a/vcs/jj/config/sh/alias.d/jj.sh +++ b/vcs/jj/config/sh/alias.d/jj.sh @@ -4,19 +4,44 @@ if ! exist jj; then return 1 fi -alias j='jj' # necessary for a thing as easy to type? +alias j="jj" if exist lazyjj; then alias lj="lazyjj" fi -alias js="jj status" -alias jd="jj diff" alias jn="jj new" alias jds="jj describe" alias jc="jj commit" -alias jln="jj log -T builtin_log_oneline" -alias jl="jj log -r '@ | ancestors(remote_bookmarks().., 2) | trunk()'" +# finding out the current snapshot +js() { + if [ "$#" -eq 0 ]; then + jj status + else + jj show "$*" + fi +} +alias jw="jj show" +alias jd="jj diff" + +# for describe-and-edit workflows +# https://steveklabnik.github.io/jujutsu-tutorial/real-world-workflows/the-edit-workflow.html +alias je="jj edit" +alias jee="jj next --edit" + +# for squash-and-go workflows +# https://steveklabnik.github.io/jujutsu-tutorial/real-world-workflows/the-squash-workflow.html +alias jss="jj squash" +alias jsi="jj squash --interactive" + +# oops buttons +alias ju="jj undo" +# for damn,-forgot-to-split-this-commit workflow +# Creates a new commit before with your selected changes, lets you describe it and carry on +alias ji="jj new -B@ --no-edit && jj squash --interactive && jj edit '@-' && jj describe && jj edit '@+'" + +# revset info +alias jl="jj log -T builtin_log_oneline" alias jL="jj log -r 'all()'" alias jlo="jj log --summary" alias jLO="jj log --summary -r 'all()'" @@ -32,17 +57,10 @@ jloof() { jj log --patch -r "description($*)" } -alias jss="jj squash" -alias jsi="jj squash --interactive" - -alias je="jj edit" -alias jee="jj next --edit" - -# show branches w a couple commits +# show branches (i.e. head commits) w a couple previous commits alias jb="jj log -r 'ancestors(heads(all()), 3)'" alias jrb="jj rebase" -alias ju="jj undo" alias jp="jj git push"