Compare commits

...

44 commits

Author SHA1 Message Date
f87305b06d Temporary disable sharing individual windows feature
Needs some work for dinamycally adding/removing headles output
2025-04-08 11:37:17 +04:00
d8e0fa71c2 Implement the individual windows sharing feature
Original MR: https://gitlab.com/tile-os/tileos-settings-sway/-/merge_requests/21
2025-02-28 00:16:34 +04:00
ee226de17d Update to 1.2.0 2024-10-20 00:39:30 +04:00
e72799525c 1.1.5 2024-09-04 21:38:35 +04:00
66bdd5592c Merge branch 'user/okmans/fix/idle-inhibitor' into 'master'
Fix the idle-inhibitor script

See merge request tile-os/tileos-settings-sway!20
2024-08-25 06:47:58 +00:00
f59dabef60 Merge branch 'user/okmans/improvement/recording-mode' into 'master'
Add missed changes related to d59a581

See merge request tile-os/tileos-settings-sway!19
2024-08-25 06:47:19 +00:00
Alexander Oakman
8dc7da2815 Fix the idle-inhibitor script
It turns out that the idle-inhibitor provided by sway only works
with views (application windows), i.e. inhibition cannot be run
on empty workspaces because they do not contain views.
Also, when switching between different workspaces, the views of
the previous workspace may have idle inhibitors, causing inhibition
to be active even if no sound is played until the old views are
updated. To update the old views, it is necessary to switch to the
appropriate workspace and wait for the script to execute, which
will remove the inhibitors that is incorrect and inconvenient.
This patch introduces a new inhibit method based on
systemd-inhibit, which has none of the above problems.
2024-08-25 05:34:38 +03:00
Alexander Oakman
54dc20e1da Add missed changes related to d59a581 2024-08-25 01:53:48 +03:00
ddb15dba49 nwg-wrapper: pkill only help.sh 2024-08-24 22:18:32 +04:00
8f24ae2946 Merge branch 'user/okmans/improvement/recording-mode' into 'master'
Improve the recorder script

See merge request tile-os/tileos-settings-sway!17
2024-08-24 17:59:37 +00:00
3e8279f479 Merge branch 'user/okmans/mic-mute' into 'master'
Add support for turning the microphone on/off

See merge request tile-os/tileos-settings-sway!16
2024-08-24 17:59:23 +00:00
Alexander Oakman
bca213279f Make the recorder script more readable 2024-08-24 20:23:03 +03:00
Alexander Oakman
d59a58120b Improve the recorder script
Make it possible to interrupt the recording area selection process
by pressing the $mod + Escape key combination.
2024-08-24 20:22:49 +03:00
Alexander Oakman
1810959292 Fix notifications in recording mode 2024-08-24 19:47:33 +03:00
Alexander Oakman
ac0926cf32 Add support for turning the microphone on/off 2024-08-24 19:39:06 +03:00
307f026e9d Merge branch 'user/okmans/screensaver/improvements' into 'master'
Improvements in running screensaver

See merge request tile-os/tileos-settings-sway!15
2024-08-23 19:03:10 +00:00
Alexander Oakman
d36e203e98 Fix the screensaver running hotkey
The screensaver running hotkey didn't work because the appropriate
command was not defined.
2024-08-23 21:59:49 +03:00
Alexander Oakman
2be7224e32 Improve the lock screen command
Running a screensaver is a very important security feature.
It is necessary that it always works and does not depend on the
state of the user's directories, so the screensaver run-script
should be placed in the system directory.
However, the locking process remains customizable because the user
script can be used too.
2024-08-23 21:59:49 +03:00
f09dfbb6c6 Merge branch 'user/okmans/theme-colors' into 'master'
Improve theme colors contrast

See merge request tile-os/tileos-settings-sway!14
2024-08-23 18:51:57 +00:00
Alexander Oakman
778dc6528b Make the Alacritty theme file cleaner
Transform color keys to lowercase like in all other theme files.
Remove unnecessary comments.
2024-08-22 17:58:41 +03:00
Alexander Oakman
271069c881 Adapt the bluetuith to theme's colorscheme 2024-08-22 17:58:41 +03:00
Alexander Oakman
cc095e898e Improve theme colors contrast
Improve contrast of the peach color combined with the white background.
2024-08-22 17:56:50 +03:00
862b9dcb1b Update changelog for 1.1.4 2024-08-20 18:53:49 +04:00
c4a3c1dbc7 Merge branch 'user/okmans/menu_fixes' into 'master'
Improves and fixes for variables

