]> git.friedersdorff.com Git - max/saltfiles.git/commitdiff
Add i3 configuration
authorMaximilian Friedersdorff <max@friedersdorff.com>
Tue, 22 Dec 2020 14:55:04 +0000 (14:55 +0000)
committerMaximilian Friedersdorff <max@friedersdorff.com>
Tue, 22 Dec 2020 14:55:04 +0000 (14:55 +0000)
states/i3/arch.sls [new file with mode: 0644]
states/i3/files/config.jinja [new file with mode: 0644]
states/i3/files/conky-i3bar [new file with mode: 0755]
states/i3/files/lock [new file with mode: 0644]
states/i3/init.sls [new file with mode: 0644]

diff --git a/states/i3/arch.sls b/states/i3/arch.sls
new file mode 100644 (file)
index 0000000..61519bf
--- /dev/null
@@ -0,0 +1,11 @@
+install i3:
+  pkg.installed:
+    - pkgs:
+      - i3-gaps
+      - i3blocks
+      - i3lock
+      - i3status
+      - mako
+      - libnotify
+      - picom
+      - feh
diff --git a/states/i3/files/config.jinja b/states/i3/files/config.jinja
new file mode 100644 (file)
index 0000000..006f863
--- /dev/null
@@ -0,0 +1,275 @@
+{% set host = grains['host'] %}
+
+# Colors
+set $black #000000
+set $black_super #555555
+
+set $red #f92672
+set $red_super #dd4278
+
+set $green #74e22e
+set $green_super #9dc54b
+
+set $yellow #e6db74
+set $yellow_super #d1ca89
+
+set $blue #66d9ef
+set $blue_super #7accda
+
+set $magenta #ae81ff
+set $magenta_super #b392ef
+
+set $cyan #00d9d9
+set $cyan_super #c8f0f0
+
+set $white #f5deb3
+set $white_super #ffffff
+
+client.focused $black $yellow_super $black $black $black
+client.focused_inactive $black $black_super $white $black $black 
+
+set $mod Mod4
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+font pango:monospace 10
+
+# This font is widely installed, provides lots of unicode glyphs, right-to-left
+# text rendering and scalability on retina/hidpi displays (thanks to pango).
+#font pango:DejaVu Sans Mono 8
+
+# The combination of xss-lock, nm-applet and pactl is a popular choice, so
+# they are included here as an example. Modify as you see fit.
+
+# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
+# screen before suspend. Use loginctl lock-session to lock your screen.
+exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
+
+# NetworkManager is the most popular way to manage wireless networks on Linux,
+# and nm-applet is a desktop environment-independent system tray GUI for it.
+exec --no-startup-id nm-applet
+
+# Use pactl to adjust volume in PulseAudio.
+set $refresh_i3status killall -SIGUSR1 i3status
+bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
+bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
+bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
+bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# start a terminal
+bindsym $mod+Return exec termite
+
+# kill focused window
+bindsym $mod+Shift+q kill
+
+# start dmenu (a program launcher)
+bindsym $mod+s exec "rofi -modi drun,run -show drun"
+# A more modern dmenu replacement is rofi:
+# bindcode $mod+40 exec rofi -modi drun,run -show drun
+# There also is i3-dmenu-desktop which only displays applications shipping a
+# .desktop file. It is a wrapper around dmenu, so you need that installed.
+
+# change focus
+bindsym $mod+n focus left
+bindsym $mod+e focus down
+bindsym $mod+i focus up
+bindsym $mod+o focus right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# move focused window
+bindsym $mod+Shift+n move left
+bindsym $mod+Shift+e move down
+bindsym $mod+Shift+i move up
+bindsym $mod+Shift+o move right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+Right move right
+
+# split in horizontal orientation
+bindsym $mod+h split h
+
+# split in vertical orientation
+bindsym $mod+v split v
+
+# enter fullscreen mode for the focused container
+bindsym $mod+t fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+r layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+f layout toggle split
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# focus the parent container
+bindsym $mod+a focus parent
+
+# focus the child container
+#bindsym $mod+d focus child
+
+# Define names for default workspaces for which we configure key bindings later on.
+# We use variables to avoid repeating the names in multiple places.
+set $ws1 "1"
+set $ws2 "2"
+set $ws3 "3"
+set $ws4 "4"
+set $ws5 "5"
+set $ws6 "6"
+set $ws7 "7"
+set $ws8 "8"
+set $ws9 "9"
+set $ws10 "10"
+
+set $music "Music"
+set $chat "Chat"
+
+# switch to workspace
+bindsym $mod+1 workspace number $ws1
+bindsym $mod+2 workspace number $ws2
+bindsym $mod+3 workspace number $ws3
+bindsym $mod+4 workspace number $ws4
+bindsym $mod+5 workspace number $ws5
+bindsym $mod+6 workspace number $ws6
+bindsym $mod+7 workspace number $ws7
+bindsym $mod+8 workspace number $ws8
+bindsym $mod+9 workspace number $ws9
+bindsym $mod+0 workspace number $ws10
+bindsym $mod+m workspace $music
+bindsym $mod+z workspace $chat
+
+# move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace number $ws1
+bindsym $mod+Shift+2 move container to workspace number $ws2
+bindsym $mod+Shift+3 move container to workspace number $ws3
+bindsym $mod+Shift+4 move container to workspace number $ws4
+bindsym $mod+Shift+5 move container to workspace number $ws5
+bindsym $mod+Shift+6 move container to workspace number $ws6
+bindsym $mod+Shift+7 move container to workspace number $ws7
+bindsym $mod+Shift+8 move container to workspace number $ws8
+bindsym $mod+Shift+9 move container to workspace number $ws9
+bindsym $mod+Shift+0 move container to workspace number $ws10
+bindsym $mod+Shift+m move container to workspace $music
+bindsym $mod+Shift+z move container to workspace $chat
+
+# reload the configuration file
+bindsym $mod+Shift+c reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+p restart
+# exit i3 (logs you out of your X session)
+bindsym $mod+Shift+f exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
+
+# 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.
+        # Pressing right will grow the window’s width.
+        # Pressing up will shrink the window’s height.
+        # Pressing down will grow the window’s height.
+        bindsym n resize shrink width 10 px or 10 ppt
+        bindsym e resize grow height 10 px or 10 ppt
+        bindsym i resize shrink height 10 px or 10 ppt
+        bindsym o resize grow width 10 px or 10 ppt
+
+        # same bindings, but for the arrow keys
+        bindsym Left resize shrink width 10 px or 10 ppt
+        bindsym Down resize grow height 10 px or 10 ppt
+        bindsym Up resize shrink height 10 px or 10 ppt
+        bindsym Right resize grow width 10 px or 10 ppt
+
+        # back to normal: Enter or Escape or $mod+r
+        bindsym Return mode "default"
+        bindsym Escape mode "default"
+        bindsym $mod+p mode "default"
+}
+
+bindsym $mod+p mode "resize"
+
+bar {
+  id bar_left
+  position top
+  output "HDMI-1"
+  font pango:Liberation Mono 12
+  colors {
+    background $black_super
+    focused_background $black
+    focused_workspace $black_super $yellow_super $black
+    active_workspace $black_super $blue_super $black
+    inactive_workspace $black_super $black_super $white_super
+    urgent_workspace $black $red_super $white
+    separator $white
+  }
+}
+
+bar {
+  id bar_internal
+  status_command ~/.local/bin/conky-i3bar
+  position top
+  output "eDP-1"
+  font pango:Liberation Mono 12
+  colors {
+    background $black_super
+    focused_background $black
+    focused_workspace $black_super $yellow_super $black
+    active_workspace $black_super $blue_super $black
+    inactive_workspace $black_super $black_super $white_super
+    urgent_workspace $black $red_super $white
+    separator $white
+  }
+}
+
+bar {
+  id bar_right
+  status_command ~/.local/bin/conky-i3bar
+  position top
+  output "DP-1"
+  font pango:Liberation Mono 12
+  colors {
+    background $black_super
+    focused_background $black
+    focused_workspace $black_super $yellow_super $black
+    active_workspace $black_super $blue_super $black
+    inactive_workspace $black_super $black_super $white_super
+    urgent_workspace $black $red_super $white
+    separator $white
+  }
+}
+
+# Slight gaps around windows
+gaps inner 6
+
+workspace 2 output HDMI-A-1
+workspace 4 output HDMI-A-1
+workspace 1 output DP-1
+workspace 3 output DP-1
+
+workspace $music output DP-1
+workspace $chat output DP-1 
+
+assign [class="music"] workspace $music
+for_window [class="music"] move workspace number $music
+assign [class="qutebrowser"] workspace number $ws1
+for_window [class="qutebrowser"] move workspace number $ws1
+assign [class="zoom"] workspace $chat
+for_window [class="zoom"] move workspace $chat
+
+exec "termite --name 'music' -e 'tmux'"
+exec "zoom"
+
+exec mako
+exec picom -i 0.95
diff --git a/states/i3/files/conky-i3bar b/states/i3/files/conky-i3bar
new file mode 100755 (executable)
index 0000000..ad8d8fd
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+echo '{"version":1}'
+
+echo '['
+
+echo '[],'
+
+exec conky -c ~/.conkyrc
diff --git a/states/i3/files/lock b/states/i3/files/lock
new file mode 100644 (file)
index 0000000..230369e
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAG_MSG="Smartcard is still plugged in, not locking! \
+Remove now to lock."
+NOLOCK_MSG="Smartcard was not removed, did not lock!"
+
+gpg --card-status > /dev/null
+if [ $? -ne 2 ]; then
+       swaynag -m "$NAG_MSG" --type warning&
+
+       counter=0
+       while [ $? -ne 2 ]; do
+               if [ $counter -gt 20 ]; then
+                       pkill -f "$NAG_MSG"
+                       swaynag -m "$NOLOCK_MSG" --type error&
+                       exit
+               fi
+
+               sleep 1
+               counter=$(bc <<<"${counter}+1")
+               gpg --card-status > /dev/null
+       done
+       pkill -f "$NAG_MSG"
+fi
+pkill -u ${UID} swayidle --signal USR1
diff --git a/states/i3/init.sls b/states/i3/init.sls
new file mode 100644 (file)
index 0000000..4f09c0f
--- /dev/null
@@ -0,0 +1,39 @@
+include:
+  - i3.{{ grains['os']| lower }}
+  - conky
+  - font.pango-liberation-mono
+  - local.bin
+
+config dir:
+  file.directory:
+    - name: {{ grains['homedir'] }}/.config/i3
+    - user: {{ grains['user'] }}
+    - group: {{ grains['user'] }}
+    - dir_mode: 750
+    - makedirs: True
+
+sway config:
+  file.managed:
+    - name: {{ grains['homedir'] }}/.config/i3/config
+    - source: salt://i3/files/config.jinja
+    - template: jinja
+    - user: {{ grains['user']}}
+    - group: {{ grains['user']}}
+    - mode: 640
+
+lock script:
+  file.managed:
+    - name: {{ grains['homedir'] }}/.local/bin/lock.nosmartcard
+    - source: salt://i3/files/lock
+    - template: jinja
+    - user: {{ grains['user'] }}
+    - group: {{ grains['user'] }}
+    - mode: 750
+
+conky launch script:
+  file.managed:
+    - name: {{ grains['homedir'] }}/.local/bin/conky-i3bar
+    - source: salt://sway/files/conky-i3bar
+    - user: {{ grains['user'] }}
+    - group: {{ grains['user'] }}
+    - mode: 750