Initial commit

This commit is contained in:
Penelope Gwen 2024-06-03 20:18:15 -06:00
commit d8e5a0a533
22 changed files with 411 additions and 0 deletions

65
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,65 @@
# Is performed before the scripts in the stages step
before_script:
- source /etc/profile
# Defines stages which are to be executed
stages:
- build
- upload
- release
.setup_script: &setup_scripts
- apt-get update
- apt-get -y build-dep .
- apt-get -y install dpkg-dev
.compile: &compile
stage: compile
only:
- tags
script:
- *setup_scripts
- dpkg-buildpackage -b
- mkdir -p ./build/{release,debug}
- find ../ -name "*.deb" -not -name "*dbgsym*" -exec mv {} ./build/release/ \;
- find ../ -name "*dbgsym*.deb" -exec mv {} ./build/debug/ \;
artifacts:
paths:
- build/release/*
- build/debug/*
untracked: true
build:
<<: *compile
stage: build
upload:
stage: upload
dependencies:
- build
only:
- tags
script:
- find ./build/release -name "*.deb"
- debs=( $( find ./build/release -name "*.deb" ) )
- assets=""
- for d in ${debs[@]};do
- file=$( basename ${d} )
- url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}/${file}"
- assets="${assets} --assets-link {\"name\":\"${file}\",\"url\":\"${url}\",\"link_type\":\"other\"} "
- "curl --header \"JOB-TOKEN: $CI_JOB_TOKEN\" --upload-file \"${d}\" \"${url}\""
- done
- echo "ASSETS_ARG=${assets}" >> assets.env
artifacts:
reports:
dotenv: assets.env
release:
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
only:
- tags
script:
- echo "making release!"
- echo ${ASSETS_ARG}
- release-cli create --name "Release ${CI_COMMIT_TAG}" --tag-name "${CI_COMMIT_TAG}" ${ASSETS_ARG}

20
bin/sp-clipboard Executable file
View file

@ -0,0 +1,20 @@
#!/bin/bash
cb_count=$(copyq count)
cb_count=10
wofilist=""
for i in $(seq $cb_count);do
cb_line="$( copyq read $((${i}-1)) | tr '\n' ' ' )"
echo "${cb_line}"
if [[ "${cb_line}" == "" ]];then
cb_line=$( copyq read ? "$((${i}-1))" | head -n 1 )
fi
wofilist="${wofilist}${setnl}${i}. ${cb_line}"
setnl="\n"
done
selected=$( echo -e "${wofilist}" | wofi -i --dmenu -k /dev/null | cut -d. -f1)
copyq select "$(( ${selected}-1)) "

8
bin/sp-global-shortcuts Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
source "/usr/lib/sp-functions"
options=$( ls "${conf_dir}/global-shortcuts/" )
op=$( echo -e "${options}" | wofi -i --dmenu | awk '{print}' )
"${conf_dir}/global-shortcuts/${op}"

17
bin/sp-launcher Executable file
View file

@ -0,0 +1,17 @@
#!/bin/bash
source "/usr/lib/sp-functions"
source "${conf_dir}/config"
case $1 in
file_manager )
launch_exec=${filemanager_cmd}
launch_arg=$( jq -r .[].home_directory "${conf_dir}/profiles/$( get_profile_id )/vars.json" )
;;
browser )
launch_exec=${browser_cmd}
launch_arg=$( jq -r .[].browser_profile "${conf_dir}/profiles/$( get_profile_id )/vars.json" )
;;
esac
bash -c "${launch_exec} ${launch_arg}"

16
bin/sp-lock Executable file
View file

@ -0,0 +1,16 @@
#!/bin/bash
source "/usr/lib/sp-functions"
outputs=( $(swaymsg -t get_outputs | jq -r '.[] | {name} | "\(.name)"') )
for o in ${outputs[@]};do
workspace=$(swaymsg -t get_workspaces | jq -r '.[] | select(.output) | {name} | "\(.name)"')
wpno=$(cat "${cache_dir}/displays/${o}")
wp_imgpath="${conf_dir}/wallpaper/${o}/${wpno}.jpg"
sl_imgpath="${cache_dir}/lock/${o}.jpg"
convert -scale 10% -blur 0x3 -resize 500% "${wp_imgpath}" "${sl_imgpath}"
sl_args="${sl_args}--image ${o}:${sl_imgpath} "
done
swaylock ${sl_args}

18
bin/sp-powermenu Executable file
View file

@ -0,0 +1,18 @@
#!/usr/bin/env bash
op=$( echo -e " Reload\n⏻ Poweroff\n Reboot\n Suspend\n🔒 Lock\n Logout" | wofi -i --dmenu -a | awk '{print tolower($2)}' )
case $op in
poweroff)
;&
reboot)
;&
suspend)
systemctl $op
;;
lock)
sp-lock
;;
logout)
swaymsg exit
;;
esac

45
bin/sp-profiles Executable file
View file

@ -0,0 +1,45 @@
#!/usr/bin/env bash
source "/usr/lib/sp-functions"
get_profile_list
case $1 in
next|prev)
current_profile=$(cat "${cache_dir}/active_profile")
echo ${current_profile}
;;&
next)
new_profile=$(( ${current_profile}+1 ))
[[ "$new_profile" -eq "${p_count}" ]] && new_profile=0
;;&
prev)
new_profile=$(( ${current_profile}-1 ))
[[ "$new_profile" -eq "-1" ]] && new_profile=3
;;&
prev|next)
op=$(printf "%01d\n" ${new_profile})
;;
*)
for (( p="0"; p<${p_count}; p++ ));do
[[ $p -eq $(( ${p_count} - 1 )) ]] && nl="" || nl="\n"
wofilist="${wofilist}${p_icons[$p]} ${p_names[$p]}${nl}"
done
[[ -z $1 ]] && op=$( echo -e "${wofilist}" | wofi -i --dmenu --width 250 --height 320 -k /dev/null | awk '{print $2}' ) || op="${1}"
op=$(echo ${p_names[@]/$op//} | cut -d/ -f1 | wc -w | tr -d ' ')
;;
esac
[[ "$op" -gt "$(( $p_count - 1 ))" ]] && exit
[[ $op -eq "0" ]] && p_num="" || p_num="$op"
p_icon="${p_icons[$op]}"
for i in {1..10};do
[[ "$i" -eq "10" ]] && k="0" || k=$i
swaymsg 'bindsym $mod+'"$k"' workspace number "'"${p_num}${i}:${p_icon}"'"'
swaymsg 'bindsym $mod+Shift+'"$k"' move container to workspace number "'"${p_num}${i}:${p_icon}"'"'
done
moveto="${p_num}1:${p_icon}"
swaymsg 'workspace number "'"${p_num}"'"1:"'"${p_icon}"'"'
echo "${op}" > "${cache_dir}/active_profile"

7
bin/sp-rename Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
source "/usr/lib/sp-functions"
new_wsname="$( get_workspace_prefix )$(wofi -i --dmenu --height 1 --search $( get_workspace_name ))"
swaymsg 'rename workspace "'"$( get_workspace_fullname )"'" to "'"${new_wsname}"'"'

13
bin/sp-screenshot Executable file
View file

@ -0,0 +1,13 @@
#!/usr/bin/env bash
source "/usr/lib/sp-functions"
source "${conf_dir}/config"
op=$( echo -e "Output\nWindow\nRegion" | wofi -i --dmenu --width 250 --height 260 | awk '{print tolower($1)}' )
echo "$op"
sleep 0.5
mkdir -p "${cache_dir}/screenshots/"
sway-screenshot -m $op --output-folder "${cache_dir}/screenshots/"
mv "${cache_dir}/screenshots/"* "${screenshot_dir}"

10
bin/sp-shortcuts Executable file
View file

@ -0,0 +1,10 @@
#!/bin/bash
source "/usr/lib/sp-functions"
current_profile=$( get_profile_id )
profile_scripts=$( ls "${conf_dir}/profiles/${current_profile}/shortcuts/" )
op=$( echo -e "${profile_scripts}" | wofi -w 2 -i --dmenu | awk '{print}' )
"${conf_dir}/profiles/${current_profile}/shortcuts/${op}"

30
bin/sp-wallpaper Executable file
View file

@ -0,0 +1,30 @@
#!/bin/bash
source "/usr/lib/sp-functions"
getwpno() {
wpno=$(printf "%02d\n" $(($(echo "$1" | awk '{print $1}' | grep -o "^[1-9]*")-1)) | cut -c 1 | sed 's/[^0-9]*//g')
echo "${wpno}" | tee "${cache_dir}/displays/${2}"
}
setbg() {
for d in ${outputs[@]};do
d_wpno=$(cat "${cache_dir}/displays/${d}")
swaymsg output "${d}" bg "${conf_dir}/wallpaper/${d}/${d_wpno}.jpg" fill
done
}
output=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | {name} | "\(.name)"')
outputs=( $(swaymsg -t get_outputs | jq -r '.[] | {name} | "\(.name)"') )
workspace=$(swaymsg -t get_workspaces | jq -r '.[] | select(.focused) | {name} | "\(.name)"')
getwpno "${workspace}" "${output}"
setbg "${output}" "${wpno}"
swaymsg -r -t subscribe -m '["workspace"]' | jq -rc --unbuffered 'select(.change == "focus") | .current | "\(.name) \(.output)"' | while read name output;do
wsno=$(($(echo "$name" | awk '{print $1}' | grep -o "^[1-9]*")-1))
wpno_last=$(cat "${cache_dir}/displays/${output}")
getwpno "${name}" "${output}"
if [[ "${wpno}" -ne "${wpno_last}" ]];then
setbg "${output}" "${wpno}"
fi
done

