rewrote the hlwm setup, improved fish one, added a bunch of shit, learned fish

This commit is contained in:
emilis 2023-01-04 01:28:50 +00:00
parent 69a5ebf098
commit 502d5ff636
30 changed files with 3579 additions and 2574 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
helix/runtime

View File

@ -854,4 +854,3 @@ key_bindings:
# Print all received window events.
#print_events: false

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
# Vertical Candidate List
Vertical Candidate List=False
# Use Per Screen DPI
PerScreenDPI=True
# Use mouse wheel to go to prev or next page
WheelForPaging=True
# Font
Font="Sans 14"
# Menu Font
MenuFont="Sans 14"
# Tray Font
TrayFont="Sans Bold 14"
# Tray Label Outline Color
TrayOutlineColor=#000000
# Tray Label Text Color
TrayTextColor=#ffffff
# Prefer Text Icon
PreferTextIcon=False
# Show Layout Name In Icon
ShowLayoutNameInIcon=True
# Use input method language to display text
UseInputMethodLangaugeToDisplayText=True
# Theme
Theme=default
# Force font DPI on Wayland
ForceWaylandDPI=0

View File

@ -10,6 +10,8 @@ SpellEnabled=True
EmojiEnabled=True
# Enable Chaizi
ChaiziEnabled=True
# Enable Characters in Unicode CJK Extension B
ExtBEnabled=True
# Enable Cloud Pinyin
CloudPinyinEnabled=False
# Cloud Pinyin Index
@ -24,10 +26,16 @@ PinyinInPreedit=False
Prediction=False
# Prediction Size
PredictionSize=10
# Action when switching input method
SwitchInputMethodBehavior="Commit current preedit"
# Select 2nd Candidate
SecondCandidate=
# Select 3rd Candidate
ThirdCandidate=
# Use Keypad as Selection key
UseKeypadAsSelection=False
# Use BackSpace to cancel the selection
BackSpaceToUnselect=True
# Number of Sentences
Number of sentence=2
# Prompt long word length when input length over (0 for disable)
@ -80,7 +88,7 @@ FirstRun=False
[Fuzzy]
# ue -> ve
VE_UE=True
# gn -> ng
# Common Typo
NG_GN=True
# Inner Segment (xian -> xi'an)
Inner=True

7
fish/config.fish Executable file
View File

@ -0,0 +1,7 @@
set -x BROWSER (which firefox)
set -x TERM "xterm-256color"
alias hc=herbstclient
set fish_greeting ""
# Local per-machine changes
source $HOME/.fishrc

43
fish/fish_variables Normal file
View File

@ -0,0 +1,43 @@
# This file contains fish universal variable definitions.
# VERSION: 3.0
SETUVAR __fish_initialized:3400
SETUVAR _flag_secs:1
SETUVAR fish_color_autosuggestion:555\x1ebrblack
SETUVAR fish_color_cancel:\x2dr
SETUVAR fish_color_command:blue
SETUVAR fish_color_comment:red
SETUVAR fish_color_cwd:green
SETUVAR fish_color_cwd_root:red
SETUVAR fish_color_end:green
SETUVAR fish_color_error:brred
SETUVAR fish_color_escape:brcyan
SETUVAR fish_color_history_current:\x2d\x2dbold
SETUVAR fish_color_host:normal
SETUVAR fish_color_host_remote:yellow
SETUVAR fish_color_normal:normal
SETUVAR fish_color_operator:brcyan
SETUVAR fish_color_param:cyan
SETUVAR fish_color_quote:yellow
SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold
SETUVAR fish_color_search_match:\x2d\x2dbackground\x3d111
SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
SETUVAR fish_color_status:red
SETUVAR fish_color_user:brgreen
SETUVAR fish_color_valid_path:\x2d\x2dunderline
SETUVAR fish_key_bindings:fish_default_key_bindings
SETUVAR fish_pager_color_completion:normal
SETUVAR fish_pager_color_description:B3A06D\x1eyellow\x1e\x2di
SETUVAR fish_pager_color_prefix:cyan\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
SETUVAR fish_pager_color_selected_background:\x2dr
SETUVAR fish_user_paths:/home/emilis/\x2ebin\x1e/home/emilis/\x2ecargo/bin\x1e/usr/local/jdk\x2d17/bin/
SETUVAR hlwm_group_active:1
SETUVAR hlwm_group_count:3
SETUVAR hlwm_mod:Mod4
SETUVAR hlwm_tags_per_group:5
SETUVAR notify_bg:\x23330033
SETUVAR notify_fg:\x23898989
SETUVAR notify_font:\x2dmisc\x2dterminessttf\x20nerd\x20font\x20mono\x2dmedium\x2d\x2a\x2d\x2a\x2d\x2a\x2d12\x2d\x2a\x2d\x2a\x2d\x2a\x2d\x2a\x2d\x2a\x2d\x2a\x2d\x2a
SETUVAR notify_padding:30
SETUVAR notify_secs:1
SETUVAR spawn_log_color:0000ff

