summaryrefslogtreecommitdiff
path: root/roles
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@fretlink.com>2018-11-02 17:03:49 +0100
committerIsmaël Bouya <ismael.bouya@fretlink.com>2018-11-02 17:03:49 +0100
commit397c4fed757d201af627636822981e85e84ea572 (patch)
treed6733d4022bf04784be84581f6c16e96a1b229e8 /roles
downloadAnsible-397c4fed757d201af627636822981e85e84ea572.tar.gz
Ansible-397c4fed757d201af627636822981e85e84ea572.tar.zst
Ansible-397c4fed757d201af627636822981e85e84ea572.zip
Validation initiale
Diffstat (limited to 'roles')
-rw-r--r--roles/contexts/fretlink/files/config_files/autostart/zeal.desktop10
-rwxr-xr-xroles/contexts/fretlink/files/workdir/start53
-rw-r--r--roles/contexts/fretlink/tasks/main.yml36
-rwxr-xr-xroles/git/files/config_files/git/templates_fretlink/hooks/pre-push8
-rw-r--r--roles/git/files/config_files/tig/config19
-rw-r--r--roles/git/tasks/main.yml21
-rw-r--r--roles/git/templates/config.j223
-rw-r--r--roles/gnupg/files/gnupg/gpg-agent.conf4
-rw-r--r--roles/gnupg/files/gnupg/gpg.conf7
-rw-r--r--roles/gnupg/tasks/main.yml34
-rw-r--r--roles/gnupg/templates/systemd/dirmngr.conf.j23
-rw-r--r--roles/gnupg/templates/systemd/gpg-agent-browser.conf.j23
-rw-r--r--roles/gnupg/templates/systemd/gpg-agent-extra.conf.j23
-rw-r--r--roles/gnupg/templates/systemd/gpg-agent-ssh.conf.j23
-rw-r--r--roles/gnupg/templates/systemd/gpg-agent.conf.j23
-rw-r--r--roles/graphical/files/config_files/autostart/redshift-gtk.desktop7
-rw-r--r--roles/graphical/files/config_files/dunst/dunstrc368
-rw-r--r--roles/graphical/files/config_files/redshift.conf8
-rw-r--r--roles/graphical/files/mimeapps.list147
-rw-r--r--roles/graphical/tasks/main.yml21
-rw-r--r--roles/init/tasks/main.yml24
-rw-r--r--roles/init/templates/pam_environment.j282
-rw-r--r--roles/lxde/files/config_files/libfm/libfm.conf44
-rw-r--r--roles/lxde/files/config_files/lxpanel/LXDE/config2
-rw-r--r--roles/lxde/files/config_files/lxpanel/LXDE/panels/panel165
-rw-r--r--roles/lxde/files/config_files/lxpanel/launchtaskbar.cfg4
-rw-r--r--roles/lxde/files/config_files/lxsession-default-apps/settings.conf45
-rwxr-xr-xroles/lxde/files/config_files/lxsession/LXDE/autostart3
-rw-r--r--roles/lxde/files/config_files/lxsession/LXDE/desktop.conf54
-rw-r--r--roles/lxde/files/config_files/lxterminal/lxterminal.conf53
-rw-r--r--roles/lxde/files/config_files/openbox/lxde-rc.xml696
-rw-r--r--roles/lxde/files/config_files/pcmanfm/LXDE/desktop-items-0.conf15
-rw-r--r--roles/lxde/files/config_files/pcmanfm/LXDE/pcmanfm.conf27
-rw-r--r--roles/lxde/files/config_files/xinitrc15
-rw-r--r--roles/lxde/tasks/main.yml11
-rw-r--r--roles/programming/haskell/files/ghci.conf2
-rw-r--r--roles/programming/haskell/files/stack/config.yaml14
-rw-r--r--roles/programming/haskell/files/stack/global-project/README.txt2
-rw-r--r--roles/programming/haskell/files/stack/global-project/stack.yaml10
-rw-r--r--roles/programming/haskell/tasks/main.yml13
-rw-r--r--roles/programming/nodejs/files/npmrc3
-rw-r--r--roles/programming/nodejs/tasks/main.yml5
-rw-r--r--roles/programming/python/files/startup_script.py52
-rw-r--r--roles/programming/python/tasks/main.yml5
-rw-r--r--roles/shell/bash/files/bashrc1
-rw-r--r--roles/shell/bash/tasks/main.yml17
-rw-r--r--roles/shell/bash/templates/bash_profile.j29
-rw-r--r--roles/shell/bash/templates/bashrc.j295
-rw-r--r--roles/tools/files/mplayer3
-rw-r--r--roles/tools/files/psqlrc5
-rw-r--r--roles/tools/files/remind/commands/work1
-rw-r--r--roles/tools/files/remind/remind@.service10
-rw-r--r--roles/tools/files/vimrc309
-rw-r--r--roles/tools/handlers/main.yml5
-rw-r--r--roles/tools/tasks/main.yml48
-rw-r--r--roles/tools/templates/tmux.conf.j288
-rw-r--r--roles/tools/templates/youtube-viewer.conf.j289
57 files changed, 2807 insertions, 0 deletions
diff --git a/roles/contexts/fretlink/files/config_files/autostart/zeal.desktop b/roles/contexts/fretlink/files/config_files/autostart/zeal.desktop
new file mode 100644
index 0000000..27f53b7
--- /dev/null
+++ b/roles/contexts/fretlink/files/config_files/autostart/zeal.desktop
@@ -0,0 +1,10 @@
1[Desktop Entry]
2Version=1.0
3Name=Zeal
4GenericName=Documentation Browser
5Comment=Simple API documentation browser
6Exec=/usr/bin/zeal
7Icon=zeal
8Terminal=false
9Type=Application
10Categories=Development;
diff --git a/roles/contexts/fretlink/files/workdir/start b/roles/contexts/fretlink/files/workdir/start
new file mode 100755
index 0000000..911c28d
--- /dev/null
+++ b/roles/contexts/fretlink/files/workdir/start
@@ -0,0 +1,53 @@
1#!/bin/bash
2
3APP="$1"
4
5if [ -z "$APP" ]; then
6 if [ $(dirname $(pwd)) = "$HOME/workdir" ]; then
7 APP=$(basename $(pwd))
8 else
9 echo "need an app to start"
10 exit 1
11 fi
12fi
13
14if [ "$APP" != "psql" ]; then
15 cd $HOME/workdir/$APP
16 source ../environment
17else
18 source ../environment
19 APP=psql
20fi
21
22function start_stack() {
23 stack exec $1;
24}
25
26function start_app() {
27 trap 'make stop' EXIT
28
29 if ! docker top mongo_container 2>/dev/null; then
30 docker run -d --name mongo_container -p 27017:27017 --rm -v $(pwd)/appdata:/data/db mongo:3.6
31 echo "Waiting until mongo is started"
32 sleep 10
33 fi
34
35 make start
36 make --directory=frontend/ start
37}
38
39function start_psql() {
40 export PGPASSWORD=$POSTGRESQL_ADDON_PASSWORD
41 psql -h $POSTGRESQL_ADDON_HOST -p $POSTGRESQL_ADDON_PORT -U $POSTGRESQL_ADDON_USER -d $POSTGRESQL_ADDON_DB
42}
43
44case "$APP" in
45 "psql") start_psql;;
46 "app") start_app;;
47 "admin-root") start_stack server;;
48 "carrier-directory") start_stack server;;
49 "freight") start_stack freight-server;;
50 "notifier") start_stack notifier-exe;;
51 "pricer") start_stack pricer;;
52 "toolbox") start_stack toolbox-api;;
53esac
diff --git a/roles/contexts/fretlink/tasks/main.yml b/roles/contexts/fretlink/tasks/main.yml
new file mode 100644
index 0000000..e16d669
--- /dev/null
+++ b/roles/contexts/fretlink/tasks/main.yml
@@ -0,0 +1,36 @@
1---
2- name: Import roles
3 include_role:
4 name: "{{ item }}"
5 loop:
6 - programming/python
7 - programming/haskell
8 - programming/nodejs
9- name: Config files
10 synchronize:
11 recursive: yes
12 archive: no
13 checksum: yes
14 src: config_files/
15 dest: /$XDG_CONFIG_HOME/
16- name: Create pm2 config dir
17 file:
18 path: $XDG_CONFIG_HOME/pm2
19 state: directory
20- name: workdir scripts
21 synchronize:
22 recursive: yes
23 archive: no
24 checksum: yes
25 src: workdir/
26 dest: /$HOME/workdir/
27- name: chmod workdir script
28 file:
29 path: $HOME/workdir/start
30 mode: 0755
31- name: enable remind service
32 systemd:
33 state: started
34 scope: user
35 name: remind@work.service
36 enabled: true
diff --git a/roles/git/files/config_files/git/templates_fretlink/hooks/pre-push b/roles/git/files/config_files/git/templates_fretlink/hooks/pre-push
new file mode 100755
index 0000000..19088c9
--- /dev/null
+++ b/roles/git/files/config_files/git/templates_fretlink/hooks/pre-push
@@ -0,0 +1,8 @@
1#!/usr/bin/env bash
2
3set -e
4
5echo "[+] Running the linter"
6make lint
7
8exit 0
diff --git a/roles/git/files/config_files/tig/config b/roles/git/files/config_files/tig/config
new file mode 100644
index 0000000..e9cdf17
--- /dev/null
+++ b/roles/git/files/config_files/tig/config
@@ -0,0 +1,19 @@
1set editor-line-number = yes
2set mouse = yes
3set mouse-scroll = 5
4set refresh-mode = auto
5set line-graphics = utf-8
6
7set pager-view-line-number = yes,interval=10
8set blame-view-line-number = yes,interval=10
9set grep-view-line-number = yes,interval=10
10set diff-view-line-number = yes,interval=10
11set log-view-line-number = yes,interval=10
12set blob-view-line-number = yes,interval=10
13set stage-view-line-number = yes,interval=10
14
15set main-view-commit-title = graph=v1,refs=yes
16set refs-view-commit-title = graph=v1,refs=yes
17set stash-view-commit-title = graph=v1,refs=yes
18
19set refs-view-ref = display=yes
diff --git a/roles/git/tasks/main.yml b/roles/git/tasks/main.yml
new file mode 100644
index 0000000..440e178
--- /dev/null
+++ b/roles/git/tasks/main.yml
@@ -0,0 +1,21 @@
1---
2- name: Config files
3 synchronize:
4 recursive: yes
5 archive: no
6 checksum: yes
7 src: config_files/
8 dest: /$XDG_CONFIG_HOME/
9- name: git config file
10 template:
11 src: config.j2
12 dest: $XDG_CONFIG_HOME/git/config
13- name: Create tig state dir
14 file:
15 path: $XDG_STATE_HOME/tig
16 state: directory
17- name: Link tig state dir
18 file:
19 path: "$XDG_DATA_HOME/tig"
20 src: "$XDG_STATE_HOME/tig"
21 state: link
diff --git a/roles/git/templates/config.j2 b/roles/git/templates/config.j2
new file mode 100644
index 0000000..7182626
--- /dev/null
+++ b/roles/git/templates/config.j2
@@ -0,0 +1,23 @@
1[user]
2 signingkey = DC384748709D2619FF2867216D0CAFFDDB1CFE90
3{% if profile in role and role[profile] == "fretlink" %}
4 email = ismael.bouya@fretlink.com
5{% else %}
6 email = ismael.bouya@normalesup.org
7{% endif %}
8 name = Ismaël Bouya
9[commit]
10 gpgsign = true
11 verbose = true
12[push]
13 gpgSign = if-asked
14{% if profile in role and role[profile] == "fretlink" %}
15[fretlink]
16 remote-name = upstream
17{% endif %}
18[log]
19 showSignature = true
20{% if profile in role %}
21[init]
22 templateDir = ~/.config/git/templates_{{ role[profile] }}
23{% endif %}
diff --git a/roles/gnupg/files/gnupg/gpg-agent.conf b/roles/gnupg/files/gnupg/gpg-agent.conf
new file mode 100644
index 0000000..3c4e379
--- /dev/null
+++ b/roles/gnupg/files/gnupg/gpg-agent.conf
@@ -0,0 +1,4 @@
1pinentry-program /usr/bin/pinentry
2allow-loopback-pinentry
3enable-ssh-support
4allow-preset-passphrase
diff --git a/roles/gnupg/files/gnupg/gpg.conf b/roles/gnupg/files/gnupg/gpg.conf
new file mode 100644
index 0000000..17bc522
--- /dev/null
+++ b/roles/gnupg/files/gnupg/gpg.conf
@@ -0,0 +1,7 @@
1# Main signing key
2default-key DB1CFE90
3
4default-recipient-self
5encrypt-to 0326A611
6auto-key-retrieve
7no-greeting
diff --git a/roles/gnupg/tasks/main.yml b/roles/gnupg/tasks/main.yml
new file mode 100644
index 0000000..8adaf69
--- /dev/null
+++ b/roles/gnupg/tasks/main.yml
@@ -0,0 +1,34 @@
1---
2- name: Config files
3 synchronize:
4 recursive: yes
5 archive: no
6 checksum: yes
7 src: gnupg
8 dest: /$XDG_CONFIG_HOME/
9- name: Protect directory
10 file:
11 path: $XDG_CONFIG_HOME/gnupg
12 state: directory
13 mode: 0700
14- name: Get gnupg runtime folder name
15 shell: 'GNUPGHOME=$XDG_CONFIG_HOME/gnupg gpgconf --list-dirs socketdir | sed -e "s@$XDG_RUNTIME_DIR/gnupg/@@"'
16 register: gnupg_runtime_dir_cmd
17- name: Add systemd overrides
18 template:
19 src: "systemd/{{ item }}.conf.j2"
20 dest: "$XDG_CONFIG_HOME/systemd/user/{{ item }}.socket.d/override.conf"
21 register: results
22 loop:
23 - dirmngr
24 - gpg-agent
25 - gpg-agent-browser
26 - gpg-agent-extra
27 - gpg-agent-ssh
28- name: Restart systemd units
29 systemd:
30 daemon_reload: true
31 scope: user
32 state: restarted
33 name: "{{ item }}.socket"
34 loop: "{{ results.results|selectattr('changed')|map(attribute='item')|list }}"
diff --git a/roles/gnupg/templates/systemd/dirmngr.conf.j2 b/roles/gnupg/templates/systemd/dirmngr.conf.j2
new file mode 100644
index 0000000..9083ab5
--- /dev/null
+++ b/roles/gnupg/templates/systemd/dirmngr.conf.j2
@@ -0,0 +1,3 @@
1[Socket]
2ListenStream=
3ListenStream=%t/gnupg/{{ gnupg_runtime_dir_cmd.get('stdout', debug_gnupg_runtime_dir) }}/S.dirmngr
diff --git a/roles/gnupg/templates/systemd/gpg-agent-browser.conf.j2 b/roles/gnupg/templates/systemd/gpg-agent-browser.conf.j2
new file mode 100644
index 0000000..61ddeb6
--- /dev/null
+++ b/roles/gnupg/templates/systemd/gpg-agent-browser.conf.j2
@@ -0,0 +1,3 @@
1[Socket]
2ListenStream=
3ListenStream=%t/gnupg/{{ gnupg_runtime_dir_cmd.get('stdout', debug_gnupg_runtime_dir) }}/S.gpg-agent.browser
diff --git a/roles/gnupg/templates/systemd/gpg-agent-extra.conf.j2 b/roles/gnupg/templates/systemd/gpg-agent-extra.conf.j2
new file mode 100644
index 0000000..f34606c
--- /dev/null
+++ b/roles/gnupg/templates/systemd/gpg-agent-extra.conf.j2
@@ -0,0 +1,3 @@
1[Socket]
2ListenStream=
3ListenStream=%t/gnupg/{{ gnupg_runtime_dir_cmd.get('stdout', debug_gnupg_runtime_dir) }}/S.gpg-agent.extra
diff --git a/roles/gnupg/templates/systemd/gpg-agent-ssh.conf.j2 b/roles/gnupg/templates/systemd/gpg-agent-ssh.conf.j2
new file mode 100644
index 0000000..b7cd0c2
--- /dev/null
+++ b/roles/gnupg/templates/systemd/gpg-agent-ssh.conf.j2
@@ -0,0 +1,3 @@
1[Socket]
2ListenStream=
3ListenStream=%t/gnupg/{{ gnupg_runtime_dir_cmd.get('stdout', debug_gnupg_runtime_dir) }}/S.gpg-agent.ssh
diff --git a/roles/gnupg/templates/systemd/gpg-agent.conf.j2 b/roles/gnupg/templates/systemd/gpg-agent.conf.j2
new file mode 100644
index 0000000..666c22e
--- /dev/null
+++ b/roles/gnupg/templates/systemd/gpg-agent.conf.j2
@@ -0,0 +1,3 @@
1[Socket]
2ListenStream=
3ListenStream=%t/gnupg/{{ gnupg_runtime_dir_cmd.get('stdout', debug_gnupg_runtime_dir) }}/S.gpg-agent
diff --git a/roles/graphical/files/config_files/autostart/redshift-gtk.desktop b/roles/graphical/files/config_files/autostart/redshift-gtk.desktop
new file mode 100644
index 0000000..3fc7814
--- /dev/null
+++ b/roles/graphical/files/config_files/autostart/redshift-gtk.desktop
@@ -0,0 +1,7 @@
1[Desktop Entry]
2Name=Redshift
3GenericName=Redshift
4Exec=/usr/bin/redshift-gtk
5Icon=redshift
6Terminal=false
7Type=Application
diff --git a/roles/graphical/files/config_files/dunst/dunstrc b/roles/graphical/files/config_files/dunst/dunstrc
new file mode 100644
index 0000000..c8e55b5
--- /dev/null
+++ b/roles/graphical/files/config_files/dunst/dunstrc
@@ -0,0 +1,368 @@
1[global]
2 ### Display ###
3
4 # Which monitor should the notifications be displayed on.
5 monitor = 0
6
7 # Display notification on focused monitor. Possible modes are:
8 # mouse: follow mouse pointer
9 # keyboard: follow window with keyboard focus
10 # none: don't follow anything
11 #
12 # "keyboard" needs a window manager that exports the
13 # _NET_ACTIVE_WINDOW property.
14 # This should be the case for almost all modern window managers.
15 #
16 # If this option is set to mouse or keyboard, the monitor option
17 # will be ignored.
18 follow = mouse
19
20 # The geometry of the window:
21 # [{width}]x{height}[+/-{x}+/-{y}]
22 # The geometry of the message window.
23 # The height is measured in number of notifications everything else
24 # in pixels. If the width is omitted but the height is given
25 # ("-geometry x2"), the message window expands over the whole screen
26 # (dmenu-like). If width is 0, the window expands to the longest
27 # message displayed. A positive x is measured from the left, a
28 # negative from the right side of the screen. Y is measured from
29 # the top and down respectively.
30 # The width can be negative. In this case the actual width is the
31 # screen width minus the width defined in within the geometry option.
32 geometry = "300x5-30+20"
33
34 # Show how many messages are currently hidden (because of geometry).
35 indicate_hidden = yes
36
37 # Shrink window if it's smaller than the width. Will be ignored if
38 # width is 0.
39 shrink = no
40
41 # The transparency of the window. Range: [0; 100].
42 # This option will only work if a compositing window manager is
43 # present (e.g. xcompmgr, compiz, etc.).
44 transparency = 0
45
46 # The height of the entire notification. If the height is smaller
47 # than the font height and padding combined, it will be raised
48 # to the font height and padding.
49 notification_height = 0
50
51 # Draw a line of "separator_height" pixel height between two
52 # notifications.
53 # Set to 0 to disable.
54 separator_height = 2
55
56 # Padding between text and separator.
57 padding = 8
58
59 # Horizontal padding.
60 horizontal_padding = 8
61
62 # Defines width in pixels of frame around the notification window.
63 # Set to 0 to disable.
64 frame_width = 3
65
66 # Defines color of the frame around the notification window.
67 frame_color = "#aaaaaa"
68
69 # Define a color for the separator.
70 # possible values are:
71 # * auto: dunst tries to find a color fitting to the background;
72 # * foreground: use the same color as the foreground;
73 # * frame: use the same color as the frame;
74 # * anything else will be interpreted as a X color.
75 separator_color = frame
76
77 # Sort messages by urgency.
78 sort = yes
79
80 # Don't remove messages, if the user is idle (no mouse or keyboard input)
81 # for longer than idle_threshold seconds.
82 # Set to 0 to disable.
83 # Transient notifications ignore this setting.
84 idle_threshold = 120
85
86 ### Text ###
87
88 font = Monospace 8
89
90 # The spacing between lines. If the height is smaller than the
91 # font height, it will get raised to the font height.
92 line_height = 0
93
94 # Possible values are:
95 # full: Allow a small subset of html markup in notifications:
96 # <b>bold</b>
97 # <i>italic</i>
98 # <s>strikethrough</s>
99 # <u>underline</u>
100 #
101 # For a complete reference see
102 # <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
103 #
104 # strip: This setting is provided for compatibility with some broken
105 # clients that send markup even though it's not enabled on the
106 # server. Dunst will try to strip the markup but the parsing is
107 # simplistic so using this option outside of matching rules for
108 # specific applications *IS GREATLY DISCOURAGED*.
109 #
110 # no: Disable markup parsing, incoming notifications will be treated as
111 # plain text. Dunst will not advertise that it has the body-markup
112 # capability if this is set as a global setting.
113 #
114 # It's important to note that markup inside the format option will be parsed
115 # regardless of what this is set to.
116 markup = full
117
118 # The format of the message. Possible variables are:
119 # %a appname
120 # %s summary
121 # %b body
122 # %i iconname (including its path)
123 # %I iconname (without its path)
124 # %p progress value if set ([ 0%] to [100%]) or nothing
125 # %n progress value if set without any extra characters
126 # %% Literal %
127 # Markup is allowed
128 format = "<span size='small'>%a</span>\n<b>%s</b>\n%b\n%p"
129
130 # Alignment of message text.
131 # Possible values are "left", "center" and "right".
132 alignment = left
133
134 # Show age of message if message is older than show_age_threshold
135 # seconds.
136 # Set to -1 to disable.
137 show_age_threshold = 60
138
139 # Split notifications into multiple lines if they don't fit into
140 # geometry.
141 word_wrap = yes
142
143 # When word_wrap is set to no, specify where to make an ellipsis in long lines.
144 # Possible values are "start", "middle" and "end".
145 ellipsize = middle
146
147 # Ignore newlines '\n' in notifications.
148 ignore_newline = no
149
150 # Merge multiple notifications with the same content
151 stack_duplicates = true
152
153 # Hide the count of merged notifications with the same content
154 hide_duplicate_count = false
155
156 # Display indicators for URLs (U) and actions (A).
157 show_indicators = yes
158
159 ### Icons ###
160
161 # Align icons left/right/off
162 icon_position = left
163
164 # Scale larger icons down to this size, set to 0 to disable
165 max_icon_size = 32
166
167 # Paths to default icons.
168 icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
169
170 ### History ###
171
172 # Should a notification popped up from history be sticky or timeout
173 # as if it would normally do.
174 sticky_history = yes
175
176 # Maximum amount of notifications kept in history
177 history_length = 20
178
179 ### Misc/Advanced ###
180
181 # dmenu path.
182 dmenu = /usr/bin/dmenu -p dunst:
183
184 # Browser for opening urls in context menu.
185 browser = /usr/bin/firefox -new-tab
186
187 # Always run rule-defined scripts, even if the notification is suppressed
188 always_run_script = true
189
190 # Define the title of the windows spawned by dunst
191 title = Dunst
192
193 # Define the class of the windows spawned by dunst
194 class = Dunst
195
196 # Print a notification on startup.
197 # This is mainly for error detection, since dbus (re-)starts dunst
198 # automatically after a crash.
199 startup_notification = true
200
201 # Manage dunst's desire for talking
202 # Can be one of the following values:
203 # crit: Critical features. Dunst aborts
204 # warn: Only non-fatal warnings
205 # mesg: Important Messages
206 # info: all unimportant stuff
207 # debug: all less than unimportant stuff
208 verbosity = mesg
209
210 # Define the corner radius of the notification window
211 # in pixel size. If the radius is 0, you have no rounded
212 # corners.
213 # The radius will be automatically lowered if it exceeds half of the
214 # notification height to avoid clipping text and/or icons.
215 corner_radius = 0
216
217 ### Legacy
218
219 # Use the Xinerama extension instead of RandR for multi-monitor support.
220 # This setting is provided for compatibility with older nVidia drivers that
221 # do not support RandR and using it on systems that support RandR is highly
222 # discouraged.
223 #
224 # By enabling this setting dunst will not be able to detect when a monitor
225 # is connected or disconnected which might break follow mode if the screen
226 # layout changes.
227 force_xinerama = false
228
229# Experimental features that may or may not work correctly. Do not expect them
230# to have a consistent behaviour across releases.
231[experimental]
232 # Calculate the dpi to use on a per-monitor basis.
233 # If this setting is enabled the Xft.dpi value will be ignored and instead
234 # dunst will attempt to calculate an appropriate dpi value for each monitor
235 # using the resolution and physical size. This might be useful in setups
236 # where there are multiple screens with very different dpi values.
237 per_monitor_dpi = false
238
239[shortcuts]
240
241 # Shortcuts are specified as [modifier+][modifier+]...key
242 # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
243 # "mod3" and "mod4" (windows-key).
244 # Xev might be helpful to find names for keys.
245
246 # Close notification.
247 close = ctrl+space
248
249 # Close all notifications.
250 close_all = ctrl+mod1+space
251
252 # Redisplay last message(s).
253 # On the US keyboard layout "grave" is normally above TAB and left
254 # of "1". Make sure this key actually exists on your keyboard layout,
255 # e.g. check output of 'xmodmap -pke'
256 history = ctrl+shift+space
257
258 # Context menu.
259 context = shift+space
260
261[urgency_low]
262 # IMPORTANT: colors have to be defined in quotation marks.
263 # Otherwise the "#" and following would be interpreted as a comment.
264 background = "#222222"
265 foreground = "#888888"
266 timeout = 10
267 # Icon for notifications with low urgency, uncomment to enable
268 #icon = /path/to/icon
269
270[urgency_normal]
271 background = "#285577"
272 foreground = "#ffffff"
273 timeout = 10
274 # Icon for notifications with normal urgency, uncomment to enable
275 #icon = /path/to/icon
276
277[urgency_critical]
278 background = "#900000"
279 foreground = "#ffffff"
280 frame_color = "#ff0000"
281 timeout = 0
282 # Icon for notifications with critical urgency, uncomment to enable
283 #icon = /path/to/icon
284
285# Every section that isn't one of the above is interpreted as a rules to
286# override settings for certain messages.
287# Messages can be matched by "appname", "summary", "body", "icon", "category",
288# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
289# "background", "frame_color", "new_icon" and "format", "fullscreen".
290# Shell-like globbing will get expanded.
291#
292# SCRIPTING
293# You can specify a script that gets run when the rule matches by
294# setting the "script" option.
295# The script will be called as follows:
296# script appname summary body icon urgency
297# where urgency can be "LOW", "NORMAL" or "CRITICAL".
298#
299# NOTE: if you don't want a notification to be displayed, set the format
300# to "".
301# NOTE: It might be helpful to run dunst -print in a terminal in order
302# to find fitting options for rules.
303
304# fullscreen values
305# show: show the notifications, regardless if there is a fullscreen window opened
306# delay: displays the new notification, if there is no fullscreen window active
307# If the notification is already drawn, it won't get undrawn.
308# pushback: same as delay, but when switching into fullscreen, the notification will get
309# withdrawn from screen again and will get delayed like a new notification
310
311#[fullscreen_delay_everything]
312# fullscreen = delay
313#[fullscreen_show_critical]
314# msg_urgency = critical
315# fullscreen = show
316
317[volume]
318 summary = "Volume"
319 appname = "Openbox-volume"
320 format = "Volume %p"
321 fullscreen = show
322
323[volume-mute]
324 appname = "Openbox-mute"
325 format = "%s"
326 fullscreen = show
327 background = "#00ff00"
328 foreground = "#000000"
329
330#[espeak]
331# summary = "*"
332# script = dunst_espeak.sh
333
334#[script-test]
335# summary = "*script*"
336# script = dunst_test.sh
337
338#[ignore]
339# # This notification will not be displayed
340# summary = "foobar"
341# format = ""
342
343#[history-ignore]
344# # This notification will not be saved in history
345# summary = "foobar"
346# history_ignore = yes
347
348#[signed_on]
349# appname = Pidgin
350# summary = "*signed on*"
351# urgency = low
352#
353#[signed_off]
354# appname = Pidgin
355# summary = *signed off*
356# urgency = low
357#
358#[says]
359# appname = Pidgin
360# summary = *says*
361# urgency = critical
362#
363#[twitter]
364# appname = Pidgin
365# summary = *twitter.com*
366# urgency = normal
367#
368# vim: ft=cfg
diff --git a/roles/graphical/files/config_files/redshift.conf b/roles/graphical/files/config_files/redshift.conf
new file mode 100644
index 0000000..da26fa2
--- /dev/null
+++ b/roles/graphical/files/config_files/redshift.conf
@@ -0,0 +1,8 @@
1[redshift]
2temp-day=4500
3temp-night=4500
4location-provider=manual
5
6[manual]
7lat=48.8566
8lon=2.3522
diff --git a/roles/graphical/files/mimeapps.list b/roles/graphical/files/mimeapps.list
new file mode 100644
index 0000000..1f35b04
--- /dev/null
+++ b/roles/graphical/files/mimeapps.list
@@ -0,0 +1,147 @@
1[Added Associations]
2text/html=firefox.desktop
3text/xml=firefox.desktop
4application/xhtml+xml=firefox.desktop
5application/vnd.mozilla.xul+xml=firefox.desktop
6text/mml=firefox.desktop
7x-scheme-handler/http=firefox.desktop
8x-scheme-handler/https=firefox.desktop
9inode/directory=pcmanfm.desktop
10image/bmp=gpicview.desktop
11image/gif=gpicview.desktop
12image/jpeg=gpicview.desktop
13image/jpg=gpicview.desktop
14image/png=gpicview.desktop
15image/tiff=org.gnome.Evince.desktop
16image/x-bmp=gpicview.desktop
17image/x-pcx=gpicview.desktop
18image/x-tga=gpicview.desktop
19image/x-portable-pixmap=gpicview.desktop
20image/x-portable-bitmap=gpicview.desktop
21image/x-targa=gpicview.desktop
22image/x-portable-greymap=gpicview.desktop
23application/pcx=gpicview.desktop
24image/svg+xml=gpicview.desktop
25image/svg-xml=gpicview.desktop
26text/english=vim.desktop
27text/plain=vim.desktop
28text/x-makefile=vim.desktop
29text/x-c++hdr=vim.desktop
30text/x-c++src=vim.desktop
31text/x-chdr=vim.desktop
32text/x-csrc=vim.desktop
33text/x-java=vim.desktop
34text/x-moc=vim.desktop
35text/x-pascal=vim.desktop
36text/x-tcl=vim.desktop
37text/x-tex=vim.desktop
38application/x-shellscript=vim.desktop
39text/x-c=vim.desktop
40text/x-c++=vim.desktop
41application/pdf=org.gnome.Evince.desktop
42application/x-bzpdf=org.gnome.Evince.desktop
43application/x-gzpdf=org.gnome.Evince.desktop
44application/x-xzpdf=org.gnome.Evince.desktop
45application/x-ext-pdf=org.gnome.Evince.desktop
46application/postscript=org.gnome.Evince.desktop
47application/x-bzpostscript=org.gnome.Evince.desktop
48application/x-gzpostscript=org.gnome.Evince.desktop
49image/x-eps=org.gnome.Evince.desktop
50image/x-bzeps=org.gnome.Evince.desktop
51image/x-gzeps=org.gnome.Evince.desktop
52application/x-ext-ps=org.gnome.Evince.desktop
53application/x-ext-eps=org.gnome.Evince.desktop
54application/illustrator=org.gnome.Evince.desktop
55application/x-dvi=org.gnome.Evince.desktop
56application/x-bzdvi=org.gnome.Evince.desktop
57application/x-gzdvi=org.gnome.Evince.desktop
58application/x-ext-dvi=org.gnome.Evince.desktop
59image/vnd.djvu+multipage=org.gnome.Evince.desktop
60application/x-ext-djv=org.gnome.Evince.desktop
61application/x-ext-djvu=org.gnome.Evince.desktop
62application/x-cbr=org.gnome.Evince.desktop
63application/x-cbz=org.gnome.Evince.desktop
64application/x-cb7=org.gnome.Evince.desktop
65application/x-cbt=org.gnome.Evince.desktop
66application/x-ext-cbr=org.gnome.Evince.desktop
67application/x-ext-cbz=org.gnome.Evince.desktop
68application/x-ext-cb7=org.gnome.Evince.desktop
69application/x-ext-cbt=org.gnome.Evince.desktop
70application/vnd.comicbook+zip=org.gnome.Evince.desktop
71application/vnd.comicbook-rar=org.gnome.Evince.desktop
72application/oxps=org.gnome.Evince.desktop
73application/vnd.ms-xpsdocument=org.gnome.Evince.desktop
74
75[Default Applications]
76text/html=firefox.desktop
77text/xml=firefox.desktop
78application/xhtml+xml=firefox.desktop
79application/vnd.mozilla.xul+xml=firefox.desktop
80text/mml=firefox.desktop
81x-scheme-handler/http=firefox.desktop
82x-scheme-handler/https=firefox.desktop
83inode/directory=pcmanfm.desktop
84image/bmp=gpicview.desktop
85image/gif=gpicview.desktop
86image/jpeg=gpicview.desktop
87image/jpg=gpicview.desktop
88image/png=gpicview.desktop
89image/tiff=org.gnome.Evince.desktop
90image/x-bmp=gpicview.desktop
91image/x-pcx=gpicview.desktop
92image/x-tga=gpicview.desktop
93image/x-portable-pixmap=gpicview.desktop
94image/x-portable-bitmap=gpicview.desktop
95image/x-targa=gpicview.desktop
96image/x-portable-greymap=gpicview.desktop
97application/pcx=gpicview.desktop
98image/svg+xml=gpicview.desktop
99image/svg-xml=gpicview.desktop
100text/english=vim.desktop
101text/plain=vim.desktop
102text/x-makefile=vim.desktop
103text/x-c++hdr=vim.desktop
104text/x-c++src=vim.desktop
105text/x-chdr=vim.desktop
106text/x-csrc=vim.desktop
107text/x-java=vim.desktop
108text/x-moc=vim.desktop
109text/x-pascal=vim.desktop
110text/x-tcl=vim.desktop
111text/x-tex=vim.desktop
112application/x-shellscript=vim.desktop
113text/x-c=vim.desktop
114text/x-c++=vim.desktop
115application/pdf=org.gnome.Evince.desktop
116application/x-bzpdf=org.gnome.Evince.desktop
117application/x-gzpdf=org.gnome.Evince.desktop
118application/x-xzpdf=org.gnome.Evince.desktop
119application/x-ext-pdf=org.gnome.Evince.desktop
120application/postscript=org.gnome.Evince.desktop
121application/x-bzpostscript=org.gnome.Evince.desktop
122application/x-gzpostscript=org.gnome.Evince.desktop
123image/x-eps=org.gnome.Evince.desktop
124image/x-bzeps=org.gnome.Evince.desktop
125image/x-gzeps=org.gnome.Evince.desktop
126application/x-ext-ps=org.gnome.Evince.desktop
127application/x-ext-eps=org.gnome.Evince.desktop
128application/illustrator=org.gnome.Evince.desktop
129application/x-dvi=org.gnome.Evince.desktop
130application/x-bzdvi=org.gnome.Evince.desktop
131application/x-gzdvi=org.gnome.Evince.desktop
132application/x-ext-dvi=org.gnome.Evince.desktop
133image/vnd.djvu+multipage=org.gnome.Evince.desktop
134application/x-ext-djv=org.gnome.Evince.desktop
135application/x-ext-djvu=org.gnome.Evince.desktop
136application/x-cbr=org.gnome.Evince.desktop
137application/x-cbz=org.gnome.Evince.desktop
138application/x-cb7=org.gnome.Evince.desktop
139application/x-cbt=org.gnome.Evince.desktop
140application/x-ext-cbr=org.gnome.Evince.desktop
141application/x-ext-cbz=org.gnome.Evince.desktop
142application/x-ext-cb7=org.gnome.Evince.desktop
143application/x-ext-cbt=org.gnome.Evince.desktop
144application/vnd.comicbook+zip=org.gnome.Evince.desktop
145application/vnd.comicbook-rar=org.gnome.Evince.desktop
146application/oxps=org.gnome.Evince.desktop
147application/vnd.ms-xpsdocument=org.gnome.Evince.desktop
diff --git a/roles/graphical/tasks/main.yml b/roles/graphical/tasks/main.yml
new file mode 100644
index 0000000..96c70b9
--- /dev/null
+++ b/roles/graphical/tasks/main.yml
@@ -0,0 +1,21 @@
1---
2- name: Config files
3 synchronize:
4 recursive: yes
5 archive: no
6 checksum: yes
7 src: config_files/
8 dest: /$XDG_CONFIG_HOME/
9- name: mimeapps file
10 copy:
11 src: mimeapps.list
12 dest: $XDG_DATA_HOME/applications/
13- name: Create xorg state dir
14 file:
15 path: $XDG_STATE_HOME/xorg
16 state: directory
17- name: Link Xorg state dir
18 file:
19 path: "$XDG_DATA_HOME/xorg"
20 src: "$XDG_STATE_HOME/xorg"
21 state: link
diff --git a/roles/init/tasks/main.yml b/roles/init/tasks/main.yml
new file mode 100644
index 0000000..d3f0f6b
--- /dev/null
+++ b/roles/init/tasks/main.yml
@@ -0,0 +1,24 @@
1---
2- name: Get gnupg runtime folder name
3 shell: 'GNUPGHOME=$XDG_CONFIG_HOME/gnupg gpgconf --list-dirs socketdir | sed -e "s@$XDG_RUNTIME_DIR/gnupg/@@"'
4 register: gnupg_runtime_dir_cmd
5- name: Add pam_environment
6 register: pam_environment
7 template:
8 src: pam_environment.j2
9 dest: $XDG_CONFIG_HOME/pam_environment
10- name: Signal the change
11 when: pam_environment.changed
12 debug:
13 msg: "\u26A0\uFE0F \u26A0\uFE0F You need to log out and back in to update your environment \u26A0\uFE0F \u26A0\uFE0F"
14- name: Create XDG dirs
15 file:
16 path: "{{ item }}"
17 state: directory
18 loop:
19 - "$XDG_CONFIG_HOME"
20 - "$XDG_STATE_HOME"
21 - "$XDG_DATA_HOME"
22 - "$XDG_CACHE_HOME"
23 - "$HOME/Desktop"
24 - "$HOME/Downloads"
diff --git a/roles/init/templates/pam_environment.j2 b/roles/init/templates/pam_environment.j2
new file mode 100644
index 0000000..4327eeb
--- /dev/null
+++ b/roles/init/templates/pam_environment.j2
@@ -0,0 +1,82 @@
1# This wil be set correctly in systemd service since the service manager
2# itself goes through /etc/pam.d/system-login (as systemd-user) and
3# takes its environment from pam_env
4# HOME doesn’t even exist when arriving here, but the user’s home is
5# available via @{HOME}. But pam_systemd still sets XDG_RUNTIME_DIR (and
6# only that one in the case of systemd-user)
7
8# Those are already defined in /etc/security/pam_env.conf
9XDG_CONFIG_HOME DEFAULT="@{HOME}/.config"
10XDG_CACHE_HOME DEFAULT="@{HOME}/.cache"
11XDG_DATA_HOME DEFAULT="@{HOME}/.local/share"
12XDG_STATE_HOME DEFAULT="@{HOME}/.local/state"
13
14EDITOR DEFAULT="vim"
15VISUAL DEFAULT="vim"
16PAGER DEFAULT="less"
17BROWSER DEFAULT="firefox"
18
19# Ansible
20ANSIBLE_CONFIG DEFAULT="${XDG_CONFIG_HOME}/ansible/ansible.cfg"
21
22# Python
23IPYTHONDIR DEFAULT="${XDG_CONFIG_HOME}/ipython"
24JUPYTER_CONFIG_DIR DEFAULT="${XDG_CONFIG_HOME}/jupyter"
25PYTHONSTARTUP DEFAULT="${XDG_CONFIG_HOME}/python/startup_script.py"
26
27# VIM
28VIMINIT DEFAULT=":source ${XDG_CONFIG_HOME}/vim/vimrc"
29
30# Mplayer
31MPLAYER_HOME DEFAULT="${XDG_CONFIG_HOME}/mplayer"
32
33# X11
34XAUTHORITY DEFAULT="${XDG_RUNTIME_DIR}/Xauthority"
35
36# GPG
37GNUPGHOME DEFAULT="${XDG_CONFIG_HOME}/gnupg"
38
39# SSH
40SSH_AGENT_PID DEFAULT=
41SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/{{ gnupg_runtime_dir_cmd.get('stdout', debug_gnupg_runtime_dir) }}/S.gpg-agent.ssh"
42
43# Less
44LESSHISTFILE DEFAULT="${XDG_STATE_HOME}/less/history"
45
46# Pass
47PASSWORD_STORE_DIR DEFAULT="${XDG_DATA_HOME}/pass"
48
49# Postgresql
50PSQLRC DEFAULT="${XDG_CONFIG_HOME}/psql/psqlrc"
51PSQL_HISTORY DEFAULT="${XDG_STATE_HOME}/psql/psql_history"
52PGPASSFILE DEFAULT="${XDG_CONFIG_HOME}/psql/pgpass"
53PGSERVICEFILE DEFAULT="${XDG_CONFIG_HOME}/psql/pg_service.conf"
54
55# Sqlite
56SQLITE_HISTORY DEFAULT="${XDG_STATE_HOME}/sqlite_history"
57
58# Stack
59STACK_ROOT DEFAULT="${XDG_DATA_HOME}/stack"
60
61# Nodejs
62NVM_DIR DEFAULT="${XDG_DATA_HOME}/nvm"
63NPM_CONFIG_USERCONFIG DEFAULT="${XDG_CONFIG_HOME}/npm/npmrc"
64
65# TMUX
66TMUX_TMPDIR DEFAULT="${XDG_RUNTIME_DIR}"
67
68# node_modules/pm2/paths.js
69PM2_HOME DEFAULT="${XDG_DATA_HOME}/pm2"
70PM2_CONF_FILE DEFAULT="${XDG_CONFIG_HOME}/pm2/conf.js"
71PM2_MODULE_CONF_FILE DEFAULT="${XDG_CONFIG_HOME}/pm2/module_conf.js"
72PM2_LOG_FILE_PATH DEFAULT="${XDG_STATE_HOME}/pm2/pm2.log"
73PM2_PID_FILE_PATH DEFAULT="${XDG_RUNTIME_DIR}/pm2/pm2.pid"
74PM2_RELOAD_LOCKFILE DEFAULT="${XDG_RUNTIME_DIR}/pm2/reload.lock"
75PM2_DEFAULT_PID_PATH DEFAULT="${XDG_RUNTIME_DIR}/pm2/pids"
76PM2_DEFAULT_LOG_PATH DEFAULT="${XDG_STATE_HOME}/pm2/logs"
77PM2_DAEMON_RPC_PORT DEFAULT="${XDG_RUNTIME_DIR}/pm2/rpc.sock"
78PM2_DAEMON_PUB_PORT DEFAULT="${XDG_RUNTIME_DIR}/pm2/pub.sock"
79PM2_INTERACTOR_RPC_PORT DEFAULT="${XDG_RUNTIME_DIR}/pm2/interactor.sock"
80PM2_INTERACTOR_LOG_FILE_PATH DEFAULT="${XDG_STATE_HOME}/pm2/agent.log"
81PM2_INTERACTOR_PID_PATH DEFAULT="${XDG_RUNTIME_DIR}/pm2/agent.pid"
82PM2_INTERACTION_CONF DEFAULT="${XDG_CONFIG_HOME}/pm2/agent.json5"
diff --git a/roles/lxde/files/config_files/libfm/libfm.conf b/roles/lxde/files/config_files/libfm/libfm.conf
new file mode 100644
index 0000000..0d79919
--- /dev/null
+++ b/roles/lxde/files/config_files/libfm/libfm.conf
@@ -0,0 +1,44 @@
1# Configuration file for the libfm version 1.3.0.2.
2# Autogenerated file, don't edit, your changes will be overwritten.
3
4[config]
5single_click=0
6use_trash=1
7confirm_del=1
8confirm_trash=1
9advanced_mode=0
10si_unit=0
11force_startup_notify=1
12backup_as_hidden=1
13no_usb_trash=1
14no_child_non_expandable=0
15show_full_names=1
16only_user_templates=0
17template_run_app=0
18template_type_once=0
19auto_selection_delay=600
20drop_default_action=auto
21defer_content_test=0
22quick_exec=0
23terminal=lxterminal
24thumbnail_local=1
25thumbnail_max=2048
26smart_desktop_autodrop=1
27
28[ui]
29big_icon_size=48
30small_icon_size=24
31pane_icon_size=24
32thumbnail_size=128
33show_thumbnail=1
34shadow_hidden=1
35
36[places]
37places_home=1
38places_desktop=1
39places_root=1
40places_computer=1
41places_trash=1
42places_applications=1
43places_network=1
44places_unmounted=1
diff --git a/roles/lxde/files/config_files/lxpanel/LXDE/config b/roles/lxde/files/config_files/lxpanel/LXDE/config
new file mode 100644
index 0000000..76228e2
--- /dev/null
+++ b/roles/lxde/files/config_files/lxpanel/LXDE/config
@@ -0,0 +1,2 @@
1[Command]
2Logout=lxde-logout
diff --git a/roles/lxde/files/config_files/lxpanel/LXDE/panels/panel b/roles/lxde/files/config_files/lxpanel/LXDE/panels/panel
new file mode 100644
index 0000000..34c978d
--- /dev/null
+++ b/roles/lxde/files/config_files/lxpanel/LXDE/panels/panel
@@ -0,0 +1,165 @@
1# lxpanel <profile> config file. Manually editing is not recommended.
2# Use preference dialog in lxpanel to adjust config when you can.
3
4Global {
5 edge=bottom
6 align=left
7 margin=0
8 widthtype=percent
9 width=100
10 height=26
11 transparent=0
12 tintcolor=#000000
13 alpha=0
14 setdocktype=1
15 setpartialstrut=1
16 autohide=0
17 heightwhenhidden=0
18 usefontcolor=1
19 fontcolor=#ffffff
20 background=1
21 backgroundfile=/usr/share/lxpanel/images/background.png
22}
23Plugin {
24 type=space
25 Config {
26 Size=2
27 }
28}
29Plugin {
30 type=menu
31 Config {
32 image=/usr/share/lxde/images/lxde-icon.png
33 system {
34 }
35 separator {
36 }
37 item {
38 command=run
39 }
40 separator {
41 }
42 item {
43 image=gnome-logout
44 command=logout
45 }
46 }
47}
48Plugin {
49 type=launchbar
50 Config {
51 Button {
52 id=pcmanfm.desktop
53 }
54 Button {
55 id=firefox.desktop
56 }
57 }
58}
59Plugin {
60 type=space
61 Config {
62 Size=4
63 }
64}
65Plugin {
66 type=wincmd
67 Config {
68 Button1=iconify
69 Button2=shade
70 }
71}
72Plugin {
73 type=space
74 Config {
75 Size=4
76 }
77}
78Plugin {
79 type=pager
80 Config {
81 }
82}
83Plugin {
84 type=space
85 Config {
86 Size=4
87 }
88}
89Plugin {
90 type=taskbar
91 expand=1
92 Config {
93 tooltips=1
94 IconsOnly=0
95 AcceptSkipPager=1
96 ShowIconified=1
97 ShowMapped=1
98 ShowAllDesks=0
99 UseMouseWheel=1
100 UseUrgencyHint=1
101 FlatButton=0
102 MaxTaskWidth=150
103 spacing=1
104 }
105}
106Plugin {
107 type=monitors
108 Config {
109 DisplayCPU=1
110 DisplayRAM=1
111 CPUColor=#0000FF
112 RAMColor=#FF0000
113 }
114}
115Plugin {
116 type=volume
117 Config {
118 }
119}
120Plugin {
121 type=tray
122 Config {
123 }
124}
125Plugin {
126 type=dclock
127 Config {
128 ClockFmt=%F %R
129 TooltipFmt=%A %x
130 BoldFont=0
131 IconOnly=0
132 CenterText=0
133 }
134}
135Plugin {
136 type=netstatus
137 Config {
138 iface=enp0s31f6
139 configtool=nm-connection-editor
140 }
141}
142Plugin {
143 type=netstatus
144 Config {
145 iface=wlp2s0
146 configtool=nm-connection-editor
147 }
148}
149Plugin {
150 type=batt
151 Config {
152 BackgroundColor=black
153 ChargingColor1=#28f200
154 ChargingColor2=#22cc00
155 DischargingColor1=#ffee00
156 DischargingColor2=#d9ca00
157 HideIfNoBattery=0
158 AlarmCommand=notify-send "Batterie faible" --icon=battery-caution
159 AlarmTime=5
160 BorderWidth=0
161 Size=1
162 ShowExtendedInformation=0
163 BatteryNumber=0
164 }
165}
diff --git a/roles/lxde/files/config_files/lxpanel/launchtaskbar.cfg b/roles/lxde/files/config_files/lxpanel/launchtaskbar.cfg
new file mode 100644
index 0000000..a3d0e52
--- /dev/null
+++ b/roles/lxde/files/config_files/lxpanel/launchtaskbar.cfg
@@ -0,0 +1,4 @@
1[special_cases]
2synaptic=synaptic-pkexec
3soffice.bin=libreoffice
4x-terminal-emulator=lxterminal
diff --git a/roles/lxde/files/config_files/lxsession-default-apps/settings.conf b/roles/lxde/files/config_files/lxsession-default-apps/settings.conf
new file mode 100644
index 0000000..62314cf
--- /dev/null
+++ b/roles/lxde/files/config_files/lxsession-default-apps/settings.conf
@@ -0,0 +1,45 @@
1[Mime]
2webbrowser/available=
3email/available=
4file_manager/available=
5screensaver/available=
6composite_manager/available=
7desktop_manager/available=
8power_manager/available=
9polkit/available=
10im/available=
11widget/available=
12terminal_manager/available=
13audio_player/available=
14video_player/available=
15pdf_reader/available=
16image_display/available=
17text_editor/available=
18archive/available=
19spreadsheet/available=
20bittorent/available=
21document/available=
22burn/available=
23tasks/available=
24webbrowser/installed=Firefox,/usr/lib/firefox/firefox,firefox,/usr/share/applications/firefox.desktop,;
25email/installed=
26file_manager/installed=Gestionnaire de fichiers PCManFM,pcmanfm,system-file-manager,/usr/share/applications/pcmanfm.desktop,;
27screensaver/installed=
28composite_manager/installed=
29desktop_manager/installed=Personnaliser l'apparence,lxappearance,preferences-desktop-theme,/usr/share/applications/lxappearance.desktop,;Paramètres de la session de bureau,lxsession-edit,preferences-desktop,/usr/share/applications/lxsession-edit.desktop,;Applications préférées,libfm-pref-apps,preferences-desktop,/usr/share/applications/libfm-pref-apps.desktop,;Setup Hot Keys,lxhotkey,preferences-desktop-keyboard,/usr/share/applications/lxhotkey-gtk.desktop,;Préférences du bureau,pcmanfm,user-desktop,/usr/share/applications/pcmanfm-desktop-pref.desktop,;Applications par défaut pour LXSession,lxsession-default-apps,preferences-desktop,/usr/share/applications/lxsession-default-apps.desktop,;
30power_manager/installed=
31polkit/installed=
32im/installed=
33widget/installed=
34terminal_manager/installed=LXTerminal,lxterminal,lxterminal,/usr/share/applications/lxterminal.desktop,;
35audio_player/installed=Lecteur multimédia VLC,/usr/bin/vlc,vlc,/usr/share/applications/vlc.desktop,;LXMusic simple music player,lxmusic,lxmusic,/usr/share/applications/lxmusic.desktop,;Qt V4L2 test Utility,qv4l2,qv4l2,/usr/share/applications/qv4l2.desktop,;MPlayer Media Player,mplayer,mplayer,/usr/share/applications/mplayer.desktop,;Contrôle du volume PulseAudio,pavucontrol,multimedia-volume-control,/usr/share/applications/pavucontrol.desktop,;GTK Youtube Viewer,gtk-youtube-viewer,gtk-youtube-viewer,/usr/share/applications/gtk-youtube-viewer.desktop,;
36video_player/installed=Lecteur multimédia VLC,/usr/bin/vlc,vlc,/usr/share/applications/vlc.desktop,;LXMusic simple music player,lxmusic,lxmusic,/usr/share/applications/lxmusic.desktop,;Qt V4L2 test Utility,qv4l2,qv4l2,/usr/share/applications/qv4l2.desktop,;MPlayer Media Player,mplayer,mplayer,/usr/share/applications/mplayer.desktop,;Contrôle du volume PulseAudio,pavucontrol,multimedia-volume-control,/usr/share/applications/pavucontrol.desktop,;GTK Youtube Viewer,gtk-youtube-viewer,gtk-youtube-viewer,/usr/share/applications/gtk-youtube-viewer.desktop,;
37pdf_reader/installed=Visionneur d'images,gpicview,gpicview,/usr/share/applications/gpicview.desktop,;Visionneur de documents,evince,org.gnome.Evince,/usr/share/applications/org.gnome.Evince.desktop,;Aperçu avant impression,evince-previewer,document-print-preview,/usr/share/applications/org.gnome.Evince-previewer.desktop,;
38image_display/installed=Visionneur d'images,gpicview,gpicview,/usr/share/applications/gpicview.desktop,;Visionneur de documents,evince,org.gnome.Evince,/usr/share/applications/org.gnome.Evince.desktop,;Aperçu avant impression,evince-previewer,document-print-preview,/usr/share/applications/org.gnome.Evince-previewer.desktop,;
39text_editor/installed=Vim,vim,gvim,/usr/share/applications/vim.desktop,;
40archive/installed=
41spreadsheet/installed=
42bittorent/installed=
43document/installed=
44burn/installed=
45tasks/installed=Gestionnaire des tâches,lxtask,utilities-system-monitor,/usr/share/applications/lxtask.desktop,;
diff --git a/roles/lxde/files/config_files/lxsession/LXDE/autostart b/roles/lxde/files/config_files/lxsession/LXDE/autostart
new file mode 100755
index 0000000..d8f2e23
--- /dev/null
+++ b/roles/lxde/files/config_files/lxsession/LXDE/autostart
@@ -0,0 +1,3 @@
1@lxpanel --profile LXDE
2@pcmanfm --desktop --profile LXDE
3@xscreensaver -no-splash
diff --git a/roles/lxde/files/config_files/lxsession/LXDE/desktop.conf b/roles/lxde/files/config_files/lxsession/LXDE/desktop.conf
new file mode 100644
index 0000000..171f6b4
--- /dev/null
+++ b/roles/lxde/files/config_files/lxsession/LXDE/desktop.conf
@@ -0,0 +1,54 @@
1[Session]
2window_manager=openbox-lxde
3disable_autostart=no
4polkit/command=lxpolkit
5clipboard/command=lxclipboard
6xsettings_manager/command=build-in
7proxy_manager/command=build-in
8keyring/command=
9quit_manager/command=lxsession-logout
10lock_manager/command=lxlock
11terminal_manager/command=lxterminal
12quit_manager/image=/usr/share/lxde/images/logout-banner.png
13quit_manager/layout=top
14webbrowser/command=/usr/lib/firefox/firefox
15tasks/command=lxtask
16pdf_reader/command=evince
17text_editor/command=vim
18
19[GTK]
20sNet/ThemeName=Adwaita
21sNet/IconThemeName=nuoveXT2
22sGtk/FontName=Sans 10
23iGtk/ToolbarStyle=3
24iGtk/ButtonImages=1
25iGtk/MenuImages=1
26iGtk/CursorThemeSize=18
27iXft/Antialias=1
28iXft/Hinting=1
29sXft/HintStyle=hintslight
30sXft/RGBA=rgb
31iNet/EnableEventSounds=1
32iNet/EnableInputFeedbackSounds=1
33sGtk/ColorScheme=
34iGtk/ToolbarIconSize=3
35sGtk/CursorThemeName=DMZ-White
36
37[Mouse]
38AccFactor=20
39AccThreshold=10
40LeftHanded=0
41
42[Keyboard]
43Delay=500
44Interval=30
45Beep=1
46
47[State]
48guess_default=true
49
50[Dbus]
51lxde=true
52
53[Environment]
54menu_prefix=lxde-
diff --git a/roles/lxde/files/config_files/lxterminal/lxterminal.conf b/roles/lxde/files/config_files/lxterminal/lxterminal.conf
new file mode 100644
index 0000000..e572e20
--- /dev/null
+++ b/roles/lxde/files/config_files/lxterminal/lxterminal.conf
@@ -0,0 +1,53 @@
1[general]
2fontname=Monospace 10
3selchars=-A-Za-z0-9,./?%&#:_
4scrollback=1000
5bgcolor=rgb(0,0,0)
6fgcolor=rgb(170,170,170)
7palette_color_0=rgb(0,0,0)
8palette_color_1=rgb(170,0,0)
9palette_color_2=rgb(0,170,0)
10palette_color_3=rgb(170,85,0)
11palette_color_4=rgb(0,0,170)
12palette_color_5=rgb(170,0,170)
13palette_color_6=rgb(0,170,170)
14palette_color_7=rgb(170,170,170)
15palette_color_8=rgb(85,85,85)
16palette_color_9=rgb(255,85,85)
17palette_color_10=rgb(85,255,85)
18palette_color_11=rgb(255,255,85)
19palette_color_12=rgb(85,85,255)
20palette_color_13=rgb(255,85,255)
21palette_color_14=rgb(85,255,255)
22palette_color_15=rgb(255,255,255)
23color_preset=VGA
24disallowbold=false
25cursorblinks=false
26cursorunderline=false
27audiblebell=false
28tabpos=top
29geometry_columns=80
30geometry_rows=24
31hidescrollbar=true
32hidemenubar=false
33hideclosebutton=false
34hidepointer=false
35disablef10=true
36disablealt=true
37disableconfirm=false
38
39[shortcut]
40new_window_accel=<Primary><Shift>n
41new_tab_accel=<Primary><Shift>t
42close_tab_accel=<Primary><Shift>w
43close_window_accel=<Primary><Shift>q
44copy_accel=<Primary><Shift>c
45paste_accel=<Primary><Shift>v
46name_tab_accel=<Primary><Shift>i
47previous_tab_accel=<Primary>Page_Up
48next_tab_accel=<Primary>Page_Down
49move_tab_left_accel=<Primary><Shift>Page_Up
50move_tab_right_accel=<Primary><Shift>Page_Down
51zoom_in_accel=<Primary><Shift>plus
52zoom_out_accel=<Primary><Shift>underscore
53zoom_reset_accel=<Primary><Shift>parenright
diff --git a/roles/lxde/files/config_files/openbox/lxde-rc.xml b/roles/lxde/files/config_files/openbox/lxde-rc.xml
new file mode 100644
index 0000000..5003f15
--- /dev/null
+++ b/roles/lxde/files/config_files/openbox/lxde-rc.xml
@@ -0,0 +1,696 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- Do not edit this file, it will be overwritten on install.
3 Copy the file to $HOME/.config/openbox/ instead. -->
4<openbox_config xmlns='http://openbox.org/3.4/rc'>
5 <resistance>
6 <strength>10</strength>
7 <screen_edge_strength>20</screen_edge_strength>
8 </resistance>
9 <focus>
10 <focusNew>yes</focusNew>
11 <!-- always try to focus new windows when they appear. other rules do
12 apply -->
13 <followMouse>no</followMouse>
14 <!-- move focus to a window when you move the mouse into it -->
15 <focusLast>yes</focusLast>
16 <!-- focus the last used window when changing desktops, instead of the one
17 under the mouse pointer. when followMouse is enabled -->
18 <underMouse>no</underMouse>
19 <!-- move focus under the mouse, even when the mouse is not moving -->
20 <focusDelay>200</focusDelay>
21 <!-- when followMouse is enabled, the mouse must be inside the window for
22 this many milliseconds (1000 = 1 sec) before moving focus to it -->
23 <raiseOnFocus>no</raiseOnFocus>
24 </focus>
25 <!-- when followMouse is enabled, and a window is given focus by moving the
26 mouse into it, also raise the window -->
27 <placement>
28 <policy>Smart</policy>
29 <!-- 'Smart' or 'UnderMouse' -->
30 <center>yes</center>
31 <!-- whether to place windows in the center of the free area found or
32 the top left corner -->
33 <monitor>Any</monitor>
34 </placement>
35 <!-- with Smart placement on a multi-monitor system, try to place new windows
36 on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
37 the active window is -->
38 <theme>
39 <name>Onyx</name>
40 <titleLayout>NLIMC</titleLayout>
41 <!-- available characters are NDSLIMC, each can occur at most once.
42 N: window icon
43 L: window label (AKA title).
44 I: iconify
45 M: maximize
46 C: close
47 S: shade (roll up/down)
48 D: omnipresent (on all desktops).
49 -->
50 <keepBorder>yes</keepBorder>
51 <animateIconify>yes</animateIconify>
52 <font place='ActiveWindow'>
53 <name>sans</name>
54 <size>10</size>
55 <!-- font size in points -->
56 <weight>bold</weight>
57 <!-- 'bold' or 'normal' -->
58 <slant>normal</slant>
59 </font>
60 <!-- 'italic' or 'normal' -->
61 <font place='InactiveWindow'>
62 <name>sans</name>
63 <size>10</size>
64 <!-- font size in points -->
65 <weight>bold</weight>
66 <!-- 'bold' or 'normal' -->
67 <slant>normal</slant>
68 </font>
69 <!-- 'italic' or 'normal' -->
70 <font place='MenuHeader'>
71 <name>sans</name>
72 <size>10</size>
73 <!-- font size in points -->
74 <weight>normal</weight>
75 <!-- 'bold' or 'normal' -->
76 <slant>normal</slant>
77 </font>
78 <!-- 'italic' or 'normal' -->
79 <font place='MenuItem'>
80 <name>sans</name>
81 <size>10</size>
82 <!-- font size in points -->
83 <weight>normal</weight>
84 <!-- 'bold' or 'normal' -->
85 <slant>normal</slant>
86 </font>
87 <!-- 'italic' or 'normal' -->
88 <font place='OnScreenDisplay'>
89 <name>sans</name>
90 <size>10</size>
91 <!-- font size in points -->
92 <weight>bold</weight>
93 <!-- 'bold' or 'normal' -->
94 <slant>normal</slant>
95 </font>
96 </theme>
97 <!-- 'italic' or 'normal' -->
98 <desktops>
99 <!-- this stuff is only used at startup, pagers allow you to change them
100 during a session
101
102 these are default values to use when other ones are not already set
103 by other applications, or saved in your session
104
105 use obconf if you want to change these without having to log out
106 and back in -->
107 <number>2</number>
108 <firstdesk>1</firstdesk>
109 <names/>
110 <!-- set names up here if you want to, like this:
111 <name>desktop 1</name>
112 <name>desktop 2</name>
113 -->
114 <popupTime>875</popupTime>
115 </desktops>
116 <!-- The number of milliseconds to show the popup for when switching
117 desktops. Set this to 0 to disable the popup. -->
118 <resize>
119 <drawContents>yes</drawContents>
120 <popupShow>Nonpixel</popupShow>
121 <!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
122 <popupPosition>Center</popupPosition>
123 <!-- 'Center', 'Top', or 'Fixed' -->
124 <popupFixedPosition>
125 <!-- these are used if popupPosition is set to 'Fixed' -->
126 <x>10</x>
127 <!-- positive number for distance from left edge, negative number for
128 distance from right edge, or 'Center' -->
129 <y>10</y>
130 </popupFixedPosition>
131 </resize>
132 <!-- You can reserve a portion of your screen where windows will not cover when
133 they are maximized, or when they are initially placed.
134 Many programs reserve space automatically, but you can use this in other
135 cases. -->
136 <margins>
137 <top>0</top>
138 <bottom>0</bottom>
139 <left>0</left>
140 <right>0</right>
141 </margins>
142 <dock>
143 <position>TopLeft</position>
144 <!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
145 <floatingX>0</floatingX>
146 <floatingY>0</floatingY>
147 <noStrut>no</noStrut>
148 <stacking>Above</stacking>
149 <!-- 'Above', 'Normal', or 'Below' -->
150 <direction>Vertical</direction>
151 <!-- 'Vertical' or 'Horizontal' -->
152 <autoHide>no</autoHide>
153 <hideDelay>300</hideDelay>
154 <!-- in milliseconds (1000 = 1 second) -->
155 <showDelay>300</showDelay>
156 <!-- in milliseconds (1000 = 1 second) -->
157 <moveButton>Middle</moveButton>
158 </dock>
159 <!-- 'Left', 'Middle', 'Right' -->
160 <keyboard>
161 <chainQuitKey>C-g</chainQuitKey>
162 <!-- Keybindings for desktop switching -->
163 <keybind key='C-A-Left'>
164 <action name='DesktopLeft'>
165 <dialog>no</dialog>
166 <wrap>no</wrap>
167 </action>
168 </keybind>
169 <keybind key='C-A-Right'>
170 <action name='DesktopRight'>
171 <dialog>no</dialog>
172 <wrap>no</wrap>
173 </action>
174 </keybind>
175 <keybind key='C-A-Up'>
176 <action name='DesktopUp'>
177 <dialog>no</dialog>
178 <wrap>no</wrap>
179 </action>
180 </keybind>
181 <keybind key='C-A-Down'>
182 <action name='DesktopDown'>
183 <dialog>no</dialog>
184 <wrap>no</wrap>
185 </action>
186 </keybind>
187 <keybind key='S-A-Left'>
188 <action name='SendToDesktopLeft'>
189 <dialog>no</dialog>
190 <wrap>no</wrap>
191 </action>
192 </keybind>
193 <keybind key='S-A-Right'>
194 <action name='SendToDesktopRight'>
195 <dialog>no</dialog>
196 <wrap>no</wrap>
197 </action>
198 </keybind>
199 <keybind key='S-A-Up'>
200 <action name='SendToDesktopUp'>
201 <dialog>no</dialog>
202 <wrap>no</wrap>
203 </action>
204 </keybind>
205 <keybind key='S-A-Down'>
206 <action name='SendToDesktopDown'>
207 <dialog>no</dialog>
208 <wrap>no</wrap>
209 </action>
210 </keybind>
211 <keybind key='W-F1'>
212 <action name='Desktop'>
213 <desktop>1</desktop>
214 </action>
215 </keybind>
216 <keybind key='W-F2'>
217 <action name='Desktop'>
218 <desktop>2</desktop>
219 </action>
220 </keybind>
221 <keybind key='W-F3'>
222 <action name='Desktop'>
223 <desktop>3</desktop>
224 </action>
225 </keybind>
226 <keybind key='W-F4'>
227 <action name='Desktop'>
228 <desktop>4</desktop>
229 </action>
230 </keybind>
231 <keybind key='W-d'>
232 <action name='ToggleShowDesktop'/>
233 </keybind>
234 <keybind key='C-A-d'>
235 <action name='ToggleShowDesktop'/>
236 </keybind>
237 <!-- Keybindings for windows -->
238 <keybind key='A-F4'>
239 <action name='Close'/>
240 </keybind>
241 <keybind key='A-Escape'>
242 <action name='Lower'/>
243 <action name='FocusToBottom'/>
244 <action name='Unfocus'/>
245 </keybind>
246 <keybind key='A-space'>
247 <action name='ShowMenu'>
248 <menu>client-menu</menu>
249 </action>
250 </keybind>
251 <!-- Keybindings for window switching -->
252 <keybind key='A-Tab'>
253 <action name='NextWindow'/>
254 </keybind>
255 <keybind key='A-S-Tab'>
256 <action name='PreviousWindow'/>
257 </keybind>
258 <keybind key='C-A-Tab'>
259 <action name='NextWindow'>
260 <panels>yes</panels>
261 <desktop>yes</desktop>
262 </action>
263 </keybind>
264 <!-- Keybindings for running applications -->
265 <keybind key='W-e'>
266 <action name='Execute'>
267 <startupnotify>
268 <enabled>true</enabled>
269 <name>PCManFM</name>
270 </startupnotify>
271 <command>pcmanfm</command>
272 </action>
273 </keybind>
274 <!-- Keybindings for finding files -->
275 <keybind key='W-f'>
276 <action name='Execute'>
277 <command>pcmanfm --find-files</command>
278 </action>
279 </keybind>
280 <!-- eybindings for LXPanel -->
281 <keybind key='W-p'>
282 <action name='Execute'>
283 <command>lxpanelctl run</command>
284 </action>
285 </keybind>
286 <keybind key='A-F11'>
287 <action name='ToggleFullscreen'/>
288 </keybind>
289 <!-- Launch Task Manager with Ctrl+Alt+Del -->
290 <keybind key='A-C-Delete'>
291 <action name='Execute'>
292 <command>lxtask</command>
293 </action>
294 </keybind>
295 <!-- Launch LXRandR when Fn+Screen is pressed -->
296 <keybind key='XF86Display'>
297 <action name='Execute'>
298 <command>lxrandr</command>
299 </action>
300 </keybind>
301 <keybind key='XF86MonBrightnessUp'>
302 <action name='Execute'>
303 <command>xbacklight -inc 10</command>
304 </action>
305 </keybind>
306 <keybind key='XF86MonBrightnessDown'>
307 <action name='Execute'>
308 <command>xbacklight -dec 10</command>
309 </action>
310 </keybind>
311 <keybind key='A-C-l'>
312 <action name='Execute'>
313 <command>slock</command>
314 </action>
315 </keybind>
316 <keybind key='XF86Tools'>
317 <action name='Execute'>
318 <command>xset dpms force off</command>
319 </action>
320 </keybind>
321 <keybind key='XF86AudioRaiseVolume'>
322 <action name='Execute'>
323 <command>bash -c &quot;pamixer --allow-boost -u -i 1; v=$HOME/.cache/dunstify_volume; vol=`pamixer --get-volume`; color=`[ $vol -le 100 ] &amp;&amp; echo normal || echo critical`; dunstify -r $(($(cat $v))) -p Volume --hints=int:value:$vol -i &apos; &apos; -a Openbox-volume -t 1000 -u $color &gt; $v&quot;</command>
324 </action>
325 </keybind>
326 <keybind key='XF86AudioLowerVolume'>
327 <action name='Execute'>
328 <command>bash -c &quot;pamixer --allow-boost -u -d 1; v=$HOME/.cache/dunstify_volume; vol=`pamixer --get-volume`; color=`[ $vol -le 100 ] &amp;&amp; echo normal || echo critical`; dunstify -r $(($(cat $v))) -p Volume --hints=int:value:$vol -i &apos; &apos; -a Openbox-volume -t 1000 -u $color &gt; $v&quot;</command>
329 </action>
330 </keybind>
331 <keybind key='XF86AudioMute'>
332 <action name='Execute'>
333 <command>bash -c &quot;v=$HOME/.cache/dunstify_volume; vol=$([ `pamixer -t ; pamixer --get-mute` = \&quot;false\&quot; ] &amp;&amp; echo on || echo off); dunstify -r $(($(cat $v))) -p &apos;Volume &apos;$vol -i &apos; &apos; -a Openbox-mute -t 1000 &gt; $v&quot;</command>
334 </action>
335 </keybind>
336 <keybind key='W-Print'>
337 <action name='Execute'>
338 <command>scrot &quot;%Y-%m-%d_%H_%M_%S.png&quot; -e &apos;mv $f ~&apos;</command>
339 </action>
340 </keybind>
341 <keybind key='S-Print'>
342 <action name='Execute'>
343 <command>scrot -s &quot;%Y-%m-%d_%H_%M_%S.png&quot; -e &apos;mv $f ~&apos;</command>
344 </action>
345 </keybind>
346 </keyboard>
347 <mouse>
348 <dragThreshold>8</dragThreshold>
349 <!-- number of pixels the mouse must move before a drag begins -->
350 <doubleClickTime>200</doubleClickTime>
351 <!-- in milliseconds (1000 = 1 second) -->
352 <screenEdgeWarpTime>400</screenEdgeWarpTime>
353 <!-- Time before changing desktops when the pointer touches the edge of the
354 screen while moving a window, in milliseconds (1000 = 1 second).
355 Set this to 0 to disable warping -->
356 <context name='Frame'>
357 <mousebind button='A-Left' action='Press'>
358 <action name='Focus'/>
359 <action name='Raise'/>
360 </mousebind>
361 <mousebind button='A-Left' action='Click'>
362 <action name='Unshade'/>
363 </mousebind>
364 <mousebind button='A-Left' action='Drag'>
365 <action name='Move'/>
366 </mousebind>
367 <mousebind button='A-Right' action='Press'>
368 <action name='Focus'/>
369 <action name='Raise'/>
370 <action name='Unshade'/>
371 </mousebind>
372 <mousebind button='A-Right' action='Drag'>
373 <action name='Resize'/>
374 </mousebind>
375 <mousebind button='A-Middle' action='Press'>
376 <action name='Lower'/>
377 <action name='FocusToBottom'/>
378 <action name='Unfocus'/>
379 </mousebind>
380 <mousebind button='A-Up' action='Click'>
381 <action name='DesktopPrevious'/>
382 </mousebind>
383 <mousebind button='A-Down' action='Click'>
384 <action name='DesktopNext'/>
385 </mousebind>
386 <mousebind button='C-A-Up' action='Click'>
387 <action name='DesktopPrevious'/>
388 </mousebind>
389 <mousebind button='C-A-Down' action='Click'>
390 <action name='DesktopNext'/>
391 </mousebind>
392 <mousebind button='A-S-Up' action='Click'>
393 <action name='SendToDesktopPrevious'/>
394 </mousebind>
395 <mousebind button='A-S-Down' action='Click'>
396 <action name='SendToDesktopNext'/>
397 </mousebind>
398 </context>
399 <context name='Titlebar'>
400 <mousebind button='Left' action='Press'>
401 <action name='Focus'/>
402 <action name='Raise'/>
403 </mousebind>
404 <mousebind button='Left' action='Drag'>
405 <action name='Move'/>
406 </mousebind>
407 <mousebind button='Left' action='DoubleClick'>
408 <action name='ToggleMaximizeFull'/>
409 </mousebind>
410 <mousebind button='Middle' action='Press'>
411 <action name='Lower'/>
412 <action name='FocusToBottom'/>
413 <action name='Unfocus'/>
414 </mousebind>
415 <mousebind button='Up' action='Click'>
416 <action name='Shade'/>
417 <action name='FocusToBottom'/>
418 <action name='Unfocus'/>
419 <action name='Lower'/>
420 </mousebind>
421 <mousebind button='Down' action='Click'>
422 <action name='Unshade'/>
423 <action name='Raise'/>
424 </mousebind>
425 <mousebind button='Right' action='Press'>
426 <action name='Focus'/>
427 <action name='Raise'/>
428 <action name='ShowMenu'>
429 <menu>client-menu</menu>
430 </action>
431 </mousebind>
432 </context>
433 <context name='Top'>
434 <mousebind button='Left' action='Press'>
435 <action name='Focus'/>
436 <action name='Raise'/>
437 <action name='Unshade'/>
438 </mousebind>
439 <mousebind button='Left' action='Drag'>
440 <action name='Resize'>
441 <edge>top</edge>
442 </action>
443 </mousebind>
444 </context>
445 <context name='Left'>
446 <mousebind button='Left' action='Press'>
447 <action name='Focus'/>
448 <action name='Raise'/>
449 </mousebind>
450 <mousebind button='Left' action='Drag'>
451 <action name='Resize'>
452 <edge>left</edge>
453 </action>
454 </mousebind>
455 </context>
456 <context name='Right'>
457 <mousebind button='Left' action='Press'>
458 <action name='Focus'/>
459 <action name='Raise'/>
460 </mousebind>
461 <mousebind button='Left' action='Drag'>
462 <action name='Resize'>
463 <edge>right</edge>
464 </action>
465 </mousebind>
466 </context>
467 <context name='Bottom'>
468 <mousebind button='Left' action='Press'>
469 <action name='Focus'/>
470 <action name='Raise'/>
471 </mousebind>
472 <mousebind button='Left' action='Drag'>
473 <action name='Resize'>
474 <edge>bottom</edge>
475 </action>
476 </mousebind>
477 <mousebind button='Middle' action='Press'>
478 <action name='Lower'/>
479 <action name='FocusToBottom'/>
480 <action name='Unfocus'/>
481 </mousebind>
482 <mousebind button='Right' action='Press'>
483 <action name='Focus'/>
484 <action name='Raise'/>
485 <action name='ShowMenu'>
486 <menu>client-menu</menu>
487 </action>
488 </mousebind>
489 </context>
490 <context name='BLCorner'>
491 <mousebind button='Left' action='Press'>
492 <action name='Focus'/>
493 <action name='Raise'/>
494 </mousebind>
495 <mousebind button='Left' action='Drag'>
496 <action name='Resize'/>
497 </mousebind>
498 </context>
499 <context name='BRCorner'>
500 <mousebind button='Left' action='Press'>
501 <action name='Focus'/>
502 <action name='Raise'/>
503 </mousebind>
504 <mousebind button='Left' action='Drag'>
505 <action name='Resize'/>
506 </mousebind>
507 </context>
508 <context name='TLCorner'>
509 <mousebind button='Left' action='Press'>
510 <action name='Focus'/>
511 <action name='Raise'/>
512 <action name='Unshade'/>
513 </mousebind>
514 <mousebind button='Left' action='Drag'>
515 <action name='Resize'/>
516 </mousebind>
517 </context>
518 <context name='TRCorner'>
519 <mousebind button='Left' action='Press'>
520 <action name='Focus'/>
521 <action name='Raise'/>
522 <action name='Unshade'/>
523 </mousebind>
524 <mousebind button='Left' action='Drag'>
525 <action name='Resize'/>
526 </mousebind>
527 </context>
528 <context name='Client'>
529 <mousebind button='Left' action='Press'>
530 <action name='Focus'/>
531 <action name='Raise'/>
532 </mousebind>
533 <mousebind button='Middle' action='Press'>
534 <action name='Focus'/>
535 <action name='Raise'/>
536 </mousebind>
537 <mousebind button='Right' action='Press'>
538 <action name='Focus'/>
539 <action name='Raise'/>
540 </mousebind>
541 </context>
542 <context name='Icon'>
543 <mousebind button='Left' action='Press'>
544 <action name='Focus'/>
545 <action name='Raise'/>
546 <action name='Unshade'/>
547 <action name='ShowMenu'>
548 <menu>client-menu</menu>
549 </action>
550 </mousebind>
551 <mousebind button='Right' action='Press'>
552 <action name='Focus'/>
553 <action name='Raise'/>
554 <action name='ShowMenu'>
555 <menu>client-menu</menu>
556 </action>
557 </mousebind>
558 </context>
559 <context name='AllDesktops'>
560 <mousebind button='Left' action='Press'>
561 <action name='Focus'/>
562 <action name='Raise'/>
563 <action name='Unshade'/>
564 </mousebind>
565 <mousebind button='Left' action='Click'>
566 <action name='ToggleOmnipresent'/>
567 </mousebind>
568 </context>
569 <context name='Shade'>
570 <mousebind button='Left' action='Press'>
571 <action name='Focus'/>
572 <action name='Raise'/>
573 </mousebind>
574 <mousebind button='Left' action='Click'>
575 <action name='ToggleShade'/>
576 </mousebind>
577 </context>
578 <context name='Iconify'>
579 <mousebind button='Left' action='Press'>
580 <action name='Focus'/>
581 <action name='Raise'/>
582 </mousebind>
583 <mousebind button='Left' action='Click'>
584 <action name='Iconify'/>
585 </mousebind>
586 </context>
587 <context name='Maximize'>
588 <mousebind button='Left' action='Press'>
589 <action name='Focus'/>
590 <action name='Raise'/>
591 <action name='Unshade'/>
592 </mousebind>
593 <mousebind button='Middle' action='Press'>
594 <action name='Focus'/>
595 <action name='Raise'/>
596 <action name='Unshade'/>
597 </mousebind>
598 <mousebind button='Right' action='Press'>
599 <action name='Focus'/>
600 <action name='Raise'/>
601 <action name='Unshade'/>
602 </mousebind>
603 <mousebind button='Left' action='Click'>
604 <action name='ToggleMaximizeFull'/>
605 </mousebind>
606 <mousebind button='Middle' action='Click'>
607 <action name='ToggleMaximizeVert'/>
608 </mousebind>
609 <mousebind button='Right' action='Click'>
610 <action name='ToggleMaximizeHorz'/>
611 </mousebind>
612 </context>
613 <context name='Close'>
614 <mousebind button='Left' action='Press'>
615 <action name='Focus'/>
616 <action name='Raise'/>
617 <action name='Unshade'/>
618 </mousebind>
619 <mousebind button='Left' action='Click'>
620 <action name='Close'/>
621 </mousebind>
622 </context>
623 <context name='Desktop'>
624 <mousebind button='Up' action='Click'>
625 <action name='DesktopPrevious'/>
626 </mousebind>
627 <mousebind button='Down' action='Click'>
628 <action name='DesktopNext'/>
629 </mousebind>
630 <mousebind button='A-Up' action='Click'>
631 <action name='DesktopPrevious'/>
632 </mousebind>
633 <mousebind button='A-Down' action='Click'>
634 <action name='DesktopNext'/>
635 </mousebind>
636 <mousebind button='C-A-Up' action='Click'>
637 <action name='DesktopPrevious'/>
638 </mousebind>
639 <mousebind button='C-A-Down' action='Click'>
640 <action name='DesktopNext'/>
641 </mousebind>
642 <mousebind button='Left' action='Press'>
643 <action name='Focus'/>
644 <action name='Raise'/>
645 </mousebind>
646 <mousebind button='Right' action='Press'>
647 <action name='Focus'/>
648 <action name='Raise'/>
649 </mousebind>
650 </context>
651 <context name='Root'>
652 <!-- Menus -->
653 <mousebind button='Middle' action='Press'>
654 <action name='ShowMenu'>
655 <menu>client-list-combined-menu</menu>
656 </action>
657 </mousebind>
658 <mousebind button='Right' action='Press'>
659 <action name='ShowMenu'>
660 <menu>root-menu</menu>
661 </action>
662 </mousebind>
663 </context>
664 <context name='MoveResize'>
665 <mousebind button='Up' action='Click'>
666 <action name='DesktopPrevious'/>
667 </mousebind>
668 <mousebind button='Down' action='Click'>
669 <action name='DesktopNext'/>
670 </mousebind>
671 <mousebind button='A-Up' action='Click'>
672 <action name='DesktopPrevious'/>
673 </mousebind>
674 <mousebind button='A-Down' action='Click'>
675 <action name='DesktopNext'/>
676 </mousebind>
677 </context>
678 </mouse>
679 <menu>
680 <!-- default menu file (or custom one in $HOME/.config/openbox/) -->
681 <file>/usr/share/lxde/openbox/menu.xml</file>
682 <hideDelay>200</hideDelay>
683 <!-- if a press-release lasts longer than this setting (in milliseconds), the
684 menu is hidden again -->
685 <middle>no</middle>
686 <!-- center submenus vertically about the parent entry -->
687 <submenuShowDelay>100</submenuShowDelay>
688 <!-- this one is easy, time to delay before showing a submenu after hovering
689 over the parent entry -->
690 <applicationIcons>yes</applicationIcons>
691 <!-- controls if icons appear in the client-list-(combined-)menu -->
692 <manageDesktops>yes</manageDesktops>
693 </menu>
694 <!-- show the manage desktops section in the client-list-(combined-)menu -->
695 <applications/>
696</openbox_config> \ No newline at end of file
diff --git a/roles/lxde/files/config_files/pcmanfm/LXDE/desktop-items-0.conf b/roles/lxde/files/config_files/pcmanfm/LXDE/desktop-items-0.conf
new file mode 100644
index 0000000..088cce4
--- /dev/null
+++ b/roles/lxde/files/config_files/pcmanfm/LXDE/desktop-items-0.conf
@@ -0,0 +1,15 @@
1[*]
2wallpaper_mode=crop
3wallpaper_common=1
4wallpaper=/usr/share/lxde/wallpapers/lxde_blue.jpg
5desktop_bg=#000000
6desktop_fg=#ffffff
7desktop_shadow=#000000
8desktop_font=Sans 12
9folder=
10show_wm_menu=0
11sort=mtime;ascending;
12show_documents=0
13show_trash=1
14show_mounts=0
15
diff --git a/roles/lxde/files/config_files/pcmanfm/LXDE/pcmanfm.conf b/roles/lxde/files/config_files/pcmanfm/LXDE/pcmanfm.conf
new file mode 100644
index 0000000..facaa64
--- /dev/null
+++ b/roles/lxde/files/config_files/pcmanfm/LXDE/pcmanfm.conf
@@ -0,0 +1,27 @@
1[config]
2bm_open_method=0
3
4[volume]
5mount_on_startup=1
6mount_removable=1
7autorun=1
8
9[ui]
10always_show_tabs=0
11max_tab_chars=32
12win_width=640
13win_height=480
14maximized=1
15splitter_pos=275
16media_in_new_tab=1
17desktop_folder_new_win=0
18change_tab_on_drop=1
19close_on_unmount=0
20focus_previous=0
21side_pane_mode=places
22view_mode=list
23show_hidden=1
24sort=name;ascending;
25toolbar=newtab;navigation;home;
26show_statusbar=1
27pathbar_mode_buttons=0
diff --git a/roles/lxde/files/config_files/xinitrc b/roles/lxde/files/config_files/xinitrc
new file mode 100644
index 0000000..2e77554
--- /dev/null
+++ b/roles/lxde/files/config_files/xinitrc
@@ -0,0 +1,15 @@
1### replace /etc/X11/xinit/xinitrc and /etc/X11/xinit/xinitrc.d/*
2dbus-update-activation-environment DISPLAY XAUTHORITY
3###
4
5setxkbmap -layout fr -variant oss -model pc104 -option compose:menu -option compose:paus -option nbsp:level3 -option shift:breaks_caps -option terminate:ctrl_alt_bksp
6
7#### The rest replaces a `exec startlxde` (To avoid the dbus-update-activation-environment)
8# Enable GTK+2 integration for OpenOffice.org, if available.
9export SAL_USE_VCLPLUGIN=gtk
10
11export XDG_MENU_PREFIX="lxde-"
12export XDG_CURRENT_DESKTOP="LXDE"
13
14# Start the LXDE session
15exec /usr/bin/lxsession -s LXDE -e LXDE
diff --git a/roles/lxde/tasks/main.yml b/roles/lxde/tasks/main.yml
new file mode 100644
index 0000000..b48b5e5
--- /dev/null
+++ b/roles/lxde/tasks/main.yml
@@ -0,0 +1,11 @@
1---
2- name: Import graphical
3 include_role:
4 name: graphical
5- name: Config files
6 synchronize:
7 recursive: yes
8 archive: no
9 checksum: yes
10 src: config_files/
11 dest: /$XDG_CONFIG_HOME/
diff --git a/roles/programming/haskell/files/ghci.conf b/roles/programming/haskell/files/ghci.conf
new file mode 100644
index 0000000..1de7ca1
--- /dev/null
+++ b/roles/programming/haskell/files/ghci.conf
@@ -0,0 +1,2 @@
1:set prompt "λ "
2:set -XOverloadedStrings
diff --git a/roles/programming/haskell/files/stack/config.yaml b/roles/programming/haskell/files/stack/config.yaml
new file mode 100644
index 0000000..3bf2f91
--- /dev/null
+++ b/roles/programming/haskell/files/stack/config.yaml
@@ -0,0 +1,14 @@
1# This file contains default non-project-specific settings for 'stack', used
2# in all projects. For more information about stack's configuration, see
3# http://docs.haskellstack.org/en/stable/yaml_configuration/
4
5# The following parameters are used by "stack new" to automatically fill fields
6# in the cabal config. We recommend uncommenting them and filling them out if
7# you intend to use 'stack new'.
8# See https://docs.haskellstack.org/en/stable/yaml_configuration/#templates
9templates:
10 scm-init: git
11 params:
12 author-name: Ismaël Bouya
13 author-email: ismael.bouya@fretlink.com
14 github-username: ismaelbouyaf
diff --git a/roles/programming/haskell/files/stack/global-project/README.txt b/roles/programming/haskell/files/stack/global-project/README.txt
new file mode 100644
index 0000000..646fa5f
--- /dev/null
+++ b/roles/programming/haskell/files/stack/global-project/README.txt
@@ -0,0 +1,2 @@
1This is the implicit global project, which is used only when 'stack' is run
2outside of a real project.
diff --git a/roles/programming/haskell/files/stack/global-project/stack.yaml b/roles/programming/haskell/files/stack/global-project/stack.yaml
new file mode 100644
index 0000000..e034f58
--- /dev/null
+++ b/roles/programming/haskell/files/stack/global-project/stack.yaml
@@ -0,0 +1,10 @@
1# This is the implicit global project's config file, which is only used when
2# 'stack' is run outside of a real project. Settings here do _not_ act as
3# defaults for all projects. To change stack's default settings, edit
4# '/home/ismael/.local/share/stack/config.yaml' instead.
5#
6# For more information about stack's configuration, see
7# http://docs.haskellstack.org/en/stable/yaml_configuration/
8#
9packages: []
10resolver: lts-11.15
diff --git a/roles/programming/haskell/tasks/main.yml b/roles/programming/haskell/tasks/main.yml
new file mode 100644
index 0000000..cd6654b
--- /dev/null
+++ b/roles/programming/haskell/tasks/main.yml
@@ -0,0 +1,13 @@
1---
2- name: GHC config file
3 copy:
4 src: ghci.conf
5 dest: $HOME/.ghc/
6- name: Stack config files
7 synchronize:
8 recursive: yes
9 archive: no
10 checksum: yes
11 src: stack/
12 dest: /$XDG_DATA_HOME/stack/
13
diff --git a/roles/programming/nodejs/files/npmrc b/roles/programming/nodejs/files/npmrc
new file mode 100644
index 0000000..5dc76c3
--- /dev/null
+++ b/roles/programming/nodejs/files/npmrc
@@ -0,0 +1,3 @@
1cache=${XDG_CACHE_HOME}/npm
2tmp=${XDG_RUNTIME_DIR}/npm
3init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js
diff --git a/roles/programming/nodejs/tasks/main.yml b/roles/programming/nodejs/tasks/main.yml
new file mode 100644
index 0000000..fcf7421
--- /dev/null
+++ b/roles/programming/nodejs/tasks/main.yml
@@ -0,0 +1,5 @@
1---
2- name: config file
3 copy:
4 src: npmrc
5 dest: $XDG_CONFIG_HOME/npm/
diff --git a/roles/programming/python/files/startup_script.py b/roles/programming/python/files/startup_script.py
new file mode 100644
index 0000000..403afe5
--- /dev/null
+++ b/roles/programming/python/files/startup_script.py
@@ -0,0 +1,52 @@
1import sys as sys_
2
3# Adapted from /usr/lib/python3.7/site.py # enablerlcompleter
4def register_readline():
5 import os
6 import atexit
7 try:
8 import readline
9 import rlcompleter
10 except ImportError:
11 return
12
13 # Reading the initialization (config) file may not be enough to set a
14 # completion key, so we set one first and then read the file.
15 readline_doc = getattr(readline, '__doc__', '')
16 if readline_doc is not None and 'libedit' in readline_doc:
17 readline.parse_and_bind('bind ^I rl_complete')
18 else:
19 readline.parse_and_bind('tab: complete')
20
21 try:
22 readline.read_init_file()
23 except OSError:
24 # An OSError here could have many causes, but the most likely one
25 # is that there's no .inputrc file (or .editrc file in the case of
26 # Mac OS X + libedit) in the expected location. In that case, we
27 # want to ignore the exception.
28 pass
29
30 if readline.get_current_history_length() == 0:
31 # If no history was loaded, default to .python_history.
32 # The guard is necessary to avoid doubling history size at
33 # each interpreter exit when readline was already configured
34 # through a PYTHONSTARTUP hook, see:
35 # http://bugs.python.org/issue5845#msg198636
36 environ = os.environ.get("XDG_STATE_HOME") or os.environ.get("XDG_DATA_HOME")
37 if environ is not None:
38 if not os.path.exists(os.path.join(environ, "python")):
39 os.mkdir(os.path.join(environ, "python"))
40 history = os.path.join(environ, "python", "history")
41 else:
42 history = os.path.join(os.path.expanduser('~'),
43 '.python_history')
44 try:
45 readline.read_history_file(history)
46 except OSError:
47 pass
48 atexit.register(readline.write_history_file, history)
49
50sys_.__interactivehook__ = register_readline
51
52del sys_
diff --git a/roles/programming/python/tasks/main.yml b/roles/programming/python/tasks/main.yml
new file mode 100644
index 0000000..db67584
--- /dev/null
+++ b/roles/programming/python/tasks/main.yml
@@ -0,0 +1,5 @@
1---
2- name: Config file
3 copy:
4 src: startup_script.py
5 dest: $XDG_CONFIG_HOME/python/
diff --git a/roles/shell/bash/files/bashrc b/roles/shell/bash/files/bashrc
new file mode 100644
index 0000000..28d0af9
--- /dev/null
+++ b/roles/shell/bash/files/bashrc
@@ -0,0 +1 @@
coucou
diff --git a/roles/shell/bash/tasks/main.yml b/roles/shell/bash/tasks/main.yml
new file mode 100644
index 0000000..d74421a
--- /dev/null
+++ b/roles/shell/bash/tasks/main.yml
@@ -0,0 +1,17 @@
1---
2- name: Add bashrc config
3 template:
4 src: bashrc.j2
5 dest: $HOME/.bashrc
6- name: Add bash_profile config
7 template:
8 src: bash_profile.j2
9 dest: $HOME/.bash_profile
10- name: Create bash state dir
11 file:
12 path: $XDG_STATE_HOME/bash
13 state: directory
14- name: Create less state dir
15 file:
16 path: $XDG_STATE_HOME/less
17 state: directory
diff --git a/roles/shell/bash/templates/bash_profile.j2 b/roles/shell/bash/templates/bash_profile.j2
new file mode 100644
index 0000000..06210fa
--- /dev/null
+++ b/roles/shell/bash/templates/bash_profile.j2
@@ -0,0 +1,9 @@
1# Some variables are loaded via pam (see .config/pam_environment)
2
3[[ -f ~/.bashrc ]] && . ~/.bashrc
4{% if "graphical_vt" in features.get(profile, []) %}
5
6if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
7 exec startx $XDG_CONFIG_HOME/xinitrc > $XDG_STATE_HOME/xsession_errors 2>&1
8fi
9{% endif %}
diff --git a/roles/shell/bash/templates/bashrc.j2 b/roles/shell/bash/templates/bashrc.j2
new file mode 100644
index 0000000..2285d2b
--- /dev/null
+++ b/roles/shell/bash/templates/bashrc.j2
@@ -0,0 +1,95 @@
1#
2# ~/.bashrc
3#
4
5if [ -n "$HOME/.local/bin" ]; then
6 PATH="$HOME/.local/bin:$PATH"
7fi
8
9# If not running interactively, don't do anything
10[[ $- != *i* ]] && return
11
12export GPG_TTY=$(tty)
13export HISTFILE="$XDG_STATE_HOME/bash/history"
14
15alias vi=vim
16alias ls='ls --color=auto -F -T 0'
17alias tmux='tmux -f $XDG_CONFIG_HOME/tmux/tmux.conf'
18
19alias grep='grep --color=auto'
20alias fgrep='fgrep --color=auto'
21alias egrep='egrep --color=auto'
22
23alias sudo="sudo "
24alias mv="mv -i"
25alias cp="cp -i"
26alias rm="rm -i"
27alias psp="pstree -aUp $USER"
28alias dotdrop="dotdrop --cfg $XDG_CONFIG_HOME/dotdrop/config.yaml"
29
30{% if role.get(profile) == "fretlink" %}
31##### Some Fretlink aliases
32alias getDump='s3cmd -c <(pass show Travail/Fretlink/S3) get '
33
34function vpn() {
35 TMPFILE=$(mktemp /tmp/openvpn.XXXXXX)
36 pass show Travail/Fretlink/OpenVPN >> $TMPFILE
37 sudo openvpn $TMPFILE
38 rm -f $TMPFILE
39}
40
41function dev_prompt() {
42 if [ -n "$FRETLINK_ENV" ]; then
43 echo "{$FRETLINK_ENV} "
44 fi
45}
46##### /Fretlink
47{% endif %}
48
49# Non-printable chars need to be wrapped by \[ ... \] otherwise bash
50# will wrongly count the size of the prompt and glitch when going
51# through history
52function git_prompt_color() {
53 git diff --quiet 2>/dev/null && git diff --cached --quiet 2>/dev/null
54 gitstatus=$?
55 if [ "$gitstatus" -gt 0 ]; then
56 av=$'\033[01;31m'
57 else
58 av=$'\033[01;34m'
59 fi
60 echo "$av"
61}
62
63function git_prompt() {
64 gitinfo=$(git branch 2>/dev/null | grep "^*" | cut -c3-);
65 git diff --quiet 2>/dev/null && git diff --cached --quiet 2>/dev/null
66 gitstatus=$?
67 gitlsfiles=$(git ls-files . 2>/dev/null | wc -l);
68 if [ "$gitinfo" -a "$gitlsfiles" -gt 0 ]; then
69 echo -e "($gitinfo) "
70 fi
71}
72
73function error_code() {
74 ret=$?
75 if [[ $ret != 0 ]]; then
76 echo "$ret "
77 fi
78}
79
80function running_jobs() {
81 ret=$(jobs | wc -l)
82 if [[ $ret != 0 ]]; then
83 echo "[$ret] "
84 fi
85}
86
87{% if role.get(profile) == "fretlink" %}
88PS1='\[\033[01;31m\]$(error_code)\[\033[00;00m\]$(running_jobs)\[\033[01;32m\]$(dev_prompt)\[$(git_prompt_color)\]$(git_prompt)\[\033[00;32m\]\u@\h\[\033[94m\] \w \$\[\033[00m\] '
89{% else %}
90PS1='\[\033[01;31m\]$(error_code)\[\033[00;00m\]$(running_jobs)\[$(git_prompt_color)\]$(git_prompt)\[\033[00;32m\]\u@\h\[\033[94m\] \w \$\[\033[00m\] '
91{% endif %}
92
93{% if "nodejs" in features.get(profile, []) %}
94source /usr/share/nvm/init-nvm.sh
95{% endif %}
diff --git a/roles/tools/files/mplayer b/roles/tools/files/mplayer
new file mode 100644
index 0000000..21cf775
--- /dev/null
+++ b/roles/tools/files/mplayer
@@ -0,0 +1,3 @@
1# Write your default config options here!
2
3
diff --git a/roles/tools/files/psqlrc b/roles/tools/files/psqlrc
new file mode 100644
index 0000000..c51f46e
--- /dev/null
+++ b/roles/tools/files/psqlrc
@@ -0,0 +1,5 @@
1\pset null ¤
2\set COMP_KEYWORD_CASE upper
3\x auto
4\set HISTSIZ -1
5\set ECHO_HIDDEN on
diff --git a/roles/tools/files/remind/commands/work b/roles/tools/files/remind/commands/work
new file mode 100644
index 0000000..edc937d
--- /dev/null
+++ b/roles/tools/files/remind/commands/work
@@ -0,0 +1 @@
REM Mon Tue Wed Thu Fri AT 09:00 MSG Ne pas oublier de démarrer le time tracking !
diff --git a/roles/tools/files/remind/remind@.service b/roles/tools/files/remind/remind@.service
new file mode 100644
index 0000000..3fc221d
--- /dev/null
+++ b/roles/tools/files/remind/remind@.service
@@ -0,0 +1,10 @@
1[Unit]
2Description=Remind daemon
3After=network.target
4
5[Service]
6Type=simple
7ExecStart=/usr/bin/remind -z60 -k'/usr/bin/dunstify -t 0 -a Tracking %%s' %h/.config/remind/%i
8
9[Install]
10WantedBy=default.target
diff --git a/roles/tools/files/vimrc b/roles/tools/files/vimrc
new file mode 100644
index 0000000..6de0f1c
--- /dev/null
+++ b/roles/tools/files/vimrc
@@ -0,0 +1,309 @@
1" ---------- Init, config, backup ---------------
2" Respect XDG directories (more below for cache)
3set viminfo+='1000,n$XDG_STATE_HOME/vim/viminfo
4set runtimepath=$XDG_DATA_HOME/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$XDG_DATA_HOME/vim/after
5
6" Run :PlugInstall after adding plugins there
7call plug#begin(expand($XDG_DATA_HOME) . '/vim/plugged')
8
9Plug 'vim-scripts/cecutil'
10Plug 'vim-scripts/LargeFile'
11Plug 'vim-scripts/Align'
12Plug 'vim-scripts/AutoAlign'
13Plug 'jamessan/vim-gnupg'
14Plug 'vim-scripts/taglist.vim'
15Plug 'chrisbra/csv.vim'
16Plug 'mustache/vim-mustache-handlebars'
17Plug 'cakebaker/scss-syntax.vim'
18Plug 'tpope/vim-bundler'
19Plug 'tpope/vim-rails'
20Plug 'ledger/vim-ledger'
21Plug 'beyondwords/vim-twig'
22Plug 'scrooloose/nerdtree'
23Plug 'kien/ctrlp.vim'
24Plug 'rodjek/vim-puppet'
25Plug 'szw/vim-tags'
26Plug 'neomutt/neomutt.vim'
27Plug 'kchmck/vim-coffee-script'
28Plug 'digitaltoad/vim-pug'
29Plug 'vim-scripts/slapd.vim'
30Plug 'vimwiki/vimwiki', { 'branch': 'dev' }
31Plug 'vim-vdebug/vdebug'
32Plug 'tpope/vim-fugitive'
33Plug 'tomlion/vim-solidity'
34Plug 'chrisbra/SudoEdit.vim'
35Plug 'Chiel92/vim-autoformat'
36Plug 'pearofducks/ansible-vim'
37Plug 'juliosueiras/vim-terraform-completion'
38
39call plug#end()
40
41" Charge automatiquement les ftplugins/*.vim selon le type de fichier
42filetype plugin on
43" Charge automatiquement les indent/*.vim selon le type de fichier
44filetype indent on
45
46" Pour que vim garde une copie de sauvegarde des fichiers modifiés.
47set backup
48""" Copied from /usr/share/vim/vimfiles/archlinux.vim
49" Move temporary files to a secure location to protect against CVE-2017-1000382
50if exists('$XDG_CACHE_HOME')
51 let &g:directory=$XDG_CACHE_HOME
52else
53 let &g:directory=$HOME . '/.cache'
54endif
55let g:ctrlp_cache_dir=&g:directory . '/vim/ctrlp//'
56let &g:undodir=&g:directory . '/vim/undo//'
57let &g:backupdir=&g:directory . '/vim/backup//'
58let g:vim_tags_cache_dir = &g:directory . '/vim/ctags//'
59let &g:directory.='/vim/swap//'
60" Create directories if they doesn't exist
61if ! isdirectory($XDG_STATE_HOME . '/vim')
62 silent! call mkdir($XDG_STATE_HOME . '/vim')
63endif
64if ! isdirectory(expand(&g:directory))
65 silent! call mkdir(expand(&g:directory), 'p', 0700)
66endif
67if ! isdirectory(expand(&g:backupdir))
68 silent! call mkdir(expand(&g:backupdir), 'p', 0700)
69endif
70if ! isdirectory(expand(&g:undodir))
71 silent! call mkdir(expand(&g:undodir), 'p', 0700)
72endif
73if ! isdirectory(expand(g:vim_tags_cache_dir))
74 silent! call mkdir(expand(g:vim_tags_cache_dir), 'p', 0700)
75endif
76""" /Copied from /usr/share/vim/vimfiles/archlinux.vim
77
78
79" Ne pas sauver un backup spécial pour les fichiers réseau
80let g:netrw_dirhistmax = 0
81
82" ---------- Mappings ---------------------------
83" map : Normal, Visual, Select, Operator-pending
84" map! : Insert and Command-line
85
86" Le BackSpace fonctionne aussi en mode normal.
87map <BS> X
88
89" Les Control-flèches
90map <ESC>[1;5A <C-Up>
91map! <ESC>[1;5A <C-Up>
92map <ESC>[1;5B <C-Down>
93map! <ESC>[1;5B <C-Down>
94map <ESC>[1;5C <C-Right>
95map! <ESC>[1;5C <C-Right>
96map <ESC>[1;5D <C-Left>
97map! <ESC>[1;5D <C-Left>
98
99map <S-Up> {
100map! <S-Up> <C-O>{
101map <S-Down> }
102map! <S-Down> <C-O>}
103
104
105" ---------- Comportement à la frappe -----------
106" <BS> passe à travers l'indentation, les fins de ligne et le début du "insert"
107set backspace=indent,eol,start
108
109" '<BS>e écrit un é (sinon : ctrl+K ' e)
110" set digraph
111
112" La taille d'une ligne, pour la frappe au kilomètre.
113" Permet 4 niveaux de 'citation' pour les mails/forum
114set textwidth=72
115" set textwidth=80
116
117" Les touches qui font passer à la ligne suivante/précédente. backspace (b),
118" espace (s), flèches (<,>,[,]).
119set whichwrap=b,s,<,>,[,]
120
121" Ne pas mettre deux espaces après la ponctuation quand on "join" deux lignes
122set nojoinspaces
123
124" Quand on tape un ), vim montre furtivement le ( correspondant.
125set showmatch
126
127" Les options de formatage.
128set formatoptions=tcq2
129
130
131" ---------- Recherche --------------------------
132" Pour voir tous les matchs d'une recherche
133set hlsearch
134
135" Pour que les matchs soient affichés pendant que vous tapez le mot recherché
136set incsearch
137
138" On ignore la casse des caractères dans les recherches de chaînes en
139" minuscules; par contre, dès qu'une lettre est en majuscule, on tient compte
140" de la casse de toute la chaîne.
141" Pendant la recherche : \c pour ignorer quand même, \C pour case-sensitive
142set ignorecase
143set smartcase
144
145
146" ---------- Fichiers ---------------------------
147" Pour une complétion automatique des noms de fichiers
148set wildmenu
149
150" La façon dont la complétion présente les choix.
151set wildmode=longest,list:longest,full
152
153" La complétion automatique ignore les fichiers suivants.
154set suffixes=.bak.o.aux.dvi.log.toc.tof
155
156
157" ---------- Buffers ----------------------------
158" On veut pouvoir rendre invisible un buffer
159set hidden
160
161" Pour éviter de trop ralentir en faisant défiler le texte pendant l'exécution
162" des macros.
163set lazyredraw
164
165
166" ----------- Interactions ----------------------
167" On affiche en permanence les numéros de ligne et de colonne.
168set ruler
169
170" Pour ne pas se faire bipper tout le temps.
171set noerrorbells
172set visualbell t_vb=
173
174" Pour avoir des messages de vim qui tiennent sur une seule ligne, ce
175" qui évite d'avoir à presser «Enter» pour voir les messages suivants.
176set shortmess=filnrxoOt
177
178" Quand on tape une commande complexe en mode normal, vim affiche ce que l'on
179" a déjà tapé
180set showcmd
181
182
183" ------------ Indentations ---------------------
184" Conserve l'indentation
185set autoindent
186
187" Remplace les <Tab> par des espaces
188set expandtab
189
190" Nombre d'espaces
191set shiftwidth=2
192set softtabstop=2
193
194" Pour que l'indentation ajuste sur un multiple de 'shiftwidth'.
195set shiftround
196
197" ------------ Folding --------------------------
198set foldmethod=indent
199set foldnestmax=10
200set nofoldenable
201set foldlevel=0
202set foldlevelstart=0
203
204
205" ------------ Auto-commandes -------------------
206" On commence par enlever toutes les autocommandes avant de les définir
207" (pour le cas où ce fichier serait lu plusieurs fois.)
208autocmd!
209
210autocmd BufRead,BufNewFile mutt*[0-9] set nobackup nowritebackup
211autocmd BufRead,BufNewFile .article.* set filetype=mail nobackup
212
213" ledger
214" Don't load ftplugin for ledger
215" autocmd BufReadPre,BufNewFile *ledger* let b:did_ftplugin = 1
216autocmd FileType ledger set textwidth=0
217let g:ledger_main = '~/.ledger/perso'
218
219autocmd FileType puppet set textwidth=0
220
221" ----------- Coloration syntaxique -------------
222syntax enable
223
224highlight Comment term=none ctermfg=darkCyan cterm=none
225highlight Constant term=underline ctermfg=Blue cterm=none
226highlight Error term=reverse ctermfg=White ctermbg=Red cterm=none
227highlight Identifier term=none ctermfg=Green cterm=none
228highlight IncSearch term=reverse ctermfg=Blue ctermbg=White
229highlight Operator term=none ctermfg=darkGray cterm=bold
230highlight PreProc term=underline ctermfg=Magenta cterm=none
231highlight Search term=reverse cterm=reverse
232highlight Special term=bold ctermfg=Blue cterm=bold
233highlight Statement term=bold ctermfg=Red cterm=none
234highlight Todo term=standout ctermfg=White ctermbg=Green cterm=bold
235highlight Type term=bold ctermfg=Brown cterm=none
236
237highlight link Delimiter Operator
238highlight link SpecialChar Special
239
240" lignes "foldées"
241highlight Folded term=standout ctermfg=White ctermbg=Blue cterm=bold
242
243" Pour les diffs (commande vimdiff).
244highlight DiffAdd term=bold ctermfg=Green ctermbg=none cterm=bold
245highlight DiffChange term=bold ctermfg=Cyan ctermbg=none
246highlight DiffDelete term=bold ctermfg=Red ctermbg=none cterm=bold
247highlight DiffText term=standout ctermfg=White ctermbg=Cyan cterm=bold
248
249" ------------- Fonctions, commandes, macros ----
250" Identer les fichiers (json, xml)
251function PRangeFunc(command_line, syntax) range
252 if a:firstline==1 && a:lastline==line('$')
253 execute 'set filetype=' . a:syntax
254 execute 'syntax on'
255 endif
256 execute a:firstline . "," . a:lastline . '!' . a:command_line
257endfunction
258
259command -range=% Pjson normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('python -m json.tool', 'json')<CR>
260command -range=% Pxml normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('xmllint --format --encode UTF8 -', 'xml')<CR>
261command -range=% Pdeflate normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('python -c "import zlib; import sys; sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))"', '')<CR>
262command -range=% Pinflate normal <Esc>`>a<CR><Esc>mb`<i<CR><Esc>ma:'a,'b-1 call PRangeFunc('python -c "import zlib; import sys; sys.stdout.buffer.write(zlib.compress(sys.stdin.buffer.read()))"', '')<CR>
263command! -range=% Pastebin execute <line1> . "," . <line2> . "w !curl -F 'c=@-' https://ptpb.pw"
264
265noremap <F3> :Autoformat<CR>
266vmap <F8> :Pxml<CR>
267vmap <F9> :Pjson<CR>
268
269" gpg-encryptes files
270let g:GPGPreferArmor=1
271let g:GPGDefaultRecipients=["ismael.bouya@normalesup.org"]
272let g:GPGUsesPipes=1
273
274command Decrypt 1,$!gpg -d -q
275command Encrypt 1,$!gpg -e -q --armor -r ismael.bouya@normalesup.org
276command -range=% Runhash s/:\([_a-zA-Z0-9]\+\)\( \+\)=> \( *\)/\1:\2\3/
277
278function! s:DiffWithSaved()
279 let filetype=&ft
280 diffthis
281 vnew | r # | normal! 1Gdd
282 diffthis
283 exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
284endfunction
285command! DiffSaved call s:DiffWithSaved()
286
287" Load NERDTree on startup if no file were specified
288" autocmd StdinReadPre * let s:std_in=1
289" autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
290" Load NERDTree on startup
291"autocmd VimEnter * NERDTree | wincmd p
292let g:vim_tags_auto_generate = 1
293let g:vim_tags_project_tags_command = "ctags -R {OPTIONS} {DIRECTORY} 2>/dev/null"
294map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
295map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>
296
297let g:ctrlp_extensions = ['tag', 'buffertag', 'dir', 'undo', 'line']
298set modeline
299
300set grepprg=grep\ -rn\ $*\ /dev/null
301let c_comment_strings=1
302if !exists(":DiffOrig")
303 command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
304 \ | wincmd p | diffthis
305endif
306
307set list
308set listchars=tab:>-,trail:-
309
diff --git a/roles/tools/handlers/main.yml b/roles/tools/handlers/main.yml
new file mode 100644
index 0000000..a282512
--- /dev/null
+++ b/roles/tools/handlers/main.yml
@@ -0,0 +1,5 @@
1---
2- name: reload systemd
3 systemd:
4 daemon_reload: true
5 scope: user
diff --git a/roles/tools/tasks/main.yml b/roles/tools/tasks/main.yml
new file mode 100644
index 0000000..aa61aab
--- /dev/null
+++ b/roles/tools/tasks/main.yml
@@ -0,0 +1,48 @@
1---
2- name: Import other tools
3 include_role:
4 name: "{{ item }}"
5 loop:
6 - git
7 - gnupg
8- name: mplayer config file
9 copy:
10 src: mplayer
11 dest: $XDG_CONFIG_HOME/mplayer/config
12- name: psql config file
13 copy:
14 src: psqlrc
15 dest: $XDG_CONFIG_HOME/psql/psqlrc
16- name: psql history directory
17 file:
18 path: $XDG_STATE_HOME/psql
19 state: directory
20- name: vim config file
21 register: vim_result
22 copy:
23 src: vimrc
24 dest: $XDG_CONFIG_HOME/vim/vimrc
25- name: run PlugInstall
26 shell: vim -c PlugInstall -c qa
27 when: vim_result.changed
28- name: tmux config file
29 template:
30 src: tmux.conf.j2
31 dest: $XDG_CONFIG_HOME/tmux/tmux.conf
32- name: youtube viewer config file
33 template:
34 src: youtube-viewer.conf.j2
35 dest: $XDG_CONFIG_HOME/youtube-viewer/youtube-viewer.conf
36- name: remind config file
37 synchronize:
38 recursive: yes
39 archive: no
40 checksum: yes
41 src: remind/commands/
42 dest: /$XDG_CONFIG_HOME/remind/
43- name: remind service file
44 copy:
45 src: remind/remind@.service
46 dest: $XDG_CONFIG_HOME/systemd/user/
47 notify:
48 - reload systemd
diff --git a/roles/tools/templates/tmux.conf.j2 b/roles/tools/templates/tmux.conf.j2
new file mode 100644
index 0000000..8aad615
--- /dev/null
+++ b/roles/tools/templates/tmux.conf.j2
@@ -0,0 +1,88 @@
1# Pour les nostalgiques de screen
2# comme les raccourcis ne sont pas les mêmes, j'évite
3set-option -g prefix C-a
4unbind-key C-b
5bind-key a send-prefix
6
7bind-key C-d detach
8unbind-key C-z
9bind-key C-z resize-pane -Z
10bind-key h switch-client -t remote
11
12unbind-key )
13unbind-key (
14bind-key -r ( switch-client -p
15bind-key -r ) switch-client -n
16
17bind-key -n M-Left previous-window
18bind-key -n M-Right next-window
19bind-key -n M-PageDown switch-client -n
20bind-key -n M-PageUp switch-client -p
21
22bind-key M set-window-option monitor-activity
23bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer; rm -f /tmp/tmux-buffer"'
24
25bind-key C-c run-shell -b "tmux save-buffer - | xclip -i -sel clipboard"
26bind-key C-v run-shell "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"
27
28bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-selection-and-cancel \; run-shell -b "tmux save-buffer - | xclip -i -selection primary"
29bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-selection-and-cancel \; run-shell -b "tmux save-buffer - | xclip -i -selection primary"
30bind-key -T root MouseUp2Pane run-shell "tmux set-buffer \"$(xclip -o -selection primary)\"; tmux paste-buffer"
31
32# même hack que sur screen lorsqu'on veut profiter du scroll du terminal
33# (xterm ...)
34set-option -g terminal-overrides 'xterm*:smcup@:rmcup@:Tc'
35
36# Renumeroter les fenetres quand on en ferme une
37set-option -g renumber-windows on
38
39#Pour les ctrl+arrow
40set-option -g xterm-keys on
41
42# c'est un minimum (defaut 2000)
43set-option -g history-limit 10000
44
45# lorsque j'ai encore un tmux ailleurs seule
46# sa fenetre active réduit la taille de ma fenetre locale
47set-window-option -g aggressive-resize on
48
49# Pour etre alerté sur une alerte dans une autre fenêtre
50set-option -g visual-activity off
51set-option -g visual-bell off
52
53# numéroter a partir de 1, pratique pour l'accès direct
54set-option -g base-index 1
55
56# repercuter le contenu de la fenetre dans la barre de titre
57# reference des string : man tmux (status-left)
58set-option -g set-titles on
59set-option -g set-titles-string '#H #W #T' # host window command
60
61set-option -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY XDG_VTNR"
62
63set-window-option -g window-status-bell-style fg=yellow,bold,underscore
64
65set -g default-terminal screen-256color
66
67set -g mouse on
68
69{% if role.get(profile) == "fretlink" %}
70new-session -A -c "$HOME/workdir/admin-root" -s admin-root
71send-keys "../start" C-m
72rename-window "running"
73new-window
74new-session -A -c "$HOME/workdir/carrier-directory" -s carrier-directory
75send-keys "../start" C-m
76rename-window "running"
77new-window
78new-session -A -c "$HOME/workdir/notifier" -s notifier
79send-keys "../start" C-m
80rename-window "running"
81new-window
82new-session -A -c "$HOME/workdir/geodata" -s geodata
83new-session -A -c "$HOME/workdir/app" -s app
84send-keys "../start" C-m
85rename-window "running"
86new-window
87select-window -t 1
88{% endif %}
diff --git a/roles/tools/templates/youtube-viewer.conf.j2 b/roles/tools/templates/youtube-viewer.conf.j2
new file mode 100644
index 0000000..3107584
--- /dev/null
+++ b/roles/tools/templates/youtube-viewer.conf.j2
@@ -0,0 +1,89 @@
1#!/usr/bin/perl
2
3# Youtube Viewer 3.3.4 - configuration file
4
5our $CONFIG = {
6 auto_captions => 0,
7 autohide_watched => 0,
8 cache_dir => "{{ lookup('env', 'XDG_CACHE_HOME') }}/youtube-viewer",
9 captions_dir => "/tmp",
10 clobber => 0,
11 colors => 1,
12 combine_multiple_videos => 0,
13 confirm => 0,
14 convert_cmd => "ffmpeg -i *IN* *OUT*",
15 convert_to => undef,
16 copy_caption => 0,
17 dash_mp4_audio => 1,
18 dash_support => 1,
19 debug => 0,
20 download_and_play => 0,
21 download_in_parallel => 0,
22 download_with_wget => 0,
23 downloads_dir => ".",
24 env_proxy => 1,
25 fat32safe => 0,
26 fullscreen => 0,
27 get_captions => 1,
28 get_term_width => 1,
29 highlight_color => "bold",
30 highlight_watched => 0,
31 history => 0,
32 history_file => "{{ lookup('env', 'XDG_STATE_HOME') }}/youtube-viewer/history.txt",
33 history_limit => 10000,
34 hl => "en_US",
35 http_proxy => undef,
36 interactive => 1,
37 keep_original_video => 0,
38 maxResults => 20,
39 order => undef,
40 page => 1,
41 publishedAfter => undef,
42 publishedBefore => undef,
43 regionCode => undef,
44 remove_played_file => 0,
45 resolution => "original",
46 results_fixed_width => 0,
47 results_with_colors => 0,
48 results_with_details => 0,
49 safeSearch => undef,
50 skip_if_exists => 0,
51 srt_languages => ["en", "fr"],
52 subscriptions_order => "relevance",
53 thousand_separator => ",",
54 video_filename_format => "*FTITLE*.*FORMAT*",
55 video_player_selected => "mplayer",
56 video_players => {
57 mplayer => {
58 arg => "-prefer-ipv4 -really-quiet -title *TITLE*",
59 audio => "-audiofile *AUDIO*",
60 cmd => "/usr/bin/mplayer",
61 fs => "-fs",
62 novideo => "-novideo",
63 srt => "-sub *SUB*",
64 },
65 mpv => {
66 arg => "--really-quiet --title *TITLE* --no-ytdl",
67 audio => "--audio-file *AUDIO*",
68 cmd => "mpv",
69 fs => "--fullscreen",
70 novideo => "--no-video",
71 srt => "--sub-file *SUB*",
72 },
73 vlc => {
74 arg => "--quiet --play-and-exit --no-video-title-show --input-title-format *TITLE*",
75 audio => "--input-slave *AUDIO*",
76 cmd => "vlc",
77 fs => "--fullscreen",
78 novideo => "--intf dummy --novideo",
79 srt => "--sub-file *SUB*",
80 },
81 },
82 videoCaption => undef,
83 videoDefinition => undef,
84 videoDimension => undef,
85 videoDuration => undef,
86 videoLicense => undef,
87 videoSyndicated => undef,
88 youtube_video_url => "https://www.youtube.com/watch?v=%s",
89}