Compare commits

...
4 Commits
Author SHA1 Message Date
lupan fed47b6373 add qtile config 2026-10-18 21:07:43 +02:00
lupan 871b91b7c3 stdout-clock: add option -p for prefix 2026-10-15 23:56:01 +02:00
lupan d0a863dcdf shell: alias mon: same-as or monitor direction 2026-10-05 21:17:37 +02:00
lupan a1e71faa94 kakounte: add fzf.kak 2026-10-03 17:42:37 +02:00
4 changed files with 263 additions and 7 deletions

No files matched your search

+25
View File
@@ -294,6 +294,31 @@ bundle live-grep https://codeberg.org/raiguard/kak-live-grep %{
map global -docstring 'Live grep (selection)' file-mode 'G' ': live-grep %val{selection}<ret>' map global -docstring 'Live grep (selection)' file-mode 'G' ': live-grep %val{selection}<ret>'
} }
# FZF
bundle fzf https://github.com/andreyorst/fzf.kak %{
map global user u ': fzf-mode<ret>' -docstring 'Fzf'
hook global ModuleLoaded fzf %{
define-command -hidden fzf-git-grep %{
set local fzf_grep_command "git grep -n ''"
fzf-grep
}
define-command -hidden fzf-file-grep %{
set local fzf_grep_command "grep -Hn '' %val{buffile}"
set local fzf_grep_preview false
fzf-grep
}
define-command -hidden fzf-file-dir-grep %{
set local fzf_grep_command "grep -RHn '' %sh{dirname ""$kak_buffile""}"
fzf-grep
}
map -docstring 'git grep' global fzf G ': require-module fzf-grep; fzf-git-grep<ret>'
map -docstring 'file grep' global fzf l ': require-module fzf-grep; fzf-file-grep<ret>'
map -docstring 'file dir grep' global fzf d ': require-module fzf-grep; fzf-file-dir-grep<ret>'
}
}
# HARPOON # HARPOON
bundle kak-harpoon 'https://codeberg.org/raiguard/kak-harpoon' %{ bundle kak-harpoon 'https://codeberg.org/raiguard/kak-harpoon' %{
+18 -5
View File
@@ -1,27 +1,40 @@
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
void show(struct tm *tm) void show(char *prefix, struct tm *tm)
{ {
char s[6]; char s[6];
strftime(s, sizeof(s), "%H:%M", tm); strftime(s, sizeof(s), "%H:%M", tm);
printf("%s\n", s); printf("%s%s\n", prefix, s);
fflush(stdout); fflush(stdout);
} }
int main() { int main(int argc, char **argv) {
int h, m, init = 60; int h, m, init = 60, opt;
time_t t; time_t t;
struct tm *tm; struct tm *tm;
char *prefix = "";
while ((opt = getopt(argc, argv, "p:")) != -1) {
switch (opt) {
case 'p':
prefix = optarg;
break;
default:
fprintf(stderr, "Usage: %s [-p PREFIX]\n", argv[0]);
exit(EXIT_FAILURE);
}
}
while (1) { while (1) {
t = time(NULL); t = time(NULL);
tm = localtime(&t); tm = localtime(&t);
if (tm->tm_hour != h || tm->tm_min != m || init > 0) { if (tm->tm_hour != h || tm->tm_min != m || init > 0) {
show(tm); show(prefix, tm);
h = tm->tm_hour; h = tm->tm_hour;
m = tm->tm_min; m = tm->tm_min;
init = (init > 0) ? init - 1 : 0; init = (init > 0) ? init - 1 : 0;
+216
View File
@@ -0,0 +1,216 @@
import libqtile.resources
from libqtile import bar, layout, qtile, widget
from libqtile.config import Click, Drag, Group, Key, KeyChord, Match, Output, Screen
from libqtile.lazy import lazy
from libqtile.utils import guess_terminal
mod = "mod4"
terminal = guess_terminal()
keys = [
# A list of available commands that can be bound to keys can be found
# at https://docs.qtile.org/en/latest/manual/config/lazy.html
# Switch between windows
Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
Key([mod], "l", lazy.layout.right(), desc="Move focus to right"),
Key([mod], "j", lazy.layout.down(), desc="Move focus down"),
Key([mod], "k", lazy.layout.up(), desc="Move focus up"),
Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"),
# Move windows between left/right columns or move up/down in current stack.
# Moving out of range in Columns layout will create new column.
Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"),
Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"),
Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"),
Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"),
# Grow windows. If current window is on the edge of screen and direction
# will be to screen edge - window would shrink.
Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"),
Key([mod, "control"], "l", lazy.layout.grow_right(), desc="Grow window to the right"),
Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"),
Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"),
Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"),
# Toggle between split and unsplit sides of stack.
# Split = all windows displayed
# Unsplit = 1 window displayed, like Max layout, but still with
# multiple stack panes
Key(
[mod, "shift"],
"Return",
lazy.layout.toggle_split(),
desc="Toggle between split and unsplit sides of stack",
),
Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"),
# Toggle between different layouts as defined below
Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"),
Key([mod], "p", lazy.spawncmd(), desc="Spawn a command using a prompt widget"),
KeyChord([mod], "semicolon", [
Key(
[],
"f",
lazy.window.toggle_fullscreen(),
desc="Toggle fullscreen on the focused window",
),
Key(["control"], "w", lazy.window.kill(), desc="Kill focused window"),
Key(["control"], "q", lazy.shutdown(), desc="Shutdown Qtile"),
Key(["control"], "r", lazy.reload_config(), desc="Reload the config"),
Key([], "t", lazy.window.toggle_floating(), desc="Toggle floating on the focused window"),
]),
]
# Add key bindings to switch VTs in Wayland.
# We can't check qtile.core.name in default config as it is loaded before qtile is started
# We therefore defer the check until the key binding is run by using .when(func=...)
for vt in range(1, 8):
keys.append(
Key(
["control", "mod1"],
f"f{vt}",
lazy.core.change_vt(vt).when(func=lambda: qtile.core.name == "wayland"),
desc=f"Switch to VT{vt}",
)
)
groups = [Group(i) for i in "qwertasdfgzxcvb"]
for i in groups:
keys.extend(
[
# mod + group number = switch to group
Key(
[mod],
i.name,
lazy.group[i.name].toscreen(),
desc=f"Switch to group {i.name}",
),
# mod + shift + group number = switch to & move focused window to group
Key(
[mod, "shift"],
i.name,
lazy.window.togroup(i.name, switch_group=True),
desc=f"Switch to & move focused window to group {i.name}",
),
# Or, use below if you prefer not to switch to that group.
# # mod + shift + group number = move focused window to group
# Key([mod, "shift"], i.name, lazy.window.togroup(i.name),
# desc="move focused window to group {}".format(i.name)),
]
)
layouts = [
layout.Columns(border_focus_stack=["#d75f5f", "#8f3d3d"], border_width=4),
layout.Max(),
# Try more layouts by unleashing below layouts.
# layout.Stack(num_stacks=2),
# layout.Bsp(),
# layout.Matrix(),
# layout.MonadTall(),
# layout.MonadWide(),
# layout.RatioTile(),
# layout.Tile(),
# layout.TreeTab(),
# layout.VerticalTile(),
# layout.Zoomy(),
]
widget_defaults = dict(
font="sans",
fontsize=24,
padding=3,
)
extension_defaults = widget_defaults.copy()
def generate_screens(outputs: list[Output]) -> list[Screen]:
return [
Screen(
top=bar.Bar(
[
widget.CurrentLayout(),
widget.GroupBox(),
widget.Prompt(),
widget.WindowName(),
widget.Chord(
chords_colors={
"launch": ("#ff0000", "#ffffff"),
},
name_transform=lambda name: name.upper(),
),
# NB Systray is incompatible with Wayland, consider using StatusNotifier instead
# widget.StatusNotifier(),
#widget.Systray(),
widget.Clock(format="%Y-%m-%d %a %H:%M"),
],
48,
# border_width=[2, 0, 2, 0], # Draw top and bottom borders
# border_color=["ff00ff", "000000", "ff00ff", "000000"] # Borders are magenta
),
background="#000000",
# You can uncomment this variable if you see that on X11 floating resize/moving is laggy
# By default we handle these events delayed to already improve performance, however your system might still be struggling
# This variable is set to None (no cap) by default, but you can set it to 60 to indicate that you limit it to 60 events per second
# x11_drag_polling_rate = 60,
)
for output in outputs
]
# Instead of screens, you can define a function here to specify which Screen
# should correspond to which Output.
fake_screens: list[Screen] | None = None
# Drag floating layouts.
mouse = [
Drag([mod], "Button1", lazy.window.set_position_floating(), start=lazy.window.get_position()),
Drag([mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size()),
Click([mod], "Button2", lazy.window.bring_to_front()),
]
dgroups_key_binder = None
dgroups_app_rules = [] # type: list
follow_mouse_focus = True
bring_front_click = False
floats_kept_above = True
cursor_warp = False
floating_layout = layout.Floating(
float_rules=[
# Run the utility of `xprop` to see the wm class and name of an X client.
*layout.Floating.default_float_rules,
Match(wm_class="confirmreset"), # gitk
Match(wm_class="makebranch"), # gitk
Match(wm_class="maketag"), # gitk
Match(wm_class="ssh-askpass"), # ssh-askpass
Match(title="branchdialog"), # gitk
Match(title="pinentry"), # GPG key password entry
]
)
auto_fullscreen = True
focus_on_window_activation = "smart"
focus_previous_on_window_remove = False
reconfigure_screens = True
# How long (in seconds) to wait after a screen change event before firing the
# screen_change hook, coalescing bursts of events into a single one.
screen_change_debounce_timeout = 1
# If things like steam games want to auto-minimize themselves when losing
# focus, should we respect this or not?
auto_minimize = True
# When using the Wayland backend, this can be used to configure input devices.
wl_input_rules = None
# xcursor theme (string or None) and size (integer) for Wayland backend
wl_xcursor_theme = "breeze_cursors"
wl_xcursor_size = 24
idle_timers = [] # type: list
idle_inhibitors = [] # type: list
# XXX: Gasp! We're lying here. In fact, nobody really uses or cares about this
# string besides java UI toolkits; you can see several discussions on the
# mailing lists, GitHub issues, and other WM documentation that suggest setting
# this string if your java app doesn't work correctly. We may as well just lie
# and say that we're a working one by default.
#
# We choose LG3D to maximize irony: it is a 3D non-reparenting WM written in
# java that happens to be on java's whitelist.
wmname = "LG3D"
+4 -2
View File
@@ -19,9 +19,11 @@ alias fixdp='xrandr --output DP-0 --right-of DP-2'
alias a4='COLORTERM=truecolor TERM=xterm-256color a4' alias a4='COLORTERM=truecolor TERM=xterm-256color a4'
mon() { mon() {
local mon=$(KFF_DEFAULT_COMMAND='xrandr --listmonitors | tail +2' kff | awk '{print $NF}') local mon=$(KFF_DEFAULT_COMMAND='xrandr | grep -i "^[a-z]"' kff | awk '{print $1}')
local res=$(KFF_DEFAULT_COMMAND='echo "1920x1080\n2560x1440\n3840x2160"' kff) local res=$(KFF_DEFAULT_COMMAND='echo "1920x1080\n2560x1440\n3840x2160"' kff)
xrandr --output "$mon" --mode "$res" --auto local where=$(KFF_DEFAULT_COMMAND='echo "left-of\nright-of\nbelow\nabove\nsame-as"' kff)
local alt=$(KFF_DEFAULT_COMMAND='xrandr | grep -i "^[a-z]"' kff | awk '{print $1}')
xrandr --output "$mon" --mode "$res" "--$where" "$alt" --auto
} }
zzz() { zzz() {