35
fish/functions/fish_prompt.fish Executable file
View File

@ -0,0 +1,35 @@
set -g __fish_git_prompt_show_informative_status 1
set -g __fish_git_prompt_hide_untrackedfiles 1
set -g __fish_git_prompt_color_branch -o blue
set -g __fish_git_prompt_showupstream "informative"
set -g __fish_git_prompt_char_upstream_ahead "↑"
set -g __fish_git_prompt_char_upstream_behind "↓"
set -g __fish_git_prompt_char_upstream_prefix ""
set -g __fish_git_prompt_char_stagedstate "●"
set -g __fish_git_prompt_char_dirtystate "✚"
set -g __fish_git_prompt_char_untrackedfiles "…"
set -g __fish_git_prompt_char_conflictedstate "✖"
set -g __fish_git_prompt_char_cleanstate "✔"
set -g __fish_git_prompt_color_dirtystate blue
set -g __fish_git_prompt_color_stagedstate yellow
set -g __fish_git_prompt_color_invalidstate red
set -g __fish_git_prompt_color_untrackedfiles $fish_color_normal
set -g __fish_git_prompt_color_cleanstate -o green
set -g __fish_git_prompt_color_prefix -o blue
set -g __fish_git_prompt_color_suffix -o blue
function fish_prompt
set_color $fish_color_cwd
echo -n \(
set_color magenta
echo -n \[(echo -n $USER)\]
set_color $fish_color_cwd
echo -n (hostname):
set_color cyan
echo -n (prompt_pwd)
set_color $fish_color_cwd
echo -n (fish_git_prompt)
echo -n \)
set_color normal
echo -n ' > '
end

33
fish/functions/import.fish Executable file
View File

@ -0,0 +1,33 @@
#!/usr/bin/env
function parent_dir
set -f trace (status stack-trace)
# By index:
# 1: in command substitution
# 2: parent.fish line
# 3: in function 'parent'
# 4: caller import line
# 5: in command substitution
# 6: caller "parent" invokation line
# 7: in function calling parent
# 8: jackpot! here's the parent of the caller
set -f parent_line $trace[8]
set -f parent_split (string split 'of file' $parent_line)
set -f parent (string trim $parent_split[2])
# qualify ~
set -f parent (string replace '~' "$HOME" $parent)
# Qualify the path to absolute and remove the filename
set -f parent_dir (realpath $parent)
set -f parent (string join '/' (string split '/' $parent_dir)[1..-2])
echo $parent
end
function import
set -f self_directory (parent_dir)
if set -q debug;
echo "importing $argv.fish from [$self_directory]"
end
source $self_directory/"$argv.fish"
end

8
fish/functions/initscript.fish Executable file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env fish
# Helper script to initialize fish scripts
function initscript
set -f file "$argv.fish"
echo "#!/usr/bin/env fish" >> "$file"
chmod +x "$file"
end

4
fish/functions/mkcd.fish Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env fish
function mkcd
mkdir $argv; and cd $argv
end

8
fish/functions/prompt_pwd.fish Executable file
View File

@ -0,0 +1,8 @@
function prompt_pwd --description 'Print the current working directory, NOT shortened to fit the prompt'
if test "$PWD" != "$HOME"
printf "%s" (echo $PWD|sed -e 's|/private||' -e "s|^$HOME|~|")
else
echo '~'
end
end

9
helix/config.toml Normal file
View File

@ -0,0 +1,9 @@
[editor]
auto-save = true
auto-completion = true
[editor.statusline]
#left = ["mode", "spinner"]
[editor.lsp]
display-messages = true

View File

@ -2,6 +2,5 @@
pushd /home/emilis/.config/herbstluftwm
echo starting fish script
echo (pwd)
./autostart.fish
fish ./autostart.fish
popd

View File

