@@ -3,12 +3,13 @@ mod logger;
33mod watermark;
44mod window;
55
6+ use std:: fs:: read_to_string;
7+
68use clap:: Parser ;
79use clap:: Subcommand ;
810use code:: create_code;
911use codesnap:: config:: CodeSnap ;
1012use codesnap:: config:: SnapshotConfig ;
11- use codesnap:: config:: DEFAULT_WINDOW_MARGIN ;
1213use codesnap:: snapshot:: snapshot:: Snapshot ;
1314use watermark:: create_watermark;
1415use window:: create_window;
@@ -38,12 +39,12 @@ struct CLI {
3839 to_clipboard : bool ,
3940
4041 /// Font family for the code snippet
41- #[ arg( long, default_value = "CaskaydiaCove Nerd Font" ) ]
42- code_font_family : String ,
42+ #[ arg( long) ]
43+ code_font_family : Option < String > ,
4344
4445 /// Code theme for the code snippet
45- #[ arg( long, default_value = "base16-ocean.dark" ) ]
46- code_theme : String ,
46+ #[ arg( long) ]
47+ code_theme : Option < String > ,
4748
4849 /// Breadcrumbs is a useful and unique feature in CodeSnap, it shows the path of the file
4950 /// so that users can know where the code snippet comes from.
@@ -100,12 +101,12 @@ struct CLI {
100101 watermark_color : String ,
101102
102103 /// Set window shadow radius
103- #[ arg( long, default_value_t = 20. ) ]
104- shadow : f32 ,
104+ #[ arg( long) ]
105+ shadow : Option < f32 > ,
105106
106107 /// Display MacOS style window bar
107- #[ arg( long, default_value_t = true ) ]
108- mac_window_bar : bool ,
108+ #[ arg( long) ]
109+ mac_window_bar : Option < bool > ,
109110
110111 /// Display window border
111112 #[ arg( long, default_value_t = true ) ]
@@ -116,12 +117,12 @@ struct CLI {
116117 border_color : String ,
117118
118119 /// Set horizontal margin of window
119- #[ arg( long, default_value_t = DEFAULT_WINDOW_MARGIN ) ]
120- margin_x : f32 ,
120+ #[ arg( long) ]
121+ margin_x : Option < f32 > ,
121122
122123 /// Set vertical margin of window
123- #[ arg( long, default_value_t = DEFAULT_WINDOW_MARGIN ) ]
124- margin_y : f32 ,
124+ #[ arg( long) ]
125+ margin_y : Option < f32 > ,
125126
126127 /// Set title of the window
127128 #[ arg( long) ]
@@ -155,6 +156,9 @@ struct CLI {
155156 /// To generate ASCII snapshot ranther than image snapshot
156157 #[ arg( long) ]
157158 ascii : bool ,
159+
160+ #[ arg( long) ]
161+ config : Option < String > ,
158162}
159163
160164#[ derive( Subcommand ) ]
@@ -171,18 +175,24 @@ struct Args {
171175
172176fn generate_snapshot ( ) -> anyhow:: Result < ( ) > {
173177 let cli = CLI :: parse ( ) ;
174- let code = create_code ( & cli) ?;
175- let watermark = create_watermark ( & cli) ?;
176- let window = create_window ( & cli) ?;
177- let mut codesnap = CodeSnap :: default ( )
178- . code ( code)
179- . watermark ( watermark)
180- . window ( window)
178+
179+ let mut codesnap_default = if let Some ( ref config) = cli. config {
180+ let content = read_to_string ( config) ?;
181+
182+ CodeSnap :: from_config ( & content) ?
183+ } else {
184+ CodeSnap :: default ( )
185+ } ;
186+
187+ let mut codesnap = codesnap_default
188+ . map_code ( |code| create_code ( & cli, code) ) ?
189+ . map_watermark ( |watermark| create_watermark ( & cli, watermark) ) ?
190+ . map_window ( |window| create_window ( & cli, window) ) ?
181191 . scale_factor ( cli. scale_factor )
182192 . build ( ) ?;
183193
184- codesnap. themes_folder = cli. themes_folder . clone ( ) ;
185- codesnap. fonts_folder = cli. fonts_folder . clone ( ) ;
194+ codesnap. themes_folder = cli. themes_folder . clone ( ) . or ( codesnap . themes_folder ) ;
195+ codesnap. fonts_folder = cli. fonts_folder . clone ( ) . or ( codesnap . fonts_folder ) ;
186196
187197 if cli. ascii {
188198 execute ( & cli, codesnap. create_ascii_snapshot ( ) ?, codesnap) ?;
0 commit comments