Files
kjol/c/config/config.h
2026-07-13 13:02:47 -04:00

52 lines
1.6 KiB
C

#pragma once
// config.h — Global program configuration (config.ini next to binary)
//
// Stores internal program state: active theme, recent project directories,
// and other preferences. This file is managed by the program, not the user.
// Per-project settings belong in .editorconfig.
#include "base/base_inc.h"
////////////////////////////////
// Constants
#define CONFIG_MAX_RECENT_DIRS 10
#define CONFIG_PATH_MAX 1024
////////////////////////////////
// Config state
typedef struct Config {
char theme[64]; // active theme name
char recent_dirs[CONFIG_MAX_RECENT_DIRS][CONFIG_PATH_MAX]; // most recent first
S32 recent_dir_count;
B32 show_line_numbers;
B32 syntax_enabled;
B32 block_cursor;
B32 cursor_smear;
B32 smooth_scroll;
F32 ui_scale;
F32 editor_font_size;
char editor_font[64]; // "FiraCode", "JetBrains Mono", "Cascadia Mono"
char ui_font[64]; // "Inter", "FiraCode", etc.
S32 window_width;
S32 window_height;
char active_project[CONFIG_PATH_MAX];
} Config;
// Global config instance
extern Config g_config;
// Resolve the path to config.ini (next to the running binary).
static void config_get_path(char *out, S32 out_size);
// Load config from disk. Populates g_config. If the file doesn't exist,
// writes a default one and returns defaults.
static void config_load(void);
// Save current g_config state to disk.
static void config_save(void);
// Push a directory to the front of the recent list (deduplicates).
static void config_push_recent_dir(const char *dir);