General Enhancements #2

Merged
me merged 17 commits from dev into main 2025-01-29 11:38:57 -07:00
14 changed files with 354 additions and 57 deletions

View File

@ -95,30 +95,39 @@
case $pkg_mgr in
apt)
if [[ $distribution != "ParrotOS" ]]; then
echo "*** Apt ***" &&
echo -e "******* Apt *******\n*** Update Cache ***" &&
sudo apt update &&
echo -e "\n*** Auto Remove ***" &&
sudo apt autoremove {{ update_accept_var }} &&
echo -e "\n*** Clean ***" &&
sudo apt clean {{ update_accept_var }} &&
echo -e "Cleaned!\n\n*** Configure DPKG ***" &&
sudo dpkg --configure -a &&
echo -e "\n*** Fix Broken/Missing ***" &&
sudo apt --fix-broken --fix-missing install &&
echo -e "\n*** Upgrade ***" &&
sudo apt dist-upgrade --allow-downgrades --fix-broken \
--fix-missing {{ update_accept_var }} ||
return 1
else
echo "*** Parrot ***"
echo -e "******* Parrot *******\n*** Update Cache ***" &&
sudo apt update &&
echo -e "\n*** Auto Remove ***" &&
sudo apt autoremove {{ update_accept_var }} &&
parrot_mirrors_suck=true &&
while [[ $parrot_mirrors_suck ]]; do
unset parrot_mirrors_suck
echo -e "\n*** Upgrade ***"
sudo parrot-upgrade
if [[ $? != 0 ]]; then
parrot_mirrors_suck=true
echo -e "*** Update Cache, Again ***"
sudo apt update --fix-missing
fi
done ||
return 1
fi
echo -e "\n******* Mission Complete!! *******"
;;
pacman)

View File

@ -34,9 +34,12 @@ function usage() {
Parameters:
-s SIZE : Integer for the maximum length of either image dimension.
Default size is 2000.
-l LOCATION : The specific image or folder which needs images shrunk.
Default location is the current directory.
-r : Recursively shrink images based on the location passed.
-f : Force the image to be shrunk even if a file already exists for it.
-F : FORCE the image to be shrunk even if the file is already shrunk.
-d : Delete the original image if the compressed image is smaller.
-c : Clean the filename of underscores, dashes, 'IMG', etc.
-A : Resursively Force, Delete, and Clean.
@ -48,12 +51,13 @@ function usage() {
## Parameters ##
while getopts ":s:l:rfdcAhx" opt; do
while getopts ":s:l:rfFdcAhx" opt; do
case $opt in
s) in_size="$OPTARG" && size="$in_size" ;;
l) location="$OPTARG" ;;
r) recurse="Y" && search="find" ;;
f) force="Y" ;;
F) super_force="Y" ;;
d) delete="Y" ;;
c) clean="Y" ;;
A) recurse="Y" && search="find" && force="Y" && delete="Y" && clean="Y" ;;
@ -90,8 +94,8 @@ $search "$location" | sort | while read image; do
# Avoid processing directories no matter the name.
[ -d "$image" ] && continue
# Avoid processing files previously shrunk.
[[ "$image" == *"$tag"* ]] && continue
# Avoid processing files previously shrunk, unless we are FORCEing.
[[ "$image" == *"$tag"* && -z "$super_force" ]] && continue
echo -e "\n$image"
@ -107,7 +111,7 @@ $search "$location" | sort | while read image; do
fi
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD.$extension"
new_image="${image//.$extension/}.$tag-$date_YYYYMMDD-$size.$extension"
## Clean Filename ##
# Prevent directory from having its name cleaned too.

View File

