Crate hyprlang

Crate hyprlang 

Source
Expand description

§Hyprlang-rs

A Rust implementation of the Hyprlang configuration language parser.

Hyprlang is a highly efficient, user-friendly configuration language designed for Linux applications. This crate provides a complete implementation of the Hyprlang specification with idiomatic Rust APIs.

§Features

  • Multiple data types: Int, Float, String, Vec2, Color, and custom types
  • Variables: User-defined and environment variables with recursive expansion
  • Expressions: Mathematical expressions with arithmetic operations
  • Nested categories: Hierarchical configuration structure
  • Special categories: Key-based, static, and anonymous categories
  • Custom handlers: Extensible keyword handlers with flag support
  • Comment directives: Conditional parsing and error control
  • Multiline values: Line continuation support
  • Source directives: Include external configuration files
  • Dynamic parsing: Parse and update configuration at runtime
  • Mutation & Serialization (optional): Modify config values and save back to files

§Optional Features

§mutation Feature

Enable the mutation feature to unlock configuration modification and serialization capabilities:

[dependencies]
hyprlang = { version = "0.2.1", features = ["mutation"] }

This provides:

  • Value mutations: [Config::set_int], [Config::set_float], [Config::set_string], [Config::remove]
  • Variable mutations: Config::set_variable, [Config::get_variable_mut], [Config::remove_variable]
  • Handler mutations: [Config::add_handler_call], [Config::remove_handler_call]
  • Category mutations: [Config::get_special_category_mut], [Config::remove_special_category_instance]
  • Serialization: [Config::serialize], [Config::save], [Config::save_as]

See the mutation API documentation on [MutableVariable] and [MutableCategoryInstance] for detailed examples.

§hyprland Feature

The hyprland feature provides a high-level API with pre-configured Hyprland handlers and typed accessors. See the [Hyprland] struct documentation for details.

§Example

use hyprlang::{Config, ConfigValue};

// Create a new configuration
let mut config = Config::new();

// Parse a configuration string
config.parse(r#"
$SCALE = 2
$WIDTH = 800

window_width = $WIDTH
window_height = 600
scale = $SCALE
total_width = {{WIDTH * SCALE}}

appearance {
    color = rgb(255, 255, 255)
    position = (100, 200)
}
"#)?;

// Retrieve values
assert_eq!(config.get_int("window_width")?, 800);
assert_eq!(config.get_int("scale")?, 2);
assert_eq!(config.get_int("total_width")?, 1600);

§Advanced Usage

§Custom Handlers

use hyprlang::{Config, HandlerContext};

let mut config = Config::new();

// Register a custom handler
config.register_handler_fn("exec", |ctx| {
    println!("Executing: {}", ctx.value);
    Ok(())
});

config.parse("exec = /usr/bin/app")?;

§Special Categories

use hyprlang::{Config, SpecialCategoryDescriptor};

let mut config = Config::new();

// Register a special category
config.register_special_category(
    SpecialCategoryDescriptor::keyed("device", "name")
);

config.parse(r#"
device[mouse] {
    sensitivity = 2.5
}

device[keyboard] {
    repeat_rate = 50
}
"#)?;

let keys = config.list_special_category_keys("device");
assert!(keys.contains(&"mouse".to_string()));

Structs§

Color
RGBA color representation
Config
Main configuration manager
ConfigOptions
Configuration options
ConfigValueEntry
Wrapper for config values with metadata
ExpressionEvaluator
Expression evaluator for arithmetic expressions
FunctionHandler
Function-based handler wrapper
HandlerContext
Context for handler execution
HandlerManager
Manager for keyword handlers
SpecialCategoryDescriptor
Descriptor for a special category configuration
SpecialCategoryInstance
A single instance of a special category
SpecialCategoryManager
Manager for special categories
VariableManager
Variable storage and resolution system
Vec2
A 2D vector with x and y components

Enums§

ConfigError
Errors that can occur during configuration parsing and management
ConfigValue
Configuration value types
HandlerScope
Handler scope type
SpecialCategoryType
Type of special category

Constants§

VERSION

Traits§

CustomValueType
Trait for custom value types
Handler
Trait for implementing custom keyword handlers

Functions§

process_escapes
Process escape sequences, replacing escaped braces with placeholders
restore_escaped_braces
Restore escaped braces from placeholders to literal {{ and }}

Type Aliases§

ParseResult
Result type alias for configuration operations