From a33340c903928eba30456e2215caeef9b843606e Mon Sep 17 00:00:00 2001 From: Markus Katharina Brechtel Date: Tue, 30 Jun 2020 16:16:49 +0200 Subject: [PATCH] include eralitex configuration --- defaults/main.yaml | 40 +++ files/bin/etx | 2 + files/bin/i3-watchers | 5 + files/bin/on-focus-workspace | 17 ++ files/bin/on-space-shortcut | 8 + files/bin/timer | 8 + handlers/main.yaml | 1 + tasks/eralitex.yaml | 123 ++++++++- tasks/main.yaml | 3 + tasks/ssh.yaml | 8 + tasks/structure.yaml | 11 + tasks/tmux.yaml | 2 + tasks/x11.yaml | 6 + templates/Xmodmap.j2 | 24 ++ templates/eralitex-vdesk.service.j2 | 28 ++ templates/i3.config.j2 | 411 ++++++++++++++++++++++++++++ templates/i3blocks.config.j2 | 108 ++++++++ templates/reload.sh.j2 | 22 ++ templates/rofi.theme.j2 | 148 ++++++++++ templates/urxvt.Xresources.j2 | 34 +++ templates/xsession.sh.j2 | 30 ++ vars/main.yaml | 119 ++++++++ 22 files changed, 1156 insertions(+), 2 deletions(-) create mode 100644 files/bin/etx create mode 100644 files/bin/i3-watchers create mode 100644 files/bin/on-focus-workspace create mode 100644 files/bin/on-space-shortcut create mode 100644 files/bin/timer create mode 100644 tasks/structure.yaml create mode 100644 tasks/x11.yaml create mode 100644 templates/Xmodmap.j2 create mode 100644 templates/eralitex-vdesk.service.j2 create mode 100644 templates/i3.config.j2 create mode 100644 templates/i3blocks.config.j2 create mode 100644 templates/reload.sh.j2 create mode 100644 templates/rofi.theme.j2 create mode 100644 templates/urxvt.Xresources.j2 create mode 100644 templates/xsession.sh.j2 create mode 100644 vars/main.yaml diff --git a/defaults/main.yaml b/defaults/main.yaml index d111c07..8c41053 100644 --- a/defaults/main.yaml +++ b/defaults/main.yaml @@ -9,3 +9,43 @@ kanboard_api_settings: "{{ lookup('file', '~/.eralitex/kanboard_api_settings.jso # kanboard_api_url: https://kanboard.katyx.net/jsonrpc.php # kanboard_api_user: ka # kanboard_api_key: xxx +home_eralitex_vdesk_started_and_enabled: false + +eralitex_directory: ~/.eralitex + +eralitex_profile: desktop + +eralitex_terminal: urxvt +eralitex_browser: firefox + +# feature flags +eralitex_with_activity: false + +eralitex_applications: + a: atom + w: lowriter + c: localc + i: loimpress + d: lodraw + F: catfish # search + j: "{{eralitex_jupyter_console_command}}" + s: xfce4-screenshooter + l: catfish + f: "{{eralitex_file_browser_command}}" # files + m: "{{eralitex_mail_command}}" + r: arandr + + +eralitex_lock_command: /usr/local/bin/screensaver-lock +eralitex_enable_screensaver_command: /usr/local/bin/screensaver-enable +eralitex_disable_screensaver_command: /usr/local/bin/screensaver-disable +eralitex_suspend_command: systemctl suspend +eralitex_reboot_command: systemctl reboot +eralitex_poweroff_command: systemctl poweroff + +eralitex_file_browser_command: thunar +eralitex_calculator_command: "{{eralitex_jupyter_console_command}}" +eralitex_jupyter_console_command: jupyter qtconsole --no-confirm-exit +eralitex_mail_command: thunderbird + +eralitex_background_image: false diff --git a/files/bin/etx b/files/bin/etx new file mode 100644 index 0000000..f966456 --- /dev/null +++ b/files/bin/etx @@ -0,0 +1,2 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- diff --git a/files/bin/i3-watchers b/files/bin/i3-watchers new file mode 100644 index 0000000..0899a61 --- /dev/null +++ b/files/bin/i3-watchers @@ -0,0 +1,5 @@ +#!/usr/bin/fish + +set DIR (cd (dirname (status -f)); and pwd) + +i3-msg -t subscribe -m '["workspace"]' | jq --raw-output --unbuffered 'select(.change == "focus").current.name' | xargs -n1 -r $DIR/on-focus-workspace & diff --git a/files/bin/on-focus-workspace b/files/bin/on-focus-workspace new file mode 100644 index 0000000..2cafc0f --- /dev/null +++ b/files/bin/on-focus-workspace @@ -0,0 +1,17 @@ +#!/usr/bin/fish + +if count $argv + set ws $argv[1] +else + set ws (i3-msg -t get_workspaces | jq --raw-output '.[]|select(.focused == true).name') +end +set script ~/.eralitex/workspace-cmd/$ws.focus +set oscript ~/.eralitex/workspace-cmd/other-focus + +if type -q $script + $script +else + if type -q $oscript + $oscript + end +end diff --git a/files/bin/on-space-shortcut b/files/bin/on-space-shortcut new file mode 100644 index 0000000..9284e26 --- /dev/null +++ b/files/bin/on-space-shortcut @@ -0,0 +1,8 @@ +#!/usr/bin/fish + +set ws (i3-msg -t get_workspaces | jq --raw-output '.[]|select(.focused == true).name') +set script ~/.eralitex/workspace-cmd/$ws.space + +if type -q $script + $script +end diff --git a/files/bin/timer b/files/bin/timer new file mode 100644 index 0000000..eb507bd --- /dev/null +++ b/files/bin/timer @@ -0,0 +1,8 @@ +#!/usr/bin/fish + +switch $argv[1] + case "activity" + /opt/activity/select_activity + case "end" + /opt/activity/activity +end diff --git a/handlers/main.yaml b/handlers/main.yaml index 4bc7b14..2052f00 100644 --- a/handlers/main.yaml +++ b/handlers/main.yaml @@ -1,4 +1,5 @@ --- + - name: systemd daemon-reload systemd: daemon_reload: yes diff --git a/tasks/eralitex.yaml b/tasks/eralitex.yaml index 32e5e3b..cdf0f3f 100644 --- a/tasks/eralitex.yaml +++ b/tasks/eralitex.yaml @@ -1,7 +1,115 @@ --- -- import_role: - name: eralitex +- name: eralitex directory + file: + path: "{{eralitex_directory}}" + state: directory + +- name: profile directories + file: + path: "{{eralitex_directory}}/{{item}}" + state: directory + with_items: "{{ eralitex_profiles }}" + +- name: i3 config + template: + src: i3.config.j2 + dest: "{{eralitex_directory}}/{{item}}/i3.config" + with_items: "{{ eralitex_profiles }}" + +- name: check i3 config + command: i3 -c {{eralitex_directory}}/{{item}}/i3.config -C + with_items: "{{ eralitex_profiles }}" + changed_when: false + +- name: i3blocks config + template: + src: i3blocks.config.j2 + dest: "{{eralitex_directory}}/{{item}}/i3blocks.config" + with_items: "{{ eralitex_profiles }}" + +- name: xsession scripts + template: + src: xsession.sh.j2 + dest: "{{eralitex_directory}}/{{item}}/xsession" + mode: 0755 + with_items: "{{ eralitex_profiles }}" + +- name: session reload scripts + template: + src: reload.sh.j2 + dest: "{{eralitex_directory}}/{{item}}/reload" + mode: 0755 + with_items: "{{ eralitex_profiles }}" + +- name: rofi themes + template: + src: rofi.theme.j2 + dest: "{{eralitex_directory}}/{{item}}/rofi.theme" + mode: 0755 + with_items: "{{ eralitex_profiles }}" + +- name: Xmodmap + template: + src: Xmodmap.j2 + dest: "{{eralitex_directory}}/Xmodmap" + +- name: urxvt Xresources system config + template: + src: urxvt.Xresources.j2 + dest: "{{eralitex_directory}}/urxvt.Xresources" + +- name: eralitex bin directory + copy: + src: bin/ + dest: "{{eralitex_directory}}/bin/" + mode: 0755 + +- name: link selected profile as active + file: + dest: "{{eralitex_directory}}/active-profile" + src: "{{eralitex_profile}}" + state: link + +- name: vdesk user service + template: + src: eralitex-vdesk.service.j2 + dest: ~/.config/systemd/user/eralitex@.service + +- name: link etx cli utility from users bin + file: + dest: ~/bin/etx + src: "{{eralitex_directory}}/bin/etx" + state: link + +- name: link selected profile as active + file: + dest: "{{eralitex_directory}}/active-profile" + src: "{{eralitex_profile}}" + state: link + +- name: points counter + copy: + content: 0 + dest: "{{eralitex_directory}}/points" + force: no + +- name: background image directory + file: + path: "{{eralitex_directory}}/backgrounds" + state: directory + when: eralitex_background_image is defined + +- name: background image + copy: + src: "{{eralitex_background_image}}" + dest: "{{eralitex_background_image_path}}" + when: eralitex_background_image is defined + +- name: workspace-cmd directory + file: + path: "{{eralitex_directory}}/workspace-cmd" + state: directory - name: other workspace focus script template: @@ -34,3 +142,14 @@ src: vnc-options.fish.j2 dest: ~/.eralitex/workspace-cmd/vnc-options mode: 0755 + +- name: flush handlers + meta: flush_handlers + +- name: enable and start eralitex vdesk user service + systemd: + name: eralitex@:16.service + state: started + enabled: true + user: true + when: home_eralitex_vdesk_started_and_enabled diff --git a/tasks/main.yaml b/tasks/main.yaml index 7f75d5d..fb1d377 100644 --- a/tasks/main.yaml +++ b/tasks/main.yaml @@ -1,5 +1,6 @@ --- +- import_tasks: structure.yaml - import_tasks: ssh.yaml - import_tasks: vnc.yaml - import_tasks: tmux.yaml @@ -8,3 +9,5 @@ - import_tasks: eralitex.yaml when: home_eralitex +- import_tasks: x11.yaml + when: home_eralitex diff --git a/tasks/ssh.yaml b/tasks/ssh.yaml index b0458d9..8556634 100644 --- a/tasks/ssh.yaml +++ b/tasks/ssh.yaml @@ -17,3 +17,11 @@ line: Include config.auto insertbefore: BOF create: true + +- name: enable and start ssh-agent user service + systemd: + name: ssh-agent.service + state: started + enabled: true + user: true + when: home_eralitex_vdesk_started_and_enabled diff --git a/tasks/structure.yaml b/tasks/structure.yaml new file mode 100644 index 0000000..d28649d --- /dev/null +++ b/tasks/structure.yaml @@ -0,0 +1,11 @@ +--- + +- name: ~/bin directory + file: + path: ~/bin + state: directory + +- name: systemd user config directory + file: + path: ~/.config/systemd/user + state: directory diff --git a/tasks/tmux.yaml b/tasks/tmux.yaml index abf8037..537e367 100644 --- a/tasks/tmux.yaml +++ b/tasks/tmux.yaml @@ -10,11 +10,13 @@ file: path: ~/.config/systemd/user state: directory + - name: tmux systemd user service unit template: src: tmux@.service.j2 dest: ~/.config/systemd/user/tmux@.service notify: systemd daemon-reload + - name: tmux systemd user service unit template: src: tmux@.service.j2 diff --git a/tasks/x11.yaml b/tasks/x11.yaml new file mode 100644 index 0000000..4e447ad --- /dev/null +++ b/tasks/x11.yaml @@ -0,0 +1,6 @@ +--- + +- name: xsessionrc + copy: + content: exec fish {{eralitex_directory}}/active-profile/xsession + dest: ~/.xsessionrc diff --git a/templates/Xmodmap.j2 b/templates/Xmodmap.j2 new file mode 100644 index 0000000..86417f7 --- /dev/null +++ b/templates/Xmodmap.j2 @@ -0,0 +1,24 @@ +! {{ ansible_managed }} +! +! xmodmap {{eralitex_directory}}/Xmodmap +! +! default modifier configuration +! +!xmodmap: up to 4 keys per modifier, (keycodes in parentheses): +! +!shift Shift_L (0x32), Shift_R (0x3e) +!lock Caps_Lock (0x42) +!control Control_L (0x25), Control_R (0x69) +!mod1 Alt_L (0x40), Meta_L (0xcd) +!mod2 Num_Lock (0x4d) +!mod3 +!mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) +!mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb) + +clear lock +clear mod3 +clear mod4 + +keycode 66 = Hyper_L +add mod3 = Hyper_L +add mod4 = Super_L diff --git a/templates/eralitex-vdesk.service.j2 b/templates/eralitex-vdesk.service.j2 new file mode 100644 index 0000000..35ca567 --- /dev/null +++ b/templates/eralitex-vdesk.service.j2 @@ -0,0 +1,28 @@ +{{ ansible_managed | comment }} + +# +# /usr/lib/systemd/user/vncserver@.service +# +# 1. Switches for vncserver should be entered in ~/.vnc/config rather than +# hard-coded into this unit file. See the vncserver(1) manpage. +# +# 2. Users wishing for the server to continue running after the owner logs +# out MUST enable 'linger' with loginctl like this: +# `loginctl enable-linger username` +# +# 3. The server can be enabled and started like this once configured: +# `systemctl --user start eralitex@:.service` +# `systemctl --user enable eralitex@:.service` + +[Unit] +Description=eralitex vdesk service - display %i +After=syslog.target network.target + +[Service] +Type=forking +ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' +ExecStart=/usr/bin/fish -c "/usr/bin/vncserver -xstartup {{eralitex_directory}}/vdesk/xsession %i" +ExecStop=/usr/bin/vncserver -kill %i + +[Install] +WantedBy=default.target diff --git a/templates/i3.config.j2 b/templates/i3.config.j2 new file mode 100644 index 0000000..53558b3 --- /dev/null +++ b/templates/i3.config.j2 @@ -0,0 +1,411 @@ +{{ ansible_managed | comment }} + +# i3 config file (v4) +# +# Please see http://i3wm.org/docs/userguide.html for a complete reference! + +{% set workspace_switcher = "exec fish -c \"i3-msg workspace (i3-msg -t get_workspaces | jq --raw-output '.[]|select(.num == -1).name' | rofi -dmenu -p workspace )\"" %} +{% set on_focus_workspace = "exec --no-startup-id " + eralitex_directory + "/bin/on-focus-workspace" %} + + +### Font +font pango:Terminus 14px + + + +### Modifier Key +set $mod Mod4 +set $plexmod Mod3 + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + + +### key patterns +set $up l +set $down k +set $left j +set $right odiaeresis + + +### default/local mode + +## special keys +bindsym XF86Sleep exec {{eralitex_lock_command}} +bindsym XF86Mail exec {{eralitex_mail_command}} +bindsym XF86HomePage exec {{eralitex_browser}} +bindsym XF86Calculator exec {{eralitex_calculator_command}} + +## Special modes +bindsym $mod+t mode timer +bindsym $mod+s mode session +bindsym $mod+c mode clipboard +bindcode $mod+49 mode "remote" + + +## Applications +bindsym $mod+Return exec "{{eralitex_terminal}}" +bindsym $mod+b exec "{{eralitex_browser}}" +bindsym $mod+d exec rofi -show drun -show-icons +bindsym $mod+e exec rofi -show run +bindsym $mod+a mode "apps" +bindsym $mod+space exec "{{eralitex_directory}}/bin/on-space-shortcut" + + +## Workspaces +bindsym $mod+w {{workspace_switcher}} +{% for ws in eralitex_numbered_workspace_keymaps %} +bindsym $mod+{{ws.keysym}} workspace "{{ws.workspace}}" +{% endfor %} +# focus workspace +bindsym $mod+Prior workspace next +bindsym $mod+Next workspace prev +bindsym $mod+ssharp scratchpad show +bindsym $mod+g sticky toggle + + +## Layout +bindsym $mod+y mode "layout" +bindsym $mod+h split h +bindsym $mod+v split v + +## Focus +bindsym $mod+Left focus left +bindsym $mod+$left focus left +bindsym $mod+Down focus down +bindsym $mod+$down focus down +bindsym $mod+Up focus up +bindsym $mod+$up focus up +bindsym $mod+Right focus right +bindsym $mod+$right focus right +bindsym $mod+p focus parent +# change focus between tiling / floating windows +bindsym $mod+Tab focus mode_toggle + +## Window +# The middle button over a titlebar kills the window +bindsym --release button2 kill +# The middle button and a modifer over any part of the window kills the window +bindsym --whole-window $mod+button2 kill +bindsym $mod+BackSpace kill +bindsym $mod+q kill +bindsym $mod+f fullscreen +bindsym $mod+z floating toggle +bindsym $mod+m mode move +bindsym $mod+r mode resize +bindsym $mod+x exec xkill + +# points +bindsym $mod+minus exec {{eralitex_points_down_command}} +bindsym $mod+plus exec {{eralitex_points_up_command}} + +# unlearn +#exec {{eralitex_points_down_command}} + + +## stuff that is available in default and remote mode +{% macro overall() %} + + {% if item == "desktop" %} + bindsym $plexmod+space exec "{{eralitex_directory}}/bin/on-space-shortcut" + bindsym $plexmod+BackSpace kill + bindsym $plexmod+w {{workspace_switcher}} + + {% for ws in eralitex_numbered_workspace_keymaps %} + bindsym $plexmod+{{ws.keysym}} workspace "{{ws.workspace}}" + {% endfor %} + {% for ws in eralitex_letter_workspace_keymaps %} + bindsym $plexmod+{{ws.keysym}} workspace "{{ws.workspace}}" + {% endfor %} + # focus workspace + bindsym $plexmod+Prior workspace next + bindsym $plexmod+Next workspace prev + {% endif %} + + # focus output + bindsym $plexmod+Shift+p focus output primary + bindsym $plexmod+Shift+o exec fish -c "i3-msg focus output ( i3-msg -t get_outputs | jq --raw-output '.[]|select(.active == true).name' | rofi -dmenu -p 'focus output' )" + bindsym $plexmod+Left focus output left + bindsym $plexmod+Down focus output down + bindsym $plexmod+Up focus output up + bindsym $plexmod+Right focus output right + + # Special modes + bindsym $plexmod+s mode session + bindsym $plexmod+t mode timer +{% endmacro %} +{{ overall() }} + + +### remote mode +mode "remote" { + + bindcode $mod+9 mode "default" + bindsym XF86Sleep exec {{eralitex_lock_command}} + + # The middle button over a titlebar kills the window + bindsym --release button2 kill + + {{ overall() }} + +} + + + +### Applications mode +mode "apps" { +{% for key, app in eralitex_applications.iteritems() %} + bindsym {{key}} exec {{app}}; mode "default" +{% endfor %} + bindsym Escape mode "default" +} + + + +### Session +mode "session" { + bindsym q exit + bindsym r reload; exec --no-startup-id {{eralitex_directory}}/{{item}}/reload; mode "default"; {{on_focus_workspace}} + bindsym s exec --no-startup-id {{eralitex_lock_command}}; exec --no-startup-{{eralitex_suspend_command}}; mode "default"; {{on_focus_workspace}} + bindsym x exec --no-startup-id {{eralitex_lock_command}}; mode "default"; {{on_focus_workspace}} + bindsym e exec --no-startup-id {{eralitex_enable_screensaver_command}}; mode "default"; {{on_focus_workspace}} + bindsym d exec --no-startup-id {{eralitex_disable_screensaver_command}}; mode "default"; {{on_focus_workspace}} + bindsym b exec --no-startup-id xsetroot -solid black; mode "default"; {{on_focus_workspace}} + bindsym Shift+R exec --no-startup-id {{eralitex_reboot_command}}; mode "default"; {{on_focus_workspace}} + bindsym Shift+P exec --no-startup-id {{eralitex_poweroff_command}}; mode "default"; {{on_focus_workspace}} + + # back to normal: Escape + bindsym Escape mode "default"; {{on_focus_workspace}} +} + + +### Timer +mode "timer" { + bindsym a exec "{{eralitex_directory}}/bin/timer activity"; mode "default"; {{on_focus_workspace}} + bindsym e exec "{{eralitex_directory}}/bin/timer end"; mode "default"; {{on_focus_workspace}} + bindsym u exec "{{eralitex_directory}}/bin/timer update"; mode "default"; {{on_focus_workspace}} + + # back to normal: Escape + bindsym Escape mode "default"; {{on_focus_workspace}} +} + +### Clipboard +mode "clipboard" { + # back to normal: Escape + bindsym Escape mode "default" +} + + +### Layout +# set default layout to tabbed +workspace_layout tabbed + +mode "layout" { + bindsym s layout stacking; mode "default"; + bindsym t layout tabbed; mode "default"; + bindsym e layout toggle split; mode "default"; + bindsym h layout splith; mode "default" + bindsym v layout splitv; mode "default" + + bindsym b mode bar + + # back to normal: Escape + bindsym Escape mode "default" +} + +mode "bar" { + bindsym h bar mode hide; mode "default" + bindsym d bar mode dock; mode "default" + + # back to normal: Escape + bindsym Escape mode "default" +} + +### Move mode +mode "move" { + + # move window + bindsym Left move left + bindsym $left move left + bindsym Down move down + bindsym $down move down + bindsym Up move up + bindsym $up move up + bindsym Right move right + bindsym $right move right + + # move window to workspace +{% for ws in eralitex_numbered_workspace_keymaps %} + bindsym {{ws.keysym}} move container to workspace "{{ws.workspace}}"; mode "default" +{% endfor %} + bindsym w exec fish -c "i3-msg move container to workspace (i3-msg -t get_workspaces | jq --raw-output '.[]|select(.num == -1).name' | rofi -dmenu -p 'move to workspace' )"; mode "default" + bindsym ssharp move scratchpad + + # move workspace to output + bindsym Shift+Left move workspace to output left + bindsym Shift+$left move workspace to output left + bindsym Shift+Down move workspace to output down + bindsym Shift+$down move workspace to output down + bindsym Shift+Up move workspace to output up + bindsym Shift+$up move workspace to output up + bindsym Shift+Right move workspace to output right + bindsym Shift+$right move workspace to output right + + bindsym o exec fish -c "i3-msg move workspace to output ( i3-msg -t get_outputs | jq --raw-output '.[]|select(.active == true).name' | rofi -dmenu -p 'move workspace to output' )"; mode "default" + bindsym p move workspace to output primary; mode "default" + + # back to normal: Escape + bindsym Escape mode "default" +} + + + +### Resize window mode +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + bindsym Left resize shrink width 10 px or 10 ppt + bindsym $left resize shrink width 10 px or 10 ppt + # Pressing down will grow the window’s height. + bindsym Down resize grow height 10 px or 10 ppt + bindsym $down resize grow height 10 px or 10 ppt + # Pressing up will shrink the window’s height. + bindsym Up resize shrink height 10 px or 10 ppt + bindsym $up resize shrink height 10 px or 10 ppt + # Pressing right will grow the window’s width. + bindsym Right resize grow width 10 px or 10 ppt + bindsym $right resize grow width 10 px or 10 ppt + + bindsym 1 resize set 10 ppt 10 ppt; mode "default" + bindsym 2 resize set 20 ppt 20 ppt; mode "default" + bindsym 3 resize set 30 ppt 30 ppt; mode "default" + bindsym 4 resize set 40 ppt 40 ppt; mode "default" + bindsym 5 resize set 50 ppt 50 ppt; mode "default" + bindsym 6 resize set 60 ppt 60 ppt; mode "default" + bindsym 7 resize set 70 ppt 70 ppt; mode "default" + bindsym 8 resize set 80 ppt 80 ppt; mode "default" + bindsym 9 resize set 90 ppt 90 ppt; mode "default" + bindsym 0 resize set 100 ppt 100 ppt; mode "default" + + bindsym v resize set 640 480; mode "default" + bindsym y resize set 870 628; mode "default" + + # back to normal: Escape + bindsym Escape mode "default" +} + + + +### Bar +bar { + position top + + strip_workspace_numbers yes + + tray_output primary + + status_command "i3blocks -c {{eralitex_directory}}/{{item}}/i3blocks.config" + + colors { + background #000000 + statusline #ffffff + separator #666666 + + # + {% if item == "desktop" %} + # lila: Farbton 274 + focused_workspace #774C99 #552877 #ffffff + {% endif %} + {% if item == "vdesk" %} + # grün: Farbton 110 + focused_workspace #4D994C #357728 #ffffff + {% endif %} + {% if item == "presentation" %} + # gelb: Farbton 60 + focused_workspace #99994C #777728 #ffffff + {% endif %} + active_workspace #333333 #696969 #ffffff + inactive_workspace #333333 #222222 #888888 + urgent_workspace #2f343a #900000 #ffffff + binding_mode #2f343a #900000 #ffffff + } +} + + + +### Design + +# class border backgr. text indicator child_border +{% if item == "desktop" %} +# lila: Farbton 274 +client.focused #784C99 #552877 #ffffff #9E2EF4 #552877 +{% endif %} +{% if item == "vdesk" %} +# grün: Farbton 110 +client.focused #59994C #357728 #ffffff #4FF42E #357728 +{% endif %} +{% if item == "presentation" %} +# gelb: Farbton 60 +client.focused #99994C #777728 #ffffff #F4F42E #777728 +{% endif %} +client.focused_inactive #333333 #6A6A6A #ffffff #505050 #6A6A6A +client.unfocused #333333 #222222 #888888 #2E2E2E #222222 +client.urgent #2f343a #900000 #ffffff #900000 #900000 +client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c + +client.background #ffffff + +default_border normal +hide_edge_borders both + +default_floating_border normal + +### general settings + +focus_on_window_activation urgent + + + +### Application specific rule + +for_window [class="^Vncviewer$"] border none +for_window [window_role="^About$"] floating enable +for_window [class="^Pavu"] floating enable +for_window [class="^Paman$"] floating enable +for_window [class="^Blueman"] floating enable +for_window [class="^URxvt$" title="^tmux-workspace$"] border none + + + +### Autostart + +exec "{{eralitex_terminal}}" + +{% if item == "desktop" %} +exec --no-startup-id "{{eralitex_directory}}/bin/i3-watchers" +{% endif %} + +### free keys +# $mod+i +# $mod+j +# $mod+k +# $mod+l +# $mod+n +# $mod+o +# $mod+u +# $mod+adiaeresis +# $mod+odiaeresis +# $mod+udiaeresis +# $mod+comma +# $mod+period +# $mod+numbersign +# $mod+Home +# $mod+End +# $mod+Pause +# $mod+Delete +# $mod+Insert +# $mod+Print +# $mod+Scroll_Lock +# $mod+less diff --git a/templates/i3blocks.config.j2 b/templates/i3blocks.config.j2 new file mode 100644 index 0000000..b7b4fd6 --- /dev/null +++ b/templates/i3blocks.config.j2 @@ -0,0 +1,108 @@ +{{ ansible_managed | comment }} + +# i3blocks config file +# +# Please see man i3blocks for a complete reference! +# The man page is also hosted at http://vivien.github.io/i3blocks +# +# List of valid properties: +# +# align +# color +# command +# full_text +# instance +# interval +# label +# min_width +# name +# separator +# separator_block_width +# short_text +# signal +# urgent + +# Global properties +# +# The top properties below are applied to every block, but can be overridden. +# Each block command defaults to the script name to avoid boilerplate. +command=/usr/share/i3blocks/$BLOCK_NAME +separator_block_width=15 +markup=none + +{% if eralitex_with_activity %} +# activity +[activity] +command=/opt/activity/i3blocks-activity +interval=persist +markup=pango +{% endif %} + +# hostinfo +[hostinfo] +command=echo "$USER@`hostname -s`" +interval=once + +# Load Average +[load_average] +interval=10 + +# CPU usage +# +# The script may be called with -w and -c switches to specify thresholds, +# see the script for details. +#[cpu_usage] +#label=CPU +#interval=10 +#min_width=CPU: 100.00% + +# Memory usage +# +# The type defaults to "mem" if the instance is not specified. +[memory] +label=MEM +separator=false +interval=30 + +[memory] +label=SWAP +instance=swap +interval=30 + +# Disk usage +# +# The directory defaults to $HOME if the instance is not specified. +# The script may be called with a optional argument to set the alert +# (defaults to 10 for 10%). +#[disk] +#label=HOME +#instance=/mnt/data +#interval=30 + +# Battery indicator +# +# The battery instance defaults to 0. +[battery] +#label=BAT +label=⚡ +#instance=1 +interval=30 + +# Volume indicator +# +# The first parameter sets the step (and units to display) +# The second parameter overrides the mixer selection +# See the script for details. +[volume] +#label=VOL +label=♪ +instance=Master +#instance=PCM +interval=once +signal=10 + +# Date Time +# +[time] +command=date '+%Y-%m-%d W%V %a %H:%M %Z' +interval=5 diff --git a/templates/reload.sh.j2 b/templates/reload.sh.j2 new file mode 100644 index 0000000..7607736 --- /dev/null +++ b/templates/reload.sh.j2 @@ -0,0 +1,22 @@ +#!/usr/bin/fish + +# keymap +setxkbmap de +xmodmap {{eralitex_directory}}/Xmodmap +setxkbmap -option caps:hyper +xmodmap {{eralitex_directory}}/Xmodmap + +# background +xsetroot -solid black +{% if eralitex_background_image is defined %} +{{eralitex_background_command}} +{% endif %} + +# urxvt config +xrdb -merge {{eralitex_directory}}/urxvt.Xresources + +# rofi config +rofi -theme {{eralitex_directory}}/{{item}}/rofi.theme -dump-xresources | xrdb -merge + +# screensaver settings +/usr/local/bin/screensaver-settings diff --git a/templates/rofi.theme.j2 b/templates/rofi.theme.j2 new file mode 100644 index 0000000..79159be --- /dev/null +++ b/templates/rofi.theme.j2 @@ -0,0 +1,148 @@ +/****************************************************************************** + * ROFI Color theme + * User: Rasi + * Copyright: Rasmus Steinke + ******************************************************************************/ +* { + + border-color: #333333; + separatorcolor: #6A6A6A; + + foreground: #888888; + input-foreground: #ffffff; + normal-foreground: #888888; + urgent-foreground: #ffffff; + active-foreground: #ffffff; + selected-normal-foreground: #ffffff; + selected-urgent-foreground: #ffffff; + selected-active-foreground: #ffffff; + + background-color: #222222; + background: #222222; + normal-background: #222222; + urgent-background: #900000; + active-background: #6A6A6A; + + selected-urgent-background: #2f343a; + {% if item == "desktop" %} + selected-normal-background: #552877; + selected-active-background: #784C99; + {% endif %} + {% if item == "vdesk" %} + selected-normal-background: #357728; + selected-active-background: #59994C; + {% endif %} + {% if item == "presentation" %} + selected-normal-background: #99994C; + selected-active-background: #777728; + {% endif %} + + spacing: 2; + + font: "Terminus 12"; +} +#window { + background-color: @background; + border: 1; + padding: 5; +} +#mainbox { + border: 0; + padding: 0; +} +#message { + border: 1px dash 0px 0px ; + border-color: @separatorcolor; + padding: 1px ; +} +#textbox { + text-color: @input-foreground; +} +#listview { + fixed-height: 0; + border: 1px dash 0px 0px ; + border-color: @separatorcolor; + spacing: 2px ; + scrollbar: true; + padding: 2px 0px 0px ; +} +#element { + border: 0; + padding: 1px ; +} +#element.normal.normal { + background-color: @normal-background; + text-color: @normal-foreground; +} +#element.normal.urgent { + background-color: @urgent-background; + text-color: @urgent-foreground; +} +#element.normal.active { + background-color: @active-background; + text-color: @active-foreground; +} +#element.selected.normal { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +#element.selected.urgent { + background-color: @selected-urgent-background; + text-color: @selected-urgent-foreground; +} +#element.selected.active { + background-color: @selected-active-background; + text-color: @selected-active-foreground; +} +#element.alternate.normal { + background-color: @normal-background; + text-color: @normal-foreground; +} +#element.alternate.urgent { + background-color: @urgent-background; + text-color: @urgent-foreground; +} +#element.alternate.active { + background-color: @active-background; + text-color: @active-foreground; +} +#scrollbar { + width: 4px ; + border: 0; + handle-width: 8px ; + padding: 0; +} +#sidebar { + border: 1px dash 0px 0px ; + border-color: @separatorcolor; +} +#button.selected { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +#inputbar { + spacing: 0; + text-color: @normal-foreground; + padding: 1px ; +} +#case-indicator { + spacing: 0; + text-color: @normal-foreground; +} +#entry { + spacing: 0; + text-color: @input-foreground; +} +#prompt { + spacing: 0; + text-color: @normal-foreground; +} +#inputbar { + children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; +} +#textbox-prompt-colon { + expand: false; + str: ":"; + margin: 0px 0.3em 0em 0em ; + text-color: @normal-foreground; +} diff --git a/templates/urxvt.Xresources.j2 b/templates/urxvt.Xresources.j2 new file mode 100644 index 0000000..dc73047 --- /dev/null +++ b/templates/urxvt.Xresources.j2 @@ -0,0 +1,34 @@ +! set font to Terminus +urxvt*font: xft:Terminus:pixelsize=14 +urxvt*boldFont: xft:Terminus:pixelsize=14 + +! set colors +URxvt*background: black +URxvt*foreground: white + +! save number lines in the scrollback buffer +URxvt.saveLines: 10000 + +! disable scrollbar +URxvt*scrollBar: false + +! do not scroll with output +URxvt*scrollTtyOutput: false + +! scroll in relation to buffer (with mouse scroll or Shift+Page Up) +URxvt*scrollWithBuffer: true + +! scroll back to the bottom on keypress +URxvt*scrollTtyKeypress: true + +! scrollback buffer in secondary screen +URxvt.secondaryScreen: 1 +URxvt.secondaryScroll: 0 + +{% if not ansible_lsb.id == "Raspbian" %} +! fake transparency +urxvt*transparent: true +urxvt*shading: 30 +! https://bbs.archlinux.org/viewtopic.php?id=222070 +URxvt*ineheritPixmap: true +{% endif %} diff --git a/templates/xsession.sh.j2 b/templates/xsession.sh.j2 new file mode 100644 index 0000000..bb1f46f --- /dev/null +++ b/templates/xsession.sh.j2 @@ -0,0 +1,30 @@ +#!/usr/bin/fish + +{{ ansible_managed | comment }} + + + +# set PATH so it includes users +# private bin directory if it exists +if test -d "$HOME/bin" + set -x PATH "$HOME/bin:$PATH" +end + +# reload script +source {{eralitex_directory}}/{{item}}/reload + +{% if item != "vdesk" %} +blueman-applet & +pasystray & +nm-applet & +{% endif %} + +{% if item != "presentation" and item != "vdesk" %} +/usr/local/bin/screensaver-start & +{% endif %} + +{% if item == "presentation" %} +unclutter & +{% endif %} + +exec /usr/bin/i3 -c {{eralitex_directory}}/{{item}}/i3.config diff --git a/vars/main.yaml b/vars/main.yaml new file mode 100644 index 0000000..1e62b63 --- /dev/null +++ b/vars/main.yaml @@ -0,0 +1,119 @@ +eralitex_profiles: + - desktop + - vdesk + - presentation + +eralitex_numbered_workspace_keymaps: + - keysym: 1 + workspace: 1 + - keysym: 2 + workspace: 2 + - keysym: 3 + workspace: 3 + - keysym: 4 + workspace: 4 + - keysym: 5 + workspace: 5 + - keysym: 6 + workspace: 6 + - keysym: 7 + workspace: 7 + - keysym: 8 + workspace: 8 + - keysym: 9 + workspace: 9 + - keysym: 0 + workspace: 10 + - keysym: F1 + workspace: 11 + - keysym: F2 + workspace: 12 + - keysym: F3 + workspace: 13 + - keysym: F4 + workspace: 14 + - keysym: F5 + workspace: 15 + - keysym: F6 + workspace: 16 + - keysym: F7 + workspace: 17 + - keysym: F8 + workspace: 18 + - keysym: F9 + workspace: 19 + - keysym: F10 + workspace: 20 + - keysym: F11 + workspace: 21 + - keysym: F12 + workspace: 22 + + +eralitex_letter_workspace_keymaps: + - keysym: a + workspace: 23:a + - keysym: b + workspace: 24:b + - keysym: c + workspace: 25:c + - keysym: d + workspace: 26:d + - keysym: e + workspace: 27:e + - keysym: f + workspace: 28:f + - keysym: g + workspace: 29:g + - keysym: h + workspace: 30:h + - keysym: i + workspace: 31:i + - keysym: j + workspace: 32:j + - keysym: k + workspace: 33:k + - keysym: l + workspace: 34:l + - keysym: m + workspace: 35:m + - keysym: n + workspace: 36:n + - keysym: o + workspace: 37:o + - keysym: p + workspace: 38:p + - keysym: q + workspace: 39:q + - keysym: r + workspace: 40:r + # - keysym: s + # workspace: 41:s + # - keysym: t + # workspace: 42:t + - keysym: u + workspace: 43:u + - keysym: v + workspace: 44:v + #- keysym: w + # workspace: 45:w + - keysym: x + workspace: 46:x + - keysym: y + workspace: 47:y + - keysym: z + workspace: 48:z + - keysym: adiaeresis + workspace: 49:ä + - keysym: odiaeresis + workspace: 50:ö + - keysym: udiaeresis + workspace: 51:ü + - keysym: ssharp + workspace: 52:ß + +eralitex_points_up_command: fish -c "echo (expr (cat ~/.eralitex/points) + 1 > ~/.eralitex/points) (i3-nagbar -m (cat ~/.eralitex/points)\ €)" +eralitex_points_down_command: fish -c "echo (expr (cat ~/.eralitex/points) - 1 > ~/.eralitex/points) (i3-nagbar -m (cat ~/.eralitex/points)\ €)" + +eralitex_background_image_path: "{{eralitex_directory}}/backgrounds/{{eralitex_background_image|basename}}" +eralitex_background_command: feh --no-fehbg --bg-fill {{eralitex_background_image_path}}