See merge request tile-os/tileos-settings-sway!13
2024-08-20 14:50:07 +00:00
fc3b2472aa Merge branch 'user/okmans/shortcus_inhibition' into 'master'
Improve the shortcuts inhibition

See merge request tile-os/tileos-settings-sway!12
2024-08-20 14:48:47 +00:00
56e05fbcb2 Merge branch 'user/okmans/swayidle/inhibition' into 'master'
Add screensaver inhibition control service

See merge request tile-os/tileos-settings-sway!8
2024-08-20 14:47:01 +00:00
Alexander Oakman
9c4aaa4207 Add screensaver inhibition control service
The service enables or disables swayidle inhibition depending on
whether any audio plays or not. It replaces the activation of
inhibition for fullscreen browser windows.
2024-08-20 08:28:32 +03:00
Alexander Oakman
89a7a823ad Use the terminal alias in term_float command 2024-08-20 02:16:17 +03:00
Alexander Oakman
94b0219902 Fix that nwg-drawer doesn't run applications
Providing a terminal emulator to the nwg-drawer allows it to run
applications.
2024-08-20 02:13:05 +03:00
Alexander Oakman
418cc0a2fc Fix the rofi binding
Update the rofi binding according to the modern syntax (1.7.3+).
Remove redundant options.
2024-08-20 02:12:05 +03:00
Alexander Oakman
1fc0ce29c3 Add a keybinding to toggle shortcuts inhibitor 2024-08-20 02:02:59 +03:00
Alexander Oakman
d6ac253fb2 Fix that rofi doesn't execute commands
Using the default pattern for the run-shell-command option in
the rofi binding allows it to run applications and commands.
2024-08-20 01:42:45 +03:00
Alexander Oakman
34e6157757 Allow some applications to inhibit shortcuts
Virtualization and remote desktop applications should be able to
inhibit keyboard shortcuts.
2024-08-19 23:22:00 +03:00
b4cef4847a Update changelog 2024-08-18 12:55:44 +04:00
be42ae6fc1 Merge branch 'user/okmans/window-fixes' into 'master'
Improve rules for applications and make some fixes

See merge request tile-os/tileos-settings-sway!10
2024-08-17 19:42:43 +00:00
cd1155de86 Merge branch 'user/okmans/fix-pcmanfm-daemon' into 'master'
Fix the pcmanfm-qt daemon start command

See merge request tile-os/tileos-settings-sway!11
2024-08-17 19:42:13 +00:00
Alexander Oakman
a5592ab130 Fix the pcmanfm-qt daemon start command 2024-08-17 22:22:25 +03:00
Alexander Oakman
ce28901167 Add a rule for Removable medium dialog
Forces the dialog to open in floating mode.
2024-08-17 20:13:19 +03:00
Alexander Oakman
938d9d7eda Add a rule for Choose an Application dialog
Forces the dialog to open in floating mode.
2024-08-17 20:11:41 +03:00
Alexander Oakman
1b7c96ee50 Add librewolf window rules 2024-08-17 20:11:41 +03:00
Alexander Oakman
5baec8d64c Disable sticky mode for Firefox Library windows
This forces firefox's library windows to stay in the same workspace
as the parent firefox window. Moving a child window across all
workspaces is strange behavior.
2024-08-17 20:06:42 +03:00
Alexander Oakman
803ace98f7 Fix regex in rule for Firefox
The rule was not used for windows, the title of which began with
the uppercase letter. Now this is fixed.
2024-08-17 20:01:55 +03:00
afe557042c Merge branch 'user/okmans/swayidle/sleep' into 'master'
Add swayidle timeout to suspend

See merge request tile-os/tileos-settings-sway!9
2024-07-31 18:18:43 +00:00
Alexander Oakman
2a9f64fbe9 Add swayidle timeout to suspend 2024-07-27 19:05:20 +03:00
27 changed files with 368 additions and 122 deletions

27
debian/changelog vendored
View file

