Compare commits

..
3 Commits
Author SHA1 Message Date
hektor f394df154a chore: drop placeholder directories
check / lint (push) Successful in 13s
2026-09-28 20:43:36 +02:00
hektor 50cece0533 chore(dots): drop redundant '.env.example' 2026-09-28 20:43:36 +02:00
hektor 093a60a261 refactor(shell): nixify remaining shell config
check / lint (push) Successful in 14s
2026-09-28 20:43:36 +02:00
8 changed files with 290 additions and 267 deletions

No files matched your search

+147
View File
@@ -0,0 +1,147 @@
#: Fonts {{{
font_family Iosevka Term SS08
bold_font auto
italic_font auto
bold_italic_font auto
font_size 12.0
disable_ligatures never
# }}}
#: Cursor {{{
cursor_shape block
cursor_blink_interval 0
#: }}}
#: Scrollback {{{
scrollback_lines 8192
scrollbar scrolled
scrollback_pager_history_size 1024
#: }}}
#: Mouse {{{
mouse_hide_wait 0.0
paste_actions quote-urls-at-prompt
#: }}}
#: Performance tuning {{{
repaint_delay 8
input_delay 2
#: }}}
#: Terminal bell {{{
enable_audio_bell yes
window_alert_on_bell yes
#: }}}
#: Window layout {{{
remember_window_size no
remember_window_position no
enabled_layouts *
hide_window_decorations yes
#: }}}
#: Advanced {{{
notify_on_cmd_finish unfocused
#: }}}
#: OS specific tweaks {{{
linux_display_server auto
wayland_enable_ime no
#: }}}
#: Keyboard shortcuts {{{
kitty_mod ctrl+shift
map kitty_mod+c copy_to_clipboard
map kitty_mod+v paste_from_clipboard
map cmd+v
# map kitty_mod+o pass_selection_to_program
# map kitty_mod+o pass_selection_to_program firefox
# map kitty_mod+y new_window less @selection
map kitty_mod+z scroll_to_prompt -1
map kitty_mod+x scroll_to_prompt 1
map kitty_mod+h show_scrollback
# map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
#:: For more details on piping screen and buffer contents to external
#:: programs, see launch <https://sw.kovidgoyal.net/kitty/launch/>.
# map kitty_mod+g show_last_command_output
# map kitty_mod+enter launch --cwd=current
# map cmd+enter
# map ctrl+n launch --location=neighbor
# map ctrl+f launch --location=first
map kitty_mod+n
map cmd+n
map kitty_mod+w
map shift+cmd+d
map kitty_mod+]
map kitty_mod+[
map kitty_mod+f
map kitty_mod+b
map kitty_mod+`
map kitty_mod+r
map cmd+r
map kitty_mod+1
map cmd+1
map kitty_mod+2
map cmd+2
map kitty_mod+3
map cmd+3
map kitty_mod+4
map cmd+4
map kitty_mod+5
map cmd+5
map kitty_mod+6
map cmd+6
map kitty_mod+7
map cmd+7
map kitty_mod+8
map cmd+8
map kitty_mod+9
map cmd+9
map kitty_mod+0
# map kitty_mod+c new_tab # FIXME: conflict with 'copy'
map cmd+t
map kitty_mod+q
map cmd+w
map kitty_mod+.
map kitty_mod+,
map kitty_mod+alt+t
map shift+cmd+i
map kitty_mod+f1
map kitty_mod+f11
map ctrl+cmd+f
map kitty_mod+f10
map opt+cmd+s
map kitty_mod+u kitten unicode_input
map ctrl+cmd+space
map kitty_mod+/ kitty_shell window
map kitty_mod+f5
map kitty_mod+r load_config_file
map shift+cmd+/
map cmd+h
map opt+cmd+
map cmd+m
map cmd+q
#: }}}
include ./nvim.conf
+8
View File
@@ -0,0 +1,8 @@
allow_remote_control socket-only
listen_on unix:/tmp/kitty
shell_integration enabled
action_alias kitty_scrollback_nvim kitten ~/.local/share/kitty-scrollback.nvim/python/kitty_scrollback_nvim.py
map kitty_mod+h kitty_scrollback_nvim
map kitty_mod+g kitty_scrollback_nvim --config ksb_builtin_last_cmd_output
mouse_map ctrl+shift+right press ungrabbed combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output
+45
View File
@@ -0,0 +1,45 @@
default_keybindings = false
flip_status_indicators = true
library_tabs = ["tracks", "albums", "artists", "playlists", "browse"] # remove podcasts tab
[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"
"1" = "focus queue"
"2" = "focus search"
"3" = "focus library"
"4" = "focus cover"
"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"
backend="pipe"
notify="false"
+80
View File
@@ -0,0 +1,80 @@
# 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
# bind-key j command-prompt -p "join pane from:" "join-pane -s '%%'"
# bind-key s command-prompt -p "send pane to:" "join-pane -t '%%'"
bind-key -T root S-F1 join-pane -s :1
bind-key -T root S-F2 join-pane -s :2
bind-key -T root S-F3 join-pane -s :3
bind-key -T root S-F4 join-pane -s :4
bind-key -T root S-F5 join-pane -s :5
bind-key -T root S-F6 join-pane -s :6
bind-key -T root S-F7 join-pane -s :7
bind-key -T root S-F8 join-pane -s :8
bind-key -T root S-F9 join-pane -s :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
# 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
set -g default-terminal "tmux-256color"
# 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'
set -g allow-passthrough on
set -s extended-keys on
set -as terminal-features 'xterm*:extkeys'
+3 -53
View File
@@ -2,7 +2,7 @@
config,
lib,
pkgs,
osConfig ? null,
dotsPath,
...
}:
@@ -23,60 +23,10 @@ in
config = lib.mkIf cfg.enable {
home.packages = [ spotifyWithWayland ];
programs.ncspot = {
enable = true;
settings = {
backend = lib.mkIf (osConfig.audio.enable or false) (lib.mkDefault "pulseaudio");
default_keybindings = false;
flip_status_indicators = true;
library_tabs = [
"tracks"
"albums"
"artists"
"playlists"
"browse"
]; # remove podcasts tab
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";
"1" = "focus queue";
"2" = "focus search";
"3" = "focus library";
"4" = "focus cover";
"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";
notify = "false";
};
};
settings = fromTOML (builtins.readFile (dotsPath + "/.config/ncspot/config.toml"));
};
};
}
+2
View File
@@ -8,6 +8,8 @@
{
config = lib.mkIf config.utils.enable {
home.packages = with pkgs; [
ripgrep
bat
jq
entr
parallel
+3 -137
View File
@@ -2,6 +2,7 @@
config,
lib,
pkgs,
dotsPath,
...
}:
@@ -19,145 +20,10 @@ in
programs.kitty = {
enable = true;
package = config.nixgl.wrap pkgs.kitty;
settings = {
#: Fonts {{{
font_family = "Iosevka Term SS08";
bold_font = "auto";
italic_font = "auto";
bold_italic_font = "auto";
font_size = 12.0;
disable_ligatures = "never";
# }}}
#: Cursor {{{
cursor_shape = "block";
cursor_blink_interval = 0;
#: }}}
#: Scrollback {{{
scrollback_lines = 8192;
scrollbar = "scrolled";
scrollback_pager_history_size = 1024;
#: }}}
#: Mouse {{{
mouse_hide_wait = 0.0;
paste_actions = "quote-urls-at-prompt";
#: }}}
#: Performance tuning {{{
repaint_delay = 8;
input_delay = 2;
#: }}}
#: Terminal bell {{{
enable_audio_bell = true;
window_alert_on_bell = true;
#: }}}
#: Window layout {{{
remember_window_size = false;
remember_window_position = false;
enabled_layouts = "*";
hide_window_decorations = true;
#: }}}
#: Advanced {{{
notify_on_cmd_finish = "unfocused";
#: }}}
#: OS specific tweaks {{{
linux_display_server = "auto";
wayland_enable_ime = false;
#: }}}
kitty_mod = "ctrl+shift";
allow_remote_control = "socket-only";
listen_on = "unix:/tmp/kitty";
shell_integration = "enabled";
};
#: Keyboard shortcuts {{{
keybindings = {
"kitty_mod+c" = "copy_to_clipboard";
"kitty_mod+v" = "paste_from_clipboard";
"cmd+v" = "";
# map kitty_mod+o pass_selection_to_program
# map kitty_mod+o pass_selection_to_program firefox
# map kitty_mod+y new_window less @selection
"kitty_mod+z" = "scroll_to_prompt -1";
"kitty_mod+x" = "scroll_to_prompt 1";
"kitty_mod+h" = "kitty_scrollback_nvim";
# map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
#:: For more details on piping screen and buffer contents to external
#:: programs, see launch <https://sw.kovidgoyal.net/kitty/launch/>.
# map kitty_mod+g show_last_command_output
# map kitty_mod+enter launch --cwd=current
# map cmd+enter
# map ctrl+n launch --location=neighbor
# map ctrl+f launch --location=first
"kitty_mod+n" = "";
"cmd+n" = "";
"kitty_mod+w" = "";
"shift+cmd+d" = "";
"kitty_mod+]" = "";
"kitty_mod+[" = "";
"kitty_mod+f" = "";
"kitty_mod+b" = "";
"kitty_mod+`" = "";
"cmd+r" = "";
"kitty_mod+1" = "";
"cmd+1" = "";
"kitty_mod+2" = "";
"cmd+2" = "";
"kitty_mod+3" = "";
"cmd+3" = "";
"kitty_mod+4" = "";
"cmd+4" = "";
"kitty_mod+5" = "";
"cmd+5" = "";
"kitty_mod+6" = "";
"cmd+6" = "";
"kitty_mod+7" = "";
"cmd+7" = "";
"kitty_mod+8" = "";
"cmd+8" = "";
"kitty_mod+9" = "";
"cmd+9" = "";
"kitty_mod+0" = "";
# map kitty_mod+c new_tab # FIXME: conflict with 'copy'
"cmd+t" = "";
"kitty_mod+q" = "";
"cmd+w" = "";
"kitty_mod+." = "";
"kitty_mod+," = "";
"kitty_mod+alt+t" = "";
"shift+cmd+i" = "";
"kitty_mod+f1" = "";
"kitty_mod+f11" = "";
"ctrl+cmd+f" = "";
"kitty_mod+f10" = "";
"opt+cmd+s" = "";
"kitty_mod+u" = "kitten unicode_input";
"ctrl+cmd+space" = "";
"kitty_mod+/" = "kitty_shell window";
"kitty_mod+f5" = "";
"kitty_mod+r" = "load_config_file";
"shift+cmd+/" = "";
"cmd+h" = "";
"opt+cmd+" = "";
"cmd+m" = "";
"cmd+q" = "";
"kitty_mod+g" = "kitty_scrollback_nvim --config ksb_builtin_last_cmd_output";
};
#: }}}
actionAliases.kitty_scrollback_nvim = "kitten ~/.local/share/kitty-scrollback.nvim/python/kitty_scrollback_nvim.py";
mouseBindings."ctrl+shift+right press" =
"ungrabbed combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output";
extraConfig = builtins.readFile (dotsPath + "/.config/kitty/kitty.conf");
};
home.file.".config/kitty/nvim.conf".source = dotsPath + "/.config/kitty/nvim.conf";
home.file.".local/share/kitty-scrollback.nvim".source = pkgs.vimPlugins.kitty-scrollback-nvim;
};
}
+2 -77
View File
@@ -2,6 +2,7 @@
config,
lib,
pkgs,
dotsPath,
...
}:
@@ -16,83 +17,7 @@
programs.tmux = {
enable = true;
historyLimit = 100000;
aggressiveResize = true;
escapeTime = 0;
keyMode = "vi";
# 1-based indexing makes most sense for keyboard layouts (where number row start at 1)
baseIndex = 1;
terminal = "tmux-256color";
extraConfig = ''
# statusbar
setw -g monitor-activity on
set -g visual-activity on
set -g default-command "''${SHELL}"
# keybindings
# NOTE: I intend to use defaults whenever feasible
# - my prefix key is still C-b
# - however, I do use vi mode
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
# bind-key j command-prompt -p "join pane from:" "join-pane -s '%%'"
# bind-key s command-prompt -p "send pane to:" "join-pane -t '%%'"
bind-key -T root S-F1 join-pane -s :1
bind-key -T root S-F2 join-pane -s :2
bind-key -T root S-F3 join-pane -s :3
bind-key -T root S-F4 join-pane -s :4
bind-key -T root S-F5 join-pane -s :5
bind-key -T root S-F6 join-pane -s :6
bind-key -T root S-F7 join-pane -s :7
bind-key -T root S-F8 join-pane -s :8
bind-key -T root S-F9 join-pane -s :9
# 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
# 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'
set -g allow-passthrough on
set -s extended-keys on
set -as terminal-features 'xterm*:extkeys'
'';
extraConfig = builtins.readFile (dotsPath + "/.config/tmux/tmux.conf");
};
};
}