@ -1,19 +1,41 @@
#!/usr/local/bin/fish
#!/usr/bin/env fish
import fish_functions/log
import fish_functions/set_default
import fish_functions/notify
import fish_functions/restart_svcs
import fish_functions/group
alias hc=herbstclient
set -g THIS_PATH (pwd)
log "starting in $THIS_PATH"
# default font if not set
set_default hlwm_font "-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*"
hc emit_hook reload
xsetroot -solid black
if command -sq "xsetroot";
xsetroot -solid black
end
hc keyunbind --all
groups_reset
# set -l Mod Mod1 # alt
set -g Mod Mod4
set -g AltMod Mod1
set -u hlwm_mod $Mod
function key
log "Registering $Mod-$argv[1] to [$argv[2..]]"
hc keybind $Mod-$argv[1] $argv[2..]
end
hc keybind $Mod-Shift-r reload
hc keybind $Mod-Shift-c close
hc keybind $Mod-s spawn "flameshot" gui
hc keybind $Mod-Return spawn "dmenu_run"
hc keybind $Mod-Delete spawn "alacritty"
hc keybind $Mod-Home spawn "alacritty"
# basic movement in tiling and floating mode
# focusing clients
@ -21,17 +43,15 @@ hc keybind $Mod-Left focus left
hc keybind $Mod-Down focus down
hc keybind $Mod-Up focus up
hc keybind $Mod-Right focus right
hc keybind $Mod-h focus left
hc keybind $Mod-j focus down
hc keybind $Mod-k focus up
hc keybind $Mod-l focus right
# Move frames
hc keybind $Mod-Shift-Right shift right
hc keybind $Mod-Shift-Left shift left
hc keybind $Mod-Shift-Up shift up
hc keybind $Mod-Shift-Down shift down
# frames
#hc keybind $Mod-u split bottom 0.5
hc keybind $Mod-u split bottom 0.5
hc keybind $Mod-o split right 0.5
hc keybind $Mod-r remove
hc keybind $Mod-f fullscreen toggle
@ -44,24 +64,37 @@ hc keybind $Mod-Control-Down resize down +$resize_step
hc keybind $Mod-Control-Up resize up +$resize_step
hc keybind $Mod-Control-Right resize right +$resize_step
set -l tag_names 1 2 3 4
set -l secondary_tags 1 2 3 4
hc rename default "$tag_names[1]" || true
for tag in $tag_names
hc add "$tag"
hc keybind $Mod-$tag use_index (math $tag-1)
hc keybind $Mod-Shift-$tag move_index (math $tag-1)
end
for tag in $secondary_tags
set -l actual_tag (math $tag+$tag_names[-1])
set -l actual_index (math $actual_tag-1)
hc add "$actual_tag"
hc keybind $AltMod-$tag use_index $actual_index
hc keybind $AltMod-Shift-$tag move_index $actual_index
set_default -u hlwm_tags_per_group 5
set_default -u hlwm_group_count 3
log "registering $hlwm_group_count groups, with $hlwm_tags_per_group tags per"
set -l tag_indexes (seq $hlwm_tags_per_group)
hc silent rename default $tag_indexes[1]
for group_num in (seq $hlwm_group_count)
for tag_index in $tag_indexes
set -l tag (math $tag_index + '(('$group_num -1')' x $hlwm_tags_per_group ')')
log "adding tag <$tag>"
hc add "$tag"
end
end
group_set_keybinds
# set -l rename_result (hc rename default "$tag_names[1]")
# for tag in $tag_names
# hc add "$tag"
# hc keybind $Mod-$tag use_index (math $tag-1)
# hc keybind $Mod-Shift-$tag move_index (math $tag-1)
# end
# for tag in $secondary_tags
# set -l actual_tag (math $tag+$tag_names[-1])
# set -l actual_index (math $actual_tag-1)
# hc add "$actual_tag"
# hc keybind $AltMod-$tag use_index $actual_index
# hc keybind $AltMod-Shift-$tag move_index $actual_index
# end
# focus
hc keybind $Mod-Tab cycle_all +1
hc keybind $Mod-Tab cycle
hc keybind $Mod-i jumpto urgent
# mus
@ -74,6 +107,7 @@ hc mousebind $Mod-Button3 resize
# Theming #
#############################
set -l ACTIVE "#800080"
# TODO: Consider 6600ff for active
set -l NORMAL "#330033"
set -l URGENT "#7811A1"
alias hcs="hc set"
@ -165,11 +199,35 @@ hc unlock
# Start services
echo 'Starting services'
./start_svcs.fish
echo 'Services start script complete'
log 'Starting services'
restart_svcs "fcitx5"
log 'Services start done'
# For now, still use bash panel.sh
for monitor in (hc list_monitors | cut -d: -f1)
bash ./panel.sh "$monitor" &
function keybind_fn
argparse -i 'direct=' -- $argv
set -f script_name "fn_caller"
if set -q _flag_direct
set -f script_name $_flag_direct
end
key $argv[1] try spawn (printf "fish\n%s" "$THIS_PATH/fish_cmds/$script_name.fish") $argv[2]
end
log "Registering custom command binds"
keybind_fn i "toggle_idle_screen"
keybind_fn --direct="toggle_group" "Shift-Tab"
log "Custom commands bound"
set -l monitors (hc list_monitors | cut -d: -f1)
if not set -q hlwm_skip_panel
# For now, still use bash panel.sh
for monitor in $monitors
bash ./panel.sh "$monitor" &
end
else
# undo all the padding
for monitor in $monitors;
hc pad $monitor 0
end
notify skipping panel
end