6
debian/README.Debian vendored Normal file
View file

@ -0,0 +1,6 @@
sway-profiles for Debian
------------------------
Configuration files for sway's supporting programs
-- Penelope Gwen <support@pogmom.me>, Thu, 03 Jun 2024 19:45:09 -0600

5
debian/changelog vendored Normal file
View file

@ -0,0 +1,5 @@
pogmom-sway-base (0.1) unstable; urgency=medium
* Initial release.
-- Penelope Gwen <support@pogmom.me> Thu, 3 Jun 2024 19:41:19 -0600

25
debian/control vendored Normal file
View file

@ -0,0 +1,25 @@
Source: sway-profiles
Section: X11
Priority: optional
Maintainer: Penelope Gwen <support@pogmom.me>
Rules-Requires-Root: no
Build-Depends:
debhelper-compat (= 13),
Standards-Version: 4.7.0
Homepage: https://git.pogmom.me/pogmommy/sway-profiles
Package: sway-profiles
Architecture: all
Depends:
swaybg
Recommends:
wofi,
fonts-font-awesome
Suggests:
copyq,
sway-screenshot
Description: Some scripts to organize workflows on sway
A handful of useful bash scripts that let you organize
your sway workspaces into profiles

60
debian/copyright vendored Normal file
View file

