From 4696aa1fed214fe1084d7c3deecaaa289bc0a1fd Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Mon, 31 Oct 2022 21:53:15 -0400 Subject: Update OBS, renamepublish and edit --- roles/obs/tasks/firefox.yml | 36 --- roles/obs/tasks/main.yml | 76 ++--- roles/obs/tasks/mpv.yml | 21 +- roles/obs/tasks/obs-setup.yml | 40 ++- roles/obs/tasks/pulse.yml | 6 +- roles/obs/tasks/tigervnc.yml | 39 +-- roles/obs/tasks/track.yml | 83 +++++ roles/obs/tasks/user.yml | 14 + roles/obs/templates/bashrc | 116 +++++++ roles/obs/templates/global.ini | 36 +++ roles/obs/templates/i3-config | 26 +- roles/obs/templates/mpv-track | 2 +- roles/obs/templates/mpv.conf | 27 +- roles/obs/templates/obs-track | 2 +- roles/obs/templates/scenes.json | 644 ++++++++++++++++++++++++++++++++++++- roles/obs/templates/vnc-track | 2 +- roles/obs/templates/xstartup-track | 6 +- 17 files changed, 992 insertions(+), 184 deletions(-) delete mode 100644 roles/obs/tasks/firefox.yml create mode 100644 roles/obs/tasks/track.yml create mode 100644 roles/obs/templates/bashrc create mode 100644 roles/obs/templates/global.ini (limited to 'roles/obs') 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, @@ -63,6 +217,95 @@ } ], "sources": [ + { + "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": "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, @@ -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 -- cgit v1.2.3