View File

@ -0,0 +1,9 @@
#!/usr/bin/env fish
import ../fish_functions/log
set_default spawn_log_color "0000ff"
log -c $spawn_log_color "trying to spawn $argv[1] with args: <$argv[2..]>"
import ../fish_functions/$argv[1]
$argv[1] $argv[2..]

View File

@ -0,0 +1,4 @@
#!/usr/bin/env fish
import ../fish_functions/group
group_switch

View File

@ -0,0 +1,9 @@
#!/usr/bin/env fish
set -g FISH_CMDS_PATH $HOME/.config/herbstluftwm/fish_cmds
# cmd_string returns the shell command to invoke
# the fish_cmds file title given to it as an argument
function cmd_string
set -f FISH_PATH (status fish-path)
printf "$FISH_PATH\n$FISH_CMDS_PATH/$argv.fish"
end

View File

@ -0,0 +1,13 @@
#!/usr/bin/env fish
function hlwm_active
echo (herbstclient attr theme.active.color)
end
function hlwm_normal
echo (herbstclient attr theme.normal.color)
end
function hlwm_text
echo (herbstclient attr theme.normal.title_color)
end

View File

@ -0,0 +1,41 @@
#!/usr/bin/env
import notify
import log
import set_default
alias hc=herbstclient
set -g tag_color "ff99cc"
function groups_reset
set -e hlwm_group_active
end
function group_switch
set -f current $hlwm_group_active
if not set -q hlwm_group_active
set -U hlwm_group_active 2
else if test $hlwm_group_active -eq $hlwm_group_count
set -U hlwm_group_active 1
else
set -U hlwm_group_active (math $hlwm_group_active + 1)
end
log -c $tag_color "group $current -> $hlwm_group_active"
group_set_keybinds
notify "Group $hlwm_group_active"
end
# group_set_keybinds sets the keybinds to the given tab group
function group_set_keybinds
set_default hlwm_mod Mod4
log "group_set_keybinds: $hlwm_group_active"
if not set -q hlwm_group_active;
set -U hlwm_group_active 1
end
set -l offset (math (math $hlwm_group_active-1) x $hlwm_tags_per_group)
for tag in (seq $hlwm_tags_per_group)
set -l actual_tag (math $tag + $offset)
hc keybind $hlwm_mod-$tag use_index (math $actual_tag-1)
hc keybind $hlwm_mod-Shift-$tag move_index (math $actual_tag-1)
end
end

View File

@ -0,0 +1,20 @@
#!/usr/bin/env fish
import parent
import set_default
# calls logger with a specific color
#
# examples:
#
# log "hello there"
# log -c magenta "im berry"
# log --color cc00cc "just like the blueberries"
function log
set -f log_name (parent)
argparse 'c/color=' -- $argv
if not set -q _flag_color;
set -g _flag_color green
end
echo -s "[ " (set_color $_flag_color) $log_name (set_color normal) " ]: $argv" 1>&2
end

View File

@ -0,0 +1,25 @@
#!/usr/bin/env fish
import colors
import set_default
import log
set_default notify_fg (hlwm_text)
set_default notify_bg (hlwm_normal)
set_default notify_font $hlwm_font
set_default notify_padding 30
function notify
argparse -i 'secs=!_validate_int --min 1' -- $argv
set_default _flag_secs 1
set -f text_width (textwidth "$notify_font" "$argv")
echo "$argv" | \
dzen2 \
-p $_flag_secs \
-fg $notify_fg \
-bg $notify_bg \
-fn $notify_font \
-ta 'c' \
-w (math $text_width + $notify_padding) \
-h 16
end