@ -0,0 +1,60 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://git.pogmom.me/pogmommy/sway-profiles
Upstream-Name: sway-profiles
Upstream-Contact: Penelope Gwen <support@pogmom.me>
Files:
*
Copyright:
2024 Penelope Gwendolyn <support@pogmom.me>
License: Opinionated Queer License
PERMISSIONS
.
The creators of this Work (“The Licensor”) grant permission
to any person, group or legal entity that doesn't violate the prohibitions below (“The User”),
to do everything with this Work that would otherwise infringe their copyright or any patent claims,
subject to the following conditions:
.
OBLIGATIONS
.
The User must give appropriate credit to the Licensor,
provide a copy of this license or a (clickable, if the medium allows) link to
oql.avris.it/license/v1.1,
and indicate whether and what kind of changes were made.
The User may do so in any reasonable manner,
but not in any way that suggests the Licensor endorses the User or their use.
.
PROHIBITIONS
.
No one may use this Work for prejudiced or bigoted purposes, including but not limited to:
racism, xenophobia, queerphobia, queer exclusionism, homophobia, transphobia, enbyphobia, misogyny.
.
No one may use this Work to inflict or facilitate violence or abuse of human rights as defined in the
Universal Declaration of Human Rights.
.
No law enforcement, carceral institutions, immigration enforcement entities, military entities or military contractors
may use the Work for any reason. This also applies to any individuals employed by those entities.
.
No business entity where the ratio of pay (salaried, freelance, stocks, or other benefits)
between the highest and lowest individual in the entity is greater than 50 : 1
may use the Work for any reason.
.
No private business run for profit with more than a thousand employees
may use the Work for any reason.
.
Unless the User has made substantial changes to the Work,
or uses it only as a part of a new work (eg. as a library, as a part of an anthology, etc.),
they are prohibited from selling the Work.
That prohibition includes processing the Work with machine learning models.
.
SANCTIONS
.
If the Licensor notifies the User that they have not complied with the rules of the license,
they can keep their license by complying within 30 days after the notice.
If they do not do so, their license ends immediately.
.
WARRANTY
.
This Work is provided “as is”, without warranty of any kind, express or implied.
The Licensor will not be liable to anyone for any damages related to the Work or this license,
under any kind of legal claim as far as the law allows.