@ -1,3 +1,30 @@
tileos-settings-sway (1.2.0~tileos) unstable; urgency=medium
* Change module order
-- Aleksey Samoilov <samoilov.lex@gmail.com> Sun, 20 Oct 2024 00:38:40 +0400
tileos-settings-sway (1.1.5~tileos) unstable; urgency=medium
* Update color theme
-- Aleksey Samoilov <samoilov.lex@gmail.com> Wed, 04 Sep 2024 21:38:06 +0400
tileos-settings-sway (1.1.4~tileos) unstable; urgency=medium
* Add swayidle inhibit service
* Fixes for variables
* Add keyboard shortcut inhibition
-- Aleksey Samoilov <samoilov.lex@gmail.com> Tue, 20 Aug 2024 18:52:41 +0400
tileos-settings-sway (1.1.3~tileos) unstable; urgency=medium
* Fix daemonize pcmanfm-qt
* Fixes for some window rules
-- Aleksey Samoilov <samoilov.lex@gmail.com> Sun, 18 Aug 2024 12:54:54 +0400
tileos-settings-sway (1.1.2~tileos) unstable; urgency=medium
* Pass SSH_AUTH_SOCK to all processes

View file

@ -1,97 +1,97 @@
color_set:
text: &TEXT "#CAD3F5"
subtext0: &SUBTEXT0 "#E3E3F3"
subtext1: &SUBTEXT1 "#CED4E0"
surface2: &SURFACE2 "#5B6078"
surface1: &SURFACE1 "#494D64"
index16: &INDEX16 "#F5A97F"
index17: &INDEX17 "#F4DBD6"
base: &BASE "#24273A"
red: &RED "#ED6070"
green: &GREEN "#A6DA95"
blue: &BLUE "#8AADF4"
yellow: &YELLOW "#EED49F"
pink: &PINK "#F5BDE6"
teal: &TEAL "#8BD5CA"
rosewater: &ROSEWATER "#F4DBD6"
lavender: &LAVENDER "#B7BDF8"
text: &TEXT "#cad3f5"
subtext0: &SUBTEXT0 "#e3e3f3"
subtext1: &SUBTEXT1 "#ced4e0"
surface2: &SURFACE2 "#5b6078"
surface1: &SURFACE1 "#494d64"
index16: &INDEX16 "#ed6c13"
index17: &INDEX17 "#f4dbd6"
base: &BASE "#24273a"
red: &RED "#ed6070"
green: &GREEN "#a6da95"
blue: &BLUE "#8aadf4"
yellow: &YELLOW "#eed49f"
pink: &PINK "#f5bde6"
teal: &TEAL "#8bd5ca"
rosewater: &ROSEWATER "#f4dbd6"
lavender: &LAVENDER "#b7bdf8"
colors:
# Default colors
primary:
background: *BASE # base
foreground: *TEXT # text
background: *BASE
foreground: *TEXT
# Bright and dim foreground colors
dim_foreground: *TEXT # text
bright_foreground: *TEXT # text
dim_foreground: *TEXT
bright_foreground: *TEXT
# Cursor colors
cursor:
text: *BASE # base
cursor: *ROSEWATER # rosewater
text: *BASE
cursor: *ROSEWATER
vi_mode_cursor:
text: *BASE # base
cursor: *LAVENDER # lavender
text: *BASE
cursor: *LAVENDER
# Search colors
search:
matches:
foreground: *BASE # base
background: *SUBTEXT0 # subtext0
foreground: *BASE
background: *SUBTEXT0
focused_match:
foreground: *BASE # base
background: *GREEN # green
foreground: *BASE
background: *GREEN
footer_bar:
foreground: *BASE # base
background: *SUBTEXT0 # subtext0
foreground: *BASE
background: *SUBTEXT0
# Keyboard regex hints
hints:
start:
foreground: *BASE # base
background: *YELLOW # yellow
foreground: *BASE
background: *YELLOW
end:
foreground: *BASE # base
background: *SUBTEXT0 # subtext0
foreground: *BASE
background: *SUBTEXT0
# Selection colors
selection:
text: *BASE # base
background: *ROSEWATER # rosewater
text: *BASE
background: *ROSEWATER
# Normal colors
normal:
black: *SURFACE1 # surface1
red: *RED # red
green: *GREEN # green
yellow: *YELLOW # yellow
blue: *BLUE # blue
magenta: *PINK # pink
cyan: *TEAL # teal
white: *SUBTEXT1 # subtext1
black: *SURFACE1
red: *RED
green: *GREEN
yellow: *YELLOW
blue: *BLUE
magenta: *PINK
cyan: *TEAL
white: *SUBTEXT1
# Bright colors
bright:
black: *SURFACE2 # surface2
red: *RED # red
green: *GREEN # green
yellow: *YELLOW # yellow
blue: *BLUE # blue
magenta: *PINK # pink
cyan: *TEAL # teal
white: *SUBTEXT0 # subtext0
black: *SURFACE2
red: *RED
green: *GREEN
yellow: *YELLOW
blue: *BLUE
magenta: *PINK
cyan: *TEAL
white: *SUBTEXT0
# Dim colors
dim:
black: *SURFACE1 # surface1
red: *RED # red
green: *GREEN # green
yellow: *YELLOW # yellow
blue: *BLUE # blue
magenta: *PINK # pink
cyan: *TEAL # teal
white: *SUBTEXT1 # subtext1
black: *SURFACE1
red: *RED
green: *GREEN
yellow: *YELLOW
blue: *BLUE
magenta: *PINK
cyan: *TEAL
white: *SUBTEXT1
indexed_colors:
- { index: 16, color: "#F5A97F" }
- { index: 17, color: "#F4DBD6" }
- { index: 16, color: *INDEX16 }
- { index: 17, color: *INDEX17 }