View File

@ -0,0 +1,27 @@
#!/usr/bin/env fish
# parent prints the parent script's filename
function parent
set -f trace (status stack-trace)
# By index:
# 1: in command substitution
# 2: parent.fish line
# 3: in function 'parent'
# 4: caller import line
# 5: in command substitution
# 6: caller "parent" invokation line
# 7: in function calling parent
# 8: jackpot! here's the parent of the caller
set -f parent_line $trace[8]
set -f parent_split (string split 'of file' $parent_line)
set -f parent (string trim $parent_split[2])
# Clean up the parent a lil bit
set -f parent (realpath (string replace '~' "$HOME" $parent))
set -f parent_parts (string split '/' $parent)
set -f parent (string join '/' $parent_parts[-1])
# remove .fish suffix
set -f parent (string replace '.fish' '' $parent)
echo $parent
end

View File

@ -0,0 +1,17 @@
#!/usr/bin/env fish
import log
alias hc=herbstclient
function restart_svcs
for cmd in $argv
if not command -sq "$cmd";
log -c yellow "command [$cmd] not found, skipping..."
continue
end
log -c red "killing [$cmd]"
pkill -9 $cmd
log -c magenta "starting [$cmd]"
hc silent spawn "$cmd"
end
end

View File

@ -0,0 +1,25 @@
#!/usr/bin/env fish
# set_default sets a variable with
# global scope (-g), if it is not already set
#
# Examples:
#
# set EXAMPLE_1 "hello"
# set_default EXAMPLE_1 "world"
# echo $EXAMPLE_1 # "hello"
#
# set_default EXAMPLE_2 "world"
# echo $EXAMPLE_2 # "world"
function set_default
argparse -i 'u/universal' -- $argv
if not set -q $argv[1];
if set _flag_universal
echo "set -U $argv[1] $argv[2..]"
set -U $argv[1] $argv[2..]
else
echo "set -g $argv[1] $argv[2..]"
set -g $argv[1] $argv[2..]
end
end
end

View File

@ -0,0 +1,14 @@
#!/usr/bin/env fish
import notify
function toggle_idle_screen
if xset q | rg "DPMS is Enabled"
# Disable
xset -dpms
notify "screen idle off"
else
# Enable
xset +dpms
notify "screen idle on"
end
end

View File

@ -24,7 +24,7 @@ x=${geometry[0]}
y=${geometry[1]}
panel_width=${geometry[2]}
panel_height=16
font="-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*"
font="${hlwm_font:=-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*}"
# extract colors from hlwm and omit alpha-value
bgcolor=$(hc get frame_border_normal_color|sed 's,^\(\#[0-9a-f]\{6\}\)[0-9a-f]\{2\}$,\1,')
selbg=$(hc get window_border_active_color|sed 's,^\(\#[0-9a-f]\{6\}\)[0-9a-f]\{2\}$,\1,')

16
herbstluftwm/restartpanels.sh Executable file
View File

@ -0,0 +1,16 @@
#!/usr/bin/env bash
installdir=/
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
defaultpanel="$XDG_CONFIG_HOME/herbstluftwm/panel.sh"
[ -x "$defaultpanel" ] || defaultpanel="$installdir/etc/xdg/herbstluftwm/panel.sh"
panelcmd="${1:-$defaultpanel}"
herbstclient emit_hook quit_panel
for i in $(herbstclient list_monitors | cut -d':' -f1) ; do
"$panelcmd" $i &
done

View File

@ -1,9 +0,0 @@
#!/usr/local/bin/fish
set -l cmds "fcitx5"
for cmd in $cmds
echo "[ $cmd ] killing existing"
pkill -9 $cmd
echo "[ $cmd ] starting..."
$cmd &
end

25
link.fish Executable file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env fish
set -l me (status dirname)
set -l config_dir "$HOME/.config"
if not test -e $config_dir
mkdir $HOME/.config
else
# Move over helix/runtime here first (before deletion)
if test -e $config_dir/helix/runtime
if not test -e $config_dir/helix/runtime
mv "$config_dir/helix/runtime" "$me/helix/"
end
end
end
for directory in */
if test -L (string sub -e -1 $config_dir/$directory)
echo "already have a simlink for <$(string sub -e -1 $directory)>"
continue
else
echo "removing <$directory>"
rm -rf "$config_dir/$directory"
end
ln -s "$(pwd)/$directory" "$HOME/.config/"
end