Merge branch 'sway'
This commit is contained in:
commit
a8c0374828
@ -18,3 +18,16 @@ cores: 8
|
||||
build_user:
|
||||
name: talexander
|
||||
group: talexander
|
||||
users:
|
||||
talexander:
|
||||
initialize: true
|
||||
uid: 11235
|
||||
gid: 11235
|
||||
groups:
|
||||
- name: wheel
|
||||
- name: video
|
||||
authorized_keys:
|
||||
- yubikey
|
||||
- main_fido
|
||||
- backup_fido
|
||||
- homeassistant
|
||||
|
@ -10,9 +10,12 @@
|
||||
- network
|
||||
- sshd
|
||||
- base
|
||||
- firewall
|
||||
# - firewall
|
||||
- cpu
|
||||
- ntp
|
||||
- build
|
||||
- graphics
|
||||
- gpg
|
||||
- fonts
|
||||
- alacritty
|
||||
- sway
|
||||
|
103
ansible/roles/alacritty/files/alacritty.yml
Normal file
103
ansible/roles/alacritty/files/alacritty.yml
Normal file
@ -0,0 +1,103 @@
|
||||
# If `true`, bold text is drawn using the bright color variants.
|
||||
draw_bold_text_with_bright_colors: true
|
||||
|
||||
colors:
|
||||
# Default colors
|
||||
primary:
|
||||
background: "0x000000"
|
||||
foreground: "0xeaeaea"
|
||||
|
||||
# Bright and dim foreground colors
|
||||
#
|
||||
# The dimmed foreground color is calculated automatically if it is not present.
|
||||
# If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
|
||||
# is `false`, the normal foreground color will be used.
|
||||
#dim_foreground: '0x9a9a9a'
|
||||
#bright_foreground: '0xffffff'
|
||||
|
||||
# Cursor colors
|
||||
#
|
||||
# Colors which should be used to draw the terminal cursor. If these are unset,
|
||||
# the cursor color will be the inverse of the cell color.
|
||||
#cursor:
|
||||
# text: '0x000000'
|
||||
# cursor: '0xffffff'
|
||||
|
||||
# Selection colors
|
||||
#
|
||||
# Colors which should be used to draw the selection area. If selection
|
||||
# background is unset, selection color will be the inverse of the cell colors.
|
||||
# If only text is unset the cell text color will remain the same.
|
||||
#selection:
|
||||
# text: '0xeaeaea'
|
||||
# background: '0x404040'
|
||||
|
||||
# Normal colors
|
||||
normal:
|
||||
black: "0x000000"
|
||||
red: "0xd54e53"
|
||||
green: "0xb9ca4a"
|
||||
yellow: "0xe6c547"
|
||||
blue: "0x7aa6da"
|
||||
magenta: "0xc397d8"
|
||||
cyan: "0x70c0ba"
|
||||
white: "0xeaeaea"
|
||||
|
||||
# Bright colors
|
||||
bright:
|
||||
black: "0x666666"
|
||||
red: "0xff3334"
|
||||
green: "0x9ec400"
|
||||
yellow: "0xe7c547"
|
||||
blue: "0x7aa6da"
|
||||
magenta: "0xb77ee0"
|
||||
cyan: "0x54ced6"
|
||||
white: "0xffffff"
|
||||
|
||||
# Dim colors
|
||||
#
|
||||
# If the dim colors are not set, they will be calculated automatically based
|
||||
# on the `normal` colors.
|
||||
#dim:
|
||||
# black: '0x000000'
|
||||
# red: '0x8c3336'
|
||||
# green: '0x7a8530'
|
||||
# yellow: '0x97822e'
|
||||
# blue: '0x506d8f'
|
||||
# magenta: '0x80638e'
|
||||
# cyan: '0x497e7a'
|
||||
# white: '0x9a9a9a'
|
||||
|
||||
# Indexed Colors
|
||||
#
|
||||
# The indexed colors include all colors from 16 to 256.
|
||||
# When these are not set, they're filled with sensible defaults.
|
||||
#
|
||||
# Example:
|
||||
# `- { index: 16, color: '0xff00ff' }`
|
||||
#
|
||||
indexed_colors: []
|
||||
|
||||
scrolling:
|
||||
# Maximum number of lines in the scrollback buffer.
|
||||
# Specifying '0' will disable scrolling.
|
||||
history: 10000
|
||||
|
||||
# Number of lines the viewport will move for every line scrolled when
|
||||
# scrollback is enabled (history > 0).
|
||||
multiplier: 3
|
||||
|
||||
font:
|
||||
size: 11.0
|
||||
|
||||
hints:
|
||||
enabled:
|
||||
# Disable opening links when clicked
|
||||
- regex:
|
||||
"(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
|
||||
[^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
|
||||
command: xdg-open
|
||||
post_processing: true
|
||||
mouse:
|
||||
enabled: false
|
||||
mods: None
|
3
ansible/roles/alacritty/meta/main.yaml
Normal file
3
ansible/roles/alacritty/meta/main.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
dependencies:
|
||||
- users
|
||||
- fonts
|
20
ansible/roles/alacritty/tasks/common.yaml
Normal file
20
ansible/roles/alacritty/tasks/common.yaml
Normal file
@ -0,0 +1,20 @@
|
||||
- name: Install packages
|
||||
package:
|
||||
name:
|
||||
- alacritty
|
||||
state: present
|
||||
|
||||
- import_tasks: tasks/freebsd.yaml
|
||||
when: 'os_flavor == "freebsd"'
|
||||
|
||||
- import_tasks: tasks/linux.yaml
|
||||
when: 'os_flavor == "linux"'
|
||||
|
||||
- include_tasks:
|
||||
file: tasks/peruser.yaml
|
||||
apply:
|
||||
become: yes
|
||||
become_user: "{{ initialize_user }}"
|
||||
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
|
||||
loop_control:
|
||||
loop_var: initialize_user
|
5
ansible/roles/alacritty/tasks/freebsd.yaml
Normal file
5
ansible/roles/alacritty/tasks/freebsd.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
# - name: Install packages
|
||||
# package:
|
||||
# name:
|
||||
# - foo
|
||||
# state: present
|
6
ansible/roles/alacritty/tasks/linux.yaml
Normal file
6
ansible/roles/alacritty/tasks/linux.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
# - name: Install packages
|
||||
# pacman:
|
||||
# name:
|
||||
# - foo
|
||||
# state: present
|
||||
# update_cache: true
|
2
ansible/roles/alacritty/tasks/main.yaml
Normal file
2
ansible/roles/alacritty/tasks/main.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
- import_tasks: tasks/common.yaml
|
||||
when: graphics_driver is defined
|
29
ansible/roles/alacritty/tasks/peruser.yaml
Normal file
29
ansible/roles/alacritty/tasks/peruser.yaml
Normal file
@ -0,0 +1,29 @@
|
||||
- include_role:
|
||||
name: per_user
|
||||
|
||||
- name: Create directories
|
||||
file:
|
||||
name: "{{ account_homedir.stdout }}/{{ item }}"
|
||||
state: directory
|
||||
mode: 0700
|
||||
owner: "{{ account_name.stdout }}"
|
||||
group: "{{ group_name.stdout }}"
|
||||
loop:
|
||||
- ".config/alacritty"
|
||||
|
||||
- name: Copy files
|
||||
copy:
|
||||
src: "files/{{ item.src }}"
|
||||
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
|
||||
mode: 0600
|
||||
owner: "{{ account_name.stdout }}"
|
||||
group: "{{ group_name.stdout }}"
|
||||
loop:
|
||||
- src: alacritty.yml
|
||||
dest: .config/alacritty/alacritty.yml
|
||||
|
||||
- import_tasks: tasks/peruser_freebsd.yaml
|
||||
when: 'os_flavor == "freebsd"'
|
||||
|
||||
- import_tasks: tasks/peruser_linux.yaml
|
||||
when: 'os_flavor == "linux"'
|
0
ansible/roles/alacritty/tasks/peruser_freebsd.yaml
Normal file
0
ansible/roles/alacritty/tasks/peruser_freebsd.yaml
Normal file
0
ansible/roles/alacritty/tasks/peruser_linux.yaml
Normal file
0
ansible/roles/alacritty/tasks/peruser_linux.yaml
Normal file
@ -89,3 +89,16 @@
|
||||
path: /etc/rc.conf
|
||||
start: absent
|
||||
when: rc_conf is not defined
|
||||
|
||||
- name: Add fstab entries
|
||||
mount:
|
||||
name: "{{ item.dst }}"
|
||||
src: "{{ item.src }}"
|
||||
fstype: "{{ item.fstype }}"
|
||||
opts: "{{ item.opts }}"
|
||||
state: present
|
||||
loop:
|
||||
- dst: /tmp
|
||||
src: tmpfs
|
||||
fstype: tmpfs
|
||||
opts: rw,mode=777
|
||||
|
88
ansible/roles/fonts/files/fonts.conf
Normal file
88
ansible/roles/fonts/files/fonts.conf
Normal file
@ -0,0 +1,88 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
||||
<fontconfig>
|
||||
<!-- reject all bitmap fonts, with the exception of 'terminus' -->
|
||||
<selectfont>
|
||||
<!-- <acceptfont> -->
|
||||
<!-- <pattern> -->
|
||||
<!-- <patelt name="family"> <string>Terminus</string> </patelt> -->
|
||||
<!-- </pattern> -->
|
||||
<!-- </acceptfont> -->
|
||||
<rejectfont>
|
||||
<pattern>
|
||||
<patelt name="scalable"> <bool>false</bool> </patelt>
|
||||
</pattern>
|
||||
</rejectfont>
|
||||
<rejectfont>
|
||||
<!-- You don't want ghostscript fonts in your web browsing because of annoying ligatures like ffi -->
|
||||
<glob>/usr/share/fonts/gsfonts/*</glob>
|
||||
</rejectfont>
|
||||
</selectfont>
|
||||
|
||||
<!-- preferred aliases -->
|
||||
<alias>
|
||||
<family>serif</family>
|
||||
<prefer>
|
||||
<family>Source Serif Pro</family>
|
||||
<family>Source Sans Pro</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<!-- preferred aliases -->
|
||||
<alias>
|
||||
<family>sans-serif</family>
|
||||
<prefer>
|
||||
<family>Source Sans Pro</family>
|
||||
<family>Source Serif Pro</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<!-- preferred aliases -->
|
||||
<alias>
|
||||
<family>monospace</family>
|
||||
<prefer>
|
||||
<family>Cascadia Mono</family>
|
||||
<family>Cascadia Code</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
|
||||
<!-- Screw it. Force Liberation Mono to be source code pro. -->
|
||||
<match target="pattern">
|
||||
<test qual="any" name="family"><string>Liberation Mono</string></test>
|
||||
<edit name="family" mode="assign" binding="same"><string>Cascadia Mono</string></edit>
|
||||
</match>
|
||||
|
||||
<!-- Dejavu Sans Mono keeps coming back when I query "monospace". Doesn't happen when I'm using Souce Code Pro but does happen with cascadia... force it to cascadia -->
|
||||
<match target="pattern">
|
||||
<test qual="any" name="family"><string>monospace</string></test>
|
||||
<edit name="family" mode="assign" binding="same"><string>Cascadia Mono</string></edit>
|
||||
</match>
|
||||
|
||||
<!-- Font Display Settings -->
|
||||
<match target="font" >
|
||||
<edit mode="assign" name="rgba" >
|
||||
<const>rgb</const>
|
||||
</edit>
|
||||
</match>
|
||||
<match target="font" >
|
||||
<edit mode="assign" name="hinting" >
|
||||
<bool>true</bool>
|
||||
</edit>
|
||||
</match>
|
||||
<match target="font" >
|
||||
<edit mode="assign" name="hintstyle" >
|
||||
<const>hintslight</const>
|
||||
</edit>
|
||||
</match>
|
||||
<match target="font" >
|
||||
<edit mode="assign" name="antialias" >
|
||||
<bool>true</bool>
|
||||
</edit>
|
||||
</match>
|
||||
<match target="font" >
|
||||
<edit mode="assign" name="lcdfilter" >
|
||||
<const>lcddefault</const>
|
||||
</edit>
|
||||
</match>
|
||||
</fontconfig>
|
2
ansible/roles/fonts/meta/main.yaml
Normal file
2
ansible/roles/fonts/meta/main.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- users
|
14
ansible/roles/fonts/tasks/common.yaml
Normal file
14
ansible/roles/fonts/tasks/common.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
- import_tasks: tasks/freebsd.yaml
|
||||
when: 'os_flavor == "freebsd"'
|
||||
|
||||
- import_tasks: tasks/linux.yaml
|
||||
when: 'os_flavor == "linux"'
|
||||
|
||||
- include_tasks:
|
||||
file: tasks/peruser.yaml
|
||||
apply:
|
||||
become: yes
|
||||
become_user: "{{ initialize_user }}"
|
||||
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
|
||||
loop_control:
|
||||
loop_var: initialize_user
|
10
ansible/roles/fonts/tasks/freebsd.yaml
Normal file
10
ansible/roles/fonts/tasks/freebsd.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
- name: Install packages
|
||||
package:
|
||||
name:
|
||||
- sourcecodepro-ttf
|
||||
- source-sans-ttf
|
||||
- cascadia-code
|
||||
- noto
|
||||
- noto-emoji
|
||||
- noto-extra
|
||||
state: present
|
13
ansible/roles/fonts/tasks/linux.yaml
Normal file
13
ansible/roles/fonts/tasks/linux.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
- name: Install packages
|
||||
pacman:
|
||||
name:
|
||||
- adobe-source-code-pro-fonts
|
||||
- adobe-source-sans-fonts
|
||||
# - ttf-cascadia-code # ttf existing at all breaks fonts in emacs
|
||||
- otf-cascadia-code # ttf cascadia broken in emacs
|
||||
- noto-fonts
|
||||
- noto-fonts-cjk
|
||||
- noto-fonts-emoji
|
||||
- noto-fonts-extra
|
||||
state: present
|
||||
update_cache: true
|
2
ansible/roles/fonts/tasks/main.yaml
Normal file
2
ansible/roles/fonts/tasks/main.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
- import_tasks: tasks/common.yaml
|
||||
when: graphics_driver is defined
|
29
ansible/roles/fonts/tasks/peruser.yaml
Normal file
29
ansible/roles/fonts/tasks/peruser.yaml
Normal file
@ -0,0 +1,29 @@
|
||||
- include_role:
|
||||
name: per_user
|
||||
|
||||
- name: Create directories
|
||||
file:
|
||||
name: "{{ account_homedir.stdout }}/{{ item }}"
|
||||
state: directory
|
||||
mode: 0700
|
||||
owner: "{{ account_name.stdout }}"
|
||||
group: "{{ group_name.stdout }}"
|
||||
loop:
|
||||
- ".config/fontconfig"
|
||||
|
||||
- name: Copy files
|
||||
copy:
|
||||
src: "files/{{ item.src }}"
|
||||
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
|
||||
mode: 0600
|
||||
owner: "{{ account_name.stdout }}"
|
||||
group: "{{ group_name.stdout }}"
|
||||
loop:
|
||||
- src: fonts.conf
|
||||
dest: .config/fontconfig/fonts.conf
|
||||
|
||||
- import_tasks: tasks/peruser_freebsd.yaml
|
||||
when: 'os_flavor == "freebsd"'
|
||||
|
||||
- import_tasks: tasks/peruser_linux.yaml
|
||||
when: 'os_flavor == "linux"'
|
0
ansible/roles/fonts/tasks/peruser_freebsd.yaml
Normal file
0
ansible/roles/fonts/tasks/peruser_freebsd.yaml
Normal file
0
ansible/roles/fonts/tasks/peruser_linux.yaml
Normal file
0
ansible/roles/fonts/tasks/peruser_linux.yaml
Normal file
11
ansible/roles/sway/defaults/main.yaml
Normal file
11
ansible/roles/sway/defaults/main.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
default_sway_conf_files:
|
||||
- background
|
||||
- framework_input
|
||||
- framework_display
|
||||
- base_hotkeys
|
||||
- movement
|
||||
- windows
|
||||
- screenshots
|
||||
- notifications
|
||||
- disable_focus_follows_mouse
|
||||
- waybar
|
BIN
ansible/roles/sway/files/bliss.jpg
Normal file
BIN
ansible/roles/sway/files/bliss.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 638 KiB |
27
ansible/roles/sway/files/config
Normal file
27
ansible/roles/sway/files/config
Normal file
@ -0,0 +1,27 @@
|
||||
# Default config for sway
|
||||
#
|
||||
# Copy this to ~/.config/sway/config and edit it to your liking.
|
||||
#
|
||||
# Read `man 5 sway` for a complete reference.
|
||||
|
||||
### Variables
|
||||
#
|
||||
# Logo key. Use Mod1 for Alt.
|
||||
set $mod Mod4
|
||||
# set $mod Mod1
|
||||
# Home row direction keys, like vim
|
||||
set $left h
|
||||
set $down j
|
||||
set $up k
|
||||
set $right l
|
||||
# Your preferred terminal emulator
|
||||
set $term alacritty
|
||||
# Your preferred application launcher
|
||||
# Note: it's recommended that you pass the final command to sway
|
||||
# set $menu dmenu_path | dmenu | xargs swaymsg exec
|
||||
set $menu /usr/local/bin/wofi --show drun --gtk-dark
|
||||
|
||||
bindsym $mod+grave exec $term
|
||||
|
||||
include ~/.config/sway/config.d/*.conf
|
||||
include /etc/sway/config.d/*
|
1
ansible/roles/sway/files/dbus_rc.conf
Normal file
1
ansible/roles/sway/files/dbus_rc.conf
Normal file
@ -0,0 +1 @@
|
||||
dbus_enable="yes"
|
2
ansible/roles/sway/files/electron-flags.conf
Normal file
2
ansible/roles/sway/files/electron-flags.conf
Normal file
@ -0,0 +1,2 @@
|
||||
--enable-features=UseOzonePlatform
|
||||
--ozone-platform=wayland
|
14
ansible/roles/sway/files/launch_sway_freebsd.bash
Normal file
14
ansible/roles/sway/files/launch_sway_freebsd.bash
Normal file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Launch sway
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
if [[ ! -v XDG_RUNTIME_DIR ]]; then
|
||||
export XDG_RUNTIME_DIR=$(mktemp -d)
|
||||
chmod 0700 "$XDG_RUNTIME_DIR"
|
||||
|
||||
fi
|
||||
|
||||
exec sway -d &> $HOME/.config/swaylog
|
8
ansible/roles/sway/files/launch_sway_linux.bash
Normal file
8
ansible/roles/sway/files/launch_sway_linux.bash
Normal file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Launch sway
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
exec sway -d &> $HOME/.config/swaylog
|
2
ansible/roles/sway/files/mako_config
Normal file
2
ansible/roles/sway/files/mako_config
Normal file
@ -0,0 +1,2 @@
|
||||
[mode=do-not-disturb]
|
||||
invisible=1
|
1
ansible/roles/sway/files/seatd_rc.conf
Normal file
1
ansible/roles/sway/files/seatd_rc.conf
Normal file
@ -0,0 +1 @@
|
||||
seatd_enable="YES"
|
BIN
ansible/roles/sway/files/spaceglenda300.jpg
Normal file
BIN
ansible/roles/sway/files/spaceglenda300.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 639 KiB |
190
ansible/roles/sway/files/style.css
Normal file
190
ansible/roles/sway/files/style.css
Normal file
@ -0,0 +1,190 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Keyframes
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
@keyframes blink-warning {
|
||||
70% {
|
||||
color: white;
|
||||
}
|
||||
|
||||
to {
|
||||
color: white;
|
||||
background-color: orange;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes blink-critical {
|
||||
70% {
|
||||
color: white;
|
||||
}
|
||||
|
||||
to {
|
||||
color: white;
|
||||
background-color: red;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Base styles
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
/* Reset all styles */
|
||||
* {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* The whole bar */
|
||||
#waybar {
|
||||
background: #323232;
|
||||
color: white;
|
||||
font-family: Cascadia Mono, monospace;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
/* Each module */
|
||||
#battery,
|
||||
#clock,
|
||||
#cpu,
|
||||
#custom-keyboard-layout,
|
||||
#custom-clock,
|
||||
#memory,
|
||||
#mode,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#temperature,
|
||||
#tray {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Module styles
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
#battery {
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
#battery.warning {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
#battery.critical {
|
||||
color: red;
|
||||
}
|
||||
|
||||
#battery.warning.discharging {
|
||||
animation-name: blink-warning;
|
||||
animation-duration: 3s;
|
||||
}
|
||||
|
||||
#battery.critical.discharging {
|
||||
animation-name: blink-critical;
|
||||
animation-duration: 2s;
|
||||
}
|
||||
|
||||
#clock {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#custom-clock {
|
||||
}
|
||||
|
||||
#cpu {
|
||||
/* No styles */
|
||||
}
|
||||
|
||||
#cpu.warning {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
#cpu.critical {
|
||||
color: red;
|
||||
}
|
||||
|
||||
#memory {
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
#memory.warning {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
#memory.critical {
|
||||
color: red;
|
||||
animation-name: blink-critical;
|
||||
animation-duration: 2s;
|
||||
}
|
||||
|
||||
#mode {
|
||||
background: #64727D;
|
||||
border-top: 2px solid white;
|
||||
/* To compensate for the top border and still have vertical centering */
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
|
||||
#network {
|
||||
/* No styles */
|
||||
}
|
||||
|
||||
#network.disconnected {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
/* No styles */
|
||||
}
|
||||
|
||||
#pulseaudio.muted {
|
||||
/* No styles */
|
||||
}
|
||||
|
||||
#custom-spotify {
|
||||
color: rgb(102, 220, 105);
|
||||
}
|
||||
|
||||
#temperature {
|
||||
/* No styles */
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
color: red;
|
||||
}
|
||||
|
||||
#tray {
|
||||
/* No styles */
|
||||
}
|
||||
|
||||
#window {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
border-top: 2px solid transparent;
|
||||
/* To compensate for the top border and still have vertical centering */
|
||||
padding-bottom: 2px;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
border-color: #4c7899;
|
||||
color: white;
|
||||
background-color: #285577;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
border-color: #c9545d;
|
||||
color: #c9545d;
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
### Output configuration
|
||||
#
|
||||
# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
|
||||
output * bg ~/.config/sway/bliss.jpg fill
|
25
ansible/roles/sway/files/sway_config_files/base_hotkeys.conf
Normal file
25
ansible/roles/sway/files/sway_config_files/base_hotkeys.conf
Normal file
@ -0,0 +1,25 @@
|
||||
### Key bindings
|
||||
#
|
||||
# Basics:
|
||||
#
|
||||
# kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
|
||||
# start your launcher
|
||||
bindsym $mod+Return exec $menu
|
||||
|
||||
# Drag floating windows by holding down $mod and left mouse button.
|
||||
# Resize them with right mouse button + $mod.
|
||||
# Despite the name, also works for non-floating windows.
|
||||
# Change normal to inverse to use left mouse button for resizing and right
|
||||
# mouse button for dragging.
|
||||
floating_modifier $mod normal
|
||||
|
||||
# Hotkey to lock screen, relies on swayidle running
|
||||
bindsym $mod+l exec pkill -USR1 swayidle
|
||||
|
||||
# reload the configuration file
|
||||
bindsym $mod+Shift+c reload
|
||||
|
||||
# exit sway (logs you out of your Wayland session)
|
||||
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
|
@ -0,0 +1,2 @@
|
||||
# Disable focus following mouse
|
||||
focus_follows_mouse no
|
@ -0,0 +1 @@
|
||||
output 'Unknown 0x095F 0x00000000' scale 1.5
|
@ -0,0 +1,8 @@
|
||||
input * xkb_rules "evdev"
|
||||
|
||||
# Framework Touchpad
|
||||
input "2362:628:PIXA3854:01_093A:0274_TouchPad" {
|
||||
dwt enabled
|
||||
click_method clickfinger
|
||||
tap enabled
|
||||
}
|
51
ansible/roles/sway/files/sway_config_files/movement.conf
Normal file
51
ansible/roles/sway/files/sway_config_files/movement.conf
Normal file
@ -0,0 +1,51 @@
|
||||
#
|
||||
# Moving around:
|
||||
#
|
||||
# Move your focus around
|
||||
# bindsym $mod+$left focus left
|
||||
# bindsym $mod+$down focus down
|
||||
# bindsym $mod+$up focus up
|
||||
# bindsym $mod+$right focus right
|
||||
# or use $mod+[up|down|left|right]
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# _move_ the focused window with the same, but add Shift
|
||||
bindsym $mod+Shift+$left move left
|
||||
bindsym $mod+Shift+$down move down
|
||||
bindsym $mod+Shift+$up move up
|
||||
bindsym $mod+Shift+$right move right
|
||||
# ditto, with arrow 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
|
||||
#
|
||||
# Workspaces:
|
||||
#
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace 1
|
||||
bindsym $mod+2 workspace 2
|
||||
bindsym $mod+3 workspace 3
|
||||
bindsym $mod+4 workspace 4
|
||||
bindsym $mod+5 workspace 5
|
||||
bindsym $mod+6 workspace 6
|
||||
bindsym $mod+7 workspace 7
|
||||
bindsym $mod+8 workspace 8
|
||||
bindsym $mod+9 workspace 9
|
||||
bindsym $mod+0 workspace 10
|
||||
# move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace 1
|
||||
bindsym $mod+Shift+2 move container to workspace 2
|
||||
bindsym $mod+Shift+3 move container to workspace 3
|
||||
bindsym $mod+Shift+4 move container to workspace 4
|
||||
bindsym $mod+Shift+5 move container to workspace 5
|
||||
bindsym $mod+Shift+6 move container to workspace 6
|
||||
bindsym $mod+Shift+7 move container to workspace 7
|
||||
bindsym $mod+Shift+8 move container to workspace 8
|
||||
bindsym $mod+Shift+9 move container to workspace 9
|
||||
bindsym $mod+Shift+0 move container to workspace 10
|
||||
# Note: workspaces can have any name you want, not just numbers.
|
||||
# We just use 1-10 as the default.
|
@ -0,0 +1,5 @@
|
||||
bindsym $mod+Escape exec makoctl dismiss
|
||||
bindsym $mod+Shift+Escape exec makoctl invoke
|
||||
|
||||
# Notifications
|
||||
exec /usr/bin/mako
|
@ -0,0 +1,9 @@
|
||||
# Screenshots
|
||||
#bindsym $mod+print exec slurp | grim -g - $(xdg-user-dir PICTURES)/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')
|
||||
bindsym $mod+print exec slurp | grim -g - "$HOME/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')"
|
||||
bindsym print exec grim "$HOME/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')"
|
||||
# Maybe add --audio flag? can optionally specify specific device name from `pactl list sources | grep Name`
|
||||
bindsym $mod+Shift+print exec wf-recorder -g "$(slurp)" -f "$HOME/$(date +'screencast_%Y-%m-%d-%H%M%S.mkv')" -c h264_vaapi -d /dev/dri/renderD128
|
||||
bindsym Shift+print exec wf-recorder -f "$HOME/$(date +'screencast_%Y-%m-%d-%H%M%S.mkv')" -c h264_vaapi -d /dev/dri/renderD128
|
||||
bindsym $mod+ctrl+Shift+print exec killall -s SIGINT wf-recorder
|
||||
# Need to make a hotkey to end the recording
|
16
ansible/roles/sway/files/sway_config_files/waybar.conf
Normal file
16
ansible/roles/sway/files/sway_config_files/waybar.conf
Normal file
@ -0,0 +1,16 @@
|
||||
#
|
||||
# Status Bar:
|
||||
#
|
||||
# Read `man 5 sway-bar` for more information about this section.
|
||||
bar {
|
||||
position top
|
||||
|
||||
font pango:Cascadia Mono, FontAwesome 10
|
||||
swaybar_command waybar
|
||||
|
||||
colors {
|
||||
statusline #ffffff
|
||||
background #323232
|
||||
inactive_workspace #32323200 #32323200 #5c5c5c
|
||||
}
|
||||
}
|
61
ansible/roles/sway/files/sway_config_files/windows.conf
Normal file
61
ansible/roles/sway/files/sway_config_files/windows.conf
Normal file
@ -0,0 +1,61 @@
|
||||
#
|
||||
# Layout stuff:
|
||||
#
|
||||
# You can "split" the current object of your focus with
|
||||
# $mod+b or $mod+v, for horizontal and vertical splits
|
||||
# respectively.
|
||||
bindsym $mod+h splith
|
||||
bindsym $mod+v splitv
|
||||
|
||||
# Switch the current container between different layout styles
|
||||
bindsym $mod+s layout stacking
|
||||
bindsym $mod+w layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# Make the current focus fullscreen
|
||||
bindsym $mod+f fullscreen
|
||||
|
||||
# Toggle the current focus between tiling and floating mode
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
|
||||
# Swap focus between the tiling area and the floating area
|
||||
bindsym $mod+space focus mode_toggle
|
||||
|
||||
# move focus to the parent container
|
||||
bindsym $mod+a focus parent
|
||||
#
|
||||
# Scratchpad:
|
||||
#
|
||||
# Sway has a "scratchpad", which is a bag of holding for windows.
|
||||
# You can send windows there and get them back later.
|
||||
|
||||
# Move the currently focused window to the scratchpad
|
||||
bindsym $mod+Shift+minus move scratchpad
|
||||
|
||||
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||
# If there are multiple scratchpad windows, this command cycles through them.
|
||||
bindsym $mod+minus scratchpad show
|
||||
#
|
||||
# Resizing containers:
|
||||
#
|
||||
mode "resize" {
|
||||
# left will shrink the containers width
|
||||
# right will grow the containers width
|
||||
# up will shrink the containers height
|
||||
# down will grow the containers height
|
||||
bindsym $left resize shrink width 10px
|
||||
bindsym $down resize grow height 10px
|
||||
bindsym $up resize shrink height 10px
|
||||
bindsym $right resize grow width 10px
|
||||
|
||||
# ditto, with arrow keys
|
||||
bindsym Left resize shrink width 10px
|
||||
bindsym Down resize grow height 10px
|
||||
bindsym Up resize shrink height 10px
|
||||
bindsym Right resize grow width 10px
|
||||
|
||||
# return to default mode
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
bindsym $mod+r mode "resize"
|
27
ansible/roles/sway/files/waybar_config.json
Normal file
27
ansible/roles/sway/files/waybar_config.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
// "height": 10, // Waybar height (to be removed for auto height)
|
||||
"modules-left": ["sway/workspaces", "sway/mode"],
|
||||
"modules-right": ["idle_inhibitor", "custom/clock", "tray"],
|
||||
"sway/workspaces": {
|
||||
"disable-scroll": true,
|
||||
},
|
||||
"sway/mode": {
|
||||
"format": "<span style=\"italic\">{}</span>"
|
||||
},
|
||||
"idle_inhibitor": {
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"activated": "",
|
||||
"deactivated": ""
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
// "icon-size": 21,
|
||||
"spacing": 10
|
||||
},
|
||||
"custom/clock": {
|
||||
"exec": "waybar_custom_clock",
|
||||
"return-type": "json",
|
||||
"restart-interval": 30
|
||||
}
|
||||
}
|
108
ansible/roles/sway/files/waybar_custom_clock.py
Normal file
108
ansible/roles/sway/files/waybar_custom_clock.py
Normal file
@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Custom waybar module for clocks. Implemented because the official clock module was downloading timezone definitions on every boot.
|
||||
import datetime
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
from dataclasses import dataclass
|
||||
from functools import lru_cache
|
||||
from typing import Final, List, Optional
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
INTERVAL: Final[int] = 10
|
||||
LOCAL_TIMEZONE = datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo
|
||||
|
||||
|
||||
@dataclass
|
||||
class Update:
|
||||
text: Optional[str]
|
||||
alt: Optional[str]
|
||||
tooltip: Optional[str]
|
||||
css_class: Optional[List[str]]
|
||||
percentage: Optional[str]
|
||||
|
||||
def dump(self) -> str:
|
||||
# Dump a dict because we can't name our member variable "class"
|
||||
return json.dumps(
|
||||
{
|
||||
k: v
|
||||
for k, v in {
|
||||
"text": self.text,
|
||||
"alt": self.alt,
|
||||
"tooltip": self.tooltip,
|
||||
"class": self.css_class,
|
||||
"percentage": self.percentage,
|
||||
}.items()
|
||||
if v is not None
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@lru_cache(maxsize=1)
|
||||
def make_calendar(today: datetime.date, tz: datetime.tzinfo):
|
||||
width: Final[int] = 20
|
||||
start_of_month = today.replace(day=1)
|
||||
month_header = today.strftime("%B %Y")
|
||||
padding = width - len(month_header)
|
||||
right_padding = " " * (padding // 2)
|
||||
left_padding = right_padding + (" " if padding % 2 == 1 else "")
|
||||
header = f"{left_padding}{month_header}{right_padding}"
|
||||
days_of_week = "Su Mo Tu We Th Fr Sa"
|
||||
|
||||
timezone_str = str(tz)
|
||||
|
||||
# Make the grid
|
||||
first_day_padding = " " * (
|
||||
0 if start_of_month.weekday() == 6 else (3 * (1 + start_of_month.weekday())) - 1
|
||||
)
|
||||
output = f"{header}\n{days_of_week}\n{first_day_padding}"
|
||||
|
||||
print_day = start_of_month
|
||||
while print_day.month == today.month:
|
||||
if print_day.weekday() == 6:
|
||||
output += "\n"
|
||||
else:
|
||||
output += " "
|
||||
if print_day == today:
|
||||
output += '<span foreground="#323232" background="#CCCCCC">'
|
||||
output += f"{print_day.day: >2}"
|
||||
if print_day == today:
|
||||
output += "</span>"
|
||||
print_day += datetime.timedelta(days=1)
|
||||
|
||||
output += f'\n<span size="small">{timezone_str}</span>'
|
||||
return output
|
||||
|
||||
|
||||
def main():
|
||||
tz: Optional[datetime.tzinfo] = (
|
||||
ZoneInfo(sys.argv[1]) if len(sys.argv) >= 2 else LOCAL_TIMEZONE
|
||||
)
|
||||
if tz is None:
|
||||
raise Exception("Failed to detect timezone.")
|
||||
|
||||
next_update = time.time()
|
||||
while True:
|
||||
time_before_next_update = next_update - time.time()
|
||||
if time_before_next_update > 0:
|
||||
time.sleep(time_before_next_update)
|
||||
next_update = time.time() + INTERVAL
|
||||
|
||||
now = datetime.datetime.now(tz=tz)
|
||||
text = now.strftime("%Y-%m-%d %H:%M")
|
||||
tooltip = make_calendar(now.date(), tz)
|
||||
|
||||
out = Update(
|
||||
text=text,
|
||||
alt="foo",
|
||||
tooltip=f"<tt>{tooltip}</tt>",
|
||||
css_class=["foo"],
|
||||
percentage="100",
|
||||
)
|
||||
|
||||
print(out.dump(), flush=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
7
ansible/roles/sway/files/xdg-desktop-portal-wlr-config
Normal file
7
ansible/roles/sway/files/xdg-desktop-portal-wlr-config
Normal file
@ -0,0 +1,7 @@
|
||||
# [screencast]
|
||||
# output_name=HDMI-A-1
|
||||
# max_fps=30
|
||||
# exec_before=disable_notifications.sh
|
||||
# exec_after=enable_notifications.sh
|
||||
# chooser_type=simple
|
||||
# chooser_cmd=slurp -f %o -or
|
3
ansible/roles/sway/meta/main.yaml
Normal file
3
ansible/roles/sway/meta/main.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
dependencies:
|
||||
- users
|
||||
- build # for aurutils on linux
|
25
ansible/roles/sway/tasks/common.yaml
Normal file
25
ansible/roles/sway/tasks/common.yaml
Normal file
@ -0,0 +1,25 @@
|
||||
- name: Install scripts
|
||||
copy:
|
||||
src: "files/{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: 0755
|
||||
owner: root
|
||||
group: wheel
|
||||
loop:
|
||||
- src: waybar_custom_clock.py
|
||||
dest: /usr/local/bin/waybar_custom_clock
|
||||
|
||||
- import_tasks: tasks/freebsd.yaml
|
||||
when: 'os_flavor == "freebsd"'
|
||||
|
||||
- import_tasks: tasks/linux.yaml
|
||||
when: 'os_flavor == "linux"'
|
||||
|
||||
- include_tasks:
|
||||
file: tasks/peruser.yaml
|
||||
apply:
|
||||
become: yes
|
||||
become_user: "{{ initialize_user }}"
|
||||
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
|
||||
loop_control:
|
||||
loop_var: initialize_user
|
48
ansible/roles/sway/tasks/freebsd.yaml
Normal file
48
ansible/roles/sway/tasks/freebsd.yaml
Normal file
@ -0,0 +1,48 @@
|
||||
- name: Install packages
|
||||
package:
|
||||
name:
|
||||
- sway
|
||||
- swaybg
|
||||
- swayidle
|
||||
- swaylock
|
||||
- wofi
|
||||
- mako
|
||||
- grim
|
||||
- xeyes
|
||||
- qt5-wayland
|
||||
# - gvfs
|
||||
- xauth # for ssh x11 forwarding
|
||||
- slurp # screen coordinates for screenshots
|
||||
- libnotify # mako doesn't seem to work without it
|
||||
- pcmanfm # For mounting drives
|
||||
- wf-recorder # screen recording
|
||||
- waybar
|
||||
- xdg-desktop-portal
|
||||
- xdg-desktop-portal-wlr # screen sharing
|
||||
# - rofimoji
|
||||
- wtype # for rofimoji to be able to insert characters
|
||||
- dbus # for desktop notifications
|
||||
- lumina-fm
|
||||
state: present
|
||||
|
||||
- name: Install service configuration
|
||||
copy:
|
||||
src: "files/{{ item }}_rc.conf"
|
||||
dest: "/etc/rc.conf.d/{{ item }}"
|
||||
mode: 0644
|
||||
owner: root
|
||||
group: wheel
|
||||
loop:
|
||||
- seatd
|
||||
- dbus
|
||||
|
||||
- name: Install scripts
|
||||
copy:
|
||||
src: "files/{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: 0755
|
||||
owner: root
|
||||
group: wheel
|
||||
loop:
|
||||
- src: launch_sway_freebsd.bash
|
||||
dest: /usr/local/bin/launch_sway
|
17
ansible/roles/sway/tasks/linux.yaml
Normal file
17
ansible/roles/sway/tasks/linux.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
# - name: Install packages
|
||||
# pacman:
|
||||
# name:
|
||||
# - foo
|
||||
# state: present
|
||||
# update_cache: true
|
||||
|
||||
- name: Install scripts
|
||||
copy:
|
||||
src: "files/{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: 0755
|
||||
owner: root
|
||||
group: wheel
|
||||
loop:
|
||||
- src: launch_sway_linux.bash
|
||||
dest: /usr/local/bin/launch_sway
|
2
ansible/roles/sway/tasks/main.yaml
Normal file
2
ansible/roles/sway/tasks/main.yaml
Normal file
@ -0,0 +1,2 @@
|
||||
- import_tasks: tasks/common.yaml
|
||||
when: graphics_driver is defined
|
56
ansible/roles/sway/tasks/peruser.yaml
Normal file
56
ansible/roles/sway/tasks/peruser.yaml
Normal file
@ -0,0 +1,56 @@
|
||||
- include_role:
|
||||
name: per_user
|
||||
|
||||
- name: Create directories
|
||||
file:
|
||||
name: "{{ account_homedir.stdout }}/{{ item }}"
|
||||
state: directory
|
||||
mode: 0700
|
||||
owner: "{{ account_name.stdout }}"
|
||||
group: "{{ group_name.stdout }}"
|
||||
loop:
|
||||
- ".config/sway"
|
||||
- ".config/sway/config.d"
|
||||
- ".config/waybar"
|
||||
- ".config/xdg-desktop-portal-wlr"
|
||||
- ".config/mako"
|
||||
|
||||
- name: Copy files
|
||||
copy:
|
||||
src: "files/{{ item.src }}"
|
||||
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
|
||||
mode: 0600
|
||||
owner: "{{ account_name.stdout }}"
|
||||
group: "{{ group_name.stdout }}"
|
||||
loop:
|
||||
- src: config
|
||||
dest: .config/sway/config
|
||||
- src: bliss.jpg
|
||||
dest: .config/sway/bliss.jpg
|
||||
- src: spaceglenda300.jpg
|
||||
dest: .config/sway/spaceglenda300.jpg
|
||||
- src: waybar_config.json
|
||||
dest: .config/waybar/config
|
||||
- src: style.css
|
||||
dest: .config/waybar/style.css
|
||||
- src: xdg-desktop-portal-wlr-config
|
||||
dest: .config/xdg-desktop-portal-wlr/config
|
||||
- src: electron-flags.conf
|
||||
dest: .config/electron-flags.conf
|
||||
- src: mako_config
|
||||
dest: .config/mako/config
|
||||
|
||||
- name: Configure dotfiles (conf directory)
|
||||
copy:
|
||||
src: "files/sway_config_files/{{ item }}.conf"
|
||||
dest: "{{ account_homedir.stdout }}/.config/sway/config.d/{{ item }}.conf"
|
||||
mode: 0600
|
||||
owner: "{{ account_name.stdout }}"
|
||||
group: "{{ group_name.stdout }}"
|
||||
loop: "{{ sway_conf_files|default([]) + default_sway_conf_files }}"
|
||||
|
||||
- import_tasks: tasks/peruser_freebsd.yaml
|
||||
when: 'os_flavor == "freebsd"'
|
||||
|
||||
- import_tasks: tasks/peruser_linux.yaml
|
||||
when: 'os_flavor == "linux"'
|
0
ansible/roles/sway/tasks/peruser_freebsd.yaml
Normal file
0
ansible/roles/sway/tasks/peruser_freebsd.yaml
Normal file
0
ansible/roles/sway/tasks/peruser_linux.yaml
Normal file
0
ansible/roles/sway/tasks/peruser_linux.yaml
Normal file
Loading…
Reference in New Issue
Block a user