aboutsummaryrefslogtreecommitdiff
path: root/include/rootston/config.h
blob: a95b83779a2e964971ad623dff805aefde6bcb24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef ROOTSTON_CONFIG_H
#define ROOTSTON_CONFIG_H

#include <xf86drmMode.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_switch.h>
#include <wlr/types/wlr_output_layout.h>

#define ROOTS_CONFIG_DEFAULT_SEAT_NAME "seat0"

struct roots_output_mode_config {
	drmModeModeInfo info;
	struct wl_list link;
};

struct roots_output_config {
	char *name;
	bool enable;
	enum wl_output_transform transform;
	int x, y;
	float scale;
	struct wl_list link;
	struct {
		int width, height;
		float refresh_rate;
	} mode;
	struct wl_list modes;
};

struct roots_device_config {
	char *name;
	char *seat;
	char *mapped_output;
	bool tap_enabled;
	struct wlr_box *mapped_box;
	struct wl_list link;
};

struct roots_binding_config {
	uint32_t modifiers;
	xkb_keysym_t *keysyms;
	size_t keysyms_len;
	char *command;
	struct wl_list link;
};

struct roots_keyboard_config {
	char *name;
	char *seat;
	uint32_t meta_key;
	char *rules;
	char *model;
	char *layout;
	char *variant;
	char *options;
	int repeat_rate, repeat_delay;
	struct wl_list link;
};

struct roots_cursor_config {
	char *seat;
	char *mapped_output;
	struct wlr_box *mapped_box;
	char *theme;
	char *default_image;
	struct wl_list link;
};

struct roots_switch_config {
	enum wlr_switch_type switch_type;
	enum wlr_switch_state switch_state;
	bool run_on_toggle;
	char *command;
	struct wl_list link;
};

struct roots_config {
	bool xwayland;
	bool xwayland_lazy;

	struct wl_list outputs;
	struct wl_list devices;
	struct wl_list bindings;
	struct wl_list keyboards;
	struct wl_list cursors;
	struct wl_list switches;

	char *config_path;
	char *startup_cmd;
	bool debug_damage_tracking;
};

/**
 * Create a roots config from the given command line arguments. Command line
 * arguments can specify the location of the config file. If it is not
 * specified, the default location will be used.
 */
struct roots_config *roots_config_create_from_args(int argc, char *argv[]);

/**
 * Destroy the config and free its resources.
 */
void roots_config_destroy(struct roots_config *config);

/**
 * Get configuration for the output. If the output is not configured, returns
 * NULL.
 */
struct roots_output_config *roots_config_get_output(struct roots_config *config,
	struct wlr_output *output);

/**
 * Get configuration for the device. If the device is not configured, returns
 * NULL.
 */
struct roots_device_config *roots_config_get_device(struct roots_config *config,
	struct wlr_input_device *device);

/**
 * Get configuration for the keyboard. If the keyboard is not configured,
 * returns NULL. A NULL device returns the default config for keyboards.
 */
struct roots_keyboard_config *roots_config_get_keyboard(
	struct roots_config *config, struct wlr_input_device *device);

/**
 * Get configuration for the cursor. If the cursor is not configured, returns
 * NULL. A NULL seat_name returns the default config for cursors.
 */
struct roots_cursor_config *roots_config_get_cursor(struct roots_config *config,
	const char *seat_name);

#endif