@ -32,7 +32,14 @@ function usage {
-i input : The input file or folder with which to search for video files.
If nothing is provided, current directory (.) is assumed.
-v bitrate : The video bitrate to convert to.
Defaults to '2000k'.
Defaults are based on the size passed.
>= 2160: '30M'
>= 1440: '12M'
>= 1080: '5M'
>= 720: '2000k'
>= 480: '750k'
>= 360: '250k'
< 360: '100k'
-a bitrate : The audio bitrate to convert to.
Defaults to '192k'.
-c vcodec : The video codec you'd like to use, such as libopenh264.
@ -96,13 +103,30 @@ if [[ -z "$input" ]]; then
fi
if [[ -z "$video_bitrate" ]]; then
# Based roughly on the 2.5 step iteration used for 720 and 1080.
if (( $size >= 2160 )); then
video_bitrate="30M"
elif (( $size >= 1440 )); then
video_bitrate="12M"
elif (( $size >= 1080 )); then
video_bitrate="5M"
elif (( $size >= 720 )); then
video_bitrate="2000k"
elif (( $size >= 480 )); then
video_bitrate="750k"
elif (( $size >= 360 )); then
video_bitrate="250k"
else
video_bitrate="100k"
fi
fi
compress_tags="$video_bitrate"
video_bitrate="-b:v $video_bitrate -minrate 0 -maxrate $video_bitrate -bufsize $video_bitrate"
if [[ -z "$audio_bitrate" ]]; then
audio_bitrate="192k"
fi
compress_tags="$compress_tags-$audio_bitrate"
audio_bitrate="-b:a $audio_bitrate"
if [[ -z "$codec" ]]; then
@ -124,7 +148,11 @@ fi
if [[ -z $size ]]; then
size="720"
fi
size="-filter:v scale=-1:$size"
while (( ${#size} < 4 )); do
size="0$size"
done
compress_tags="$size-$compress_tags"
size="-filter:v scale=-2:$size"
## Main ##
@ -172,6 +200,9 @@ $search_command "$input" | sort | while read file; do
# Build the new filename to signify it is different than the original.
newfile="${file//$extension/$filename_flag-$date_YYYYMMDD.$extension_lower}"
# Add the size, video, and audio quality it was converted to.
newfile="${newfile//\.$extension_lower/_$compress_tags.$extension_lower}"
if [[ $newfile == $file ]]; then
echo "ERROR: The new calculated filename matches the old, skipping." >&2
continue

View File

@ -75,7 +75,6 @@
- include_tasks: tasks/general/software/sendmail.yml
when: ansible_system == "FreeBSD"
# Gather again in case missing programs have now been installed.
- include_tasks: facts/general/gather.yml
@ -154,6 +153,9 @@
- include_tasks: tasks/workstation/shared/settings/services.yml
# Final Tasks (SLOW) #
- include_tasks: tasks/workstation/linux/software/flutter.yml
when: ansible_system == "Linux"
- include_tasks: tasks/workstation/linux/software/flatpaks.yml
when: ansible_system == "Linux" and flatpak_distro

View File

@ -35,11 +35,11 @@
;
; user : Provide the name of the user account.
; Example: tom, jerry, kim, sarah
; Default: ling
; Default: user
;
; user_desc : Provide the description of the user account.
; Example: Thomas, Jerry, Kimberly, Sarah
; Default: Hyperling
; Default: User
;
; sshd_port : Determine the port which SSHD should listen on.
; Example: 12345
@ -101,6 +101,22 @@
; Slows down the rate of services such as telegraf and cron.
; Default: false
;
;;;;;;;;;;;;;;;;;;;; Server Shortcut ;;;;;;;;;;;;;;;;;;;;
;
; For typing `prod` and getting straight to a server, like in env-termux.
;
; prod_host : Branch to use on this machine.
; Example: myserver.com, mywebhost.net
; Default: hyperling.com
;
; prod_port : Provide the git host that the machine should poll.
; Example: 22, 222, 2222
; Default: 22
;
; prod_user : Port of the server host to use for SSH requests.
; Example: jim, bob, jeff, anne
; Default: user
;
[global]
marker: '; {mark} MANAGED BY ANSIBLE | Generic Config'
state: present
@ -124,6 +140,9 @@
git_user: "{{ lookup('ini', 'git_user file={{gen_file}} default=me') }}"
git_project: "{{ lookup('ini', 'git_project file={{gen_file}} default=env-ansible') }}"
git_ssh_port: "{{ lookup('ini', 'git_ssh_port file={{gen_file}} default=22') }}"
prod_host: "{{ lookup('ini', 'prod_host file={{gen_file}} default=hyperling.com') }}"
prod_port: "{{ lookup('ini', 'prod_port file={{gen_file}} default=22') }}"
prod_user: "{{ lookup('ini', 'prod_user file={{gen_file}} default=user') }}"
- name: General | Account Management | Provisioning Configuration | General | List
set_fact:
@ -144,6 +163,9 @@
- { 'git_user': "{{ git_user }}" }
- { 'git_project': "{{ git_project }}" }
- { 'git_ssh_port': "{{ git_ssh_port }}" }
- { 'prod_host': "{{ prod_host }}" }
- { 'prod_port': "{{ prod_port }}" }
- { 'prod_user': "{{ prod_user }}" }
## Workstation ##
@ -159,6 +181,10 @@
; coding : Set to true for installation of code editors (VSCode, PyCharm, Android Studio)
;
; editing : Set to true for installation of Audio/Video editors (Shotcut, Audacity, OBS Stdio, GIMP)
; Set to video for only the video related portions.
; - Shotcut, OpenShot, OBS Studio, etc.
; Set to audio for only the music related portions.
; - Audacity (or similar), LMMS, VMPK, etc.
;
; gaming : Set to true for installation of gaming software (Steam, Lutris)
;

View File

@ -281,16 +281,20 @@
unset OPTIND
unset clean
unset network
du_params="-ha"
while (( $# > 0 )); do
case $1 in
-c | -y | --clean )
clean="Y" ;;
-n | -net | --network )
network="Y" ;;
-s | -sum | --summarize )
du_params="-sh" ;;
* )
echo "
ERROR: Option '$1' with value '$2' not recognized.
$PROG [-c|-y|--clean] [-n|-net|--network]
$PROG [-c | -y | --clean] [-n | -net | --network] \
[-s | -sum | --summarize]
" >&2
return 1
;;
@ -318,8 +322,8 @@
echo "Checking $dir..."
$sudo find $dir -name TRASH | while read trash; do
if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
$sudo du -ha $trash | sort -h
echo "Found $trash:"
$sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
$sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -328,8 +332,8 @@
done
$sudo find $dir $maxdepth -name "*"Trash"*" | while read trash; do
if [[ "$trash" != "" && `$sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
$sudo du -ha $trash | sort -h
echo "Found $trash:"
$sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
$sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -345,8 +349,8 @@
echo "Checking $dir..."
sudo find $dir -name TRASH | while read trash; do
if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
sudo du -ha $trash | sort -h
echo "Found $trash:"
sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -355,8 +359,8 @@
done
sudo find $dir -name .Trash"*" | while read trash; do
if [[ "$trash" != "" && `sudo ls -a $trash` ]]; then
echo "Found $trash with contents:"
sudo du -ha $trash | sort -h
echo "Found $trash:"
sudo du $du_params $trash | sort -h
if [[ "$clean" == "Y" ]]; then
echo "Cleaning trash..."
sudo sh -c "cd $trash; rm -rfv ..?* .[!.]* *"
@ -543,7 +547,7 @@
echo -e "\nDone!\n"
}
alias_clone: |
alias clone="rsync -auPhz --delete"
alias clone="rsync -auPhz --delete --exclude '.gradle' --exclude 'app/build'"
export_hyperling: |
export HYPERLING6="2a07:e03:3:80::1"
export HYPERLING4="185.130.47.173"
@ -555,6 +559,20 @@
fi
alias_scan: |
alias scan="nmap -A -p- --script=vuln"
alias_prod: |
alias prod="ssh -p {{ prod_port }} {{ prod_user }}@{{ prod_host }}"
function_clean_code: |
function clean-code {
echo -e "******* Android *******\n*** Build Caches ***"
find ~/Code/android-*/app -maxdepth 1 -type d -name "build" \
-exec du -hs {} \; -exec rm -rf {} \;
echo -e "\n*** Gradle Caches ***"
find ~/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \
-exec du -hs {} \; -exec rm -rf {} \;
echo -e "\n*** Done! ***"
}
alias code-clean="clean-code"
- name: General | Account Management | Users | Files | Common Variable
set_fact:
@ -596,6 +614,8 @@
{{ export_hyperling }}
{{ source_docker_env }}
{{ alias_scan }}
{{ alias_prod }}
{{ function_clean_code }}
- name: General | Account Management | Users | Files | .bashrc
blockinfile:

View File

@ -6,9 +6,7 @@
path: "{{ user_root.home }}/bin/scm.sh"
block: |
# 20210211 - Make life easier!
git clone {{ git_repo_http }} ansible-pull
ansible-pull/setup.sh
mv ansible-pull ~/TRASH/
time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }}
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"
marker_end: "exit 0"

View File

@ -6,9 +6,7 @@
path: "{{ user_user.home }}/bin/scm.sh"
block: |
# 20210211 - Make life easier!
git clone {{ git_repo_http }} ansible-pull
ansible-pull/setup.sh
mv ansible-pull ~/TRASH/
time {{ ansible_pull_exec.stdout }} -U {{ git_repo_http }}
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"
marker_end: "exit 0"

View File

@ -44,7 +44,7 @@
- shotcut
- obs-studio
state: present
when: editing == true
when: editing in (true, "video")
- name: Workstation | FreeBSD | Software | Packages | Editing | Install
package:
@ -53,7 +53,7 @@
- shotcut
- obs-studio
state: absent
when: not editing == true
when: not editing in (true, "video")
# Gaming #

View File

@ -40,17 +40,18 @@
- { app: "org.signal.Signal", name: "signal", extra: "" }
- { app: "org.mozilla.firefox", name: "firefox-flatpak", extra: "" }
- { app: "com.transmissionbt.Transmission", name: "transmission", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" }
flatpaks_coding:
- { app: "com.vscodium.codium", name: "codium", extra: "" }
- { app: "com.google.AndroidStudio", name: "android-studio", extra: "" }
- { app: "io.dbeaver.DBeaverCommunity", name: "dbeaver", extra: "" }
- { app: "org.godotengine.Godot", name: "godot", extra: "" }
- { app: "com.visualstudio.code-oss", name: "code", extra: "" }
flatpaks_editing:
flatpaks_editing_video:
- { app: "org.shotcut.Shotcut", name: "shotcut", extra: "" }
- { app: "com.obsproject.Studio", name: "obs", extra: "" }
- { app: "org.gimp.GIMP", name: "gimp", extra: "" }
- { app: "org.openshot.OpenShot", name: "openshot", extra: "" }
flatpaks_editing_audio:
- { app: "org.tenacityaudio.Tenacity", name: "tenacity", extra: "" }
- { app: "io.lmms.LMMS", name: "lmms", extra: "" }
- { app: "net.sourceforge.VMPK", name: "vmpk", extra: "" }
@ -158,14 +159,62 @@
# Media Editors #
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Installs
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Installs
flatpak:
name: "{{ item.app }}"
remote: flathub
state: present
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_video }}"
ignore_errors: yes
when: editing == true
when: editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executables
blockinfile:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
block: |
{{ item.extra }} {{ flatpak_exec }} {{ item.app }}
marker: '{mark}'
marker_begin: "#!{{ bash_exec.stdout }}"
marker_end: "exit 0"
state: present
create: yes
loop: "{{ flatpaks_editing_video }}"
become_user: "{{ user }}"
when: editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: file
mode: '0755'
loop: "{{ flatpaks_editing_video }}"
when: editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editor Uninstalls
flatpak:
name: "{{ item.app }}"
remote: flathub
state: absent
loop: "{{ flatpaks_editing_video }}"
ignore_errors: yes
when: not editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Video Editors | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: absent
loop: "{{ flatpaks_editing_video }}"
ignore_errors: yes
when: not editing in (true, "video")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio Editors | Installs
flatpak:
name: "{{ item.app }}"
remote: flathub
state: present
loop: "{{ flatpaks_editing_audio }}"
ignore_errors: yes
when: editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executables
blockinfile:
@ -177,34 +226,34 @@
marker_end: "exit 0"
state: present
create: yes
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_audio }}"
become_user: "{{ user }}"
when: editing == true
when: editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Executable Permissions
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: file
mode: '0755'
loop: "{{ flatpaks_editing }}"
when: editing == true
loop: "{{ flatpaks_editing_audio }}"
when: editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editor Uninstalls
flatpak:
name: "{{ item.app }}"
remote: flathub
state: absent
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_audio }}"
ignore_errors: yes
when: not editing == true
when: not editing in (true, "audio")
- name: Workstation | Linux | Flatpak Distro | Flatpak | Audio/Video Editors | Remove Executables
file:
path: "{{ flatpak_exec_dir }}/{{ item.name }}"
state: absent
loop: "{{ flatpaks_editing }}"
loop: "{{ flatpaks_editing_audio }}"
ignore_errors: yes
when: not editing == true
when: not editing in (true, "audio")
# Gaming #

View File

@ -0,0 +1,152 @@
---
# Packages specific to workstations developing Flutter apps.
## Facts ##
- name: Workstation | Linux | Software | Flutter | Facts [1/2]
set_fact:
flutter_url: "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.27.2-stable.tar.xz"
flutter_download_file: "{{ user_user.home }}/Downloads/flutter.tar.xz"
flutter_sdk_location: "{{ user_user.home }}/SDKs/Flutter"
flutter_report: "{{ user_user.home }}/Reports/flutter.txt"
- name: Workstation | Linux | Software | Flutter | Facts [2/2]
set_fact:
flutter_bin_location: "{{ flutter_sdk_location }}/flutter/bin"
## Checks ##
- name: Workstation | Linux | Software | Flutter | Check SDK Exists
stat:
path: "{{ flutter_sdk_location }}"
register: flutter_sdk_stat
- name: Workstation | Linux | Software | Flutter | Check Download Exists
stat:
path: "{{ flutter_download_file }}"
register: flutter_download_stat
## Packages ##
- name: Workstation | Linux | Software | Flutter | Necessities
package:
name:
- curl
- git
- unzip
- xz-utils
- zip
- libglu1-mesa
state: present
when: coding == true
# https://docs.flutter.dev/get-started/install/linux/desktop
- name: Workstation | Linux | Software | Flutter | Linux App Dependencies
package:
name:
- clang
- cmake
- git
- ninja-build
- pkg-config
- libgtk-3-dev
- liblzma-dev
- libstdc++-12-dev
state: present
when: coding == true
# https://docs.flutter.dev/get-started/install/linux/android
- name: Workstation | Linux | Software | Flutter | Android App Dependencies
package:
name:
- libc6:amd64
- libstdc++6:amd64
- lib32z1
- libbz2-1.0:amd64
state: present
when: coding == true
## Install SDK ##
- name: Workstation | Linux | Software | Flutter | SDK
block:
- name: Workstation | Linux | Software | Flutter | Download SDK
get_url:
url: "{{ flutter_url }}"
dest: "{{ flutter_download_file }}"
owner: "{{ user }}"
mode: '0664'
when: not flutter_download_stat.stat.exists
- name: Workstation | Linux | Software | Flutter | Create Folder
file:
path: "{{ flutter_sdk_location }}"
state: directory
owner: "{{ user }}"
mode: '0755'
- name: Workstation | Linux | Software | Flutter | Extract SDK
unarchive:
src: "{{ flutter_download_file }}"
dest: "{{ flutter_sdk_location }}"
owner: "{{ user }}"
when: coding == true and not flutter_sdk_stat.stat.exists
- name: Workstation | Linux | Software | Flutter | Delete Archive
file:
path: "{{ flutter_download_file }}"
state: absent
## Configure Environment ##
- name: Workstation | Linux | Software | Flutter | Modify PATH (.bashrc)
blockinfile:
path: "{{ item }}/.bashrc"
block: |
export PATH="$PATH:{{ flutter_bin_location }}"
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
state: present
create: yes
backup: yes
loop:
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
- name: Workstation | Linux | Software | Flutter | Modify PATH (.zshrc)
blockinfile:
path: "{{ item }}/.zshrc"
block: |
export PATH="$PATH:{{ flutter_bin_location }}"
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
state: present
create: yes
backup: yes
loop:
- "{{ user_root.home }}"
- "{{ user_user.home }}"
ignore_errors: yes
when: coding == true and user_root.home != "" and user_user.home != ""
## Test SDK ##
- name: Workstation | Linux | Software | Flutter | Doctor Report
shell: "{{ item }}"
loop:
- "date > {{ flutter_report }}"
- "{{ flutter_bin_location }}/flutter --disable-analytics >> {{ flutter_report }}"
- "date >> {{ flutter_report }}"
- "{{ flutter_bin_location }}/flutter doctor -v >> {{ flutter_report }}"
- "date >> {{ flutter_report }}"
when: coding == true
## Uninstall SDK ##
- name: Workstation | Linux | Software | Flutter | Remove SDK
file:
path: "{{ flutter_sdk_location }}"
state: absent
when: not coding == true

View File

@ -24,7 +24,7 @@
name:
- "{{ ffmpeg }}"
state: present
when: editing == true
when: editing in (true, "video", "audio")
## Other Stuff
@ -38,6 +38,8 @@
- "{{ appimagelauncher }}"
- "{{ evolution }}"
- "{{ evolution }}*"
- adb
- fastboot
state: present
# Lutris #

View File

@ -22,13 +22,19 @@
status: present
when: coding == true
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing)
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Video)
package:
name:
- shotcut
status: present
when: editing in (true, "video")
- name: Workstation | Mac OS | Software | Brew | Install Packages (Editing:Audio)
package:
name:
- audacity
- shotcut
status: present
when: editing == true
when: editing in (true, "audio")
- name: Workstation | Mac OS | Software | Brew | Install Packages (Gaming)
package:

View File

@ -17,6 +17,7 @@
, 'org.telegram.desktop.desktop'
, 'com.discordapp.Discord.desktop'
, 'com.vscodium.codium.desktop'
, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop'
, 'com.google.AndroidStudio.desktop'
, 'org.shotcut.Shotcut.desktop'
, 'io.lmms.LMMS.desktop'
@ -33,7 +34,6 @@
#, 'org.mozilla.Thunderbird.desktop'
# 2025-01-01
# Reduce the amount of icons on the sidebar, things that may get added back.
#, 'com.visualstudio.code-oss.desktop', 'code-oss.desktop'
#, 'org.godotengine.Godot.desktop'
- name: Workstation | Account Management | GNOME | Facts (NixOS)