dotfiles/herbstluftwm/main.fish

229 lines
5.4 KiB
Fish
Executable File

#!/usr/bin/env fish
import fish_functions/notify
import fish_functions/restart_svcs
import fish_functions/group
set -g THIS_PATH (pwd)
log "starting in $THIS_PATH"
alias hc=herbstclient
# default font if not set
set_default hlwm_font "-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*"
hc emit_hook reload
if command -sq "xsetroot";
xsetroot -solid black
end
hc keyunbind --all
group_active_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-Home spawn "alacritty"
# basic movement in tiling and floating mode
# focusing clients
hc keybind $Mod-Left focus left
hc keybind $Mod-Down focus down
hc keybind $Mod-Up focus up
hc keybind $Mod-Right 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-o split right 0.5
hc keybind $Mod-r remove
hc keybind $Mod-f fullscreen toggle
# Cycle layouts
hc keybind $Mod-space or , and . compare tags.focus.curframe_wcount = 2 . cycle_layout +1 vertical horizontal max vertical grid , cycle_layout +1
set -l resize_step
hc keybind $Mod-Control-Left resize left +$resize_step
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_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)
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_index] to group [$group_num]"
hc add "$group_num:$tag_index"
end
end
# Remove the default tag, if present (switching to the first tag)
if set -l default_tag (hc get_attr tags.by-name.default.index)
set -l focused_tag (hc get_attr tags.focus.index)
if test $focused_tag -eq $default_tag
hc use_index 1
end
hc merge_tag "default"
log "removed default tag from index [$default_tag]"
end
group_set_keybinds
# focus
hc keybind $Mod-Tab cycle
hc keybind $Mod-i jumpto urgent
# mus
hc mouseunbind --all
hc mousebind $Mod-Button1 move
hc mousebind $Mod-Button2 zoom
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"
function hct
hc attr theme.$argv[1] $argv[2]
end
function on
hcs $argv[1] on
end
function off
hcs $argv[1] off
end
hct tiling.reset 1
hct floating.reset 1
hcs frame_border_active_color $ACTIVE
hcs frame_border_normal_color black
#hcs frame_bg_normal_color $ACTIVE
hcs frame_bg_active_color black
hcs frame_border_width 2
hcs show_frame_decorations 'focused_if_multiple'
on frame_bg_transparent
off smart_window_surroundings
on smart_frame_surroundings
hcs frame_transparent_width 5
hcs frame_gap 3
hcs window_gap 0
hcs frame_padding 0
hcs mouse_recenter_gap 0
hct title_height 15
hct title_when multiple_tabs
hct title_font 'Dejavu Sans:pixelsize=12'
hct title_depth 3
hct inner_width 0
hct inner_color black
hct border_width 1
hct floating.border_width 4
hct floating.outer_width 1
hct tiling.outer_width 1
hct background_color black
# Active
hct active.color $ACTIVE
hct active.inner_color $ACTIVE
# Normal
hct normal.color $NORMAL
hct normal.inner_color $NORMAL
# Urgent
hct urgent.color $URGENT
hct urgent.inner_color $URGENT
# Text
hct title_color white
hct normal.title_color '#898989'
for state in active urgent normal
hc substitute C theme.$state.inner_color \
attr theme.$state.outer_color C
end
# Rules
hc unrule -F
function rule
hc rule $argv[1]=$argv[2..]
end
function ruletype
hc rule windowtype~"\"_NET_WM_WINDOW_TYPE_$argv[1]\"" $argv[2]=$argv[3..]
end
rule focus on
rule floatplacement smart
ruletype '(DIALOG|UTILITY|SPLASH)' floating on
ruletype 'DIALOG' focus on
ruletype '(NOTIFICATION|DOCK|DESKTOP)' manage off
hc rule fixedsize floating=on
hcs tree_style '╾│ ├└╼─┐'
hc unlock
# Start services
log 'Starting services'
restart_svcs "fcitx5"
log 'Services start done'
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="switch_group" "grave" "+" # backtick
keybind_fn --direct="switch_group" "Tab-grave" "-"
for group_index in (seq $hlwm_group_count)
keybind_fn --direct="switch_group" "F$group_index" "$group_index"
end
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