#pragma once #include #include #include #include #include #include "action.h" #include "layout.h" #include "types.h" /* 壁纸列表,支持通配符和 shell 环境变量拼接 */ const char *wallpapers[] = {}; /* 壁纸切换间隔(单位:秒),0 表示不切换 */ const uint32_t wallpaper_interval = 0; /** * @brief 屏幕 tags 设置 * @description 每个屏幕的 tags 配置为字符串数组,以 NULL 结束,如 * {"1", "2", "3", "4", "5", "6", NULL} * * 每一项配置里面的数组个数表示对应的屏幕个数,并最后以 NULL 结束, * * 如一个屏幕应该配置为 {{"1", "2", "3", "4", NULL}, NULL}, * 两个屏幕应该配置为 {{"1", "2", "3", NULL}, {"1", "2", NULL}, NULL},以此类推 */ const char *const *const *const monitor_tags[] = { (const char *const *const[]){ (const char *const[]){"1", "2", "3", "4", "5", "6", NULL}, NULL, }, (const char *const *const[]){ (const char *const[]){"1", "2", "3", NULL}, (const char *const[]){"1", "2", "3", "4", "5", NULL}, NULL, }, }; /** * @brief 默认屏幕 tags 设置 * @description 若屏幕个数与 monitor_tags 中设置的所有配置项都不符, * 则所有屏幕的 tags 都使用这个默认配置 * * 格式为字符串数组,以 NULL 标志结束,如 {"1", "2", "3", NULL} */ const char *const default_monitor_tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL, }; const layout_t layouts[] = { {"[]=", tile}, {"[M]", monocle}, {"><>", NULL}, }; /* 默认 tags 规则 */ const rule_tag_t browser_tag[] = { {.monitor_index = 0, .tags = 1 << 1}, {0}, }; const rule_tag_t mpv_tag[] = { {.monitor_amount = 1, .monitor_index = 0, .tags = 1 << 3}, {.monitor_amount = 2, .monitor_index = 1, .tags = 1 << 2}, {0}, }; const rule_tag_t emacs_tag[] = { {.monitor_amount = 1, .monitor_index = 0, .tags = 1 << 2}, {.monitor_amount = 2, .monitor_index = 1, .tags = 1 << 1}, {0}, }; /* 新建窗口规则 */ const rule_t rules[] = { {.class = "firefox", .action = {.maximize = true}, .tag = browser_tag}, {.class = "Google-chrome", .action = {.maximize = true}, .tag = browser_tag}, {.class = "mpv", .action = {.fullscreen = true}, .tag = mpv_tag}, { .class = "Emacs", .action = {.switch_to_tag = true, .maximize = true}, .tag = emacs_tag, }, }; #define MODIFIER_ANY XCB_MOD_MASK_ANY #define SUPER XCB_MOD_MASK_4 #define ALT XCB_MOD_MASK_1 #define CTRL XCB_MOD_MASK_CONTROL #define SHIFT XCB_MOD_MASK_SHIFT #define BUTTON_ANY XCB_BUTTON_INDEX_ANY #define BUTTON_LEFT XCB_BUTTON_INDEX_1 #define BUTTON_RIGHT XCB_BUTTON_INDEX_2 #define BUTTON_MIDDLE XCB_BUTTON_INDEX_3 const char launcher[] = "rofi -show combi -modes window,drun,run,ssh,combi,windowcd"; const keybinding_t keys[] = { {SUPER, XK_p, spawn, {.ptr = launcher}}, {SUPER, XK_Return, spawn, {.ptr = "st"}}, {SUPER | SHIFT, XK_q, quit, {.b = false}}, {SUPER | CTRL, XK_r, quit, {.b = true}}, {SUPER | SHIFT, XK_c, kill_client, {0}}, {ALT, XK_j, focus_stack, {.b = true}}, {ALT, XK_k, focus_stack, {.b = false}}, {SUPER | SHIFT, XK_j, focus_monitor, {.b = true}}, {SUPER | SHIFT, XK_k, focus_monitor, {.b = false}}, {SUPER, XK_o, move_to_monitor, {.b = true}}, { SUPER, XK_a, raise_or_run, {.ptr = (char *[]){"Google-chrome", "google-chrome-stable"}}, }, { SUPER, XK_e, raise_or_run, {.ptr = (char *[]){"Emacs", "emacsclient -a '' -c -n"}}, }, {ALT | CTRL, XK_r, raise_or_run, {.ptr = (char *[]){"St", "st"}}}, {SUPER, XK_q, raise_or_run, {.ptr = (char *[]){"firefox", "firefox-bin"}}}, {SUPER, XK_Up, change_volume, {.i = 1}}, {SUPER, XK_Down, change_volume, {.i = -1}}, {SUPER | SHIFT, XK_m, toggle_mute, {0}}, {0, XF86XK_AudioRaiseVolume, change_volume, {.i = 1}}, {0, XF86XK_AudioLowerVolume, change_volume, {.i = -1}}, {0, XF86XK_AudioMute, toggle_mute, {0}}, {SUPER, XK_1, select_tag, {.ui = 1 << 0}}, {SUPER, XK_2, select_tag, {.ui = 1 << 1}}, {SUPER, XK_3, select_tag, {.ui = 1 << 2}}, {SUPER, XK_4, select_tag, {.ui = 1 << 3}}, {SUPER, XK_5, select_tag, {.ui = 1 << 4}}, {SUPER, XK_6, select_tag, {.ui = 1 << 5}}, {SUPER, XK_7, select_tag, {.ui = 1 << 6}}, {SUPER, XK_8, select_tag, {.ui = 1 << 7}}, {SUPER, XK_9, select_tag, {.ui = 1 << 8}}, {SUPER | SHIFT, XK_1, move_to_tag, {.ui = 1 << 0}}, {SUPER | SHIFT, XK_2, move_to_tag, {.ui = 1 << 1}}, {SUPER | SHIFT, XK_3, move_to_tag, {.ui = 1 << 2}}, {SUPER | SHIFT, XK_4, move_to_tag, {.ui = 1 << 3}}, {SUPER | SHIFT, XK_5, move_to_tag, {.ui = 1 << 4}}, {SUPER | SHIFT, XK_6, move_to_tag, {.ui = 1 << 5}}, {SUPER | SHIFT, XK_7, move_to_tag, {.ui = 1 << 6}}, {SUPER | SHIFT, XK_8, move_to_tag, {.ui = 1 << 7}}, {SUPER | SHIFT, XK_9, move_to_tag, {.ui = 1 << 8}}, }; const button_t buttons[] = { {click_tag, 0, BUTTON_LEFT, select_tag, {0}}, {click_tag, SUPER, BUTTON_LEFT, move_to_tag, {0}}, }; const char *const bar_bg = "#222222"; const char *const tag_bg = "#222222"; const char *const active_tag_bg = "#005577"; const char *const tag_color = "#bbbbbb"; const char *const active_tag_color = "#eeeeee"; const char *const layout_color = "#bbbbbb"; const char *const client_name_bg = "#222222"; const char *const client_name_color = "#bbbbbb"; const char *const active_client_name_bg = "#005577"; const char *const active_client_name_color = "#eeeeee"; const char *const status_net_recv_color = "#87af5f"; const char *const status_net_send_color = "#e54c62"; const char *const status_volume_color = "#7493d2"; const char *const status_memory_color = "#e0da37"; const char *const status_cpu_color = "#e33a6e"; const char *const status_datetime_color = "#7788af"; const char *const border_color = "#444444"; const char *const active_border_color = "#005577"; const char *const default_font_family = "sans-serif, monospace"; const uint32_t default_font_size = 10; const uint32_t dpi_fallback = 96; const uint32_t refresh_rate = 60; const uint32_t bar_y_padding = 1; const uint32_t tag_x_padding = 10; const uint32_t layout_symbol_x_padding = 10; const uint32_t client_name_x_padding = 10; const uint32_t status_x_padding = 4; const uint32_t status_icon_padding = 2; const uint32_t border_width = 1; const char *autostart_list[] = { "gentoo-pipewire-launcher restart", "picom -b --backend xrender", };