2
debian/install vendored Normal file
View file

@ -0,0 +1,2 @@
bin/* usr/bin
lib/* usr/lib

4
debian/postinst vendored Normal file
View file

@ -0,0 +1,4 @@
#!/bin/bash
#mkdir -p /etc/greetd
#update-alternatives --install /etc/greetd/config.toml greetd /usr/share/greetd/pogmom/config.toml 30 --force

3
debian/postrm vendored Normal file
View file

@ -0,0 +1,3 @@
#!/bin/bash
#update-alternatives --remove greetd /usr/share/greetd/pogmom/config.toml

4
debian/rules vendored Executable file
View file

@ -0,0 +1,4 @@
#!/usr/bin/make -f
%:
dh $@

1
debian/source/format vendored Normal file
View file

@ -0,0 +1 @@
3.0 (native)

1
debian/sway-profiles-docs.docs vendored Normal file
View file

@ -0,0 +1 @@
README.Debian

51
lib/sp-functions Executable file
View file

@ -0,0 +1,51 @@
#!/bin/bash
conf_dir="$HOME/.config/sway-profiles"
cache_dir="$HOME/.cache/sway-profiles"
mkdir -p "${cache_dir}/"{displays,lock,screenshots}
get_workspace_id(){
workspace_id=$( printf "%02d\n" $( swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true)|.name' | sed 's/:.*//' ) )
echo "${workspace_id}"
}
get_workspace_fullname(){
workspace_fullname=$( swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true)|.name' )
echo "${workspace_fullname}"
}
get_workspace_prefix(){
workspace_prefix="$( grep -o '[0-9]*:[^a-zA-Z1-9]' <<< $( swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true)|.name' ) )"
echo "${workspace_prefix}"
}
get_workspace_name(){
workspace_name=$( echo "$( get_workspace_fullname )" | sed 's/'"$( get_workspace_prefix )"'//' )
echo "${workspace_name}"
}
get_profile_id(){
current_workspace=$( printf "%02d\n" $(( $( swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true)|.name' | sed 's/:.*//' ) - 1 )) )
echo "${current_workspace:0:1}"
}
get_profile_name(){
echo "test"
}
get_profile_list(){
p_icons=()
p_names=()
while read p;do
p_icons+=($( awk '{print $1}'<<<"${p}" ))
p_names+=($( awk '{print $2}'<<<"${p}" ))
done<"${conf_dir}/profile_list"
p_count="${#p_names[@]}"
}
get_profile_icon(){
get_profile_list
echo "${p_icons[ $( get_profile_id ) ]}"
}