View file

@ -0,0 +1,15 @@
{
adapter: ""
gsm-apn: ""
gsm-number: ""
keybindings: {}
receive-dir: ""
theme: {
AdapterPowered: "powderblue",
AdapterNotPowered: "lightcoral",
AdapterPairable: "thistle",
AdapterScanning: "mistyrose",
DevicePropertyDiscovered: "mistyrose",
DevicePropertyConnected: "powderblue"
}
}

View file

@ -58,7 +58,7 @@ theme[cached_mid]="#8aadf4"
theme[cached_end]="#b7bdf8"
# Mem/Disk available meter (Peach -> Red)
theme[available_start]="#f5a97f"
theme[available_start]="#ed6c13"
theme[available_mid]="#ee99a0"
theme[available_end]="#ed8796"
@ -68,7 +68,7 @@ theme[used_mid]="#8bd5ca"
theme[used_end]="#91d7e3"
# Download graph colors (Peach -> Red)
theme[download_start]="#f5a97f"
theme[download_start]="#ed6c13"
theme[download_mid]="#ee99a0"
theme[download_end]="#ed8796"

View file

@ -17,7 +17,7 @@
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = none
follow = mouse
### Geometry ###
@ -329,7 +329,7 @@
[urgency_critical]
background = "#24273A"
foreground = "#CAD3F5"
frame_color = "#F5A97F"
frame_color = "#ED6C13"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#default_icon = /path/to/icon

View file

