├── Makefile ├── README.md ├── configs ├── simple.yml └── test.yml ├── defaults.yml ├── dump └── load /Makefile: -------------------------------------------------------------------------------- 1 | prefix := $(HOME)/.local 2 | bindir := $(prefix)/bin 3 | sharedir := $(prefix)/share/xfconf-helper 4 | 5 | all: 6 | 7 | D = $(DESTDIR) 8 | 9 | install: 10 | install -d -m 755 $(D)$(bindir)/ 11 | install -m 755 load $(D)$(bindir)/xfconf-load 12 | install -m 755 dump $(D)$(bindir)/xfconf-dump 13 | install -d -m 755 $(D)$(sharedir)/ 14 | install -m 644 defaults.yml $(D)$(sharedir)/defaults.yml 15 | 16 | .PHONY: all install 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This project attempts to simplify the configuration of Xfce, by using YAML files instead of XML 2 | files. 3 | 4 | In order to maintain your configuration, you would need an XML file like: 5 | 6 | ```xml 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | ``` 20 | 21 | Of course, the moment you change any other configuration this file immediately is filled with noise, 22 | and then it becomes hard to keep track what are the defaults, and what are your changes. 23 | 24 | Instead, we use a much less verbose YAML file: 25 | 26 | ```yaml 27 | shorcuts: 28 | wm: 29 | left_workspace: "Left" 30 | right_workspace: "Right" 31 | up_workspace: "Up" 32 | down_workspace: "Down" 33 | ``` 34 | 35 | This format is not only less verbose and more readable, but it also maps conceptually to what a 36 | human wants to do: map `right_workspace` to a key, not a key to `right_workspace_key`. 37 | 38 | Additionally, all configurations can be stored in the same file: 39 | 40 | ```yaml 41 | --- 42 | shortcuts: 43 | commands: 44 | "Return": xfce4-terminal 45 | wm: 46 | left_workspace: "Left" 47 | right_workspace: "Right" 48 | up_workspace: "Up" 49 | down_workspace: "Down" 50 | settings: 51 | xfwm4: 52 | "/general/easy_click": Super 53 | xfce4-session: 54 | "/general/PromptOnLogout": false 55 | xfce4-desktop: 56 | "/desktop-icons/style": 0 57 | panels: 58 | - position: p=10;x=0;y=0 59 | plugins: 60 | - - whiskermenu 61 | - - tasklist 62 | - - pager 63 | ``` 64 | 65 | Even the configuration of the panels is understandable, as opposed to the XML one. 66 | 67 | To load a configuration: 68 | 69 | ```sh 70 | xfconf-load config.yml 71 | ``` 72 | 73 | The configuration is loaded using D-Bus, so it's immediately activated. 74 | 75 | To store your current current configuration: 76 | 77 | ```sh 78 | xfconf-dump > config.yml 79 | ``` 80 | 81 | Known defaults will be skipped in order to better visualize the actual configuration. 82 | 83 | If you want to see a diff, you can specify the original config to minimize the 84 | differences. 85 | 86 | ```sh 87 | xfconf-dump original-config.yml > new-config.yml 88 | diff -u original-config.yml new-config.yml 89 | ``` 90 | 91 | ## Prerequisites 92 | 93 | To use you will need `ruby` and the `ruby-dbus` gem, which you can install with: 94 | 95 | ```sh 96 | gem install ruby-dbus 97 | ``` 98 | 99 | ## Install 100 | 101 | Simply run `make install` (and make sure `~/.local/bin` is in your `$PATH`). 102 | 103 | If you are using Arch Linux, you can install xfce-config-helper from AUR. 104 | 105 | ```sh 106 | yay -Sy xfce-config-helper 107 | ``` 108 | -------------------------------------------------------------------------------- /configs/simple.yml: -------------------------------------------------------------------------------- 1 | --- 2 | shortcuts: 3 | commands: 4 | "Return": exo-open --launch TerminalEmulator 5 | wm: 6 | left_workspace: "Left" 7 | right_workspace: "Right" 8 | up_workspace: "Up" 9 | down_workspace: "Down" 10 | workspace_1: "1" 11 | workspace_2: "2" 12 | workspace_3: "3" 13 | workspace_4: "4" 14 | settings: 15 | xfwm4: 16 | "/general/easy_click": Super 17 | "/general/cycle_preview": false 18 | xfce4-session: 19 | "/general/PromptOnLogout": false 20 | xfce4-desktop: 21 | "/desktop-icons/style": 0 22 | xfce4-panel: 23 | "/panels/dark-mode": true 24 | panels: 25 | - size: 30 26 | length: 100 27 | length-adjust: false 28 | position: p=10;x=0;y=0 29 | position-locked: true 30 | icon-size: 16 31 | plugins: 32 | - - whiskermenu 33 | - - tasklist 34 | - - separator 35 | - expand: true 36 | style: 0 37 | - - windowmenu 38 | - - separator 39 | - style: 0 40 | - - pager 41 | - rows: 2 42 | - - separator 43 | - style: 0 44 | - - systray 45 | - icon-size: 16 46 | square-icons: true 47 | - - pulseaudio 48 | - - power-manager-plugin 49 | - - notification-plugin 50 | - - clock 51 | - digital-format: "%R" 52 | -------------------------------------------------------------------------------- /configs/test.yml: -------------------------------------------------------------------------------- 1 | --- 2 | shortcuts: 3 | commands: 4 | "Return": xfce4-terminal 5 | "b": chromium 6 | wm: 7 | left_workspace: "Left" 8 | right_workspace: "Right" 9 | up_workspace: "Up" 10 | down_workspace: "Down" 11 | settings: 12 | xfwm4: 13 | "/general/easy_click": Super 14 | "/general/cycle_tabwin_mode": 1 15 | xfce4-session: 16 | "/general/PromptOnLogout": false 17 | xfce4-desktop: 18 | "/desktop-icons/style": 0 19 | panels: 20 | - plugins: 21 | - - whiskermenu 22 | - - tasklist 23 | - - pager 24 | -------------------------------------------------------------------------------- /defaults.yml: -------------------------------------------------------------------------------- 1 | shortcuts: 2 | commands: 3 | "F1": xfce4-popup-applicationsmenu 4 | "F2": xfce4-appfinder --collapsed 5 | "F2/startup-notify": true 6 | "F3": xfce4-appfinder 7 | "F3/startup-notify": true 8 | "Delete": xfce4-session-logout 9 | "l": xflock4 10 | "t": exo-open --launch TerminalEmulator 11 | XF86Display: xfce4-display-settings --minimal 12 | "p": xfce4-display-settings --minimal 13 | "Escape": xfdesktop --menu 14 | XF86WWW: exo-open --launch WebBrowser 15 | HomePage: exo-open --launch WebBrowser 16 | XF86Mail: exo-open --launch MailReader 17 | Print: xfce4-screenshooter 18 | "Print": xfce4-screenshooter -w 19 | "Print": xfce4-screenshooter -r 20 | "e": thunar 21 | "f": thunar 22 | "Escape": xkill 23 | "Escape": xfce4-taskmanager 24 | "r": xfce4-appfinder -c 25 | "r/startup-notify": true 26 | "s": orca 27 | wm: 28 | add_workspace: "Insert" 29 | cancel: Escape 30 | left: Left 31 | right: Right 32 | up: Up 33 | down: Down 34 | cycle_windows: "Tab" 35 | cycle_reverse_windows: "Tab" 36 | del_workspace: "Delete" 37 | down_workspace: "Down" 38 | left_workspace: "Left" 39 | lower_window: "Page_Down" 40 | close_window: "F4" 41 | stick_window: "F6" 42 | move_window: "F7" 43 | resize_window: "F8" 44 | hide_window: "F9" 45 | maximize_window: "F10" 46 | fullscreen: "F11" 47 | above: "F12" 48 | move_window_left: "Left" 49 | move_window_next_workspace: "End" 50 | move_window_prev_workspace: "Home" 51 | move_window_right: "Right" 52 | move_window_up: "Up" 53 | move_window_workspace_1: "KP_1" 54 | move_window_workspace_2: "KP_2" 55 | move_window_workspace_3: "KP_3" 56 | move_window_workspace_4: "KP_4" 57 | move_window_workspace_5: "KP_5" 58 | move_window_workspace_6: "KP_6" 59 | move_window_workspace_7: "KP_7" 60 | move_window_workspace_8: "KP_8" 61 | move_window_workspace_9: "KP_9" 62 | popup_menu: "space" 63 | raise_window: "Page_Up" 64 | right_workspace: "Right" 65 | show_desktop: "d" 66 | up_workspace: "Up" 67 | switch_window: "Tab" 68 | workspace_1: "F1" 69 | workspace_2: "F2" 70 | workspace_3: "F3" 71 | workspace_4: "F4" 72 | workspace_5: "F5" 73 | workspace_6: "F6" 74 | workspace_7: "F7" 75 | workspace_8: "F8" 76 | workspace_9: "F9" 77 | workspace_10: "F10" 78 | workspace_11: "F11" 79 | workspace_12: "F12" 80 | tile_left: "KP_Left" 81 | tile_right: "KP_Right" 82 | tile_down: "KP_Down" 83 | tile_up: "KP_Up" 84 | tile_up_right: "KP_Page_Up" 85 | tile_up_left: "KP_Home" 86 | tile_down_left: "KP_End" 87 | tile_down_right: "KP_Next" 88 | 89 | settings: 90 | xsettings: 91 | "/Gdk/WindowScalingFactor": 1 92 | "/Gtk/ButtonImages": true 93 | "/Gtk/CanChangeAccels": false 94 | "/Gtk/ColorPalette": black:white:gray50:red:purple:blue:light blue:green:yellow:orange:lavender:brown:goldenrod4:dodger blue:pink:light green:gray10:gray30:gray75:gray90 95 | "/Gtk/CursorThemeName": '' 96 | "/Gtk/CursorThemeSize": 0 97 | "/Gtk/DecorationLayout": menu:minimize,maximize,close 98 | "/Gtk/DialogsUseHeader": false 99 | "/Gtk/FontName": Sans 10 100 | "/Gtk/IconSizes": '' 101 | "/Gtk/KeyThemeName": '' 102 | "/Gtk/MenuBarAccel": F10 103 | "/Gtk/MenuImages": true 104 | "/Gtk/MonospaceFontName": Monospace 10 105 | "/Gtk/TitlebarMiddleClick": lower 106 | "/Gtk/ToolbarIconSize": 3 107 | "/Gtk/ToolbarStyle": icons 108 | "/Net/CursorBlink": true 109 | "/Net/CursorBlinkTime": 1200 110 | "/Net/DndDragThreshold": 8 111 | "/Net/DoubleClickDistance": 5 112 | "/Net/DoubleClickTime": 400 113 | "/Net/EnableEventSounds": false 114 | "/Net/EnableInputFeedbackSounds": false 115 | "/Net/IconThemeName": null 116 | "/Net/SoundThemeName": default 117 | "/Net/ThemeName": null 118 | "/Xft/Antialias": -1 119 | "/Xft/HintStyle": hintnone 120 | "/Xft/Hinting": -1 121 | "/Xft/RGBA": none 122 | xfwm4: 123 | "/general/activate_action": bring 124 | "/general/borderless_maximize": true 125 | "/general/box_move": false 126 | "/general/box_resize": false 127 | "/general/button_layout": O|SHMC 128 | "/general/button_offset": 0 129 | "/general/button_spacing": 0 130 | "/general/click_to_focus": true 131 | "/general/cycle_apps_only": false 132 | "/general/cycle_draw_frame": true 133 | "/general/cycle_hidden": true 134 | "/general/cycle_minimized": false 135 | "/general/cycle_minimum": true 136 | "/general/cycle_preview": true 137 | "/general/cycle_raise": false 138 | "/general/cycle_tabwin_mode": 0 139 | "/general/cycle_workspaces": false 140 | "/general/double_click_action": maximize 141 | "/general/double_click_distance": 5 142 | "/general/double_click_time": 250 143 | "/general/easy_click": Alt 144 | "/general/focus_delay": 250 145 | "/general/focus_hint": true 146 | "/general/focus_new": true 147 | "/general/frame_border_top": 0 148 | "/general/frame_opacity": 100 149 | "/general/full_width_title": true 150 | "/general/horiz_scroll_opacity": false 151 | "/general/inactive_opacity": 100 152 | "/general/margin_bottom": 0 153 | "/general/margin_left": 0 154 | "/general/margin_right": 0 155 | "/general/margin_top": 0 156 | "/general/maximized_offset": 0 157 | "/general/mousewheel_rollup": true 158 | "/general/move_opacity": 100 159 | "/general/placement_mode": center 160 | "/general/placement_ratio": 20 161 | "/general/popup_opacity": 100 162 | "/general/prevent_focus_stealing": false 163 | "/general/raise_delay": 250 164 | "/general/raise_on_click": true 165 | "/general/raise_on_focus": false 166 | "/general/raise_with_any_button": true 167 | "/general/repeat_urgent_blink": false 168 | "/general/resize_opacity": 100 169 | "/general/scroll_workspaces": true 170 | "/general/shadow_delta_height": 0 171 | "/general/shadow_delta_width": 0 172 | "/general/shadow_delta_x": 0 173 | "/general/shadow_delta_y": -3 174 | "/general/shadow_opacity": 50 175 | "/general/show_app_icon": false 176 | "/general/show_dock_shadow": true 177 | "/general/show_frame_shadow": true 178 | "/general/show_popup_shadow": false 179 | "/general/snap_resist": false 180 | "/general/snap_to_border": true 181 | "/general/snap_to_windows": false 182 | "/general/snap_width": 10 183 | "/general/theme": Default 184 | "/general/tile_on_move": true 185 | "/general/title_alignment": center 186 | "/general/title_font": Sans Bold 9 187 | "/general/title_horizontal_offset": 0 188 | "/general/title_shadow_active": 'false' 189 | "/general/title_shadow_inactive": 'false' 190 | "/general/title_vertical_offset_active": 0 191 | "/general/title_vertical_offset_inactive": 0 192 | "/general/titleless_maximize": false 193 | "/general/toggle_workspaces": false 194 | "/general/unredirect_overlays": true 195 | "/general/urgent_blink": false 196 | "/general/use_compositing": true 197 | "/general/vblank_mode": auto 198 | "/general/workspace_count": 4 199 | "/general/workspace_names": 200 | - Workspace 1 201 | - Workspace 2 202 | - Workspace 3 203 | - Workspace 4 204 | "/general/wrap_cycle": true 205 | "/general/wrap_layout": true 206 | "/general/wrap_resistance": 10 207 | "/general/wrap_windows": true 208 | "/general/wrap_workspaces": false 209 | "/general/zoom_desktop": true 210 | "/general/zoom_pointer": true 211 | xfce4-session: 212 | "/chooser/AlwaysDisplay": false 213 | "/compat/LaunchGNOME": false 214 | "/compat/LaunchKDE": false 215 | "/general/AutoSave": false 216 | "/general/FailsafeSessionName": Failsafe 217 | "/general/PromptOnLogout": true 218 | "/general/SessionName": Default 219 | "/security/EnableTcp": false 220 | "/shutdown/LockScreen": true 221 | keyboards: 222 | "/Default/RestoreNumlock": false 223 | xfce4-power-manager: 224 | "/xfce4-power-manager/battery-button-action": 0 225 | "/xfce4-power-manager/brightness-exponential": false 226 | "/xfce4-power-manager/brightness-level-on-ac": 80 227 | "/xfce4-power-manager/brightness-level-on-battery": 20 228 | "/xfce4-power-manager/brightness-on-ac": 9 229 | "/xfce4-power-manager/brightness-on-battery": 9 230 | "/xfce4-power-manager/brightness-step-count": 10 231 | "/xfce4-power-manager/brightness-switch": -1 232 | "/xfce4-power-manager/brightness-switch-restore-on-exit": -1 233 | "/xfce4-power-manager/critical-power-action": 0 234 | "/xfce4-power-manager/critical-power-level": 10 235 | "/xfce4-power-manager/dpms-enabled": true 236 | "/xfce4-power-manager/general-notification": false 237 | "/xfce4-power-manager/handle-brightness-keys": true 238 | "/xfce4-power-manager/hibernate-button-action": 0 239 | "/xfce4-power-manager/inactivity-on-ac": 14 240 | "/xfce4-power-manager/inactivity-on-battery": 14 241 | "/xfce4-power-manager/inactivity-sleep-mode-on-ac": 1 242 | "/xfce4-power-manager/inactivity-sleep-mode-on-battery": 2 243 | "/xfce4-power-manager/lid-action-on-ac": 3 244 | "/xfce4-power-manager/lid-action-on-battery": 3 245 | "/xfce4-power-manager/lock-screen-suspend-hibernate": true 246 | "/xfce4-power-manager/power-button-action": 0 247 | "/xfce4-power-manager/presentation-mode": false 248 | "/xfce4-power-manager/show-tray-icon": false 249 | "/xfce4-power-manager/sleep-button-action": 0 250 | xfce4-notifyd: 251 | "/date-time-custom-format": "%a %H:%M:%S" 252 | "/date-time-format": locale-default 253 | "/do-fadeout": true 254 | "/do-not-disturb": false 255 | "/do-slideout": false 256 | "/expire-timeout": 10 257 | "/expire-timeout-allow-override": true 258 | "/expire-timeout-enabled": true 259 | "/gauge-ignores-dnd": true 260 | "/initial-opacity": 0.9 261 | "/log-level": not-fully-shown 262 | "/log-level-apps": all 263 | "/log-max-size": 1000 264 | "/log-max-size-enabled": true 265 | "/min-width": 150 266 | "/min-width-enabled": false 267 | "/mute-sounds": false 268 | "/notification-display-fields": full 269 | "/notification-log": false 270 | "/notify-location": top-right 271 | "/show-notifications-on": active-monitor 272 | "/show-text-with-gauge": false 273 | "/theme": Default 274 | xfce4-screensaver: 275 | "/lock/sleep-activation": true 276 | -------------------------------------------------------------------------------- /dump: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'yaml' 4 | 5 | begin 6 | require 'dbus' 7 | rescue LoadError 8 | $stderr.puts 'ruby-dbus needs to be installed' 9 | exit 1 10 | end 11 | 12 | $ignore = %w[ 13 | /xfce4-session/sessions/Failsafe 14 | /xfce4-desktop/backdrop 15 | /xfce4-appfinder/actions 16 | /xfce4-notifyd/applications/known_applications 17 | /displays 18 | /xfce4-desktop/last 19 | /xfce4-appfinder/last 20 | /xfce4-settings-manager/last 21 | /xfce4-settings-editor/last 22 | /xfce4-mime-settings/last 23 | /thunar/last 24 | ] 25 | 26 | $xfconf = DBus.session_bus['org.xfce.Xfconf']['/org/xfce/Xfconf']['org.xfce.Xfconf'] 27 | 28 | $data = ARGV[0] ? YAML.load(File.read(ARGV[0])) : {} 29 | 30 | $shortcuts = $data['shortcuts'] ||= { 'commands' => {}, 'wm' => {} } 31 | $settings = $data['settings'] ||= {} 32 | $panels = $data['panels'] = [] 33 | 34 | channels = $xfconf.ListChannels() 35 | 36 | channels.each do |channel| 37 | props = $xfconf.GetAllProperties(channel, '/') 38 | case channel 39 | when 'xfce4-keyboard-shortcuts' 40 | props.each do |k, v| 41 | case k 42 | when %r{^/commands/custom/(.+)} 43 | next if $1 == 'override' 44 | $shortcuts['commands'][$1] = v 45 | when %r{^/xfwm4/custom/(.+)} 46 | next if $1 == 'override' 47 | t = v.slice(..-5) 48 | $shortcuts['wm'][t] = $1 49 | end 50 | end 51 | when 'xfce4-panel' 52 | panels = Hash.new { |h,k| h[k] = Hash.new } 53 | plugins = Hash.new { |h,k| h[k] = Array.new } 54 | props.sort.each do |k, v| 55 | case k 56 | when %r{^/panels/panel-(\d+)/(.+)$} 57 | panels[$1.to_i][$2] = v 58 | when %r{^/plugins/plugin-(\d+)$} 59 | plugins[$1.to_i][0] = v 60 | when %r{^/plugins/plugin-(\d+)/(.+)$} 61 | plugins[$1.to_i][1] ||= Hash.new 62 | plugins[$1.to_i][1][$2] = v 63 | end 64 | end 65 | panels.each_value do |panel| 66 | plugin_ids = panel.delete('plugin-ids') 67 | panel['plugins'] = plugin_ids.map { |id| plugins[id] } 68 | $panels << panel 69 | end 70 | else 71 | props.reject! { |k, v| ('/' + channel + k).start_with?(*$ignore) } 72 | next if props.empty? 73 | $settings[channel] ||= {} 74 | $settings[channel].merge!(props.sort.to_h) 75 | end 76 | end 77 | 78 | prefixes = [ Dir.home + '/.local', '/usr' ] 79 | $prefix = prefixes.find { |e| File.exist?(e + '/share/xfconf-helper/defaults.yml') } 80 | 81 | if $prefix 82 | $defaults = YAML.load(File.read($prefix + '/share/xfconf-helper/defaults.yml')) 83 | 84 | $data.each do |group,settings| 85 | next if group == 'panels' 86 | settings.each do |channel,props| 87 | defaults = $defaults[group][channel] 88 | props.reject! { |k,v| defaults[k] == v } if defaults 89 | end 90 | end 91 | else 92 | $stderr.puts "Couldn't find defaults" 93 | end 94 | 95 | puts YAML.dump($data) 96 | -------------------------------------------------------------------------------- /load: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'yaml' 4 | 5 | begin 6 | require 'dbus' 7 | rescue LoadError 8 | $stderr.puts 'ruby-dbus needs to be installed' 9 | exit 1 10 | end 11 | 12 | if !ARGV[0] 13 | puts "usage: #{$0} config.yml" 14 | exit 1 15 | end 16 | 17 | YAML.add_domain_type('xfconf', 'uint') do |_, v| 18 | DBus.variant('u', v) 19 | end 20 | 21 | $data = YAML.load(File.read(ARGV[0])) 22 | $xfconf = DBus.session_bus['org.xfce.Xfconf']['/org/xfce/Xfconf']['org.xfce.Xfconf'] 23 | 24 | def set(channel, key, value, base: nil) 25 | key = base + '/' + key if base 26 | if not value.nil? 27 | puts "#{channel}:#{key} = #{value}" 28 | $xfconf.SetProperty(channel, key, value) 29 | else 30 | puts "del #{channel}:#{key}" 31 | $xfconf.ResetProperty(channel, key, false) 32 | end 33 | end 34 | 35 | def set_each(channel, list, base: nil) 36 | return unless list 37 | list.each do |key,value| 38 | set(channel, key, value, base: base) 39 | end 40 | end 41 | 42 | if shortcuts = $data['shortcuts'] 43 | 44 | # Command keyboard shortcuts 45 | set_each('xfce4-keyboard-shortcuts', shortcuts['commands'], base: '/commands/custom') 46 | 47 | # WM keyboard shortcuts 48 | actions = shortcuts['wm'] || {} 49 | list = actions.invert.map { |k, v| [ '/xfwm4/custom/' + k, v + '_key' ] }.to_h 50 | 51 | current = $xfconf.GetAllProperties('xfce4-keyboard-shortcuts', '/xfwm4/custom') 52 | clear = current.filter_map { |k,v| list.has_value?(v) && [k, nil] }.to_h 53 | list.merge!(clear) { |_,cur,_| cur } 54 | 55 | set_each('xfce4-keyboard-shortcuts', list) 56 | 57 | end 58 | 59 | # Panels 60 | if panels = $data['panels'] 61 | $xfconf.ResetProperty('xfce4-panel', '/panels', true) 62 | $xfconf.ResetProperty('xfce4-panel', '/plugins', true) 63 | 64 | panels.each_with_index do |panel,panel_id| 65 | plugins = panel.delete('plugins') 66 | plugins.each_with_index do |(name,params),plugin_id| 67 | plugin_base = "/plugins/plugin-#{plugin_id + 1}" 68 | set('xfce4-panel', plugin_base, name) 69 | set_each('xfce4-panel', params, base: plugin_base) 70 | end 71 | 72 | panel['plugin-ids'] = (1..plugins.length).to_a 73 | set_each('xfce4-panel', panel, base: "/panels/panel-#{panel_id + 1}") 74 | end 75 | 76 | set('xfce4-panel', '/panels', (1..panels.length).to_a) 77 | 78 | system('xfce4-panel', '--restart') 79 | end 80 | 81 | # General settings 82 | if settings = $data['settings'] 83 | settings.each do |channel,list| 84 | set_each(channel, list) 85 | end 86 | end 87 | --------------------------------------------------------------------------------