summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2022-10-31 21:53:15 -0400
committerSacha Chua <sacha@sachachua.com>2022-10-31 21:53:15 -0400
commit4696aa1fed214fe1084d7c3deecaaa289bc0a1fd (patch)
treefa0d7d2d121cfe2787b1f1a94b2328aeff73c724
parentb8c97d14ed81871eef51ba7253982c45258ec538 (diff)
downloademacsconf-ansible-4696aa1fed214fe1084d7c3deecaaa289bc0a1fd.tar.xz
emacsconf-ansible-4696aa1fed214fe1084d7c3deecaaa289bc0a1fd.zip
Update OBS, renamepublish and edit
-rw-r--r--README.org15
-rw-r--r--common-playbook.yml12
-rw-r--r--group_vars/all.yml5
-rw-r--r--inventory.yml12
-rw-r--r--roles/caption/tasks/main.yml2
-rwxr-xr-xroles/caption/templates/process-captions.py2
-rw-r--r--roles/edit/defaults/main.yml (renamed from roles/wiki-edit/defaults/main.yml)0
-rw-r--r--roles/edit/tasks/main.yaml (renamed from roles/wiki-edit/tasks/main.yaml)0
-rw-r--r--roles/edit/templates/emacsconf-edit.el (renamed from roles/wiki-edit/templates/emacsconf-edit.el)0
-rw-r--r--roles/obs/tasks/firefox.yml36
-rw-r--r--roles/obs/tasks/main.yml76
-rw-r--r--roles/obs/tasks/mpv.yml21
-rw-r--r--roles/obs/tasks/obs-setup.yml40
-rw-r--r--roles/obs/tasks/pulse.yml6
-rw-r--r--roles/obs/tasks/tigervnc.yml39
-rw-r--r--roles/obs/tasks/track.yml83
-rw-r--r--roles/obs/tasks/user.yml14
-rw-r--r--roles/obs/templates/bashrc116
-rw-r--r--roles/obs/templates/global.ini36
-rw-r--r--roles/obs/templates/i3-config26
-rwxr-xr-xroles/obs/templates/mpv-track2
-rw-r--r--roles/obs/templates/mpv.conf27
-rwxr-xr-xroles/obs/templates/obs-track2
-rw-r--r--roles/obs/templates/scenes.json644
-rw-r--r--roles/obs/templates/vnc-track2
-rwxr-xr-xroles/obs/templates/xstartup-track6
-rw-r--r--roles/publish/defaults/main.yml (renamed from roles/wiki-publish/defaults/main.yml)0
-rw-r--r--roles/publish/tasks/emacs.yml (renamed from roles/wiki-publish/tasks/emacs.yml)0
-rw-r--r--roles/publish/tasks/main.yml (renamed from roles/wiki-publish/tasks/main.yml)0
-rw-r--r--roles/publish/templates/emacsconf-config.el (renamed from roles/wiki-publish/templates/emacsconf-config.el)0
-rw-r--r--roles/stream/defaults/main.yml1
-rw-r--r--roles/stream/templates/icecast.xml2
32 files changed, 1018 insertions, 209 deletions
diff --git a/README.org b/README.org
index 5e1a87c..31a24af 100644
--- a/README.org
+++ b/README.org
@@ -10,7 +10,8 @@ Docker: needs docker-vars.yml, see docker-vars.yml.sample
1. Install ansible on your local machine and check out this repo.
2. Copy the ansible_vars block from conf.org to prod-vars.yml in this repo (alongside inventory.yml), or set emacsconf-ansible-directory in Emacs and then use emacsconf-ansible-tangle-vars to tangle the file.
-3. Find the ansible-playbook command you want to run and try it out.
+3. scp orga@res.emacsconf.org:~/authorized_keys . (if you're setting up any user accounts)
+4. Find the ansible-playbook command you want to run and try it out.
* Wiki
** Ikiwiki
@@ -186,17 +187,11 @@ ffmpeg -y -i handwritten/reencode.webm -t 60 -vcodec copy -acodec copy test.webm
nodemon -w . -e yml -x 'ansible-playbook -i inventory.yml prod-playbook.yml --tags vnc; true'
* OBS
-sudo su - orga -c vncserver
-ssh -L 15902:127.0.0.1:5902 res
-
Resizing VNC after connection
xrandr -s 1280x720
-pacmd load-module module-null-sink sink_name=DevelopmentSink sink_properties=device.description="DevelopmentSink"
-
-pavucontrol
-vncserver -kill :1
-vncserver -kill :2
-
Firefox profiles like to be created in an X environment
firefox -no-remote -CreateProfile "{{ emacsconf_id }}-{{ item.item.id }}
+
+Update scenes from the dev copy:
+ssh emacsconf-dev@res.emacsconf.org "cat ~/.config/obs-studio/basic/scenes/dev.json" | jq 'walk(if type == "string" then gsub("emacsconf"; "{{ emacsconf_id }}") | gsub("dev"; "{{ item.id }}") else . end)' > scenes.json
diff --git a/common-playbook.yml b/common-playbook.yml
index 2adfdff..5c6cf83 100644
--- a/common-playbook.yml
+++ b/common-playbook.yml
@@ -3,16 +3,16 @@
tags: wiki
roles:
- wiki
-- name: Set up wiki for publishing
+- name: Set up publishing
hosts: res
tags: wiki-publish
roles:
- - wiki-publish
-- name: Set up wiki for interactive editing
+ - publish
+- name: Set up interactive editing
hosts: res
- tags: wiki-edit
+ tags: edit
roles:
- - wiki-edit
+ - edit
- name: Set up pad
hosts: pad
tags: pad
@@ -53,6 +53,6 @@
- media
- name: Set up OBS
hosts: obs
- tags: obs
+ tags: obs, wip
roles:
- obs
diff --git a/group_vars/all.yml b/group_vars/all.yml
index 7ab7c6b..360c7af 100644
--- a/group_vars/all.yml
+++ b/group_vars/all.yml
@@ -12,10 +12,15 @@ emacsconf_tracks:
watch: https://emacsconf.org/{{ emacsconf_year }}/watch/gen/
watch_lowres: https://live.emacsconf.org/{{ emacsconf_year }}/watch/gen-480p/
vnc_id: 5
+ vnc_port: 5905
+ obs_websocket_port: 6005
- name: Development
id: dev
watch: https://emacsconf.org/{{ emacsconf_year }}/watch/dev/
watch_lowres: https://live.emacsconf.org/{{ emacsconf_year }}/watch/dev-480p/
vnc_id: 6
+ vnc_port: 5906
+ obs_websocket_port: 6006
icecast_emacsconf_user: emacsconf
emacsconf_home: /home/{{ emacsconf_user }}
+emacsconf_font: "Sans Serif"
diff --git a/inventory.yml b/inventory.yml
index f3603b0..adccf66 100644
--- a/inventory.yml
+++ b/inventory.yml
@@ -6,6 +6,12 @@ prod:
ansible_become: true
emacsconf_group: org
cpus: 12
+ publish:
+ ansible_host: res.emacsconf.org
+ ansible_python_interpreter: /usr/bin/python3
+ ansible_become: true
+ emacsconf_group: org
+ cpus: 12
obs:
ansible_host: res.emacsconf.org
ansible_python_interpreter: /usr/bin/python3
@@ -24,12 +30,6 @@ prod:
ansible_ssh_user: orga
ansible_python_interpreter: /usr/bin/python3
ansible_become: true
- publish:
- ansible_host: front0.emacsconf.org
- remote_user: orga
- ansible_ssh_user: orga
- ansible_python_interpreter: /usr/bin/python3
- ansible_become: true
pad:
ansible_host: front0.emacsconf.org
remote_user: orga
diff --git a/roles/caption/tasks/main.yml b/roles/caption/tasks/main.yml
index 3fa997c..c1511cf 100644
--- a/roles/caption/tasks/main.yml
+++ b/roles/caption/tasks/main.yml
@@ -33,7 +33,7 @@
path: "{{ emacsconf_caption_dir }}"
state: directory
- name: Copy the script for processing the files
- tags: process-captions, wip
+ tags: process-captions
template:
src: process-captions.py
dest: "{{ emacsconf_caption_dir }}/process-captions.py"
diff --git a/roles/caption/templates/process-captions.py b/roles/caption/templates/process-captions.py
index da99203..50c62d1 100755
--- a/roles/caption/templates/process-captions.py
+++ b/roles/caption/templates/process-captions.py
@@ -142,7 +142,7 @@ def generate_captions(work):
result = clean_up_timestamps(result)
with open(new_file, 'w') as vtt:
whisper.utils.write_vtt(result['segments'], file=vtt)
- with open(work['base'] + '.txt')
+ with open(work['base'] + '.txt'):
whisper.utils.write_txt(result['segments'], file=txt)
work['vtt'] = new_file
if 'srv2' in work: del work['srv2']
diff --git a/roles/wiki-edit/defaults/main.yml b/roles/edit/defaults/main.yml
index ea0fbdb..ea0fbdb 100644
--- a/roles/wiki-edit/defaults/main.yml
+++ b/roles/edit/defaults/main.yml
diff --git a/roles/wiki-edit/tasks/main.yaml b/roles/edit/tasks/main.yaml
index f77535f..f77535f 100644
--- a/roles/wiki-edit/tasks/main.yaml
+++ b/roles/edit/tasks/main.yaml
diff --git a/roles/wiki-edit/templates/emacsconf-edit.el b/roles/edit/templates/emacsconf-edit.el
index 2e360c7..2e360c7 100644
--- a/roles/wiki-edit/templates/emacsconf-edit.el
+++ b/roles/edit/templates/emacsconf-edit.el
diff --git a/roles/obs/tasks/firefox.yml b/roles/obs/tasks/firefox.yml
deleted file mode 100644
index d96e330..0000000
--- a/roles/obs/tasks/firefox.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-- name: Add Firefox
- apt:
- name: firefox-esr
- when: ansible_distribution == "Debian"
-- name: Add Firefox
- apt:
- name: firefox-esr
- when: ansible_distribution == "Ubuntu"
-- name: Check if Firefox profiles exist
- lineinfile:
- dest: "{{ emacsconf_home }}/.mozilla/firefox/profiles.ini"
- line: "Name={{ emacsconf_id }}-{{ item.id }}"
- check_mode: yes
- register: find_profiles
- failed_when: no
- loop: "{{ emacsconf_tracks }}"
-- name: Fail if there are missing profiles
- fail:
- msg: "Please use firefox -no-remote -CreateProfile {{ emacsconf_id }}-{{ item.item.id }} in an X session to create the profiles."
- when: item.changed
- loop: "{{ find_profiles.results }}"
-- name: Create scripts for tracks
- template:
- src: firefox-track
- dest: "{{ emacsconf_home }}/bin/{{ item.id }}/-firefox"
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
- mode: 0775
- loop: "{{ emacsconf_tracks }}"
-
- # - debug:
-# var: find_profiles.results
-# - name: Create profile if it doesn't exist
-# shell: xinit firefox -no-remote -CreateProfile "{{ emacsconf_id }}-{{ item.item.id }}"
-# when: item.changed
-# loop: "{{ find_profiles.results }}"
diff --git a/roles/obs/tasks/main.yml b/roles/obs/tasks/main.yml
index cb981b1..36e14c3 100644
--- a/roles/obs/tasks/main.yml
+++ b/roles/obs/tasks/main.yml
@@ -19,61 +19,39 @@
- dbus-x11
- obs-studio
- xserver-xorg-dev
+ - xdotool
update_cache: yes
-- name: Set up user
- include: user.yml
-- name: Set up track bins for addition to paths
- file:
- path: "{{ emacsconf_home }}/bin/{{ item.id }}"
- state: directory
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
- loop: "{{ emacsconf_tracks }}"
+- name: Add Firefox
+ apt:
+ name: firefox-esr
+ when: ansible_distribution == "Debian"
+- name: Add Firefox
+ apt:
+ name: firefox-esr
+ when: ansible_distribution == "Ubuntu"
- name: Copy X11 config
template:
src: xorg.conf
dest: /etc/X11/xorg.conf
-- name: Set up VNC
- include: tigervnc.yml
- tags: vnc, wip
- name: Set up MPV and MPVC
tags: mpv
include: mpv.yml
-- name: Set up OBS profiles and scenes
- tags: obs-profile
- include: obs-setup.yml
-- name: Add FFMPEG script for streaming
- template:
- src: stream-desktop-with-ffmpeg.sh
- dest: /home/{{ emacsconf_user }}/bin/{{ item.id }}/stream-desktop-with-ffmpeg
- mode: 0775
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
+- name: Set up track-specific things
+ include: track.yml
loop: "{{ emacsconf_tracks }}"
-- name: Copy logo
- copy:
- src: logo.png
- dest: "{{ emacsconf_home }}/logo.png"
-# - name: Start jack
-# shell: jackd -r -ddummy
-# async: 2592000
-- name: Set up pulse
- include: pulse.yml
- tags: pulse
-- name: Set up Firefox
- tags: firefox
- include: firefox.yml
-- name: Set up I3 directory
- tags: wip
- file:
- path: "{{ emacsconf_home }}/.config/i3"
- state: directory
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
-- name: Set up I3
- tags: wip
- template:
- src: i3-config
- dest: "{{ emacsconf_home }}/.config/i3/config"
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
+- debug:
+ var: emacsconf_home
+- name: Add packages
+ apt:
+ name:
+ - tigervnc-standalone-server
+ - tigervnc-common
+ tags: vnc
+- name: Allow SSH for the users
+ replace:
+ dest: /etc/ssh/sshd_config.d/emacsconf_ssh.conf
+ regexp: '(AllowUsers(?!.*\b{{ emacsconf_id }}-{{ item.id }}\b).*)$'
+ replace: \1 {{ emacsconf_id }}-{{ item.id }}
+ loop: "{{ emacsconf_tracks }}"
+
+
diff --git a/roles/obs/tasks/mpv.yml b/roles/obs/tasks/mpv.yml
index 581472a..9fbdc05 100644
--- a/roles/obs/tasks/mpv.yml
+++ b/roles/obs/tasks/mpv.yml
@@ -8,18 +8,6 @@
- name: Install mpv
apt:
name: mpv=0.34.1+fruit.2
-- name: Create MPV profile directory
- file:
- path: "{{ emacsconf_home }}/.config/mpv"
- state: directory
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
-- name: Add MPV profile
- template:
- src: mpv.conf
- dest: "{{ emacsconf_home }}/.config/mpv/mpv.conf"
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
- name: Download MPVC
git:
repo: https://github.com/lwilletts/mpvc.git
@@ -28,11 +16,4 @@
make:
chdir: /usr/src/mpvc
target: install
-- name: Create mpv scripts for tracks
- template:
- src: mpv-track
- dest: "{{ emacsconf_home }}/bin/{{ item.id }}/-mpv"
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
- mode: 0775
- loop: "{{ emacsconf_tracks }}"
+
diff --git a/roles/obs/tasks/obs-setup.yml b/roles/obs/tasks/obs-setup.yml
index be82a8f..1da678a 100644
--- a/roles/obs/tasks/obs-setup.yml
+++ b/roles/obs/tasks/obs-setup.yml
@@ -1,37 +1,53 @@
- name: Create OBS scene directory
file:
- path: "{{ emacsconf_home }}/.config/obs-studio/basic/scenes"
- state: directory
+ path: "~{{ emacsconf_user }}/.config/obs-studio/basic/scenes"
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
+ state: directory
- name: Create profile directories
file:
- path: "{{ obs_profile_path }}/{{ item.name }}"
+ path: "~{{ emacsconf_user }}/.config/obs-studio/basic/{{ item.name }}"
state: directory
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
mode: 0775
- loop: "{{ emacsconf_tracks }}"
+- name: Install OBS global profile
+ tags: wip
+ template:
+ src: global.ini
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ dest: "~{{ emacsconf_user }}/.config/obs-studio/global.ini"
- name: Install OBS profiles
template:
src: profile.ini
- dest: "{{ obs_profile_path }}/{{ item.name }}/basic.ini"
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
- force: no
+ dest: "~{{ emacsconf_user }}/.config/obs-studio/basic/{{ item.name }}/basic.ini"
mode: 0664
- loop: "{{ emacsconf_tracks }}"
- name: Install OBS scenes
+ tags: obs-scene
template:
src: scenes.json
- dest: "{{ emacsconf_home }}/.config/obs-studio/basic/scenes/{{ item.id }}.json"
- force: no
- loop: "{{ emacsconf_tracks }}"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ dest: "~{{ emacsconf_user }}/.config/obs-studio/basic/scenes/{{ item.id }}.json"
+- name: Create text files for OBS sources
+ copy:
+ content: "Initializing..."
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ dest: "~{{ emacsconf_user }}/{{ item }}.txt"
+ mode: 0664
+ loop:
+ - news
+ - url
+ - bottom
- name: Create OBS scripts for tracks
template:
src: obs-track
- dest: "{{ emacsconf_home }}/bin/{{ item.id }}/-obs"
+ dest: "~{{ emacsconf_user }}/bin/track-obs"
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
mode: 0775
- loop: "{{ emacsconf_tracks }}"
+
diff --git a/roles/obs/tasks/pulse.yml b/roles/obs/tasks/pulse.yml
index 1cb71c5..f9a18f7 100644
--- a/roles/obs/tasks/pulse.yml
+++ b/roles/obs/tasks/pulse.yml
@@ -1,7 +1,7 @@
- name: Create pulse directory
file:
state: directory
- path: "{{ emacsconf_home }}/.config/pulse/"
+ path: "~{{ emacsconf_user }}/.config/pulse/"
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
- name: Set up pulse configuration
@@ -9,12 +9,12 @@
src: pulse
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
- dest: "{{ emacsconf_home }}/.config/pulse/default.pa"
+ dest: "~{{ emacsconf_user }}/.config/pulse/default.pa"
mode: 0755
- name: Change ownership
file:
state: directory
- path: "{{ emacsconf_home }}/.config/pulse/"
+ path: "~{{ emacsconf_user }}/.config/pulse/"
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
recurse: true
diff --git a/roles/obs/tasks/tigervnc.yml b/roles/obs/tasks/tigervnc.yml
index 539b70e..e895bec 100644
--- a/roles/obs/tasks/tigervnc.yml
+++ b/roles/obs/tasks/tigervnc.yml
@@ -1,36 +1,27 @@
-- name: Add packages
- apt:
- name:
- - tigervnc-standalone-server
- - tigervnc-common
- name: Create VNC dirs
file:
- path: /home/{{ emacsconf_user }}/.vnc
+ path: ~{{ emacsconf_user }}/.vnc
state: directory
- mode: 0755
owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ mode: 0755
# https://github.com/sdarwin/Ansible-VNC/blob/master/tasks/main.yml
- name: Set VNC password
- become: "{{ emacsconf_user }}"
shell: |
set -o pipefail
- printf "{{ vnc_password }}\n{{ vnc_password }}\n\n" | vncpasswd /home/{{ emacsconf_user }}/.vnc/passwd
+ printf "{{ vnc_password }}\n{{ vnc_password }}\n\n" | vncpasswd ~{{ emacsconf_user }}/.vnc/passwd
args:
- chdir: "/home/{{ emacsconf_user }}/.vnc"
- creates: "/home/{{ emacsconf_user }}/.vnc/passwd"
+ chdir: "~{{ emacsconf_user }}/.vnc"
+ creates: "~{{ emacsconf_user }}/.vnc/passwd"
executable: /bin/bash
-- name: Set up xstartup
- template:
- src: xstartup
- dest: ~{{ emacsconf_user }}/.vnc/xstartup
- mode: 0700
- name: Set up xstartup for the tracks
template:
src: xstartup-track
- dest: ~{{ emacsconf_user }}/.vnc/xstartup-{{ item.id }}
+ dest: ~{{ emacsconf_user }}/.vnc/xstartup
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
mode: 0700
- loop: "{{ emacsconf_tracks }}"
-- name: Set up xstartup
+- name: Set up xresources
template:
src: xresources
dest: ~{{ emacsconf_user }}/.Xresources
@@ -40,15 +31,7 @@
- name: Set up VNC scripts
template:
src: vnc-track
- dest: "{{ emacsconf_home }}/bin/{{ item.id }}/-vnc"
+ dest: "~{{ emacsconf_user }}/bin/track-vnc"
mode: 0755
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
- loop: "{{ emacsconf_tracks }}"
-- name: Set permissions and ownership
- file:
- path: "/home/{{ emacsconf_user }}/.vnc"
- owner: "{{ emacsconf_user }}"
- group: "{{ emacsconf_group }}"
- mode: "u+rwX,g-rwx,o-rwx"
- recurse: t
diff --git a/roles/obs/tasks/track.yml b/roles/obs/tasks/track.yml
new file mode 100644
index 0000000..93b789d
--- /dev/null
+++ b/roles/obs/tasks/track.yml
@@ -0,0 +1,83 @@
+- name: Set vars
+ tags: wip, obs-scene, mpv
+ set_fact:
+ old_emacsconf_user: "{{ emacsconf_user }}"
+ old_emacsconf_home: "{{ emacsconf_home }}"
+ emacsconf_user: "{{ emacsconf_id }}-{{ item.id }}"
+ emacsconf_home: "/home/{{ emacsconf_id }}-{{ item.id }}"
+- debug:
+ var: emacsconf_home
+- name: Set up user
+ include: user.yml
+- name: Set up user-related things
+ become: "{{ emacsconf_user }}"
+ block:
+ - name: Set up track bins for addition to paths
+ file:
+ path: "~{{ emacsconf_user }}/bin/{{ item.id }}"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ state: directory
+ - name: Set up VNC
+ include: tigervnc.yml
+ - name: Create MPV profile directory
+ file:
+ path: "~{{ emacsconf_user }}/.config/mpv"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ state: directory
+ - name: Add MPV profile
+ template:
+ src: mpv.conf
+ dest: "~{{ emacsconf_user }}/.config/mpv/mpv.conf"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ - name: Create mpv scripts for tracks
+ template:
+ src: mpv-track
+ dest: "~{{ emacsconf_user }}/bin/track-mpv"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ mode: 0775
+ - name: Set up OBS profiles and scenes
+ tags: obs-profile
+ include: obs-setup.yml
+ - name: Add FFMPEG script for streaming
+ template:
+ src: stream-desktop-with-ffmpeg.sh
+ dest: "~{{ emacsconf_user }}/bin/stream-desktop-with-ffmpeg"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ mode: 0775
+ loop: "{{ emacsconf_tracks }}"
+ - name: Copy logo
+ copy:
+ src: logo.png
+ dest: "~{{ emacsconf_user }}/logo.png"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ # - name: Start jack
+ # shell: jackd -r -ddummy
+ # async: 2592000
+ - name: Set up pulse
+ include: pulse.yml
+ tags: pulse
+ - name: Set up I3 directory
+ file:
+ path: "~{{ emacsconf_user }}/.config/i3"
+ state: directory
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+ - name: Set up I3
+ template:
+ src: i3-config
+ dest: "~{{ emacsconf_user }}/.config/i3/config"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+- name: Reset vars
+ tags: wip, obs-scene, mpv
+ set_fact:
+ old_emacsconf_user: "{{ emacsconf_user }}"
+ old_emacsconf_home: "{{ emacsconf_home }}"
+ emacsconf_user: "{{ old_emacsconf_user }}"
+ emacsconf_home: "{{ old_emacsconf_home }}"
diff --git a/roles/obs/tasks/user.yml b/roles/obs/tasks/user.yml
index c1493dd..a941d7f 100644
--- a/roles/obs/tasks/user.yml
+++ b/roles/obs/tasks/user.yml
@@ -2,9 +2,11 @@
group:
name: "{{ emacsconf_group }}"
- name: Add user
+ tags: wip
user:
name: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
+ shell: /bin/bash
# password: "{{ emacsconf_unix_password }}"
- name: Create SSH folder
file:
@@ -23,3 +25,15 @@
recurse: true
owner: "{{ emacsconf_user }}"
mode: "u+rwX,g-rwx,o-rwx"
+- name: Create bin dir
+ file:
+ path: "/home/{{ emacsconf_user }}/bin"
+ state: directory
+ owner: "{{ emacsconf_user }}"
+- name: Set up bashrc
+ template:
+ src: bashrc
+ dest: "/home/{{ emacsconf_user }}/.bashrc"
+ owner: "{{ emacsconf_user }}"
+ group: "{{ emacsconf_group }}"
+
diff --git a/roles/obs/templates/bashrc b/roles/obs/templates/bashrc
new file mode 100644
index 0000000..3677017
--- /dev/null
+++ b/roles/obs/templates/bashrc
@@ -0,0 +1,116 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+case $- in
+ *i*) ;;
+ *) return;;
+esac
+
+# don't put duplicate lines or lines starting with space in the history.
+# See bash(1) for more options
+HISTCONTROL=ignoreboth
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+# If set, the pattern "**" used in a pathname expansion context will
+# match all files and zero or more directories and subdirectories.
+#shopt -s globstar
+
+# make less more friendly for non-text input files, see lesspipe(1)
+#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
+
+# set variable identifying the chroot you work in (used in the prompt below)
+if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
+ debian_chroot=$(cat /etc/debian_chroot)
+fi
+
+# set a fancy prompt (non-color, unless we know we "want" color)
+case "$TERM" in
+ xterm-color|*-256color) color_prompt=yes;;
+esac
+
+# uncomment for a colored prompt, if the terminal has the capability; turned
+# off by default to not distract the user: the focus in a terminal window
+# should be on the output of commands, not on the prompt
+#force_color_prompt=yes
+
+if [ -n "$force_color_prompt" ]; then
+ if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+ # We have color support; assume it's compliant with Ecma-48
+ # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
+ # a case would tend to support setf rather than setaf.)
+ color_prompt=yes
+ else
+ color_prompt=
+ fi
+fi
+
+if [ "$color_prompt" = yes ]; then
+ PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+else
+ PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+fi
+unset color_prompt force_color_prompt
+
+# If this is an xterm set the title to user@host:dir
+case "$TERM" in
+xterm*|rxvt*)
+ PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+ ;;
+*)
+ ;;
+esac
+
+# enable color support of ls and also add handy aliases
+if [ -x /usr/bin/dircolors ]; then
+ test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+ alias ls='ls --color=auto'
+ #alias dir='dir --color=auto'
+ #alias vdir='vdir --color=auto'
+
+ #alias grep='grep --color=auto'
+ #alias fgrep='fgrep --color=auto'
+ #alias egrep='egrep --color=auto'
+fi
+
+# colored GCC warnings and errors
+#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+
+# some more ls aliases
+#alias ll='ls -l'
+#alias la='ls -A'
+#alias l='ls -CF'
+
+# Alias definitions.
+# You may want to put all your additions into a separate file like
+# ~/.bash_aliases, instead of adding them here directly.
+# See /usr/share/doc/bash-doc/examples in the bash-doc package.
+
+if [ -f ~/.bash_aliases ]; then
+ . ~/.bash_aliases
+fi
+
+# enable programmable completion features (you don't need to enable
+# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
+# sources /etc/bash.bashrc).
+if ! shopt -oq posix; then
+ if [ -f /usr/share/bash-completion/bash_completion ]; then
+ . /usr/share/bash-completion/bash_completion
+ elif [ -f /etc/bash_completion ]; then
+ . /etc/bash_completion
+ fi
+fi
+
+export PATH=$PATH:$HOME/bin
+export DISPLAY=${DISPLAY:-:{{ item.vnc_id }}}
diff --git a/roles/obs/templates/global.ini b/roles/obs/templates/global.ini
new file mode 100644
index 0000000..c9b058f
--- /dev/null
+++ b/roles/obs/templates/global.ini
@@ -0,0 +1,36 @@
+[Basic]
+SceneCollection=dev
+SceneCollectionFile=dev
+Profile=emacsconf-dev
+ProfileDir=Development
+
+[General]
+Pre19Defaults=false
+Pre21Defaults=false
+Pre23Defaults=false
+Pre24.1Defaults=false
+FirstRun=true
+LastVersion=469762051
+
+[BasicWindow]
+gridMode=false
+geometry=AdnQywADAAAAAAAAAAAAEgAAAn8AAALPAAAAAgAAABIAAAJ9AAACzQAAAAAAAAAABQAAAAACAAAAEgAAAn0AAALN
+DockState=AAAA/wAAAAD9AAAAAQAAAAMAAAJ8AAAA4PwBAAAABvsAAAAUAHMAYwBlAG4AZQBzAEQAbwBjAGsBAAAAAAAAAHwAAACgAP////sAAAAWAHMAbwB1AHIAYwBlAHMARABvAGMAawEAAACAAAAAfAAAAKAA////+wAAABIAbQBpAHgAZQByAEQAbwBjAGsBAAABAAAAAHwAAADeAP////sAAAAeAHQAcgBhAG4AcwBpAHQAaQBvAG4AcwBEAG8AYwBrAQAAAYAAAAB8AAAAoAD////7AAAAGABjAG8AbgB0AHIAbwBsAHMARABvAGMAawEAAAIAAAAAfAAAAJ4A////+wAAABIAcwB0AGEAdABzAEQAbwBjAGsCAAABIgAAAQQAAAK8AAAAyAAAAnwAAAGoAAAABAAAAAQAAAAIAAAACPwAAAAA
+PreviewEnabled=true
+AlwaysOnTop=false
+SceneDuplicationMode=true
+SwapScenesMode=true
+EditPropertiesMode=false
+PreviewProgramMode=false
+DocksLocked=false
+
+[OBSWebSocket]
+FirstLoad=false
+ServerEnabled=true
+ServerPort={{ item.obs_websocket_port }}
+ServerPassword={{ obs_websocket_password }}
+AlertsEnabled=false
+AuthRequired=true
+
+[ScriptLogWindow]
+geometry=AdnQywADAAAAAAAAAAAAFAAAAlcAAAGjAAAAAAAAABQAAAJXAAABowAAAAAAAAAABQAAAAAAAAAAFAAAAlcAAAGj
diff --git a/roles/obs/templates/i3-config b/roles/obs/templates/i3-config
index ce22fd3..1787b64 100644
--- a/roles/obs/templates/i3-config
+++ b/roles/obs/templates/i3-config
@@ -1,3 +1,4 @@
+# {{ ansible_managed }}
# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
@@ -189,18 +190,13 @@ bindsym Mod1+r mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
-bar {
- status_command i3status
-}
-
-#######################################################################
-# automatically start i3-config-wizard to offer the user to create a
-# keysym-based config which used their favorite modifier (alt or windows)
-#
-# i3-config-wizard will not launch if there already is a config file
-# in ~/.config/i3/config (or $XDG_CONFIG_HOME/i3/config if set) or
-# ~/.i3/config.
-#
-# Please remove the following exec line:
-#######################################################################
-exec i3-config-wizard
+# bar {
+# status_command i3status
+# }
+
+# EmacsConf tweaks
+# Start with tabbed layout
+workspace_layout tabbed
+# MPV starts full-screen
+for_window [class="mpv"] fullscreen enable
+for_window [title=".*mpv"] fullscreen enable
diff --git a/roles/obs/templates/mpv-track b/roles/obs/templates/mpv-track
index b34df70..ee359f1 100755
--- a/roles/obs/templates/mpv-track
+++ b/roles/obs/templates/mpv-track
@@ -2,4 +2,4 @@
# Run MPV with the output set to the right sink and with an IPC socket
# {{ ansible_managed }}
-mpv --input-ipc-server={{ emacsconf_home }}/mpv-socket-{{ emacsconf_id }}-{{ item.id }} --audio-device=pulse/{{ item.id }}-vid --profile={{ emacsconf_id }}-talks $*
+DISPLAY="${DISPLAY:-:{{ item.vnc_id }}}" mpv --input-ipc-server={{ emacsconf_home }}/mpv-socket-{{ emacsconf_id }}-{{ item.id }} --audio-device=pulse/{{ item.id }}-vid --profile={{ emacsconf_id }}-talks $* &
diff --git a/roles/obs/templates/mpv.conf b/roles/obs/templates/mpv.conf
index 5c73681..9aff3ee 100644
--- a/roles/obs/templates/mpv.conf
+++ b/roles/obs/templates/mpv.conf
@@ -5,9 +5,34 @@
profile={{ emacsconf_id }}-talks
# Then you can load it with `--profile={{ emacsconf_id }}-talks`
+# This puts the video in the top right so that there's room on the left for the logo and some text
[{{ emacsconf_id }}-talks]
# Positioning
video-zoom=-0.15
+video-align-x=1
+video-align-y=-1
+sub-use-margins=yes
+sub-scale-by-window=yes
+sub-pos=103
+sub-margin-x=120
+sub-margin-y=40
+sub-align-x=left
+# Style
+sub-font="{{ emacsconf_font }}"
+sub-color="1/0.82/0"
+sub-blur=0.2
+sub-scale=0.9
+sub-font-size=40
+sub-border-size=0
+sub-border-color=0/1
+sub-shadow-color=0/1
+sub-shadow-offset=1.2
+sub-ass-force-style=Kerning=yes
+sub-ass-line-spacing=0
+
+[{{ emacsconf_id }}-old]
+# Positioning
+video-zoom=-0.15
video-pan-y=-0.055
sub-use-margins=yes
sub-scale-by-window=yes
@@ -15,7 +40,7 @@ sub-pos=103
sub-margin-x=150
sub-margin-y=40
# Style
-sub-font="Clear Sans Bold"
+sub-font="{{ emacsconf_font }}"
sub-color="1/0.82/0"
sub-blur=0.2
sub-scale=0.9
diff --git a/roles/obs/templates/obs-track b/roles/obs/templates/obs-track
index 5763d30..3029715 100755
--- a/roles/obs/templates/obs-track
+++ b/roles/obs/templates/obs-track
@@ -1,3 +1,3 @@
#!/bin/bash
# {{ ansible_managed }}
-obs --profile "{{ emacsconf_id }}-{{ item.id }}" --collection "{{ item.id }}" -m
+obs --profile "{{ emacsconf_id }}-{{ item.id }}" --collection "{{ item.id }}" -m --websocket_port "{{ item.obs_websocket_port }}" --websocket_password "{{ obs_websocket_password }}"
diff --git a/roles/obs/templates/scenes.json b/roles/obs/templates/scenes.json
index 5e19f16..4e6e4bd 100644
--- a/roles/obs/templates/scenes.json
+++ b/roles/obs/templates/scenes.json
@@ -2,14 +2,168 @@
"current_program_scene": "All track audio and screen",
"current_scene": "All track audio and screen",
"current_transition": "Fade",
- "groups": [],
+ "groups": [
+ {
+ "balance": 0.5,
+ "deinterlace_field_order": 0,
+ "deinterlace_mode": 0,
+ "enabled": true,
+ "flags": 0,
+ "hotkeys": {
+ "libobs.hide_scene_item.Logo": [],
+ "libobs.hide_scene_item.News": [],
+ "libobs.hide_scene_item.URL": [],
+ "libobs.show_scene_item.Logo": [],
+ "libobs.show_scene_item.News": [],
+ "libobs.show_scene_item.URL": []
+ },
+ "id": "group",
+ "mixers": 0,
+ "monitoring_type": 0,
+ "muted": false,
+ "name": "{{ emacsconf_id }} base",
+ "prev_ver": 469762051,
+ "private_settings": {},
+ "push-to-mute": false,
+ "push-to-mute-delay": 0,
+ "push-to-talk": false,
+ "push-to-talk-delay": 0,
+ "settings": {
+ "custom_size": true,
+ "cx": 103,
+ "cy": 507,
+ "id_counter": 0,
+ "items": [
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": false,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 8,
+ "locked": false,
+ "name": "News",
+ "pos": {
+ "x": 22,
+ "y": 390
+ },
+ "private_settings": {},
+ "rot": -90,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": false,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 7,
+ "locked": false,
+ "name": "URL",
+ "pos": {
+ "x": 55,
+ "y": 389
+ },
+ "private_settings": {},
+ "rot": -90,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": false,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 6,
+ "locked": false,
+ "name": "Logo",
+ "pos": {
+ "x": 0,
+ "y": 404
+ },
+ "private_settings": {},
+ "rot": 0,
+ "scale": {
+ "x": 0.40234375,
+ "y": 0.40234375
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ }
+ ]
+ },
+ "sync": 0,
+ "versioned_id": "group",
+ "volume": 1
+ }
+ ],
"modules": {
"auto-scene-switcher": {
"active": false,
"interval": 300,
- "non_matching_scene": "",
- "switch_if_not_matching": false,
- "switches": []
+ "non_matching_scene": "All track audio and screen",
+ "switch_if_not_matching": true,
+ "switches": [
+ {
+ "scene": "Video audio and screen",
+ "window_title": ".*mpv"
+ }
+ ]
},
"output-timer": {
"autoStartRecordTimer": false,
@@ -69,6 +223,95 @@
"deinterlace_mode": 0,
"enabled": true,
"flags": 0,
+ "hotkeys": {},
+ "id": "text_ft2_source",
+ "mixers": 0,
+ "monitoring_type": 0,
+ "muted": false,
+ "name": "News",
+ "prev_ver": 469762051,
+ "private_settings": {},
+ "push-to-mute": false,
+ "push-to-mute-delay": 0,
+ "push-to-talk": false,
+ "push-to-talk-delay": 0,
+ "settings": {
+ "font": {
+ "face": "Sans Serif",
+ "flags": 0,
+ "size": 24,
+ "style": ""
+ },
+ "from_file": true,
+ "text_file": "/home/{{ emacsconf_id }}-{{ item.id }}/news.txt"
+ },
+ "sync": 0,
+ "versioned_id": "text_ft2_source_v2",
+ "volume": 1
+ },
+ {
+ "balance": 0.5,
+ "deinterlace_field_order": 0,
+ "deinterlace_mode": 0,
+ "enabled": true,
+ "flags": 0,
+ "hotkeys": {},
+ "id": "text_ft2_source",
+ "mixers": 0,
+ "monitoring_type": 0,
+ "muted": false,
+ "name": "URL",
+ "prev_ver": 469762051,
+ "private_settings": {},
+ "push-to-mute": false,
+ "push-to-mute-delay": 0,
+ "push-to-talk": false,
+ "push-to-talk-delay": 0,
+ "settings": {
+ "font": {
+ "face": "Sans Serif",
+ "flags": 0,
+ "size": 24,
+ "style": ""
+ },
+ "from_file": true,
+ "text_file": "/home/{{ emacsconf_id }}-{{ item.id }}/url.txt"
+ },
+ "sync": 0,
+ "versioned_id": "text_ft2_source_v2",
+ "volume": 1
+ },
+ {
+ "balance": 0.5,
+ "deinterlace_field_order": 0,
+ "deinterlace_mode": 0,
+ "enabled": true,
+ "flags": 0,
+ "hotkeys": {},
+ "id": "image_source",
+ "mixers": 0,
+ "monitoring_type": 0,
+ "muted": false,
+ "name": "Logo",
+ "prev_ver": 469762051,
+ "private_settings": {},
+ "push-to-mute": false,
+ "push-to-mute-delay": 0,
+ "push-to-talk": false,
+ "push-to-talk-delay": 0,
+ "settings": {
+ "file": "/home/{{ emacsconf_id }}-{{ item.id }}/logo.png"
+ },
+ "sync": 0,
+ "versioned_id": "image_source",
+ "volume": 1
+ },
+ {
+ "balance": 0.5,
+ "deinterlace_field_order": 0,
+ "deinterlace_mode": 0,
+ "enabled": true,
+ "flags": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.push-to-mute": [],
@@ -101,12 +344,16 @@
"flags": 0,
"hotkeys": {
"OBSBasic.SelectScene": [],
+ "libobs.hide_scene_item.Bottom": [],
"libobs.hide_scene_item.Screen Capture (XSHM)": [],
- "libobs.hide_scene_item.{{ item.id }}-qa": [],
- "libobs.hide_scene_item.{{ item.id }}-vid": [],
+ "libobs.hide_scene_item.dev-qa": [],
+ "libobs.hide_scene_item.dev-vid": [],
+ "libobs.hide_scene_item.emacsconf base": [],
+ "libobs.show_scene_item.Bottom": [],
"libobs.show_scene_item.Screen Capture (XSHM)": [],
- "libobs.show_scene_item.{{ item.id }}-qa": [],
- "libobs.show_scene_item.{{ item.id }}-vid": []
+ "libobs.show_scene_item.dev-qa": [],
+ "libobs.show_scene_item.dev-vid": [],
+ "libobs.show_scene_item.emacsconf base": []
},
"id": "scene",
"mixers": 0,
@@ -121,7 +368,7 @@
"push-to-talk-delay": 0,
"settings": {
"custom_size": false,
- "id_counter": 14,
+ "id_counter": 22,
"items": [
{
"align": 5,
@@ -145,14 +392,14 @@
"locked": false,
"name": "Screen Capture (XSHM)",
"pos": {
- "x": 0,
+ "x": 115,
"y": 0
},
"private_settings": {},
"rot": 0,
"scale": {
- "x": 1,
- "y": 1
+ "x": 0.91015625,
+ "y": 0.9097222089767456
},
"scale_filter": "disable",
"show_transition": {
@@ -233,6 +480,191 @@
"duration": 0
},
"visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": true,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 8,
+ "locked": false,
+ "name": "News",
+ "pos": {
+ "x": 31,
+ "y": 595
+ },
+ "private_settings": {},
+ "rot": -90,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": true,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 7,
+ "locked": false,
+ "name": "URL",
+ "pos": {
+ "x": 64,
+ "y": 594
+ },
+ "private_settings": {},
+ "rot": -90,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": true,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 6,
+ "locked": false,
+ "name": "Logo",
+ "pos": {
+ "x": 9,
+ "y": 609
+ },
+ "private_settings": {},
+ "rot": 0,
+ "scale": {
+ "x": 0.40234375,
+ "y": 0.40234375
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": false,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 21,
+ "locked": false,
+ "name": "{{ emacsconf_id }} base",
+ "pos": {
+ "x": 9,
+ "y": 205
+ },
+ "private_settings": {},
+ "rot": 0,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": false,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 22,
+ "locked": false,
+ "name": "Bottom",
+ "pos": {
+ "x": 112,
+ "y": 654
+ },
+ "private_settings": {},
+ "rot": 0,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
}
]
},
@@ -302,9 +734,11 @@
"hotkeys": {
"OBSBasic.SelectScene": [],
"libobs.hide_scene_item.Screen Capture (XSHM)": [],
- "libobs.hide_scene_item.{{ item.id }}-vid": [],
+ "libobs.hide_scene_item.dev-vid": [],
+ "libobs.hide_scene_item.emacsconf base": [],
"libobs.show_scene_item.Screen Capture (XSHM)": [],
- "libobs.show_scene_item.{{ item.id }}-vid": []
+ "libobs.show_scene_item.dev-vid": [],
+ "libobs.show_scene_item.emacsconf base": []
},
"id": "scene",
"mixers": 0,
@@ -319,7 +753,7 @@
"push-to-talk-delay": 0,
"settings": {
"custom_size": false,
- "id_counter": 5,
+ "id_counter": 11,
"items": [
{
"align": 5,
@@ -394,12 +828,192 @@
"duration": 0
},
"visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": true,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 8,
+ "locked": false,
+ "name": "News",
+ "pos": {
+ "x": 31,
+ "y": 580
+ },
+ "private_settings": {},
+ "rot": -90,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": true,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 7,
+ "locked": false,
+ "name": "URL",
+ "pos": {
+ "x": 64,
+ "y": 579
+ },
+ "private_settings": {},
+ "rot": -90,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": true,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 6,
+ "locked": false,
+ "name": "Logo",
+ "pos": {
+ "x": 9,
+ "y": 594
+ },
+ "private_settings": {},
+ "rot": 0,
+ "scale": {
+ "x": 0.40234375,
+ "y": 0.40234375
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
+ },
+ {
+ "align": 5,
+ "blend_method": "default",
+ "blend_type": "normal",
+ "bounds": {
+ "x": 0,
+ "y": 0
+ },
+ "bounds_align": 0,
+ "bounds_type": 0,
+ "crop_bottom": 0,
+ "crop_left": 0,
+ "crop_right": 0,
+ "crop_top": 0,
+ "group_item_backup": false,
+ "hide_transition": {
+ "duration": 0
+ },
+ "id": 11,
+ "locked": false,
+ "name": "{{ emacsconf_id }} base",
+ "pos": {
+ "x": 9,
+ "y": 190
+ },
+ "private_settings": {},
+ "rot": 0,
+ "scale": {
+ "x": 1,
+ "y": 1
+ },
+ "scale_filter": "disable",
+ "show_transition": {
+ "duration": 0
+ },
+ "visible": true
}
]
},
"sync": 0,
"versioned_id": "scene",
"volume": 1
+ },
+ {
+ "balance": 0.5,
+ "deinterlace_field_order": 0,
+ "deinterlace_mode": 0,
+ "enabled": true,
+ "flags": 0,
+ "hotkeys": {},
+ "id": "text_ft2_source",
+ "mixers": 0,
+ "monitoring_type": 0,
+ "muted": false,
+ "name": "Bottom",
+ "prev_ver": 469762051,
+ "private_settings": {},
+ "push-to-mute": false,
+ "push-to-mute-delay": 0,
+ "push-to-talk": false,
+ "push-to-talk-delay": 0,
+ "settings": {
+ "font": {
+ "face": "Sans Serif",
+ "flags": 0,
+ "size": 28,
+ "style": ""
+ },
+ "from_file": true,
+ "text_file": "/home/{{ emacsconf_id }}-{{ item.id }}/bottom.txt"
+ },
+ "sync": 0,
+ "versioned_id": "text_ft2_source_v2",
+ "volume": 1
}
],
"transition_duration": 300,
diff --git a/roles/obs/templates/vnc-track b/roles/obs/templates/vnc-track
index b987d8b..99b0ce8 100644
--- a/roles/obs/templates/vnc-track
+++ b/roles/obs/templates/vnc-track
@@ -1 +1 @@
-vncserver :{{ item.vnc_id }} -geometry {{ res_x }}x{{ res_y }} -useold -xstartup {{ emacsconf_home }}/.vnc/xstartup-{{ item.id }} -desktop {{ emacsconf_id }}-{{ item.id }} \ No newline at end of file
+vncserver :{{ item.vnc_id }} -geometry {{ res_x }}x{{ res_y }} -useold -xstartup {{ emacsconf_home }}/.vnc/xstartup -desktop {{ emacsconf_id }}-{{ item.id }} -rfbport {{ item.vnc_port }} \ No newline at end of file
diff --git a/roles/obs/templates/xstartup-track b/roles/obs/templates/xstartup-track
index 140f836..b80caac 100755
--- a/roles/obs/templates/xstartup-track
+++ b/roles/obs/templates/xstartup-track
@@ -1,11 +1,13 @@
#!/bin/bash
export MPV_SOCKET={{ emacsconf_home }}/{{ item.id }}-mpv-socket
export TRACK={{ item.id }}
-export PATH="/usr/local/bin:/usr/bin:/bin:{{ emacsconf_home }}/bin/{{ item.id }}"
+export PATH="/usr/local/bin:/usr/bin:/bin:{{ emacsconf_home }}/bin"
xrdb $HOME/.Xresources
pulseaudio --start
pacmd set-default-sink {{ item.id }}-qa
-firefox file://data/emacsconf/{{ emacsconf_year }}/index-{{ item.id }}.html -P "{{ emacsconf_id }}-{{ item.id }}" &
+firefox file:///data/emacsconf/{{ emacsconf_year }}/index-{{ item.id }}.html &
+$HOME/bin/track-obs &
+termit &
# $HOME/{{ item.id }}-obs &
# $HOME/{{ item.id }}-mpv $HOME/logo.png &
exec i3
diff --git a/roles/wiki-publish/defaults/main.yml b/roles/publish/defaults/main.yml
index 4de7445..4de7445 100644
--- a/roles/wiki-publish/defaults/main.yml
+++ b/roles/publish/defaults/main.yml
diff --git a/roles/wiki-publish/tasks/emacs.yml b/roles/publish/tasks/emacs.yml
index 8d75979..8d75979 100644
--- a/roles/wiki-publish/tasks/emacs.yml
+++ b/roles/publish/tasks/emacs.yml
diff --git a/roles/wiki-publish/tasks/main.yml b/roles/publish/tasks/main.yml
index 28566a5..28566a5 100644
--- a/roles/wiki-publish/tasks/main.yml
+++ b/roles/publish/tasks/main.yml
diff --git a/roles/wiki-publish/templates/emacsconf-config.el b/roles/publish/templates/emacsconf-config.el
index cfb554e..cfb554e 100644
--- a/roles/wiki-publish/templates/emacsconf-config.el
+++ b/roles/publish/templates/emacsconf-config.el
diff --git a/roles/stream/defaults/main.yml b/roles/stream/defaults/main.yml
index 5ce637e..f013dba 100644
--- a/roles/stream/defaults/main.yml
+++ b/roles/stream/defaults/main.yml
@@ -4,3 +4,4 @@ icecast_lowres_scale: "854:480"
icecast_user: icecast2
icecast_group: icecast
icecast_restream_dir: /etc/icecast2/restream
+icecast_save_dump: false
diff --git a/roles/stream/templates/icecast.xml b/roles/stream/templates/icecast.xml
index e09e6a0..f9c3916 100644
--- a/roles/stream/templates/icecast.xml
+++ b/roles/stream/templates/icecast.xml
@@ -192,7 +192,7 @@
<mount-name>/emacsconf/{{ track.id }}.webm</mount-name>
<username>{{ icecast_emacsconf_user }}</username>
<password>{{ icecast_emacsconf_password }}</password>
- <dump-file>/data/{{ emacsconf_id }}-{{ emacsconf_year }}-{{ track.id }}_%Y-%m-%d_%H-%M-%S.webm</dump-file>
+ {% if icecast_save_dump %}<dump-file>/data/{{ emacsconf_id }}-{{ emacsconf_year }}-{{ track.id }}_%Y-%m-%d_%H-%M-%S.webm</dump-file>{% endif %}
<stream-name>{{ emacsconf_name }} {{ emacsconf_year }} - {{ track.name }} track</stream-name>
<stream-description>The livestream for the {{ track.name }} track of {{ emacsconf_name }} {{ emacsconf_year }}</stream-description>
<stream-url>{{ track.watch }}</stream-url>