@ -1,7 +1,7 @@
[
{
"label": "Lock",
"exec": "swaymsg exec ~/.config/swaylock/lock.sh",
"exec": "swaymsg exec /usr/share/sway/scripts/lock.sh",
"icon": "system-lock-screen"
},
{

View file

@ -15,7 +15,7 @@ Catppuccin Gedit theme based on Oblivion theme and Cappuccin for Visual Studio C
<color name="macchiato_mauve" value="#c6a0f6"/>
<color name="macchiato_red" value="#ed6070"/>
<color name="macchiato_maroon" value="#ee99a0"/>
<color name="macchiato_peach" value="#f5a97f"/>
<color name="macchiato_peach" value="#ed6c13"/>
<color name="macchiato_yellow" value="#eed49f"/>
<color name="macchiato_green" value="#a6da95"/>
<color name="macchiato_teal" value="#8bd5ca"/>

View file

@ -1,6 +1,7 @@
timeout 240 'light -G > /tmp/brightness && light -S 10' resume 'light -S $([ -f /tmp/brightness ] && cat /tmp/brightness || echo 100%)'
timeout 300 ~/.config/swaylock/lock.sh
timeout 300 '/usr/share/sway/scripts/lock.sh'
timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"'
timeout 900 'systemctl suspend'
before-sleep 'playerctl pause'
before-sleep ~/.config/swaylock/lock.sh
lock ~/.config/swaylock/lock.sh
before-sleep '/usr/share/sway/scripts/lock.sh'
lock '/usr/share/sway/scripts/lock.sh'

View file

@ -15,4 +15,4 @@ ring-color=c6a0f6
ring-ver-color=7dc4e4
ring-wrong-color=ee99a0
ring-clear-color=8aadf4
ring-caps-lock-color=f5a97f
ring-caps-lock-color=ed6c13

View file

@ -28,7 +28,7 @@
@define-color teal #8bd5ca;
@define-color green #a6da95;
@define-color yellow #eed49f;
@define-color peach #f5a97f;
@define-color peach #ed6c13;
@define-color maroon #ee99a0;
@define-color red #ed6070;
@define-color mauve #c6a0f6;

View file

@ -10,8 +10,8 @@
"custom/help",
"custom/wlsunset",
"idle_inhibitor",
"custom/dunst",
"sway/language",
"custom/dunst",
"custom/clipboard",
"cpu",
"memory",
@ -47,7 +47,7 @@
"tooltip-format": "{tooltip}",
"exec": "echo '{\"class\": \"recording\",\"text\":\"\",\"tooltip\":\"press $mod+Esc to stop recording\"}'",
"exec-if": "pgrep wf-recorder",
"on-click": "killall -s SIGINT wf-recorder",
"on-click": "/usr/share/sway/scripts/recorder.sh",
"signal": 8
},

View file

@ -1,5 +1,6 @@
# set floating mode for specific application
for_window [app_id="firefox" title="^Library$"] floating enable, border pixel 1, sticky enable
for_window [app_id="[Ff]irefox" title="^Library$"] floating enable, border pixel 1
for_window [app_id="[Ll]ibrewolf" title="^Library$"] floating enable, border pixel 1
for_window [app_id="thunderbird" title=".*Reminder"] floating enable
for_window [app_id="floating_shell_portrait"] floating enable, border pixel 1, sticky enable, resize set width 30 ppt height 40 ppt
for_window [app_id="floating_shell"] floating enable, border pixel 1, sticky enable, resize set width 50 ppt height 60 ppt
@ -22,7 +23,7 @@ for_window [class="calamares"] floating enable
for_window [app_id="calamares"] floating enable
for_window [app_id="sway-input-config"] floating enable
for_window [title="Save File"] floating enable
for_window [title="Firefox .*— Sharing Indicator"] floating enable, sticky enable, move to scratchpad
for_window [title="[Ff]irefox .*— Sharing Indicator"] floating enable, sticky enable, move to scratchpad
for_window [app_id="" title=".* is sharing your screen."] floating enable
# set floating mode for generated windows
@ -41,21 +42,19 @@ for_window [title="Copy Files"] floating enable;
for_window [title="Copy Files"] resize set 600 400
for_window [title="Confirm to replace files"] floating enable;
for_window [title="Confirm to replace files"] move position center
# apply mark for Xwayland and wayland native browser windows
for_window [class="Chromium-browser"] mark Browser
for_window [class="Brave-browser"] mark Browser
for_window [class="firefox"] mark Browser
for_window [app_id="Chromium-browser"] mark Browser
for_window [app_id="brave-browser"] mark Browser
for_window [app_id="firefox"] mark Browser
# inhibit scrensaver for fullscreen browser windows
for_window [con_mark="Browser"] {
inhibit_idle fullscreen
}
for_window [title="Choose an Application"] floating enable
for_window [title="Removable medium is inserted"] floating enable
# Don't allow applications to inhibit shortcuts, i.e. grab total control of the
# keyboard. Chrome currently abuses this by enabling it for all "--app=..."
# shortcuts.
seat * shortcuts_inhibitor disable
# mark applications for which shortcuts inhibition is allowed
for_window [class="[Vv]irt-"] mark Grabbing
for_window [class="[Rr]eminna"] mark Grabbing
for_window [app_id="[Vv]irt-"] mark Grabbing
for_window [app_id="[Rr]emmina"] mark Grabbing
# inhibit keyboard shortcuts for marked applications
for_window [con_mark="Grabbing"] shortcuts_inhibitor enable

View file

@ -32,6 +32,7 @@ $bindsym $mod+Shift+e exec nwg-bar -x
$bindsym --locked XF86AudioRaiseVolume exec $volume_up
$bindsym --locked XF86AudioLowerVolume exec $volume_down
$bindsym --locked XF86AudioMute exec $volume_mute
$bindsym --locked XF86AudioMicMute exec $mic_mute
$bindsym --locked XF86AudioPlay exec playerctl play-pause
$bindsym --locked XF86AudioNext exec playerctl next
$bindsym --locked XF86AudioPrev exec playerctl previous
@ -96,7 +97,6 @@ $bindsym $mod+6 workspace $ws6
$bindsym $mod+7 workspace $ws7
$bindsym $mod+8 workspace $ws8
$bindsym $mod+9 workspace $ws9
$bindsym $mod+0 workspace $ws10
set $focus_ws [ "$focus_after_move" == 'true' ] && swaymsg workspace
@ -124,6 +124,9 @@ $bindsym $mod+Shift+n exec /usr/share/sway/scripts/first-empty-workspace.py --mo
## Action // Move focused window to a new workspace and switch there ##
$bindsym $mod+Shift+m exec /usr/share/sway/scripts/first-empty-workspace.py --move --switch
## Action // Toogle shortcuts inhibition // $mod + Control_R ##
$bindsym --inhibited $mod+Control_R exec $toggle_shorcuts_inhibitor
#
# Layout stuff:
#

View file

@ -16,4 +16,4 @@ mode --pango_markup $mode_recording {
$bindsym $mod+Shift+r mode $mode_recording
## Launch // Stop Recording Mode ##
$bindsym $mod+Escape exec killall -s SIGINT wf-recorder
$bindsym $mod+Escape exec $recorder

View file

@ -0,0 +1,18 @@
#
# Screenmirror:
#
# The mode allows the user to mirror the headless output.
# This is primarily used when screencasting to cast only the windows that
# belong to the headless output instead of casting the entire screen.
#
# See the following link for more details:
# https://github.com/emersion/xdg-desktop-portal-wlr/issues/107#issuecomment-1596107337
# set $screenmirror /usr/share/sway/scripts/screenmirror.sh
# set $start_mirror systemd-cat $screenmirror $headless
# set $stop_mirror systemd-cat $screenmirror -k
# ## Launch // Switch to the workspace for mirroring ##
# $bindsym $mod+0 exec $start_mirror, workspace $ws10
# ## Launch // Switch back from the workspace for mirroring ##
# $bindsym $mod+Mod1+0 exec $stop_mirror, workspace back_and_forth

View file

@ -0,0 +1,9 @@
# This output configuration is required for the screenmirror mode to work.
#set $headless HEADLESS-1
#output $headless {
# position 16000 16000
#}
#workspace $ws10 output $headless
#exec swaymsg create_output

View file

@ -15,13 +15,13 @@ set $flock /usr/share/sway/scripts/flock.sh
# Your preferred terminal emulator
set $term alacritty
set $term_cwd $term --working-directory "$(/usr/share/sway/scripts/swaycwd.sh 2>/dev/null || echo $HOME)"
set $term_float alacritty --class floating_shell -e
set $term_float $term --class floating_shell -e
# Rofi theme
set $rofi_theme "* {lightbg: $base; background: $base; lightfg: $blue; foreground: $text; border-color: $blue;} window {border: 2;}"
# Your preferred application launcher
set $menu rofi -show combi -combi-modi "drun,run" -terminal $term -ssh-command "{terminal} {ssh-client} {host} [-p {port}]" -run-shell-command "{terminal} {cmd}" -show-icons -font "$gui-font"
set $menu rofi -show combi -modes combi -combi-modes "drun,run" -terminal "$term" -show-icons -font "$gui-font"
# Add --to-code to bindsym, support for non-latin layouts
set $bindsym bindsym --to-code
@ -44,6 +44,7 @@ set $brightness_down light -r -U $($brightness_step) && $brightness_bar
set $volume_down pulsemixer --change-volume -5 && $volume_bar
set $volume_up pulsemixer --change-volume +5 && $volume_bar
set $volume_mute pulsemixer --toggle-mute && $volume_bar
set $mic_mute /usr/share/sway/scripts/mic-mute.sh
# Clipboard history
set $clipboard cliphist list | rofi -dmenu -font "$gui-font" -p "Select item to copy:" -lines 10 -width 35 | cliphist decode | wl-copy
@ -71,7 +72,7 @@ set $ws6 number 6
set $ws7 number 7
set $ws8 number 8
set $ws9 number 9
set $ws10 number 10
set $ws10 "<span baseline_shift='-20pt' weight='bold'>🖵</span>"
# Screenshot
set $grimshot /usr/bin/grimshot
@ -104,14 +105,14 @@ set $switch_toplevel '[ -f /usr/share/sway/scripts/switch-top-level.py ] && /usr
set $kanshi '[ -x "$(command -v kanshi)" ] && pkill kanshi; exec kanshi'
# Start PCmanFM-Qt as a daemon
set $pcmanfm_daemon '[ -x "$(command -v pcmanfm)" ] && pcmanfm-qt -d'
set $pcmanfm_daemon '[ -x "$(command -v pcmanfm-qt)" ] && pcmanfm-qt -d'
# Clipboard manager
set $cliphist_store '[ -x "$(command -v wl-paste)" ] && [ -x "$(command -v cliphist)" ] && wl-paste --watch cliphist store'
set $cliphist_watch '[ -x "$(command -v wl-paste)" ] && [ -x "$(command -v cliphist)" ] && wl-paste --watch pkill -RTMIN+9 waybar'
# Start nwg-drawer as a daemon
set $nwg_drawer_daemon '[ -x "$(command -v nwg-drawer)" ] && nwg-drawer -r'
set $nwg_drawer_daemon '[ -x "$(command -v nwg-drawer)" ] && nwg-drawer -r -term "$term"'
# Start playerctl as daemon
set $watch_playerctl '[ -x "$(command -v playerctl)" ] && pkill playerctl; playerctl -a metadata --format \'{{status}} {{title}}\' --follow | while read line; do pkill -RTMIN+5 waybar; done'
@ -124,3 +125,9 @@ set $calendar_daemon 'calcurse --daemon'
# Notifications from Swappy
set $swappy_notify '[ -x "$(command -v swappy)" ] && /usr/share/sway/scripts/screenshot-notify.sh'
# Start a screensaver
set $lock '/usr/share/sway/scripts/lock.sh'
# Toggle shortcuts inhibition mode for the current focused window
set $toggle_shorcuts_inhibitor 'swaymsg "seat - shortcuts_inhibitor toggle"'

View file

@ -0,0 +1,3 @@
[screencast]
chooser_type=dmenu
chooser_cmd=/usr/share/sway/scripts/select-output.sh

View file

@ -0,0 +1,12 @@
[Unit]
Description=Toggle idle inhibition depending on whether the audio is playing or not
PartOf=swayidle.service
After=swayidle.service
[Service]
ExecStart=/usr/share/sway/scripts/idle-inhibitor.sh
Restart=always
RestartSec=30
[Install]
WantedBy=sway-session.target

View file

@ -6,9 +6,9 @@ VISIBILITY_SIGNAL=30
QUIT_SIGNAL=31
if [ "$1" = "--toggle" ]; then
pkill -f -${VISIBILITY_SIGNAL} nwg-wrapper
pkill -f -${VISIBILITY_SIGNAL} 'nwg-wrapper.*-s help.sh'
else
pkill -f -${QUIT_SIGNAL} nwg-wrapper
pkill -f -${QUIT_SIGNAL} 'nwg-wrapper.*-s help.sh'
for output in $(swaymsg -t get_outputs --raw | jq -r '.[].name'); do
nwg-wrapper -o "$output" -i -sv ${VISIBILITY_SIGNAL} -sq ${QUIT_SIGNAL} -s help.sh -p left -a end &
done

View file

@ -0,0 +1,32 @@
#!/bin/bash
check_status() {
grep -s -l -v "closed" \
/proc/asound/card*/pcm*/sub*/status \
&>/dev/null
}
out() {
printf "Idle inhibition is OFF.\n"
exit 0
}
watch_status() {
printf "Idle inhibition is ON.\n"
while check_status; do
sleep 10
done
out
}
main() {
check_status || out
test "$1" = "-w" && watch_status
systemd-inhibit \
--what=idle \
--who="${0##*/}" \
--why="Inhibit idle due to audio is now playing" \
--mode=block \
"$0" -w
}
main "$@"

10
usr/share/sway/scripts/lock.sh Executable file
View file

@ -0,0 +1,10 @@
#!/bin/bash
USER_SCRIPT="$HOME/.config/swaylock/lock.sh"
GLOB_SCRIPT="/usr/share/sway/scripts/swaylock.sh"
if [[ -x "$USER_SCRIPT" ]]; then
"$USER_SCRIPT"
else
"$GLOB_SCRIPT"
fi

View file

@ -0,0 +1,14 @@
#!/bin/bash
set -e
MIC="${1:-'Capture'}"
amixer sset "$MIC" toggle
STATE="$(amixer sget "$MIC",0 | sed -E -e '0,/^.*\[(on|off)\].*$/d' -e 's/^.*\[(\w+)\].*$/\1/')"
test -n "$STATE" && notify-send \
--app-name sway \
--expire-time 800 \
"Microphone is $STATE"

View file

@ -1,44 +1,69 @@
#!/bin/bash
set -x
pgrep wf-recorder
status=$?
countdown() {
notify "Recording in 3 seconds" -t 1000
sleep 1
notify "Recording in 2 seconds" -t 1000
sleep 1
notify "Recording in 1 seconds" -t 1000
for count in {3..1}; do
notify "Recording in $count seconds" -t 1000
sleep 1
done
}
notify() {
line=$1
shift
notify-send "Recording" "${line}" -i /usr/share/icons/Yaru/scalable/devices/camera-video-symbolic.svg "$*"
notify-send \
"$1" \
-i "/usr/share/icons/Yaru/scalable/devices/camera-video-symbolic.svg" \
"${@:2}"
}
if [ $status != 0 ]; then
kill_waybar() {
pkill -RTMIN+8 waybar
}
kill_recursive() {
ps -o sid= -p "$1" | xargs pkill --signal SIGINT -g
}
cleanup() {
pid=$(cat "$1")
rm "$1"
kill_waybar
kill_recursive "$pid"
exit
}
main() {
pid_file="/tmp/screenrecorder-$UID.pid"
test -e "$pid_file" && cleanup "$pid_file"
echo "$$" > "$pid_file"
target_path=$(xdg-user-dir VIDEOS)
timestamp=$(date +'recording_%Y%m%d-%H%M%S')
notify "Select a region to record" -t 1000
area=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp)
area=$(swaymsg -t get_tree | \
jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | \
slurp)
countdown
(sleep 0.5 && pkill -RTMIN+8 waybar) &
(sleep 0.5 && kill_waybar) &
if [ "$1" == "-a" ]; then
if [[ "$1" == "-a" ]]; then
file="$target_path/$timestamp.mp4"
wf-recorder --audio -g "$area" --file="$file"
else
file="$target_path/$timestamp.webm"
wf-recorder -g "$area" -c libvpx --codec-param="qmin=0" --codec-param="qmax=25" --codec-param="crf=4" --codec-param="b:v=1M" --file="$file"
output="$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')"
wf-recorder \
-g "$area" -c libvpx \
--codec-param="qmin=0" \
--codec-param="qmax=25" \
--codec-param="crf=4" \
--codec-param="b:v=1M" \
-o "$output" \
--file="$file"
fi
pkill -RTMIN+8 waybar && notify "Finished recording ${file}"
else
pkill --signal SIGINT wf-recorder
pkill -RTMIN+8 waybar
fi
kill_waybar && notify "Finished recording ${file}"
rm $pid_file
}
main "$@"

View file

@ -0,0 +1,38 @@
#!/bin/bash
#
# This script implements the function of mirroring outputs.
# It uses wl-mirror and Sway's ability to create headless outputs.
#
# The script is written as a singleton. It allows the user to run only one
# instance of itself and kills all others. This is necessary so that wl-mirror
# instances do not interfere with each other.
SELF_NAME="$(basename "$0")"
SELF_PID="$$"
get_pgid() {
ps -h -o "%r" -p "$1" | awk '{print $1}'
}
SELF_PGID="$(get_pgid "$SELF_PID")"
kill_by_pgid() {
pkill -"$2" -g "$1"
}
kill_copies() {
mapfile -t pids < <(pgrep -u "$USER" -x "$SELF_NAME")
for pid in "${pids[@]}" ; do
pgid="$(get_pgid "$pid")"
[[ $pgid -ne $SELF_PGID ]] && kill_by_pgid "$pgid" "INT"
done
}
main() {
# Don't single quote the trap's command!
# It must be expanded when the trap is defined.
# shellcheck disable=SC2064
trap "kill_by_pgid $SELF_PGID TERM" INT
kill_copies
[[ "$1" != "-k" ]] && wl-mirror -F "${1:-HEADLESS-1}"
}
main "$@"

View file

@ -0,0 +1,33 @@
#!/bin/bash
export LC_ALL=C
TITLE="Select the output for the screencast"
OUT_NAME="HEADLESS-1"
FONT_SIZE="12"
ROSEWATER="#f4dbd6"
FONT="Noto Sans ${FONT_SIZE}"
FONT_COLOR="${ROSEWATER}"
I_SIZE="$(awk "BEGIN {print (${FONT_SIZE}*1.08)}")"
OUT_SIZE="$(awk "BEGIN {print (${FONT_SIZE}*0.94)}")"
TIP_SHIFT="$(awk "BEGIN {print (1+(${I_SIZE}-${FONT_SIZE})/2)}")"
TIP="\
<span color='${FONT_COLOR}'>\
<span size='${I_SIZE}pt'></span> \
<span baseline_shift='${TIP_SHIFT}pt'>use \
<span size='${OUT_SIZE}pt'>${OUT_NAME}</span> \
to cast only chosen windows\
</span>\
</span>\
"
swaymsg -t get_outputs \
| jq -r '.[] | .name' \
| rofi \
-dmenu -i -l 4 \
-p "${TITLE}" \
-window-title "${TITLE}" \
-mesg "${TIP}" \
-font "${FONT}"